fkm blog

software開発に関することを書いていきます

ブラウザでファイルの暗号化(2)

AESの共通鍵をそのままメールとかで送ったりしたら、「パスワードzip」問題と同じなので、もうちょっといい感じで鍵を共有したい。

そこで登場するのが公開鍵暗号の仕組み。これ、Web標準APIに入ってたりする。MdNのドキュメント

鍵ペアを作る

鍵ペアもJavaScriptを叩くだけで作れてしまう。

const keyPair = await window.crypto.subtle.generateKey(
    {
        name: "RSA-OAEP",
        modulusLength: 4096,
        publicExponent: new Uint8Array([1, 0, 1]),
        hash: "SHA-256",
    },
    true,
    ["encrypt", "decrypt"]
);

第1引数はアルゴリズム。今回は鍵長4096bitのRSAにしてみた。第2引数の true はエクスポート可能かどうか。ファイルに保存して後で使いたいので true にしておく。第3引数は鍵の用途。暗号化と復号に使うペアだと encryptdecrypt を指定する。署名として使う場合は signverify にするのかな(まだ試してない)。

結果の keyPair はこんなインターフェース。エクスポートは次回。

interface CryptoKeyPair {
    privateKey: CryptoKey;
    publicKey: CryptoKey;
}