公開鍵暗号は、人に見られても良い公開鍵と、人に見られてはいけない秘密鍵の2つの鍵、キーペアを使うのが特徴です。
通信する相手の公開鍵と、自分の秘密鍵から一時的な共通鍵をお互い生成します。この時、共通鍵は一切ネットワークに流れていないことがポイントです。
経路中でデータを傍受されても鍵が分からないため解読できません。
「E2EEメッセージングヘルパー」
実際動かしてみましょう。2つのブラウザでキーペアを生成し、お互いの公開鍵をもらって、共通鍵を生成してみると、同じものが表示されることが分かります。
「taisukef/ECDH-es: JavaScript ES module for ECDH and ECDSA for browsers and Deno」
前バージョンのものと違ってWeb Cripto APIはほとんど使用していない、Pure JavaScriptバージョンとなっています。
ブラックボックスは少ない方が安全です。
唯一使っているのは、安全な疑似乱数を取得するCrypto.getRandomValues()ですが、この実装もより安全なものに変更したり、安全性を検証するのもいいですね。
(AES-GCM-esを準備して、暗号化復号化にも対応しました)
links
- 賛否両論!? E2EEメッセージングヘルパー、エンドツーエンド暗号化webアプリを作ってみた
- 見られても大丈夫な暗号鍵!? webアプリでECDH(楕円曲線ディフィー・ヘルマン)鍵共有実験