移動式のブログ

ガジェット、アニメ、プログラミング、考えたことその他色々・・・特にこれといったテーマはないカオスなブログです。

デジタル署名

デジタル署名、公開鍵暗号ハッシュ関数について

デジタル署名は、ビットコインの技術などにも利用されている。

電子署名は、
情報が改ざんされていないことと、
誰かがなりすまして送った情報ではないことを証明することができる。

デジタル署名は、ハッシュ関数公開鍵暗号方式によって実現できる。


ハッシュ関数

ハッシュ関数は、データから値(メッセージダイジェスト、ハッシュ値)を得ることができる関数である。
ハッシュ値を比べて、データの改ざんを見つけることができる。
改ざんされた可能性のある文と、されていない文があったとして、
文章が改ざんされていないかを文章全体を比べて探し出すのは時間がかかる。
そのため、文章が改ざんされているかどうかだけすぐに判定できる方法があると便利である。
こういう時にハッシュ関数が役に立つ。

元の文字列と、その文字列を書き換えた文字列から生成されるハッシュ値は全く異なる値となる。
例えば、文字列が、100文字のアルファベットだとする。
そのうち1文字でも書き換えると、書き換える前の文字列から作るハッシュ値とは全く異なる値になる。
そのため、文章全体を探さなくても、ハッシュ値を調べるだけですぐに改ざんの有無を検出することができる。


ハッシュ関数の特徴
ハッシュ値から元のデータを予測するのが難しい
・異なるデータから同じハッシュ値を作ることが難しい

情報をハッシュ関数でハッシュ(情報からハッシュ値を作る)して作られたデータから、元の情報を復元することは難しくなっている必要がある。
そして、ハッシュ値が被らないようにするため、同じハッシュ値が生成されにくくなっている必要がある。



公開鍵暗号方式

f:id:idoushiki:20180726123208p:plain
暗号化する鍵と復号する鍵で違う鍵を用いる暗号方式だ。
公開鍵で暗号化したものは公開鍵で復号することはできない。
公開鍵で暗号化したものは秘密鍵でなければ復号できない。

公開鍵と秘密鍵を利用して暗号化、復号する。

秘密鍵は、秘密鍵を持っている本人しかわからない鍵である。
公開鍵は、ネットワーク上に公開されていて誰でも手に入る鍵である。

AとBがいたとして、AがBに暗号化した情報を送りたい場合

AはBの公開鍵Bを使って、情報を暗号化して、Bに送り、Bは自分の持っている秘密鍵Bで復号する。
公開鍵Bで暗号化した情報は、秘密鍵Bを持っているBさんしか復号できない。
この時にCが公開鍵Bで暗号化された情報を盗んでも、CはBの秘密鍵秘密鍵B)を持っていないので復号できない。

デジタル署名(電子署名

f:id:idoushiki:20180726093108p:plain
AがBに情報を送りたいとする。

1 、Aはハッシュ関数で情報をハッシュしてハッシュ値を作る。

2、そのハッシュ値をAの秘密鍵Aで暗号化する(デジタル署名の作成)。

3、秘密鍵Aで「暗号化したハッシュ値(署名)」を元の情報と一緒にBに送る。


4、 BはAから送られた元の情報と暗号化されたハッシュ値を受け取る。

5、 BはAがやったのと同じようにハッシュ関数で元の情報をハッシュしてハッシュ値を得る。

6、Bは公開鍵Aを使って、秘密鍵Aで暗号化されたハッシュ値を復号する。

7、5で作ったハッシュ値と、6で復号したハッシュ値を比較する。

情報が改ざんされていなければ、
5で得られたハッシュ値と6で得られたハッシュ値は同じ値になる。
もし情報が改ざんされていたら、
5で得たハッシュ値と6で得たハッシュ値は全く違う値になるので、
改ざんされていることがわかる。


また、Aは秘密鍵Aを使ってハッシュ値を暗号化している。
秘密鍵AはAしか知り得ない鍵だ。
そのため、情報をAの公開鍵Aで復号できたらその情報は「Aが作成したもの」であることが証明できる。


このため、デジタル署名は、
情報が改ざんされていないことと、
情報が送信者本人によって作成されたことを証明することができる。




現代暗号入門 いかにして秘密は守られるのか (ブルーバックス)

新品価格
¥1,058から
(2018/7/26 12:49時点)