公開鍵と秘密鍵でナゼ、改ざん・成りすましが防止できるのか

いつも判らなくなるので、自分の為にメモ。間違ってたらごめん。

送信者
1. まずは送りたいデータが存在する

     データ (゜д゜ )
       \/| y |

2. データからハッシュ値を計算する

     データ ( ゜д゜) ハッシュ値
       \/| y |\/

3. ハッシュ値を送信者の秘密鍵で暗号化して署名にする

     データ ( ゜д゜) ハッシュ値秘密鍵 → 署名
          (\/\/

4. データと署名をセットで送る

        (゜д゜ )
        (| y |\ εε= データ+署名

受信者
1. データと署名が手に入る

     データ ( ´∀`) 署名
       \/| y |\/

2. 署名を送信者の公開鍵で複合化してハッシュ値にもどす

     データ ( ´∀`) 署名 ✕ 公開鍵 → ハッシュ値
          (\/\/

3.データからハッシュ値を求める

   ハッシュ値 (´∀` ) ハッシュ値
         \/\/)

4.互いのハッシュ値を比較してみる

   ハッシュ値(´∀` ≡ ´∀`) ハッシュ値
         \/| y |\/

(データ)ハッシュ値 = (署名)ハッシュ値ならばデータは改ざんも成りすましもない、正当な物である。

  1. まず、互いのハッシュ値が等しい事実から改ざんされていない。改ざんされたデータからは改ざん前データはハッシュ値は得られないからである。データを改ざんし、署名のハッシュ値を改ざん後のハッシュ値にしようにも、正当な署名ぶる為には秘密鍵での暗号化が必要なため本人以外には不可能。
  2. また、公開鍵の復号でハッシュ値が等しくなるという事実と、秘密鍵は本人しか持っていない事から、成りすまされていないといえる。