ssh 秘密鍵で署名を作る
ssh の公開鍵秘密鍵を使って、文字列を暗号化したり復号化したりしてた。
秘密鍵で、デジタル署名をつくってみる。
電子署名というか、ダイジェストのハッシュ値を利用したものになるので、手順としてはこんな感じかな。(自信ない
送信側
- あるデータAのダイジェスト値を計算
- ダイジェスト値に秘密鍵でサイン(暗号化)
- データAと署名したダイジェスト値を送信
受信側
受け取ったデータAが改竄されてないか検証する
- ダイジェスト値を取り出すために公開鍵を用意する
- 公開鍵と署名からダイジェスト値を取り出し
- データAのダイジェストを計算
- 取り出したダイジェストとデータA導出値と比較
- 一致すれば改竄なし
受信側の手順は何ステップもあるけど、実際はコマンド一発
秘密鍵を使ってsign を作る
ダイジェストの計算なので openss dgst を使う
ファイルの作成
とりあえず、そのへんの愚痴ってたファイルを使う。
cat grumbling.txt ヤマト運輸 宅急便コンパクト(新設 宅急便 メール便(廃止 日本郵便 ゆうぱっく 簡易書留 レターパック メール便は便利だったのに残念? 保証無しメール便で商品送る奴が多すぎたんだろうな レターパックも保証無し 補償なしで、スマホ送るとか頭どうかしてるぜ メルカリやヤフオクでスマホの落札者こわい 安くしたいからメルカリ・ヤフオクで買うんだろうけど 配送トラブルが起きたらどうするんだ、いつも警告してるのに 配送トラブルが出品者負担とかもう頭おかしい こちらが+500円負担して宅急便で送ってるけど、 指定した配送方法じゃない、送料ごまかしてるんじゃないかとかもうね。。
署名する
ダイジェスト計算して、暗号化
openssl dgst -sha1 -sign /Users/takuya/.ssh/id_rsa grumbling.txt > grumbling.txt.sig
受け取った側で署名を検証する
受信側は次の2つを受け取ることになる。
- 元ファイル grumbling.txt
- 署名 grumbling.txt.sig
takuya@~/Desktop$ openssl dgst -sha1 -verify takuya.pkcs8 -signature grumbling.txt.sig grumbling.txt Verified OK
仮に改竄されていると・・・
takuya@~/Desktop$ echo "1" >> grumbling.txt # 改竄 takuya@~/Desktop$ openssl dgst -sha1 -verify takuya.pkcs8 -signature grumbling.txt.sig grumbling.txt Verification Failure
失敗する。
ダイジェストを取り出してみる。
たぶん、署名ファイルにはダイジェストが入ってるはずなので取り出してみる。
openssl rsautl -verify -pubin -inkey takuya.pkcs8 -in grumbling.txt.sig > sig.out.rsa
sha1sum grumbling.txt 11b72642526a66e4899c0f76f0f3c67ee98dc3a1 grumbling.txt
これと、デコードした結果を見てみる。
うん、同じものがあるゾ
hexdump sig.out.rsa 0000000 30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 11 0000010 b7 26 42 52 6a 66 e4 89 9c 0f 76 f0 f3 c6 7e e9 0000020 8d c3 a1 0000023
ちゃんと、ダイジェストが入ってることがわかりました。
でも、openssl rsa で複合がなんで -verify なんだろう。。。