2013/12/20

DSA署名をC++で作る(概要)

そもそも署名とは、とある文書が作成当初から改ざんされていないことを保証するためのものです。「平文」だけで渡してしまうと、改ざんされていても全く分かりません。しかし例えば「平文+平文の文字数」で相手に渡すと相手は文字数を数えて文字が増えたりしてないか(改ざんされていないか)確かめることが出来ます。もちろん文字数では帳尻合わせ放大なのですが、DSA署名はそれの非常に強力なやつです。
 全体イメージです。RSA暗号のように秘密鍵で署名を付け、公開鍵で署名を確認してもらう方式です。
上記図でGeneratorが平文のファイルに署名を付けるモジュールです。Generatorは秘密鍵を使って署名を付けます。Generatorや秘密鍵は絶対に外に持ち出しません。
相手にはVerifierと署名付きの平文だけを渡します。署名に公開鍵が入っているのでVerifierは平文と公開鍵を使った計算を行いOKかNGか求めます。
 署名を付けるには秘密鍵が必要だが相手にはそれを渡さない、というのがポイントです。
 つまりこういう状況です。ある箱の鍵を掛けるのはS〇nyにしか出来ない。しかし開けることは誰にでも出来る。ということはその箱に鍵がかかってるなら、箱の中身はS〇nyが用意したものに違いない。逆に開いているなら誰かが開けて入替えたものだと推察できる。こうして僕が勝手に開けたPlayStationは改造されてると推察されて保証対象外になったのです。
 次で実際にプログラムを作ります。

0 件のコメント:

コメントを投稿