Web 暗号化 API

Web 暗号化 API を使って、主な多くのシナリオでセキュリティを実現または向上させることができます。

Web 暗号化 API によって、Web アプリの重要なセキュリティのシナリオの多くを実現できます。これには、堅牢なユーザー/サービスの認証、ドキュメントやコードの署名、通信の機密性と整合性が含まれ、いずれも (SSL や類似のプロトコルによる) セキュリティで保護された接続を必要としません。具体的には、Web 暗号化 API を使って次のようなことを実現できます。

次の例では、この API を使って、キーのペアの生成、秘密キーによるデータへの署名、公開キーを使った署名の検証を行う方法を示します。


<!DOCTYPE html>

<html>
<head>
  <meta charset="utf-8" />
  <title>Web Cryptography API - Signing Data</title>
</head>

<body>
  <script>
    var pubKey;
    var privKey;
    var data = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); // The data to be signed.
    var encryptedData;
    var decryptedData;
    var crypto = window.crypto || window.msCrypto;

    if (crypto.subtle) {
      var genOp = crypto.subtle.generateKey(
        { name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]) },
        false,
        ["encrypt", "decrypt"]);

      genOp.onerror = function (e) { console.log("genOp.onerror event handler fired."); }
      genOp.oncomplete = function (e) {
        pubKey = e.target.result.publicKey;
        privKey = e.target.result.privateKey;

        if (pubKey && privKey) {
          console.log("generateKey RSASSA-PKCS1-v1_5: PASS");
        } else {
          console.log("generateKey RSASSA-PKCS1-v1_5: FAIL");
        } // if-else

        var signkey = crypto.subtle.sign({ name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, privKey, data);

        signkey.onerror = function (evt) {
          console.log("signkey.onerror event handler fired.");
        }

        signkey.oncomplete = function (evt) {
          signature = evt.target.result;

          if (signature) {
            console.log("Sign with RSASSA-PKCS1-v1_5 - SHA-256: PASS");
          } else {
            console.log("Sign with RSASSA-PKCS1-v1_5 - SHA-256: FAIL");
          }

          var verifysig = crypto.subtle.verify({ name: "RSASSA-PKCS1-v1_5", hash: "SHA-256"}, pubKey, signature, data);

          verifysig.onerror = function (evt) {
            console.log("Verify verifysig.onerror event handler fired.");
          }

          verifysig.oncomplete = function (evt) {
            var verified = evt.target.result;

            if (verified) {
              console.log("Verify Operation for RSASSA-PKCS1-v1_5 - SHA-256: PASS");
            } else {
              console.log("Verify Operation for RSASSA-PKCS1-v1_5 - SHA-256: FAIL");
            } // if-else
          }; // verifysig.oncomplete
        }; // signkey.oncomplete
      }; // genOp.oncomplete
    } else {
      console.log("Unable to create window.crypto object");
    } // if-else, (crypto.subtle)
  </script>
</body>
</html>

API リファレンス

Web 暗号化

仕様

Web 暗号化 API

関連トピック

Encrypted Media Extensions (EME)

 

 

表示:
© 2014 Microsoft