プレスリリース記事などで「ゼロ知識証明技術を用いた〇〇」などと書いてあっても動揺しないためのお勉強です。
あるいはビジネス会話や投資の勧誘などで「ゼロ知識証明」が出てきた時に騙されないように、強気で言い返せるようにお勉強が必要なのです。「ゼロ知識証明?あれってゼロじゃあ無いんですよね、ホントのゼロだったら証明できないからね!ほとんどゼロって意味だよね。どんなアルゴリズム使ってるんですか?RSA換算で何ビット相当の暗号強度ですか?」などと言い返せるようにお勉強しましょう。
ゼロ知識証明の3要素
- 完全性(completeness): 真であることを確認する側(検証者)は、証明する側(証明者)の持っている命題が真であるならば、真であることが必ずわかること。
- 健全性(soundness): 証明者の持つ命題が偽であるなら、検証者は高い確率でそれが偽であると見抜けること。
- ゼロ知識性(zero-knowledge): 証明者の持つ命題が真であるなら、検証者が不正して証明者から知識を盗もうとしても「命題が真である」以外の何の知識も得られないこと。このゼロ知識性は、どんな検証者(知識を持たない)であっても、正しい証明者と対話したかのような対話記録を生成できることだと記述することもできる。
ゼロじゃない知識証明
では、現代の公開鍵暗号を使うゼロ知識証明ではない場合はどうなるでしょう。ゼロじゃないから、有知識証明ということになります。それは、例えば、旧来の証明方式を意味します。相手に身分証明書などの物体そのものを提示して証明する方式です。
- 運転免許証
- 運転経歴証明書
- 学生証
- パスポート
- 健康保険証
- 印鑑証明書
- 住民票(原則として自分自身しか取得できない)
- クレジットカード(商取引における本人確認)
これらの「原則として本人しか所持できない書類・物体」を、相手方に提示して証明する方式だと、相手に証明書そのものを提示しますので、相手がその証明書を精巧にコピー(スキミング)してしまえば、証明書の偽造をされてしまうリスクもあるでしょう。
そこで、現代のゼロ知識証明では、本人しか所持できない秘密鍵を秘匿したまま、秘密鍵を使って暗号化した署名文を相手に提示することにより、相手が公開鍵を使って復号することにより、相手が秘密鍵を所持していることを検証できるようにしているのです。
ゼロ知識証明では、運転免許証みたいな大切な書類を相手に提示する必要が無いのです。訳の分からない暗号文(またはハッシュ値)を提示すれば証明できてしまうのです。
ゼロ知識証明の国の入国審査では「パスポートを見せてください」とは言われず、「パスポートのハッシュ値(または電子署名)を見せてください」と言われます。警察官から「運転免許証を見せてください」と言われる代わりに、「運転免許証のハッシュ値(または電子署名)を見せてください」と言われます。
暗号文は秘密鍵を使って暗号化されていますので、秘密鍵の情報が含まれています。だから、ゼロ知識証明のゼロというのは不正確なネーミングです。限りなくゼロに近い知識証明、というのが本来の呼び方になります。
じゃあ、どれくらいゼロに近いのか、それは、その公開鍵暗号の強度に依存することになります。どれくらい破られない暗号なのかということです。
例えば、楕円曲線暗号なら、富岳のようなスーパーコンピューターを1年間使って160ビット暗号であれば、解読できちゃうかもしれないということになります。でも、192ビット暗号であれば、6ケタずれますので、1000000年、つまり100万年掛かって解読できるかどうか、ということになります。更に256ビット暗号(ビットコインの暗号強度)になりますと、更に10ケタずれますので、1京年で解読できるかどうかという暗号強度になるのです。1京年というのは、1億年の、そのまた1億倍という長い長い時間になります。
うーん、そんなに大変なら、「ゼロ」知識証明と言っても言い過ぎではないという気持ちも分かりますね。
ハッシュパスワード方式
サイトのアカウント情報漏洩事件が定期的に起きますが、そこにパスワード情報も含まれていた場合は、リスト攻撃に悪用されてしまうことがあります。当該サイトから取得したIDとパスワードの組み合わせを、他のサイトの不正ログインに使うという訳です。例えば本のネット販売のサイトからメールアドレスとパスワードが漏洩した場合に、別の服のネット販売のサイトで同じメールアドレスとパスワードでログイン試行すると成功してしまったりするのです。これを漏洩したリストに従って絨毯爆撃のように試行を繰り返します。だから、「パスワードの使いまわしはやめてください」と言われているんですね。
このリスト攻撃を回避する作戦として、「ハッシュパスワード方式」というものが使われています。ユーザーがアカウント作成するときに、自分で考えたパスワードを入力すると、ブラウザ内でハッシュ関数を通して、例えば256バイトのハッシュ値を算出して、これをサーバーに送信し、サーバーでは256バイトの「ハッシュ値のみ」を保管します。ですから、サーバーにはパスワードそのものは保管されていませんので、サーバーからの情報漏洩があってもパスワードは漏洩せず、不正ログインには使えないというわけです。このハッシュ値は、人間が記憶できる8文字とか16文字程度の長さよりも長くなっていますので、総当たり攻撃(ブルートフォース攻撃)にも強くなっています。
ハッシュパスワード方式のサイトで、ユーザーがパスワードを忘れてしまった場合はどうなるでしょうか。サイトではパスワードそのものを保管していませんので、パスワードの開示を受けることはできません。この場合は、アカウント新規登録の時と同じように、パスワードの再登録をすることで、再度ログインできるようになるというわけです。この場合も、ユーザーのPCのブラウザ内でハッシュ関数が計算されて、サーバーに送られるのはハッシュ値だけです。これも、ゼロ知識証明を使っている技術であり、認証に使われる場合は、「ゼロ知識認証」とも呼ばれます。
コメントを残す