Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2017年9月.
* Some parts of this feature may have varying levels of support.
安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。
SubtleCrypto はウェブ暗号化 API のインターフェイスで、数々の低水準の暗号化関数を提供します。 SubtleCrypto の機能にアクセスするには、 crypto プロパティから取得した Crypto オブジェクトの subtle プロパティを使用します。
警告: このAPIは、数多くの低レベル暗号プリミティブを提供しています。これらを悪用するのはとても簡単で、その落とし穴は非常に微妙なものです。
基本的な暗号機能を正しく使用すると想定されていても、安全な鍵管理と全体的なセキュリティシステムの設計を正しく行うのは非常に難しく、一般的にはセキュリティの専門家の領域です。
セキュリティシステムの設計と実装に誤りがあると、システムのセキュリティが完全に機能しなくなる可能性があります。
学び、実験してください。しかし、このテーマに詳しい人物が徹底的にレビューする前に、あなたの作品の安全性を保証したり、ほのめかしたりしないでください。暗号 101 コースは、安全なシステムの設計と実装するために学び始めるには最適な場所です。
このインターフェイスには親インターフェイスがないので、何もプロパティを継承していません。
このインターフェイスには親インターフェイスがないので、何もメソッドを継承していません。
SubtleCrypto.encrypt()引数に与えられた平文テキストおよびアルゴリズム、鍵に対応する暗号化されたデータで履行される Promise を返します。
SubtleCrypto.decrypt()引数に与えられた暗号化されたテキストおよびアルゴリズム、鍵に対応する平文データで履行される Promise を返します。
SubtleCrypto.sign()引数に与えられたテキストおよびアルゴリズム、鍵に対応する署名で履行される Promise を返します。
SubtleCrypto.verify()引数に与えられた署名が、同じく引数に与えられたテキストおよびアルゴリズム、鍵と一致するかどうかを示す論理値で履行される Promise を返します。
SubtleCrypto.digest()引数に与えられたアルゴリズムとテキストから生成されたダイジェストで履行される Promise を返します。
SubtleCrypto.generateKey()対称アルゴリズムの場合は新しく生成された CryptoKey で、非対称アルゴリズムの場合は新しく生成された 2 つの鍵を含む CryptoKeyPair で履行される Promise を返します。これらは、引数として指定されたアルゴリズム、使用法、抽出可能性と一致します。
SubtleCrypto.deriveKey()引数に与えられたマスターキーと特定のアルゴリズムによりもたらされる、新たに生成された CryptoKey で履行される Promise を返します。
SubtleCrypto.deriveBits()引数に与えられたマスターキーと特定のアルゴリズムによりもたらされる、新たに生成された擬似乱数のビット列を含むバッファーで履行される Promise を返します。
SubtleCrypto.importKey()引数に与えられた書式およびアルゴリズム、生の鍵データ、使用法、抽出可能性に対応する CryptoKey で履行される Promise を返します。
SubtleCrypto.exportKey()要求された書式の鍵を含むバッファーで履行される Promise を返します。
SubtleCrypto.wrapKey()安全でない環境で使用(転送や保存)するために、ラップされた対称鍵で履行される Promise を返します。返されるラップされたバッファーは、引数に与えられた書式内にあり、与えられたアルゴリズムで与えられたラッピング鍵によりラップされた鍵を含みます。
SubtleCrypto.unwrapKey()引数に与えられたラップされた鍵に対応する CryptoKey の Promise を返します。
この API で実装する機能は、暗号化機能と鍵管理機能の 2 つに分けることができます。
これらは、システムにプライバシーや認証などのセキュリティ機能を実装するために使用することができる関数です。 SubtleCrypto API は以下の暗号化関数を提供ししています。
digest() を除き、 API 内の暗号機能はすべて暗号鍵を使用しています。 SubtleCrypto API では、暗号鍵は CryptoKey オブジェクトを使用して表します。署名や暗号化などの演算処理を実行するには、 CryptoKey オブジェクトを sign() または encrypt() 関数に渡します。
generateKey() および deriveKey() 関数は、どちらも新しい CryptoKey オブジェクトを作成します。
この違いは、 generateKey() が呼び出すたびに新しい鍵を生成するのに対し、 deriveKey() は最初の鍵素材から鍵を導出する点です。同じ鍵素材を 2 回に分けて deriveKey() を呼び出すと、同じ基盤値がある 2 つの CryptoKey オブジェクトを取得することができます。この例は、例えばパスワードから暗号鍵を導出し、後で同じパスワードから同じ鍵を導出してデータを復号したい場合に有益です。
アプリの外部で鍵を利用できるようにするには、鍵をエクスポートする必要があります。それが exportKey() です。エクスポート形式はいくつか選べます。
exportKey() の逆は importKey() です。他のシステムから鍵をインポートすることができ、 PKCS #8 や JSON Web Key のような標準形式に対応しているため、これを支援することができます。 exportKey() 関数は暗号化されていない形式で鍵をエクスポートします。
鍵が機密性の高いものである場合、 wrapKey() を使用してください。これは鍵をエクスポートし、別の鍵を使用して暗号化するもので、 API では「鍵ラッピング鍵」と呼ばれています。
wrapKey() の逆は unwrapKey() で、鍵を復号してからインポートします。
CryptoKey オブジェクトは、構造化複製アルゴリズムを使用して格納することができます。すなわち、標準のウェブストレージ API を使用して、鍵を格納したり受け取ったりすることができます。この仕様書では、ほとんどの開発者が IndexedDB API を使用して CryptoKey オブジェクトを格納することを想定しています。
ウェブ暗号 API が提供した暗号関数は、 1 つ以上の異なる「暗号アルゴリズム」によって実行することができます。関数の algorithm 引数は、使用するアルゴリズムを示します。アルゴリズムによっては追加の引数が必要です。このような場合、 algorithm 引数は追加の引数を含めるために辞書オブジェクトになります。
下記の表は、どのアルゴリズムがどの暗号処理を運営するのに適しているかをまとめたものです。
| ✓ | ||||
| ✓ | ||||
| ✓ | ||||
| ✓ | ||||
| ✓ | ✓ | |||
| ✓ | ✓ | |||
| ✓ | ✓ | |||
| ✓ | ✓ | |||
| ✓ | ||||
| ✓ | ||||
| ✓ | ||||
| ✓ | ||||
| ✓ | ||||
| ✓ | ||||
| ✓ | ||||
| ✓ |
| Web Cryptography Level 2 # subtlecrypto-interface |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2024年7月28日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.