GnuPG について (6) 対称暗号で使うオプション

GnuPG は嫌になるくらいオプションの多いソフトウェアだ。その中で、特に知っておいたほうがいいオプションをいくつか紹介する。なお、公開鍵暗号を使う際も、これらのオプションを使う場面は出てくる。

ここで紹介するのは「暗号方式の設定」「圧縮レベルの設定」「暗号ファイルのテキスト化」の3つだ。

・暗号方式の設定

GnuPG は GnuPG 独自の暗号方式を実装しているのではなく、既存の暗号方式を利用しているだけであり、状況に応じてオプションでこれらの暗号方式の使い分けができるというのが、一つのポイントになっている。
GnuPG では、何も指定しないと CAST5 が使用される。暗号方式を変更したい場合は --cipher-algo オプションを使用する。

実際は、このオプションを使用する前に、手元の gpg.exe でどのような暗号方式が使えるのかを知っておく必要がある。

"C:\Program Files\GNU\GnuPG\gpg.exe" --version
とやると、gpg.exe のバージョン情報、ライセンス情報に続いて

Home: C:/Documents and Settings/(ユーザー名)/Application Data/GnuPG
サポートしているアルゴリズム:
公開鍵: RSA, RSA-E, RSA-S, ELG-E, DSA
暗号法: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
ハッシュ: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

という情報が表示される。
ここで、暗号法というところに表示されている 3DES やら CAST5 やらといったのが、対称暗号で利用できる暗号方式になる。

"C:\Program Files\GNU\GnuPG\gpg.exe" --cipher-algo AES256 -o test.gpg -c test.txt

というように、暗号法で表示された文字列を直接指定すればよい。この場合、暗号法として AES256 が使用される。
どの暗号法がいいのかについては、あまりに難しい話になるので割愛するが、現時点では「AES256」にしておくのが無難だろうと言っておく。


・圧縮レベルの設定

既に gpg.exe や JanusDG などを使ったことのある人なら、暗号化後のファイルのほうが、暗号化前よりも小さくなっていることに気付いているかと思う。もちろん、元データがあまりに小さい場合は暗号化後の方が大きくなることもありえるが。
GnuPG では、デフォルトの設定では、元のデータを圧縮してから暗号化するようになっている。
余談になるが、「圧縮してから暗号化」と「暗号化してから圧縮」では圧縮率が大きく異なる。ファイルサイズを小さくしたければ「先に圧縮して、それから暗号化」が鉄則だ。良い暗号化ファイル(クラックされにくいという意味で)は、ファイルの中身がほどよく散らかっているため既存の圧縮アルゴリズム(似たデータを重複しないようにまとめることでファイルサイズを小さくするのが基本)ではうまく圧縮できないのだ。
この圧縮レベルをコントロールするのが -z オプションだ。

"C:\Program Files\GNU\GnuPG\gpg.exe" -z 0 -o test.gpg -c test.txt
で無圧縮、

"C:\Program Files\GNU\GnuPG\gpg.exe" -z 9 -o test.gpg -c test.txt
で最高レベル圧縮となる。
--compress-algo オプションで圧縮方式を選ぶこともできる。何もしないと「ZLIB」が使われる。

どの圧縮方式、どの程度の圧縮レベルがいいのかについては、これもまた難しい話になる。
ファイルをとにかく小さくしたければ、圧縮レベル 9 で、圧縮方式「BZIP2」を選ぶことになる。
逆に、ファイルサイズよりも処理速度を優先したければ圧縮レベル 0 を選ぶことになる。事前に圧縮されたと分かっているファイルを GnuPG で暗号化する際には、圧縮レベル 0 にしておかないと、時間ばかりかかってろくに圧縮されないので要注意だ。

結局のところ、特に事情がなければ圧縮については「何も指定しない」でデフォルトのままにしておくのがバランスが取れているかもしれない。


・暗号化ファイルのテキスト化

ちょっと変わったオプションで、GnuPG は暗号化後のファイルを完全なテキストデータにしてしまうというオプションを持っている。 -a オプションだ。こうやってテキスト化されたファイル形式は特に Ascii Armored 形式と呼ばれている。私は未だ「Ascii Armored」の適切な日本語訳を見たことがない。
この機能については試したほうが早いので

"C:\Program Files\GNU\GnuPG\gpg.exe" -a -o test.gpg -c test.txt
とやってみて、出来た test.gpg をメモ帳などで開いて見て欲しい。

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.8 (MingW32)

jA0EAwMCaxBOXKEzl4tgyTPJLbgF6nikFo9bhjQ4lQgG1hhLTFyjsANjL8yALGUf
jafXfKdfZrpOJEnUvaYIbmhAue4=
=yV43
-----END PGP MESSAGE-----

ファイルの中身はこのような感じになっているはずだ(テスト等の関係で私の手元の GnuPG は一つバージョンが古いものになっているので注意)。
このオプションを使えば、元のデータがバイナリファイルであったとしても、暗号化後のデータはテキスト化される。
こうすれば、このまま電子メールの本文の部分に貼り付けてデータを送信してしまうことができる。
添付ファイル禁止の職場からバイナリデータを持ち出す際に悪用されることもあるので、管理者は要注意だ。

こだわる人は、この Ascii Armored 形式を使用する際、ファイルの拡張子を「.gpg」ではなく「.asc」にしていたりする。
なお、このデータを復号する際は、普通に「~gpg.exe" -o test2.txt -d test.gpg」とやればよい。テキスト形式かどうかは gpg.exe が自動的に判別してくれる。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック

  • GnuPG

    Excerpt: 解説ページ tips GPG鍵の生成が進まない 解説ページ http://mail2.nara-edu.ac.jp/~asait/crypto/GnuPG/GnuPG.h.. Weblog: Transvirtual PukiWiki Plus! (PukiWiki/TrackBack... racked: 2008-11-15 00:47