GPG (GNU Privacy Guard) はフリーの暗号化ソフトです. 単にファイルを暗号化, 復号出来るだけでなく, ファイルに電子署名をつけることもできます.
ここからの実習は二人一組になって行ってもらいます(三人のところはうまくやってください...笑).
公開鍵と秘密鍵のペアを生成します(この作業は二人とも行う). 以下は, アカウント名 hoge が鍵を生成する例です.
まず X を立ち上げます.
hoge$ startx |
次に端末を立ち上げて端末内に鍵のペアを生成するためのコマンドを打ちます. 使うコマンドは gpg です.
hoge$ gpg --gen-key |
鍵の設定に関して何項目か質問されるので, 本実習では以下のように設定しましょう.
gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. ご希望の鍵の種類を選択してください: (1) RSA and RSA (default) (2) DSA and Elgamal (2) DSA (署名のみ) (5) RSA (署名のみ) 選択は? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 2048 要求された鍵長は 2048 ビット 鍵の有効期限を指定してください。 0 = 鍵は無期限 <n> = 鍵は n 日間で満了 <n>w = 鍵は n 週間で満了 <n>m = 鍵は n か月間で満了 <n>y = 鍵は n 年間で満了 鍵の有効期限は? (0) 0 Key does not expire at all これで正しいですか? (y/N) y あなたの鍵を同定するためにユーザーIDが必要です。 このソフトは本名、 コメント、 電子メール・アドレスから 次の書式でユーザーIDを構成します: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" 本名: HOGE Hoge 電子メール・アドレス: hoge@eis.hokudai.ac.jp コメント: test 次のユーザーIDを選択しました: "HOGE Hoge (test) <hoge@eis.hokudai.ac.jp>" 名前(N), コメント(C), 電子メール(E)の変更、 または OK(O)か終了(Q)? O 秘密鍵を保護するためにパスフレーズがいります。 パスフレーズを入力: (password) パスフレーズを再入力: (password) 今から長い乱数を生成します。 キーボードを打つとか、 マウスを動かす とか、 ディスクにアクセスするとかの他のことをすると、 乱数生成子で 乱雑さの大きないい乱数を生成しやすくなるので、 お勧めいたします。 +++++ ....+++++ 今から長い乱数を生成します。 キーボードを打つとか、 マウスを動かす とか、 ディスクにアクセスするとかの他のことをすると、 乱数生成子で 乱雑さの大きないい乱数を生成しやすくなるので、 お勧めいたします。 +++++ ....+++++ gpg: /home/hoge/.gnupg/trustdb.gpg: 信用データベースができました gpg: 最小の「ある程度の信用」3、 最小の「全面的信用」1、 PGP信用モデル gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u pub XXXXX/XXXXXXXX 2015-07-10 指紋 = XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX uid HOGE Hoge (test) <hoge@eis.hokudai.ac.jp> sub XXXXX/XXXXXXXX 2015-07-10 |
--> 鍵の種類を選択 -->鍵のサイズを選択 -->鍵の有効期限を選択 |
今生成した公開鍵が自分の所有する公開鍵リストに登録されていることを確認しましょう.
hoge$ gpg --list-key ------------------------------------------------------------- pub XXXXX/XXXXXXXX 2015-07-10 uid HOGE Hoge (test) <hoge@eis.hokudai.ac.jp> sub XXXXX/XXXXXXXX 2015-07-10 |
今生成した秘密鍵も自分の所有する秘密鍵リストに登録されていることを確認しましょう.
hoge$ gpg --list-secret-key ------------------------------------------------------------- sec XXXXX/XXXXXXXX 2015-07-10 uid HOGE Hoge (test) <hoge@eis.hokudai.ac.jp> ssb XXXXX/XXXXXXXX 2015-07-10 |
これで公開鍵・秘密鍵の設定は終了です.ペアの受講生も同様にして 鍵を作成しましょう.以下では hoge さんの相方のアカウント名を hero として進めていきます.
hero$ gpg --gen-key "HERO Hero (test) <hero@eis.hokudai.ac.jp>" |
お互いの公開鍵を登録します. 以下の例は hero さんが hoge さんの公開鍵を登録する手順です.
まず hoge さんが自分の公開鍵を hoge_pub-key.asc という名前のアスキー形式ファイルとしてエクスポートします.
hoge$ gpg -a --export hoge@eis.hokudai.ac.jp > hoge_pub-key.asc |
次に hero さんが hoge_pub-key.asc をインポートします.
hero$ gpg --import /home/hoge/hoge_pub-key.asc |
正しくインポートされたか確認.
hero$ gpg --list-keys -------------------------------------- pub YYYYY/YYYYYYYY 2015-07-10 uid HERO Hero (test) <hero@eis.hokudai.ac.jp> ssd YYYYY/YYYYYYYY pub XXXXX/XXXXXXXX 2015-07-10 uid HOGE Hoge (test) <hoge@eis.hokudai.ac.jp> ssd XXXXX/XXXXXXXX 2015-07-10 |
それでは, いよいよファイルを暗号化, 復号する実習をしましょう. 以下の例では, hero さんが hoge さんの公開鍵で暗号化し, hoge さんが自分の秘密鍵で復号化する例です.
まず, hero さんが暗号化するためのテキストファイルを作成します.
hero$ echo "hello World" > /home/hero/hello.txt |
hello.txt を hoge さんの公開鍵で暗号化します.
hero$ gpg -a -r hoge@eis.hokudai.ac.jp -e /home/hero/hello.txt --------------------------------------- gpg: XXXXXXXX: この鍵が本当に本人のものである、 という兆候が、 ありません pub XXXXX/XXXXXXXX 2015-07-10 HOGE Hoge (test) <hoge@eis.hokudai.ac.jp> 主鍵の指紋: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX 副鍵の指紋: YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYYY この鍵は、 このユーザーIDをなのる本人のものかどうか確信できません。 今から行うことを * 本当に * 理解していない場合には、 次の質問にはnoと答えてください。 それでもこの鍵を使いますか? (y/N) y |
hello.txt.asc というファイルが作成されているはずなので, 本当に暗号化されているか 中身を見てみましょう!
hero$ lv /home/hero/hello.txt.asc |
無事に暗号化されていれば,あなたには読めなくなっているはずです.
次に hoge さんが hello.txt.asc を自分のホームディレクトリにコピーします.
hoge$ cp /home/hero/hello.txt.asc /home/hoge/ |
最後に hoge さんが hello.txt.asc を自身の秘密鍵で復号する.
hoge$ gpg hello.txt.asc ------------------------------------ 次のユーザーの秘密鍵のロックを解除するには パスフレーズがいります: "HOGE Hoge ( test ) |
hello.txt が生成され, 中身がもとのものと一致すれば成功!
hoge$ cat /home/hoge/hello.txt |
通信経路の途中で改竄されていないかどうかを検証可能なように電子署名をつけることも出来ます.
まず, hero さんが電子署名を施すためのテキストファイルを作成します.
hero$ echo "Check digital sign" > check_digital_sign.txt |
次に, check_digital_sign.txt の内容をそのまま含みアスキー形式の署名を結合した check_digital_sign.asc を作成します.
hero$ gpg --clearsign -s -a check_digital_sign.txt |
中身の確認をする.
hero$ less check_digital_sign.asc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Check digital sign -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFDMO+NNMDDrHHPN+8RAhgEAJ4q8ydiqojZ7xOME5gzdQ5+Mg1fpgCfRTw4 ymTOUqV8xHPDcUl072kyc6E= =zXPA -----END PGP SIGNATURE------ |
hoge さんが署名の検証をします.
hoge$ cp /home/hero/check_digital_sign.asc /home/hoge/ hoge$ gpg --verify check_digital_sign.asc |
内容の改竄がない場合には, 以下のようなメッセージが表示される.
gpg: 2005年09月21日 14時28分45秒 JSTにDSA鍵ID 71CF37EFで施された署名 gpg: “Noriyuki Kitaura (foobar) |
次に, 改竄されたファイルと電子署名の整合性の確認をする.まず, hoge さんがcheck_digital_sign.asc の中身を編集する.
hoge$ cp check_digital_sign.txt check_digital_sign.txt_backup hoge$ vi check_digital_sign.txt "Check digital sign" を "Hack digital sign" などに変えてみる. |
改竄したファイルの署名の検証を行う.
hoge$ gpg --verify check_digital_sign.asc |
内容の改竄がある場合には, 以下のようなメッセージが表示される.
gpg: 2005年09月21日 14時28分45秒 JSTにDSA鍵ID 71CF37EFで施された署名 gpg: “Noriyuki Kitaura (foobar) |
もし自分の秘密鍵を失くしてしまったり, 盗まれたり, 安全上の問題から変更が必要となったときは, 鍵を失効させましょう. まず, 鍵の失効証明書を作成します. 自分用の鍵のペア(秘密鍵と公開鍵)を作成したときには必ず失効証明書を作成して, 紙にプリントアウトするなりCD-ROM などの書き換え不可なメディアに保存して,必要とされる時までオンラインにならない場所に 保管しましょう. 今回はここまではしませんが, 自分が公開鍵を用いて通信をし, 鍵を失効する必要がある場合には, 滞りなく この作業ができるようにしておきましょう.
まずhero さんが鍵の失効証明書を作成します.
hero$ gpg --gen-revoke [公開鍵 のID] > expired_key.asc |
ここで, 出来た鍵の失効証明書を読み込みます.
hero$ gpg --import expired_key.asc |
これで鍵が失効しました. 最後に, 失効済みの鍵自体を削除してしまいましょう.
hero$ gpg --delete-secret-and-public-key [Key のID] |
最終更新日: 2016/07/06 三上 峻 2016年度用に更新 | Copyright © 2000-2016 inex |