hakeの日記

Windows環境でプログラミングの勉強をしています。

GnuPGを使ってみる

興味がありつつも使い方がわからないので放置していたのですが、あさあささんトコに簡単な解説があったので実験してみました。


基本として、暗号化したデータを送る場合に通常の方法だとデータの送り側から受け側にパスワードを伝達する際に第三者に漏れて解読されてしまう恐れがあるので、これを改善するために暗号化と復号化で違うパスワードを使用するという方法。具体的には

  • 受け側が秘密鍵と公開鍵を用意して、公開鍵を送り側に知らせる
  • 送り側を公開鍵でデータを暗号化して送る
  • 受け側は秘密鍵でデータを復号化する

という理解でいいのかな。



実験では受け側をWindows PC、送り側をzaurusにしてみました。それぞれのGnuPGに入手先は以下

双方とも使用したバージョンは1.4.7です。Win版はインストールしてもパスが通らないみたいなので設定するかフルパスで指定します。なんかまともにやると公開鍵をサーバに登録したり署名したりとあるみたいですが、その辺は行いませんでした(というか良くわからん)

  • PCでキーの生成、2048はデフォルト値です。これでも生成時間が少しかかりました。
> gpg --gen-key

  鍵タイプ  1
  鍵長      2048
  有効期限  0(無期限)
  名前、メールアドレス
  パスフレーズ入力
  • 公開鍵をファイル出力、ファイルpubkey.ascに出力。useridはあさあささんに習ってメールアドレスにしました。
> gpg -o pubkey.asc -a --export userid
  • 公開鍵(pubkey.asc)をザウルスにコピー
  • ザウルス側で公開鍵を取り込み
$ gpg --import pubkey.asc

$ gpg --fingerprint  入手した鍵の表示
  • 入手した公開鍵で暗号化、UserIDを聞かれるので受け手のメールアドレス(の一部でもOKみたい)を入力
$ gpg -o filename.asc -ea filename
  • 暗号化されたfilename.ascをPCへ持ってくる
  • PCで復号化
> gpg -o filename -d filename.asc

  パスフレーズ入力

復号化されてできたfilenameの内容がザウルス側にあるオリジナルのfilenameと内容が同じならOK。

追記

署名について
なるほど、互いに公開鍵を入手している状態で送り側が暗号化時に自分のパスフレーズで署名すれば、受け手が復号時に誰が暗号化したかわかるということ、で良いのかな?