← メディア一覧

秘密鍵で本人を証明するデジタル署名の逆転の発想

13分19秒 | セキュリティ暗号FE

基本情報技術者試験の頻出テーマを解説した音声コンテンツです。

トランスクリプト(字幕テキスト)

デジタル署名って言葉、最近当たり前のように聞きますよね。電子契約とかで使われるあの仕組みです。 でも、ただハンコの画像をポンって貼り付けるのとは、えっと、全く次元が違うってこと意識したことありますか? 今回、僕たちが深掘りしていく資料はですね、メンターと生徒が対話する形で、このデジタル署名の心臓部をものすごく分かりやすい例えで解き明かしていくものなんです。 僕たちのミッションは、この対話を手がかりに、「これは間違いなく本人からで、内容は1ミリも変わってません」ってことをどうやって証明するのか、 そのちょっと頭がこんがらがらそうな逆転の発想を一緒に体験していこうと思います。 そうですね。この話の面白いところは、デジタル署名の目的が単に「見ました」っていう、まあ意思表示じゃないってことなんです。 誰が何を約束したのか。それを後から誰もが検証できる数学的な証拠としてガチッと固める。 この証明の仕組みこそが、今のデジタル社会の信頼を支える、まあ根幹になってるんですよね。 なるほど、「証明」ですか。では早速その核心に迫っていきましょう。資料の冒頭でメンターが言うんですよね。 デジタル署名の目的は、ハンコを貼ることじゃない。「この書類は間違いなく僕が書いたもので、一文字も書き換えられていない」と証明することなんだ、と。 ええ。まさにその証明です。デジタル署名が解決しようとしている問題っていうのは、突き詰めると二つに絞られます。 一つは、「これ本当にAさんから来たの?」という問題。これを真正性と言います。まあ成りすましは絶対ダメということですね。 まあそれはそうですよね。知らない人からの契約書にサインはできませんから。 そしてもう一つが、「Aさんから来たのは分かったけど、途中で誰かが内容を書き換えてない?」という問題。 これが完全性です。送られた内容が一字一句そのままの形で届いていることを保証する。 この本人証明と改ざん防止、二つをいっぺんに実現しちゃうっていうのが、デジタル署名のすごいところなんです。 うーん。でもそれをどうやって?物理的な封筒みたいにこう封緘で封するわけにもいかないですし。 そこで登場するのが、公開鍵暗号という技術なんです。そしてその使い方にこそ、あの逆転の発想が隠されています。 ほう。実は物理的なハンコって、言ってしまえば模倣も可能です。でもデジタル署名は、現代のコンピューターでは事実上暴くことが不可能な、 数学的な問題の難しさに信頼の根っこを置いている。つまり、信頼の担保が職人技から数学的証明にシフトした。 これが本質的な革命なんですね。 信頼の根拠が数学。なるほど、じゃあその仕組みについて詳しく教えてください。普通、誰にも見られたくないメッセージを送る暗号化だと、 相手の公開鍵を使いますよね。資料の例えだと、相手の南京錠で箱をロックして送る。 そうすれば、その鍵を持っている相手本人しか開けられないと。 その通りです。それが暗号化の基本。でもデジタル署名は、その使い方を全く逆にします。 逆、ですか?資料には送信者だけが持っている自分の秘密鍵で書類をガチッと固めるって書いてありますけど、 これ初めて聞くと「えっ」てなりません?自分しか開けられない鍵で閉めちゃったら、受け取った相手は誰も読めないじゃないですか。 一体なんの意味が?そこなんです。そこが最大のポイントで、まさに逆転の発想の核心です。 秘密鍵で固められた文書は、それとペアになっている公開鍵を使えば、実は誰でも開けるんです。 いや、正確に言うと、検証できると言うべきですね。 え、誰でも開けられるんですか?それじゃあなんか意味がないような。 いいえ。そこにこそ最大の意味があるんですよ。ちょっと考えてみてください。あなたの公開鍵でこの署名を開くことができた、 という事実。これが何を意味するのか。えーっと、僕が持ってるあなたの公開鍵で開けられたということは、 その署名はペアになっているあなたの秘密鍵でしか作り得ない、ということです。そしてその秘密鍵はこの世であなたしか持っていない。 ああ!つまり、あなたの公開鍵で検証できたという、たったそれだけのことが、 そのまま「これは秘密鍵を持つあなた自身が署名したに違いない」という動かぬ証拠になるんです。 あ、そういうことか!なるほど、目的が違うんですね。暗号化は中身を隠すのが目的だから、相手しか開けられないようにする。 でも証明は自分が本人であることを証明するのが目的だから、むしろ誰でも検証できるようにオープンにしておく必要があるんだ。 完璧な理解です。隠すためじゃなく、証明するため。だから、誰でも検証できること自体がその署名の信頼性を保証するんです。 見事なロジックですよね。いやー、これ面白い。でもちょっと意地悪な質問をしてもいいですか? どうぞ、どうぞ。その公開鍵自体が偽物だったらどうするんですか? 僕があなたの公開鍵だと思って手に入れたものが、実は悪人の作ったニセの公開鍵だったら、全部台無しになりません? 素晴らしい質問です。まさにそこは次のステップの話になるんです。その公開鍵が本当に本人のものかを保証するために、 認証局という第三者機関が発行する電子証明書という仕組みがあるんですね。 まあ、今回は深入りしませんが、その疑問は非常に重要で、ちゃんと解決策が用意されているということです。 なるほど、穴がないようにできてるんですね。オッケー、これで送ったのが間違いなく本人だって真正性は証明できました。 でも、もう一つ怖いのが、途中で内容を書き換えられることですよね。例えば、僕が送った請求書の金額を、 誰かがこっそりゼロを1つ増やしたらどうなるのか、と。署名だけじゃそれは防げないような気がするんですが。 ええ、その通りです。文書全体を秘密鍵で固めるのはデータも重くなりますし、現実的ではありません。 そこで、もう一つの天才的な発明が登場します。ほう。なんだろうと思ったら、この資料の例えがすごく秀逸で、 これを「書類の指紋」って呼んでるんですよね。この「指紋」、ハッシュ値とも言うそうですが、一体どういう仕組みなんですか? この「指紋」という例えは本当に的確なんです。ハッシュ関数という計算方法を使うんですが、これには面白い特性がいくつかあります。 まず、どんなに長い文書。例えば、この会話の全記録でも、この計算にかけると必ず決まった長さの短い文字列、 まさに指紋のようなデータに要約されるんです。へえー、どんなに長くても短くなるんだ。 そしてここが最も重要なんですが、元の文書がほんの少しでも変わると、出来上がる指紋は全く別の、予測不可能な文字列にガラッと変わってしまうんです。 これを雪崩効果なんて言ったりもしますね。え、そんなに敏感なんですか? 例えば僕が文書の最後に「笑い」って付け加えただけでも、もう全然違う指紋になっちゃう? まさにその通りです。「笑い」どころか、スペースが一つ増えただけでも全く違う指紋になります。だからこそ、ごまかしが一切きかないんです。 一人一人指紋が違うように、文書も一文字違えば全く別の指紋を持つと考えてください。わあ、それはすごい。 で、実際の署名ではその指紋をどう使うんですか?プロセスはこうです。まず、送信者は送りたい文書全体の指紋、 つまりハッシュ値を計算します。次に、その短い指紋データだけを、先ほどの自分の秘密鍵で固めて署名を作る。 そして、元の文書とその署名をセットにして相手に送るんです。文書そのものではなく、その指紋だけを固めるのがミソですね。 ああ。だからデータ量も小さくて済むわけですね、なるほど。じゃあ、さっきの改ざんの例で考えてみましょうか。 あなたが僕に「100万円貸して」という電子契約書を送ってきたとします。その途中で、悪いやつがその文書を「1,000万円貸して」に書き換えて僕に届いたと。 はい。非常に危険な状況ですね。この時、受信者である僕は、まず届いた文書、つまり「1,000万円貸して」と書かれた文書から、改めて指紋を計算しますよね。 ええ。次に、一緒に送られてきたデジタル署名をあなたの公開鍵で開く。 すると中から元の、つまりあなたが署名した時点での指紋が出てくる。これは「100万円貸して」という文書から作られた指紋のはずです。 その通りです。最後に、僕の手元で計算した1,000万円の指紋と、署名の中から出てきた100万円の指紋を比べる。 あ!当然二つは全く違うものになってる。そういうことです。指紋が一致しない。 その瞬間に、元の文書と届いた文書の間に何らかの変更があったことの動かぬ証拠になります。これで完全性が証明されるわけです。 これ、実はすごく身近なところでも使われているんですよ。例えば、オンラインバンキングで送金ボタンを押した瞬間。 あれも裏側では私たちが意識しないうちに、「この送金指示は確かに口座名義人本人からのもので、金額も改ざんされていません」というデジタル署名がつけられているんですよ。 なるほど、だから僕の手元で計算した指紋と、署名の中から出てきた指紋が1文字でも違ったら、もうその瞬間にアウト。誰かが触ったなってバレるわけですね。 いや、これはすごい。本人確認と改ざん検知の二刀流だ。ええ。この二つを同時に数学的に保証してくれる、これがデジタル署名の力です。 ただ、正直に言うと、ここまでの話でやっぱり一番混乱するのが、「誰の鍵をいつ使うのか」ってところなんですよ。 暗号化と署名で使う鍵が逆になるっていう、ええ、そこが最大の関門であり、理解すれば最もスッキリする部分です。 資料でも「試験で一番狙われる」と指摘してくれていますが、目的によって使う鍵が全く逆になる。ここを整理しましょう。 お願いします。例えば、僕があなたに「秘密の恋文」を送る時と、僕があなたに「100万円借ります」っていう契約書を送る時、 この二つでどう使い分けるか、という具体例で考えると分かりやすいですかね。完璧な例えですね。 まず、「秘密の恋文」。これは目的が機密性。つまり、あなたと僕以外には読まれたくないということですよね。はい、絶対に。 その場合は、メッセージを受け取る相手。つまり、僕の公開鍵で暗号化します。 そうすれば、鍵を持っている僕しか開けられません。なるほど。「秘密の恋文」は「相手の公開鍵」で、と。 じゃあ、「100万円借ります」の契約書の方は?これは内容を秘密にするというより、確かに僕がこの条件で借りますと証明することが目的です。 その通りです。目的は真正性と完全性。この場合はメッセージを送る自分。つまり、あなたの秘密鍵で署名します。 そうすれば、僕を含め誰もがあなたの公開鍵を使って、これは間違いなくあなた本人が作成し、改ざんされていない契約書だと検証できるわけです。 分かりやすい。暗号化は「相手の公開鍵」、署名は「自分の秘密鍵」。目的によって使う鍵の持ち主が違う。 ここさえ押さえればもう迷うことはなさそうです。ええ。誰の鍵で何をするのか。この関係性さえ間違わなければもうごちゃごちゃにならないはずです。 いや、スッキリしました。では今回の探究の締めくくりに、この一番大事なポイントを、資料にある必勝10秒チェックとしてあなたと一緒に確認させてください。 デジタル署名の急所。これを覚えておけば完璧、という三つのポイントです。まず一つ目、誰の鍵。これは送信者である自分の秘密鍵で作成する。 はい、これで本人であることが証明されます。二つ目、何のため。これは本人の証明、プラス改ざんされていないことの証明。 真正性と完全性、二刀流ですね。そして三つ目、確認方法は?これは送信者の公開鍵で検証する。 誰もが検証できるからこそ、社会的な信頼が生まれるわけです。この三点を覚えておけば、もうデジタル署名の核心を見失うことはなさそうです。 単なるハンコの画像とは全く次元の違う、数学的信頼に基づいたとてつもなく賢い仕組みだということがよくわかりました。 さて、最後に一つだけ、あなたがこれから先、少し考えるための問いを投げかけてこの話を終わりにしたいと思います。お、なんでしょうか。 今回は人と人の間のやり取りを考えました。では、この秘密鍵の持ち主が人間ではなく、企業や政府、あるいはAIだったらどうでしょう? 例えば、あなたのスマートフォンに届くソフトウェアのアップデートが本当に開発元から送られてきた本物だと証明したり、 AIが生成した重要なレポートの出処と内容を保証したり。この「誰が何を約束したか」を数学的に証明する技術が、 これからのデジタル社会で信頼の形をどう変え、どう支えていくのか。少し考えてみるのも面白いかもしれませんね。

このコンテンツは Web society で視聴・学習できます。