重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

デジタル署名について
文書を送って、送信者の秘密鍵で暗号化された要約文を別に送る。それを送信者の公開鍵であけて文書を比較
というながれだとおもうのですが、送る文書と要約文ともに不正書き換えられたら気づかなくないですか?そもそも要約文を暗号化する理由はなんですか?誰でも得られる送信者の公開鍵であけられるなら暗号化する必要要らないような気がします。

質問者からの補足コメント

  • 暗号化する理由を自分なりに考えましたが、送信者本人がおくったか確認するためですか?それなら暗号化せずにおくる文書が本人からおくられたかわからないということですか?

      補足日時:2025/02/13 21:08

A 回答 (1件)

デジタル署名の仕組みについて、疑問点と誤解があるようなので、順を追って説明します。



デジタル署名の目的と基本的な流れ

デジタル署名の目的は、主に以下の3つです。

送信者認証: 文書が確かに送信者本人が作成・送信したものであることを証明する

文書の完全性: 文書が改ざんされていないことを証明する

否認防止: 送信者が後から「送っていない」と否認することを防ぐ

デジタル署名の基本的な流れは、概ねご認識の通りです。

文書の作成: 送信者は文書を作成します。

ハッシュ値の生成 (要約文の作成): 送信者は、作成した文書からハッシュ関数という特殊な関数を使って、文書の要約である「ハッシュ値」(またはメッセージダイジェスト)を計算します。ハッシュ関数は、元の文書が少しでも変わると、ハッシュ値が全く別の値になるという特徴を持ちます。

署名の作成 (ハッシュ値の暗号化): 送信者は、自分の秘密鍵を使って、先ほど計算したハッシュ値を暗号化します。これがデジタル署名となります。正確には「暗号化」というより「署名」という行為に近いのですが、技術的には秘密鍵を使った暗号化処理を行います。

文書と署名の送信: 送信者は、作成した文書と、作成したデジタル署名(暗号化されたハッシュ値)を一緒に受信者に送ります。

署名の検証: 受信者は、以下の手順で署名を検証します。

署名の復号: 送信者の公開鍵を使って、受け取ったデジタル署名(暗号化されたハッシュ値)を復号します。これにより、元のハッシュ値が得られます。

文書のハッシュ値再計算: 受信者は、受け取った文書からハッシュ関数を使って、ハッシュ値を再度計算します。

ハッシュ値の比較: 復号して得られたハッシュ値と、再計算したハッシュ値を比較します。

疑問点1: 文書と要約文(ハッシュ値)が両方改ざんされたら気づかないのではないか?

これは、デジタル署名の仕組みに対する誤解です。

ハッシュ関数の性質: ハッシュ関数は、入力データ(文書)が少しでも変わると、出力されるハッシュ値が大きく変わるように設計されています。そのため、文書が改ざんされた場合、ハッシュ値を再計算すると、元のハッシュ値とは異なる値になります。

署名の検証: 受信者は、受け取った文書から再計算したハッシュ値と、署名を復号して得られたハッシュ値を比較します。もし文書が改ざんされていれば、この2つのハッシュ値は一致しません。したがって、改ざんを検知できます。

攻撃者が文書とハッシュ値を両方改ざんしようとしても、以下の点で非常に困難です。

ハッシュ値の一方向性: ハッシュ関数は一方向性関数であり、ハッシュ値から元の文書を復元することは非常に困難です(事実上不可能)。

署名の偽造の困難性: 攻撃者が有効なデジタル署名を偽造するには、送信者の秘密鍵を入手する必要があります。秘密鍵は送信者だけが厳重に管理するものであり、通常は外部から入手することは非常に困難です。

つまり、攻撃者が文書を改ざんした場合、正しい署名(元の文書から生成されたハッシュ値を秘密鍵で暗号化したもの)を同時に偽造することは、秘密鍵を入手しない限り極めて難しいのです。

疑問点2: 要約文(ハッシュ値)を秘密鍵で暗号化する理由がわからない。公開鍵で復号できるなら暗号化する必要がないのでは?

これは、デジタル署名の「署名」という行為の目的を理解することが重要です。

暗号化の目的の違い:

通常の暗号化 (共通鍵暗号、公開鍵暗号): メッセージの内容を第三者に秘匿することが目的です。

デジタル署名 (秘密鍵による「暗号化」): 送信者を認証し、文書の完全性を保証し、否認防止を実現することが目的です。

秘密鍵で署名する理由:

送信者認証: 秘密鍵は送信者本人だけが持っているものです。秘密鍵で暗号化(署名)されたハッシュ値を、対応する公開鍵で正しく復号できるということは、「この署名は、確かにこの公開鍵に対応する秘密鍵の所有者によって作成されたものである」ということを証明できます。つまり、送信者本人が署名したことを保証できるのです。

否認防止: 送信者本人の秘密鍵で署名されたという事実は、後から送信者が「署名していない」「送っていない」と否認することを防ぐ証拠となります。

公開鍵で復号できることの重要性:

誰でも検証可能: 公開鍵は誰でも入手できます。そのため、受信者だけでなく、第三者も公開鍵を使って署名を検証できます。これにより、広く信頼性を確保できます。

秘匿性との区別: 署名されたハッシュ値を公開鍵で復号できることは、メッセージの秘匿性とは関係ありません。署名の目的は認証と完全性保証であり、メッセージ自体を秘密にするわけではありません。(メッセージ自体を秘密にしたい場合は、別途暗号化が必要です。)

補足コメントについて: 「送信者本人が送ったか確認するためですか?それなら暗号化せずにおくる文書が本人からおくられたかわからないということですか?」

はい、おっしゃる通り、デジタル署名の大きな目的の一つは「送信者本人が送ったか確認するため」です。

もしハッシュ値を暗号化せずにそのまま送った場合、確かに文書の改ざん検知はできます。なぜなら、受信者は自分で文書からハッシュ値を計算し、送られてきたハッシュ値と比較すれば、文書が改ざんされたかどうかはわかります。

しかし、ハッシュ値を暗号化せずに送るだけでは、なりすましを防ぐことができません。悪意のある第三者が、文書とハッシュ値を両方とも偽造して送信した場合、受信者はそれが本物かどうか区別できません。

秘密鍵でハッシュ値を暗号化する(署名する)ことで、初めて「これは確かに送信者本人が作成し、送信した文書である」という強い保証が得られます。 公開鍵で署名を検証できるということは、秘密鍵の所有者(つまり送信者本人)によって署名されたことを証明する強力な根拠となるのです。

まとめ

デジタル署名は、単なる暗号化技術ではなく、認証、完全性保証、否認防止という重要な機能を提供するセキュリティ技術です。秘密鍵でハッシュ値を「暗号化」(署名)することで、送信者本人による署名であることを証明し、文書の信頼性を高めることができます。
    • good
    • 1
この回答へのお礼

丁寧な説明ほんとにありがとうございます。自分の誤解がとけとてもスッキリしました。感謝しかないです。

お礼日時:2025/02/13 21:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A