Web Cryptography
Crypto インターフェイスは、現在のコンテキストで利用できる基本的な暗号機能を表します。 これは、暗号強度の強い乱数生成器と暗号プリミティブへのアクセスを許可します。
ウェブ暗号 API はグローバルの crypto プロパティからアクセスすることができ、これが Crypto オブジェクトです。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 11 | 12 | 21 | 5 | 18 | 5 | |
| crypto は Window インターフェイスの読み取り専用プロパティで、グローバルオブジェクトに関連付けられた Crypto オブジェクトを返します。このオブジェクトは、ウェブページが暗号に関連したサービスにアクセスできるようにします。 | 37 | 12 | 1 | 5 | 37 | 5 |
| Crypto.getRandomValues() メソッドは、暗号強度の強い乱数値を取得します。 引数で与えた配列は、すべて乱数で(暗号学的な意味でランダムに)埋められます。 | 11 | 12 | 21 | 5 | 18 | 5 |
| randomUUID() は Crypto インターフェイスのメソッドで、暗号強度の強い乱数生成器を用いて v4 UUID を生成するのに用いられます。 | 92 | 92 | 95 | 15.4 | 92 | 15.4 |
| Crypto.subtle 読み取り専用プロパティは、低水準の暗号化操作ができる SubtleCrypto オブジェクトを返します。 | 37 | 12 | 34 | 11 | 37 | 11 |
subtle (secure context required) 安全なコンテキストが必要 | 60 | 79 | 75 | 15 | 60 | 15 |
worker_support 労働者で利用可能 | 37 | 79 | 48 | 10.1 | 37 | 10.3 |
| CryptoKey はウェブ暗号化 API のインターフェイスで、SubtleCrypto メソッドの SubtleCrypto.generateKey、SubtleCrypto.deriveKey、SubtleCrypto.importKey、SubtleCrypto.unwrapKey のいずれかから取得したkeyを表します。 | 37 | 12 | 34 | 7 | 37 | 7 |
| algorithm は CryptoKey インターフェイスの読み取り専用プロパティで、このキーを使用できるアルゴリズムを記述したオブジェクトと、関連する追加の引数を返します。 | 37 | 12 | 34 | 7 | 37 | 7 |
| extractable は CryptoKey インターフェイスの読み取り専用プロパティで、SubtleCrypto.exportKey() または SubtleCrypto.wrapKey() を使用してキーを抽出できるかどうかを示します。 | 37 | 12 | 34 | 7 | 37 | 7 |
| type は CryptoKey インターフェイスの読み取り専用プロパティで、オブジェクトが表すキーの種類を示します。以下の値を示します。 | 37 | 12 | 34 | 7 | 37 | 7 |
| usages は CryptoKey インターフェイスの読み取り専用プロパティで、そのキーで何ができるかを示します。 | 37 | 12 | 34 | 7 | 37 | 7 |
| SubtleCrypto はウェブ暗号化 API のインターフェイスで、数々の低水準の暗号化関数を提供します。 SubtleCrypto の機能にアクセスするには、 crypto_property プロパティから取得した Crypto オブジェクトの Crypto.subtle プロパティを使用します。 | 37 | 12 | 34 | 11 | 37 | 11 |
| decrypt() は SubtleCrypto インターフェイスのメソッドで、暗号化されたデータを復号します。 引数として key、オプションの引数、復号するデータ(「暗号文」とも呼ばれます)を取ります。 これは、復号されたデータ(「平文」とも呼ばれます)で履行される Promise を返します。 | 37 | 79 | 34 | 7 | 37 | 7 |
| deriveBits() は SubtleCrypto インターフェイスのメソッドで、ベース鍵からビットの配列を導出するために使用することができます。 | 41 | 79 | 34 | 11 | 41 | 11 |
deriveBits (x25519) `X25519` アルゴリズム | 133 | 133 | 130 | 17 | 133 | 17 |
| deriveKey() は SubtleCrypto インターフェイスのメソッドで、マスター鍵から秘密鍵を導出するために使用することができます。 | 41 | 79 | 34 | 11 | 41 | 11 |
deriveKey (derivedKeyAlgorithm option aes) `AES` を `derivedKeyAlgorithm` オプションの値として | 41 | 79 | 34 | 11 | 41 | 11 |
deriveKey (derivedKeyAlgorithm option hkdf) `HKDF` を `derivedKeyAlgorithm` オプションの値として | 41 | 79 | 119 | 11 | 41 | 11 |
deriveKey (derivedKeyAlgorithm option hmac) `HMAC` を `derivedKeyAlgorithm` オプションの値として | 41 | 79 | 34 | 11 | 41 | 11 |
deriveKey (derivedKeyAlgorithm option pbkdf2) `derivedKeyAlgorithm` オプションの値として `PBKDF2` | 41 | 79 | 119 | 11 | 41 | 11 |
deriveKey (x25519) `X25519` アルゴリズム | 133 | 133 | 130 | 17 | 133 | 17 |
| digest() は SubtleCrypto インターフェイスのメソッドで、指定されたデータのdigestを返します。ダイジェストとは、可変長の入力に由来する固定長の短い値です。暗号的ダイジェスト値は耐衝突性を示すため、同じダイジェスト値を持つ 2 つの異なる入力を見つけるのは非常に困難です。 | 41 | 79 | 34 | 7 | 41 | 7 |
| encrypt() は SubtleCrypto インターフェイスのメソッドで、データを暗号化します。 | 37 | 79 | 34 | 7 | 37 | 7 |
| exportKey() は SubtleCrypto インターフェイスのメソッドで、キーをエクスポートします。すなわち、これは CryptoKey オブジェクトを入力として取り、その鍵を外部のポータブルな形式で表します。 | 37 | 79 | 34 | 7 | 37 | 7 |
exportKey (ed25519) `Ed25519` アルゴリズム | 137 | 137 | 129 | 17 | 137 | 17 |
exportKey (x25519) `X25519` アルゴリズム | 133 | 133 | 130 | 17 | 133 | 17 |
| generateKey() は SubtleCrypto インターフェイスのメソッドで、新しい(対称鍵アルゴリズム用の)鍵または(公開鍵アルゴリズム用の)鍵ペアを生成します。 | 37 | 79 | 34 | 7 | 37 | 7 |
generateKey (ed25519) `Ed25519` アルゴリズム | 137 | 137 | 129 | 17 | 137 | 17 |
generateKey (x25519) `X25519` アルゴリズム | 133 | 133 | 130 | 17 | 133 | 17 |
| importKey() は SubtleCrypto インターフェイスのメソッドで、鍵をインポートします。つまり、外部のポータブル形式の鍵を入力として取り、ウェブ暗号 API で使用できる CryptoKey オブジェクトを返します。 | 37 | 79 | 34 | 7 | 37 | 7 |
importKey (ed25519) `Ed25519` アルゴリズム | 137 | 137 | 129 | 17 | 137 | 17 |
importKey (x25519) `X25519` アルゴリズム | 133 | 133 | 130 | 17 | 133 | 17 |
secure_context_required 安全なコンテキストが必要 | 60 | 79 | 75 | 15 | 60 | 15 |
| sign() は SubtleCrypto インターフェイスのメソッドで、デジタルsignatureを生成します。 | 37 | 79 | 34 | 7 | 37 | 7 |
sign (ed25519) `Ed25519` アルゴリズム | 137 | 137 | 129 | 17 | 137 | 17 |
| unwrapKey() は SubtleCrypto インターフェイスのメソッドで、鍵を「ラップ解除」します。 これは、エクスポートされ暗号化された(「ラップされた」とも呼ばれる)鍵を入力として受け取ることを意味しています。 鍵を復号してからインポートし、ウェブ暗号 API で使用できる CryptoKey オブジェクトを返します。 | 37 | 79 | 34 | 7 | 37 | 7 |
| verify() は SubtleCrypto インターフェイスのメソッドで、デジタルsignatureを検証します。 | 37 | 79 | 34 | 7 | 37 | 7 |
verify (ed25519) `Ed25519` アルゴリズム | 137 | 137 | 129 | 17 | 137 | 17 |
worker_support 労働者で利用可能 | 37 | 79 | 48 | 11 | 37 | 11 |
| wrapKey() は SubtleCrypto インターフェイスのメソッドで、鍵を「ラップ」します。 これは、外部のポータブルな形式で鍵をエクスポートし、エクスポートされた鍵を暗号化することを意味しています。 鍵をラップすることで、保護されていないデータストア内や保護されていないネットワーク上での送信など、信頼されていない環境で鍵を保護することを支援します。 | 37 | 79 | 34 | 7 | 37 | 7 |
- このバージョンで機能が削除されました (11.1)
- ベンダープレフィックス付きで対応: webkit (7)
- このバージョンで機能が削除されました (11.3)
- ベンダープレフィックス付きで対応: webkit (7)
- このバージョンで機能が削除されました (11.1)
- ベンダープレフィックス付きで対応: WebKit (7)
- このバージョンで機能が削除されました (11.3)
- ベンダープレフィックス付きで対応: WebKit (7)
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:AES-CTR。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:ECDH。
- 未対応:HKDF、PBKDF2。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:ECDH。
- 未対応:HKDF、PBKDF2。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (41)
- バージョン41以前は、Chromeでは`algorithm`パラメータがオブジェクトであることが想定されていました。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- サポートされていません:SHA-1。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (41)
- バージョン41以前のChrome(Android版)では、`algorithm`パラメータはオブジェクトであることが想定されていました。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:AES-CTR。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:RSA-PSS、ECDSA、ECDH。
- 未対応:AES-CTR。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:RSA-PSS、ECDSA、ECDH。
- 未対応:AES-CTR。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:RSA-PSS、ECDSA、ECDH。
- 未対応:AES-CTR、HKDF、PBKDF2。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:RSA-PSS、ECDSA。
- RFC 8032に準拠した決定論的署名ではなく、draft-irtf-cfrg-det-sigs-with-noiseに準拠したランダム化された署名を生成します。
- RFC 8032に準拠した決定論的署名ではなく、draft-irtf-cfrg-det-sigs-with-noiseに準拠したランダム化された署名を生成します。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:AES-CTR。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:RSA-PSS、ECDSA。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (79)
- 未対応:AES-CTR。
実務での使いどころ
-
Web Cryptography の活用
Crypto インターフェイスは、現在のコンテキストで利用できる基本的な暗号機能を表します。
注意点
- 古いブラウザでは対応していない場合がある。
実装メモ
- 一部の API はセキュアコンテキスト (HTTPS) やユーザー操作起点を必要とする。利用前に要件を確認すること。