前号: No 414 / 次号: No 416 / 一覧(note.com)へ / ブログページに戻る
前回はパスキーのイメージを持っていただくために、どちらかというと「便利さ」を中心にお話をしました。 パスキーはパスワードと何がちがうの?(414号) https://note.com/egao_it/n/nb797767ed93f 今回はいよいよ、その裏側にある「信頼の仕組み」についてです。 そう、タイトルにもある通り、実はパスキーは「電子署名」を使っているのですね。 この驚きの事実について、お話を進めましょう。1. パスキーは電子署名を利用している
皆さんは「電子署名」と聞くと何を思い浮かべるでしょうか? 多くの方は、スマホやタブレット上で手書きで自署したデータのこと?とお考えではないでしょうか。 最近では、各種のサービス申し込みや契約確認などでタブレット上などで署名を求められるケースが増えてきています。 (以降、混乱を防ぐため、このタイプの電子署名をここでは「電子サイン」と書きます。) 電子サインは、紙の署名や押印と同様で、「確かに本人がOKと言いましたよ」という証拠として使われます。 これに対して、本人の意思確認を行うための技術としての「電子署名」というものがあります。 これは本人の意思確認が目的ですので、手書きのサインなどは使いません。 本人専用の特殊データをあらかじめ作っておき、意思の確認時に使うのです。 この特殊データはランダムに作成され、他の人のデータと一致することはありません。 この特殊データというのは、本人だけが使える場所に保管し、決して外に出さないのが鉄則です。 門外不出、他人に扱わせない、といった特徴は署名(サイン)というより、印鑑に近いですね。いわば「電子ハンコ」ですね。 なお、上記の電子サインと同様にこの記事ではこれを「デジタル署名」と呼ぶことにします。 余談ですが、技術者の間では、デジタル署名を「電子署名」と呼ぶことが通常で、上記の電子サインを電子署名と呼ぶことはかなり稀です。 これも専門家と一般の方とで意思疎通のしにくい言葉の一つですね。2. ハンコとデジタル署名の悩ましい違い
というわけで、今回のテーマとなるデジタル署名についてお話をします。 上で、デジタル署名を「電子ハンコ」と書きました。 印鑑には印影から複製を作ることが極めて難しいという特徴があります。(現代では複製もカンタンにできるかもですが...) この特徴があるからこそ、本人の意思確認方法として長らく使われているわけです。 信頼できる意思確認の方法としては「容易にコピーできない」という条件は譲れません。 ところが、デジタルデータって「コピペ」が簡単という特徴があります。 ここにデジタル署名の難しさと矛盾が出てきます。 いくら特殊データだと言ったって、所詮はデジタルデータです。そのままの形で通信に使っちゃうと、それを盗聴されたら、複製されちゃいます。 これでは、本当に本人の意思か判断できません。要は使いものになりません。 では、どうすればいいのか? この矛盾を解消するための方法こそが「デジタル署名」なのです。 つまり、本人専用の特殊データは外に出さず、それでも本人のデータであることを証明する方法です。 ほら、前回の「秘伝のタレのレシピ」とうっすらとつながってきた気がしませんか?3. デジタル署名の仕組み
デジタル署名を成立させるには、本人専用の特殊データ(以降、秘密情報と書きます)は出しちゃいけません。 出しちゃえば、コピーできますから、誰でもなりすましできちゃいます。 そこで、送信する時には秘密情報を使って、「ごにょごにょ」と計算をし、受け取った相手側も同様に「ごにょごにょ」と計算をして、相手がホンモノかどうかを確認します。 この手順のことをデジタル署名と言います。 つまり、デジタル署名というのは、本人が秘密情報を使って計算をすること(これを署名と言います)に加えて、受け取った側が、その署名を確認すること(これを検証と言います)という二種類の処理から成立しています。 言い換えれば、署名を作る方法と、作成された署名を検証する方法の二つがあって初めて、デジタル署名というシステムが成立するのです。 ここで2つの疑問が出てきます。 一つ目は、そもそも秘密情報を通信路上に流さないなんてことができるのか?という疑問。 もう一つは、送信内容に秘密情報を含まないとすれば、それで「正しい」と判断する基準はどうやって決めるのか?という疑問。 今回は、前者の「秘密情報を通信路上に流さずに相手に伝える方法」についてお話します。 後者の「何を基準にして正しいと判断するか?」については次回のお題とします。4. チャレンジとレスポンス
秘密情報をそのまま通信路上に流さないにも関わらず、相手に秘密情報相当の情報を送る方式として、チャレンジ&レスポンスという方法があります。 この方式の説明に先立って、お話しておかないといけないことがあります。 これまで、「秘密情報は門外不出」という条件が必須であると書いてきました。 これはパスキーとしての必須条件ですので、譲ることはできません。 ですが、以下で説明するチャレンジ&レスポンス方式では「秘密情報」を事前に通信相手と共有できていることが前提です。 つまり、チャレンジ&レスポンス方式そのものはパスキーの必須条件を満たしていません。 にも関わらず、ここでチャレンジ&レスポンス方式の説明をするのは、これが通信路上に秘密情報を出さずに、通信を行うための非常に優れた方式であり、これを応用することで、パスキーでも似たような方式で通信を行っているためです。 つまり、チャレンジ&レスポンスそのものはパスキーでは使えないけれど、その考え方はパスキーでも採用されているのです。 ここでの登場人物は二名。 1. 本人:秘密情報を用いて、本人であることを証明したい 2. 事業者:サービスの提供元。接続先が本人であることを確認したい 最初に、本人から「サービスを使わせてよ」と依頼が来ます。すると、事業者側はチャレンジと呼ぶランダム値(毎回異なる)を渡します。 本人側は「(手元の)秘密情報の値+チャレンジの値」を計算して(この値をレスポンスと呼ぶ)返します。 確認者側は本人から値を受け取るとそれを逆算します。つまり「レスポンス−秘密情報」を計算します。 こうすれば、レスポンス−秘密情報=チャレンジになるはずです。 例として、秘密情報が333、チャレンジが1010の場合の流れを図示します。 1. 本人は「使わせてよ」と事業者に依頼する 2. 事業者は「チャレンジは1010だ」と返す 3. 本人が 1010+333=1343 を計算する 4. 本人が 「レスポンスは1343だ」と返す。 5. 事業者は1343−333=1010を計算する。 6. その結果、チャレンジとレスポンスが正しく呼応していると判断できる。 なんだか子供だましのようですが、着目していただきたいのは秘密情報である333が通信上に一切出てこない点です。 「なんだよそれ。チャレンジとレスポンスを両方とも盗聴すりゃ結局333の秘密情報はバレるやんか」と思った方、鋭いです。 ここでは、わかりやすくするために、足し算を例にしましたが、チャレンジ&レスポンス方式では足し算ではなく、ハッシュ関数というかなり複雑な(しかも逆算が非常にしづらい)計算方法を使います。 このように、チャレンジとレスポンスを使って、秘密情報を裏に隠したまま、本人であることを識別しているのです。 ただし、このチャレンジ&レスポンス方法では上述の通り、秘密情報を事業者側と共有しておかないといけないという致命的な欠点があります。 それこそが、デジタル署名にチャレンジ&レスポンス方式が使えない理由です。 この課題の解決方法については、次回にお話します。6. まとめ
今回は、パスキーの要素技術としての電子署名(本稿ではデジタル署名)についてお話をしました。 もともと、電子署名は公開鍵暗号という暗号技術がベースとなっています。 この公開鍵暗号は1970年に発表された論文がベースとなっていますが、世紀の発明といって良いほどの大発明でした。 現在、皆さんが日常的に利用しているオンラインバンキングなどの安全性は、公開鍵暗号によって保証されていると言っても過言ではありません。 ただ、公開鍵暗号に限らず、現代暗号理論のほとんどは数学をベースとしており、中学生レベルの数学の知識が必要です。 読者の皆様に数学を押しつけるのは「がんばりすぎないセキュリティ」としては本末転倒ですので、今回は数式などは使わないようにしました。 とはいえ、次回は(少しだけですが)数学が出てくると思います。 ぜひ毛嫌いせずにおつきあいください。 次回もお楽しみに。 今回お話したこと: ・電子署名には「電子サイン」と「デジタル署名」の二種類がある。 →電子サイン:タブレットなどに手書きのサインをすること →デジタル署名:特殊なデジタルデータで本人確認をすること ・チャレンジ&レスポンス方式 →秘密情報そのものを送らずに、本人確認する方式 (本稿は 2025年7月に作成しました)
前号: No 414 / 次号: No 416 / 一覧(note.com)へ / ブログページに戻る