電子署名とSSL通信
電子署名を触る機会があり、その時のお勉強ログ。にわかです。
SSL通信
電子署名とSSL通信、どちらも公開鍵暗号方式を採用している。
同じ暗号方式を採用しているのにも関わらず、利用方法に明確な違いがある。
SSLでは、サーバから公開鍵をクライアントに送りつける。
クライアントは送られてきた公開鍵を利用して、自身の通信プロトコルを暗号化しサーバにお返事を返す。
サーバは、クライアント側で暗号化された通信を受け取り、
サーバ自身で所持している秘密鍵で通信を復号してクライアントの情報を受け取る。
秘密鍵は、通常サーバでしか所持していないので、クライアントの情報はサーバでしか確認できない。
悪意のある第三者が通信を覗きこんでも、SHA256RSAで暗号化された情報は、そう簡単には解読できない。
→クライアントが公開鍵で暗号化し、サーバが秘密鍵で復号することで情報漏洩を防いでいる。
電子署名
電子署名でもSSLと同じく公開鍵暗号方式が採用されています。
そもそも電子署名の目的は、契約書などの重要な書類に。。。長くなるので割愛
電子署名された文書が改竄されていないか。を確認するために公開鍵暗号方式が利用されています。
電子文書からは、指紋を取ることができます。ハッシュ値というのですが、もしも、文書の内容を一文字変えたとすると、以前とは全く異なるハッシュ値が取得できます。電子文書からランダムな値を取得することができるのです。
一文字変更を加えるだけで、大きく値を変えて出現するハッシュ値。
ですので、その電子文書が改竄されていないことを証明するためには、ハッシュ値が変わっていない証拠があればいい。
電子署名では、署名者が原本から取り出したハッシュ値に対して、秘密鍵を使って復号文(署名値)を作成します。
そして、原本と共に復号文と公開鍵を送りつけます。
受け取った側は、これが改竄されていないかを確認(検証)します。
もしも、通信の途中で悪意のある第三者によって、原本が改竄されていたら
原本のハッシュ値 と 復号文の中に入っているハッシュ値 がイコールの関係ではなくなるので、改竄されていることを確認することができます。
復号文は、公開鍵で暗号化してハッシュ値を取り出すことができます。
## 暗号化と復号の使い方間違ってない?という疑問ですが
秘密鍵で行えるのは、復号
公開鍵で行えるのは、暗号化
ここでつまずきました。。。
日本語で、暗号文を作成すること=暗号化 文字を元どおりにすること=復号
って固定観念が理解を邪魔するのですが、
SSL通信
暗号化 暗号文= 平文の(公開鍵1)乗/(公開鍵2) の余り
復号 平文=暗号文の(秘密鍵1)乗/(公開鍵2)の余り
電子署名
復号 暗号文= 平文の(秘密鍵1)乗/(公開鍵2)の余り
暗号化 平文=暗号文の(公開鍵2)乗/(公開鍵2)の余り
つまり、〇〇の(秘密鍵1)乗/(公開鍵2)の余り という式が復号を表す
文系ですので、数式めちゃくちゃですが、
秘密鍵が行う計算式は、いつも変わらないのですよ。
公開鍵が行う計算式も、いつも同じ何ですよね。
ですので、日本語的な意味での暗号化に惑わされずに、式として判断するとわかりやす。。。
説明下手くそ。
説明間違ってるいるかもしれないので、、、今の所は忘れてください。
結論
SSL通信は、最初の1回の通信だけ公開鍵暗号を使用しており、2回目からは、共通鍵で通信します。
1回目の通信で、クライアントから共通鍵をサーバに無事に届けるために公開鍵暗号を使用しております。
ので、最初の1回の通信を守ることができれば、いいのです。
秘密鍵の所有者が、クライアントの鍵を受け取ることができればいいのです。
電子署名は、文書の改竄を検知できるように、作成者がハッシュ値に対して秘密鍵を使って復号(署名)し、
その文書が、改竄されていないか。公開鍵を使って確認することができる。
検証する人が、改竄していないかを確認することができればいいのです。
そのために、秘密鍵の所有者は、署名します。
公開鍵暗号は、秘密鍵所持者の目的に応じて、使い方に差が出ます。
長くなりましたが、もしも説明間違っておりましたら、優しく教えてください。