【ウェブ クリプト エーピーアイ】

Web Crypto API とは?

公開:
💡 ブラウザ内に備わった「金庫室の鍵職人」
📌 このページのポイント
Web Crypto API の仕組み JS アプリ window.crypto.subtle Web Crypto API AES-GCM / RSA-OAEP ECDSA / SHA-256 ブラウザ 暗号エンジン HTTPS 環境でのみ動作 主な操作 鍵の生成 暗号化・復号 署名・検証 ハッシュ計算 extractable: false で生鍵をJSから取り出し不可にできる
Web Crypto API:ブラウザ内蔵の暗号エンジンをJSから直接呼び出すイメージ
ひよこ ひよこ
Webアプリって暗号化のためにライブラリを入れないといけないの?
ペンギン先生 ペンギン先生
実は最近のブラウザにはWeb Crypto APIという暗号機能が最初から組み込まれているんだよ。わざわざ外部ライブラリを使わなくてもAESRSAなどの暗号処理がJSだけでできるんだ。
ひよこ ひよこ
へぇ、どうやって使うの?
ペンギン先生 ペンギン先生
`window.crypto.subtle` というオブジェクトを通じて呼び出すよ。subtle(繊細・巧みな)という名前は、暗号の正しい使い方には専門知識が要ることを示す警告でもあるんだ。すべての処理はPromiseを返す非同期設計だよ。
ひよこ ひよこ
どんなことができるの?
ペンギン先生 ペンギン先生
鍵の生成・暗号化・復号デジタル署名・署名検証・ハッシュ計算などができるよ。対応アルゴリズムAES-GCM、RSA-OAEP、ECDSA、SHA-256など主要なものが揃っているんだ。
ひよこ ひよこ
使うときに何か制限はあるの?
ペンギン先生 ペンギン先生
HTTPS環境(またはlocalhost)でのみ動作するよ。平文HTTPのページでは使えない設計になっているんだ。これはセキュアな文脈でしか暗号処理を行わせないための仕様だよ。
ひよこ ひよこ
鍵が盗まれる心配はないの?
ペンギン先生 ペンギン先生
鍵を生成するとき `extractable: false` を指定すると、生成した鍵をJavaScriptコードから生のバイト列として取り出せなくなるよ。鍵はブラウザ内部にのみ存在し、悪意あるスクリプトに漏れにくくなるんだ。パスワードマネージャーやE2E暗号化チャットなどに活用されているよ。
ひよこ ひよこ
ライブラリと比べてどちらが速いの?
ペンギン先生 ペンギン先生
ブラウザネイティブの実装を直接使うためJSライブラリより高速なことが多いよ。さらにハードウェア暗号アクセラレータを活用しているブラウザもあるんだ。ただしAPIが低レベルで扱いにくいため、Web Crypto APIのラッパーライブラリ(SubtleCryptoラッパーなど)を使うケースも多いよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Web Crypto API」って出てきたら「ブラウザ内蔵の暗号機能」と思えればだいたいOK!
📖 おまけ:英語の意味
「Web Cryptography API」 = ウェブ暗号化API
💬 W3Cが策定したWeb標準で、OSやブラウザが持つネイティブ暗号エンジンをJS経由で利用できるようにした仕様だよ。2017年にW3C勧告となり、現在すべてのモダンブラウザに実装されているよ。
← 用語集にもどる