ブラウザサイド暗号化のためのWeb Crypto APIサポート

ブラウザで暗号化操作を実行するためのWeb Crypto APIの可用性を検出。鍵生成、暗号化、ハッシュ化、署名を解説。

Security

詳細な説明

Web Crypto API検出

Web Cryptography APIは、鍵生成、暗号化、復号、署名、ハッシュ化のための低レベル暗号プリミティブのセットを提供し、すべて外部ライブラリなしでブラウザ内でネイティブに実行されます。

検出

const hasWebCrypto = !!(window.crypto && window.crypto.subtle);

利用可能な操作

function checkCryptoCapabilities() {
  const subtle = window.crypto?.subtle;
  if (!subtle) return null;
  return {
    encrypt: typeof subtle.encrypt === 'function',
    decrypt: typeof subtle.decrypt === 'function',
    sign: typeof subtle.sign === 'function',
    verify: typeof subtle.verify === 'function',
    digest: typeof subtle.digest === 'function',
    generateKey: typeof subtle.generateKey === 'function',
    deriveKey: typeof subtle.deriveKey === 'function',
    importKey: typeof subtle.importKey === 'function',
    exportKey: typeof subtle.exportKey === 'function',
  };
}

一般的なアルゴリズム

操作 アルゴリズム ユースケース
ハッシュ化 SHA-256, SHA-512 データ整合性、チェックサム
暗号化 AES-GCM, AES-CBC データ保護
署名 RSA-PSS, ECDSA 認証、JWT
鍵交換 ECDH セキュアな鍵合意
鍵導出 PBKDF2, HKDF パスワードベースの鍵

セキュリティ要件

  • HTTPSのみ: crypto.subtleはセキュアコンテキストでのみ利用可能
  • エクスポート不可の鍵: 鍵をエクスポート不可としてマークでき、JavaScriptが生の鍵素材を読み取ることを防止
  • MD5/SHA-1なし: APIは意図的に安全でないアルゴリズムを省略

例:SHA-256ハッシュ

async function sha256(message) {
  const encoder = new TextEncoder();
  const data = encoder.encode(message);
  const hash = await crypto.subtle.digest('SHA-256', data);
  return Array.from(new Uint8Array(hash))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

ユースケース

メッセージングアプリのクライアントサイド暗号化、パスワードハッシュ化、JWTの生成と検証、ファイル整合性チェック、エンドツーエンド暗号化ストレージを駆動します。機密データを扱うすべてのWebアプリケーションに不可欠です。

試してみる — Browser Feature Detector

フルツールを開く