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

Web Crypto API とは?

最終更新:
💡 ブラウザ内に備わった「金庫室の鍵職人」

ブラウザなどのWeb環境に組み込まれた、暗号化・復号・署名・鍵生成・ハッシュ計算などをJavaScriptから使うためのAPI。暗号処理の基本機能を提供し、鍵の管理や通信全体の設計はアプリ側で行う。

📌 このページのポイント
暗号処理と乱数生成の入口 JSアプリWeb環境のcryptosubtle暗号化・署名・鍵・ハッシュPromiseで結果を受け取るgetRandomValues()暗号用途の乱数を同期生成subtleにはセキュアコンテキストが必要getRandomValues()はその制限の例外
SubtleCryptoは非同期の暗号処理を提供し、getRandomValuesは同期的に乱数を生成する。
ひよこ ひよこ
暗号化には必ず外部ライブラリが必要?
ペンギン先生 ペンギン先生
Web Crypto APIが対応する処理なら、ブラウザに組み込まれた機能をJavaScriptから使えるよ。暗号化と復号、デジタル署名と検証、鍵の生成、ハッシュ計算などがある。使いたいアルゴリズムが対象ブラウザで対応しているかは確認しよう。
ひよこ ひよこ
どうやって呼び出すの?
ペンギン先生 ペンギン先生
暗号処理にはcrypto.subtleを使うよ。WindowだけでなくWeb Workerからも利用できる。SubtleCryptoのメソッドはPromiseを返すので、awaitなどで結果を待つ。一方、crypto.getRandomValues()による暗号用途の乱数生成は同期処理なんだ。
ひよこ ひよこ
HTTPのページでも動く?
ペンギン先生 ペンギン先生
SubtleCryptoにはセキュアコンテキストが必要だよ。通常はHTTPSを使い、localhostなどのローカル開発環境も対象になる。getRandomValues()は例外で、セキュアコンテキストでなくても使えるんだ。
ひよこ ひよこ
鍵をJavaScriptから取り出せなくできる?
ペンギン先生 ペンギン先生
鍵を作るときなどにextractableをfalseにすると、その鍵をexportKey()やwrapKey()で取り出せなくなるよ。ただし、鍵の利用まで禁止するものではない。悪意あるスクリプトが鍵を使って復号や署名を行う可能性は残るので、XSSへの対策なども必要なんだ。
ひよこ ひよこ
これだけで安全なチャットが作れる?
ペンギン先生 ペンギン先生
暗号処理の部品は使えるけれど、相手の確認や鍵の配布・保存などは別に設計するよ。Web Crypto APIを呼んだだけで、安全な通信方式全体が完成するわけではないんだ。鍵が特別なハードウェア内に保存されることも、このAPIだけでは保証されないよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Web Crypto API」って出てきたら「ブラウザ内蔵の暗号機能」と思えればだいたいOK!
📖 おまけ:英語の意味
「Web Cryptography API」 = ウェブ暗号API
💬 W3Cが策定した、Web環境から暗号処理を使うための仕様だよ。2017年1月26日にW3C勧告となった。

参考資料

← 用語集にもどる