+ 作るログイン
図を読み込んでいます…
1 / 7
図でつながる 認証と暗号の基礎 / 全9章

電子署名 ― 文書と署名鍵の結び付きを確かめる

発行
アニメモ公式
版
第2版
改訂
コマ
全7

文書・ハッシュ・秘密鍵・署名・公開鍵を追って、改ざん検知とMACの違いを理解します。

文書を隠すより、改ざんを見つけたい

「会議は10時」という案内が届きました。本当にアオイさんの署名鍵で作られたか、途中で「11時」に書き換わっていないかを確かめたいとします。

ここで扱うのは暗号技術による電子署名(デジタル署名)です。手書きサインの画像を貼ることとは違います。文書を隠すことが主な目的でもありません。NIST FIPS 186-5

図の署名マークは説明のための記号です。本物の署名値は、署名アルゴリズムが生成するデータです。

  • 05 / SECURITY NOTES
  • 1 / 7
  • 誰の鍵で作った? 途中で変わった?
  • 会議は10時
  • 改ざんされていない?
  • 届いた案内
  • この公開鍵に対応する署名?
  • 電子署名は、文書と署名鍵の結び付きを検証する。

文書のバイト列を、署名の対象にする

署名方式では、文書からハッシュを計算するなどの処理を使って、内容に結び付いた署名を作ります。ハッシュは文書の特徴を短い値で表す道具です。

ただし、ハッシュを添えるだけでは署名になりません。文書を書き換えた人は、書き換え後のハッシュも計算できるためです。

図では文書から短い指紋を取り出します。実際の処理のどこでハッシュを取るかは署名方式によって違います。APIへ渡す前に自己流で二重にハッシュ化しないでください。

  • 05 / SECURITY NOTES
  • 2 / 7
  • 文書を、短いハッシュへ
  • 会議は10時
  • ハッシュ処理
  • 指紋 h1
  • 署名するバイト列
  • 方式に従って扱う
  • これだけでは、署名ではない
  • ハッシュだけなら、書き換えた人も作り直せる。

署名者の秘密鍵で、署名を作る

アオイさんは、自分の秘密鍵を使って文書に対応する署名値を作ります。秘密鍵は署名者の手元に残ります。

受信者へ渡すのは文書と署名値です。「秘密鍵で暗号化したので、公開鍵で文書を復号する」と説明すると、RSA-PSSやECDSAなどの署名方式の動きを誤解させます。RSAの署名方式

署名は「秘密鍵を持つ側だけが作れる検証用データ」と捉えると、暗号化と混同しにくくなります。

  • 05 / SECURITY NOTES
  • 3 / 7
  • 署名者の秘密鍵で、署名を作る
  • 指紋 h1
  • 署名処理
  • 署名方式に従う
  • 署名値
  • アオイの秘密鍵
  • 署名は検証用の値。「秘密鍵で暗号化」とは違う。

受信者は、公開鍵で検証する

ボブさんは、受信した文書・署名・アオイさんの公開鍵を検証処理へ渡します。結果は成功または失敗です。図ではこの三つが検証の箱へ集まります。

成功は、その公開鍵に対応する署名と文書が整合していることを示します。公開鍵が本当にアオイさんのものかという確認は、証明書や信頼できる鍵の配布経路が支えます。

署名が有効でも、文書の記述が事実であることや、署名者にその操作の権限があることまで保証されるわけではありません。

  • 05 / SECURITY NOTES
  • 4 / 7
  • 文書・署名・公開鍵で、検証する
  • 会議は10時
  • 検証 OK
  • 文書と署名が整合
  • アオイの公開鍵
  • 成功しても、内容の真実性や操作の権限までは決まらない。

一文字変えると、元の署名とは合わなくなる

攻撃者が案内を「会議は11時」へ変え、元の署名をそのまま付けて送ったとします。受信者は変更された文書で検証するため、元の署名とは整合しません。

図では文書だけが変化し、署名カードは同じまま残ります。この関係が、改ざん検知のポイントです。

署名は文書のバイト列に結び付きます。JSONの空白や並びを変えてもよいのかなど、何を署名対象にするかは形式ごとの規約が必要です。JWSでは、ヘッダーとペイロードを所定の形式で結び付けます。JWS署名入力

  • 05 / SECURITY NOTES
  • 5 / 7
  • 一文字変えて、同じ署名を付けると
  • 会議は11時
  • 検証 NG
  • 文書だけが変わった
  • アオイの公開鍵
  • 元の文書の署名は、変更後の文書には合わない。

MACと電子署名の違いは、検証する側の鍵

方式作る鍵検証する鍵検証者も同じ証拠を作れる?
MAC共通鍵K共通鍵K同じ鍵があれば作れる
電子署名秘密鍵公開鍵公開鍵だけでは作れない

この違いは、JWTのHS256とRS256・ES256などを理解するときにも役立ちます。共通鍵を渡す相手は検証だけでなく生成もできる、と考える必要があります。JWSの鍵に関する考慮事項

図では署名用の秘密鍵は一人に残り、検証用の公開鍵だけが複数の読者へ広がります。

  • 05 / SECURITY NOTES
  • 6 / 7
  • 公開鍵は、検証者へ配れる
  • 検証者 1
  • 公開鍵で検証
  • 署名者の秘密鍵
  • 配れる公開鍵
  • 検証者 2
  • 署名者だけが守る
  • 署名は作れない
  • MACは共通鍵、電子署名は秘密鍵と公開鍵を使い分ける。

確認:有効な署名があれば、文書は秘密になる?

答えはいいえです。電子署名だけでは内容を隠しません。秘匿も必要なら、適切な暗号化と組み合わせます。

また、署名の信頼性は秘密鍵の管理と、公開鍵の持ち主の確認に支えられます。秘密鍵が漏れれば、攻撃者も署名を作れるようになります。

署名を見るときは、「どのバイト列に対する署名か」「どの公開鍵で検証したか」「その鍵をなぜ信頼できるか」をたどりましょう。ここで扱うのは技術的な検証で、法的効力の判断ではありません。

  • 05 / SECURITY NOTES
  • 7 / 7
  • 確認:署名があれば、文書は秘密?
  • 会議は10時
  • 署名を検証
  • 内容は読めるまま
  • 改ざん・鍵との結び付きを確認
  • 公開鍵は誰のもの?
  • 答えは NO。秘匿には暗号化、署名には鍵への信頼が必要。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]