ブラウザサイド暗号化のための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アプリケーションに不可欠です。