Web暗号化APIは、ワールドワイドウェブコンソーシアム(W3C)の低レベルインターフェースの勧告であり、Webアプリケーションが生の鍵素材にアクセスすることなく暗号化機能を実行できるようにすることで、 Webアプリケーションのセキュリティを強化します。 [ 1 ]このAPIは、ハッシュ、署名の生成と検証、暗号化、復号化などの基本的な暗号化操作をWebアプリケーション内から実行します。 [ 2 ]
2017年1月26日、W3Cはウェブアプリケーションにおける基本的な暗号化操作を実行できるウェブ暗号化API [ 3 ]の勧告を発表しました。このAPIはJavaScriptを利用し、ウェブアプリケーション内のデータ交換のセキュリティを強化する操作を実行します。このAPIは、ウェブアプリケーションで使用するハッシュ、デジタル署名の生成と検証、暗号化と復号化のための公開鍵と秘密鍵の作成と管理を行うための低レベルインターフェースを提供します。
Web 暗号化 API は、次のような幅広い用途に使用できます。
Web Cryptography APIは本質的にプラットフォームに依存しないため、あらゆるプラットフォームで使用できます。WebアプリケーションやプログレッシブWebアプリケーションが生の鍵素材にアクセスすることなく暗号化機能を実行できるようにする共通インターフェースセットを提供します。これは、上記の暗号化操作を実行するための一連のメソッドを定義するSubtleCryptoインターフェースの支援によって実現されます。Web Cryptography API内の追加インターフェースは、鍵生成、鍵導出、鍵のインポートとエクスポートを可能にします。[ 1 ]
W3CのWeb Cryptography API仕様は、プラットフォーム固有の暗号化APIと標準化された暗号化APIの間に現在存在する共通の機能と特徴、そして少数の実装でしか知られていない機能と特徴に重点を置いています。Web Cryptography APIの使用に関するW3Cの推奨は、必須のアルゴリズムセットの実装を義務付けるものではありません。これは、政府の規制、地域のポリシー、セキュリティ慣行、知的財産権に関する懸念などにより、準拠するユーザーエージェント間で暗号化の実装が異なることを認識しているためです。
Web暗号化APIに適した既存のWebアプリケーションは数多く存在します。[ 1 ]
今日、多要素認証は、オンラインバンキングなどのウェブアプリケーションのユーザーIDを確認するための最も信頼性の高い方法の一つと考えられています。多くのウェブアプリケーションは現在、ユーザーとユーザーエージェントの両方を保護するためにこの認証方法に依存しています。Web Cryptography APIを使用すると、ウェブアプリケーションは、ユーザーアクセスの認証に秘密鍵素材を使用するトランスポート層認証に頼るのではなく、アプリケーション自身で認証を提供できるようになります。このプロセスにより、ユーザーにとってより豊かなエクスペリエンスが提供されます。
Web Cryptography APIを使用すると、アプリケーションは、ユーザーエージェントによって以前に作成された、またはWebアプリケーションによって事前にプロビジョニングされた適切なクライアントキーを検索できます。アプリケーションは、ユーザーエージェントに新しいキーを生成するか、ユーザーのアカウントにキーが関連付けられていない場合に既存のキーを再利用する機能を提供できます。このプロセスを、ユーザーが認証に使用しているトランスポート層セキュリティ(TLS)にバインドすることで、基盤となるトランスポート層セキュリティに基づいたキーを導出することで、多要素認証プロセスをさらに強化できます。[ 1 ] [ 2 ]
このAPIは、機密文書や秘密文書を、たとえ安全に受信したとしても、Webアプリケーション内からの不正な閲覧から保護するために使用できます。WebアプリケーションはWeb Cryptography APIを用いて文書を秘密鍵で暗号化し、その後、文書の閲覧を許可されたユーザーに関連付けられた公開鍵でラップします。Webアプリケーションにアクセスすると、許可されたユーザーは暗号化された文書を受け取り、秘密鍵を使用してラップ解除プロセスを開始するように指示されます。これにより、文書を復号して閲覧できるようになります。[ 2 ]
多くの企業や個人がクラウドストレージに依存しています。リモートサービスプロバイダーは、セキュリティ対策として、ユーザーが文書やその他のデータをアップロードする前に、機密文書を保護する機能をWebアプリケーションに提供することを望むかもしれません。Web Cryptography APIを使用すると、ユーザーは以下のことが可能になります。
文書に電子署名する機能は、時間を節約し、重要な文書のセキュリティを強化するだけでなく、ユーザーが文書を承認したことの法的証明としても機能します。多くのウェブアプリケーションは、手書きの署名ではなく電子署名を採用しています。Web Cryptography APIを使用すると、ユーザーはウェブアプリケーション専用に生成または事前プロビジョニングされた鍵を選択するよう求められます。この鍵は、署名処理中に使用できます。
ウェブアプリケーションはデータをローカルにキャッシュすることが多く、オフライン攻撃が発生した場合、データが侵害されるリスクがあります。Web Cryptography APIは、ウェブアプリケーションが自身で展開した公開鍵を使用してデータキャッシュの整合性を検証することを可能にします。 [ 2 ]
Web Cryptography APIは、鍵合意を用いることで、オフザレコ(OTR)やその他のメッセージ署名方式におけるメッセージングのセキュリティを強化することができます。メッセージの送信者と受信者は、共有の暗号化鍵とメッセージ認証コード(MAC)鍵をネゴシエートすることで、メッセージの暗号化と復号を行い、不正アクセスを防止します。[ 2 ]
Web暗号化APIは、WebアプリケーションがJOSEワーキンググループで定義されたメッセージ形式や構造と対話するために使用できます。[ 4 ]アプリケーションはJSON Web Signature (JWK)キーの読み取りとインポート、電子署名やMACキーで保護されたメッセージの検証、JWEメッセージの復号化を行うことができます。
W3Cは、Web Cryptography APIの仕様においてベンダー固有の独自拡張機能の使用を避けることを推奨しています。これは、APIの相互運用性が低下し、特定のコンテンツにすべてのユーザーがアクセスできるわけではないため、ユーザーベースの分断につながる可能性があるためです。ベンダー固有の拡張機能の使用を避けられない場合は、将来のAPI仕様との衝突を防ぐため、ベンダー固有の文字列を拡張機能の先頭に付加することが推奨されます。