✍️ デジタル署名デモ(ECDSA)
ブラウザ標準のWeb Crypto APIを使い、ECDSA(楕円曲線デジタル署名アルゴリズム、P-256曲線)による鍵ペア生成・メッセージへの署名・署名の検証という一連の流れを実際に体験できるデモツールです。すべての処理はブラウザ内で完結し、秘密鍵が外部に送信されることはありません。
使い方
- 「鍵ペアを生成」ボタンを押して、公開鍵・秘密鍵のペアを生成します。
- 署名したいメッセージを入力し、「署名」ボタンを押します。
- 検証したいメッセージ(署名時と同じ、またはあえて変更したもの)を入力し、「検証」ボタンを押して結果を確認します。
計算の仕組み
デジタル署名は、メッセージを本人が作ったこと(真正性)と、途中で書き換えられていないこと(完全性)を確かめる仕組みです。このツールは、ブラウザのWeb Crypto APIを使って、ECDSA(楕円曲線デジタル署名アルゴリズム)の署名と検証を試せるデモです。 1. 鍵ペアの作成: P-256曲線で、秘密鍵と公開鍵のペアを作ります。 2. 署名: メッセージのSHA-256ハッシュを、秘密鍵で署名します。署名は、r と s という2つの32バイトの値をつなげた64バイト(16進数で128文字)です。 3. 検証: 公開鍵、メッセージ、署名を使って、署名が正しいかを確かめます。 署名できるのは秘密鍵を持つ人だけですが、検証は公開鍵があれば誰でもできます。メッセージを1文字でも変えると、検証は失敗します。
計算例
1. 「鍵を生成」で鍵ペアを作ります。 2. メッセージ「Hello, Heron Tools!」に署名すると、128文字の16進数の署名ができます。 3. 同じメッセージで検証すると「有効な署名」と表示されます。 4. 検証用のメッセージを「Hello, Heron Tools?」に変えて検証すると「無効な署名」になります。 ECDSAは署名のたびに乱数を使うため、同じメッセージに何度署名しても、署名の値は毎回変わります(どれも検証は通ります)。
使用上の注意
- このツールの署名は、r と s をそのまま並べた形式(IEEE P1363形式)です。OpenSSLなどが使うDER形式とは形が違うため、そのままでは互換性がありません。
- 鍵はページを開いている間だけメモリ上にあり、再読み込みすると消えます。
- デジタル署名は、ソフトウェアの配布、電子契約、TLS証明書、マイナンバーカードの電子証明書などで使われています。
よくある質問
デジタル署名は何のために使われますか?
メッセージが確かに秘密鍵の所有者によって作成され、送信後に改ざんされていないことを、公開鍵だけで誰でも確認できるようにする仕組みです。ソフトウェアの配布やTLS証明書などで広く使われています。
検証時にメッセージを変えると何が起きますか?
署名時と異なるメッセージで検証すると「無効」と判定されます。これは、署名がメッセージの内容と数学的に結びついているため、内容が1文字でも変わると署名が一致しなくなるからです。実際に試して確認してみてください。
秘密鍵はどこかに保存されますか?
いいえ。鍵ペアはページを開いている間だけメモリ上に保持され、リロードすると消えます。外部に送信されることも保存されることもありません。