共通鍵暗号の体験

14.7.2. 共通鍵暗号の体験

GnuPGを利用して、共通鍵暗号による暗号化と復号を試してみましょう。

個人PCでの演習

macなら homebrew を導入後に brew install gpg、 Windows なら GitBash がお勧めです。

どちらの場合も、インストール後にターミナルから gpg --version とタイプして、バージョンが表示されれば成功です。Command not found の場合は失敗。 右図は Windows の gitbash の例。
macOS の homebrew でインストールした場合で パスの設定がうまくいっていないと、gpg の代わりに /opt/homebrew/bin/gpg あるいは /usr/local/brew/bin/gpg とフルパスで指定すると動作する場合があります。

動作確認 #

動作確認を兼ねて、インストールされているソフトウェアのバージョンを確認します。 次のように1行目に GnuPG のバージョン2.2 程度が表示されていれば、OKです。

gpg --version
gpg (GnuPG) 2.2.27
libgcrypt 1.8.7
Copyright (C) 2021 Free Software Foundation, Inc.
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/1230045600/.gnupg
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
      TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

平文の準備 #

平文(ひらぶん)として、簡単な文を書いたテキストファイルを作成します。慣れたらPDF等でも良いですが、初めはテキストファイル (rtfではなく、純粋なテキストファイル)を使います。

mi ( 12.6. テキストファイルとmi ) を使って himitsu.txt を作成しましょう。 作成したら、cat コマンドでターミナルから、内容を確認しましょう。cat に続けて、空白とファイルパスをタイプしてエンターを押します。ホームディレクトリに作った場合は、cat himitsu.txt 他の場所や他の名前のファイルの場合は、ファインダでドラッグアンドドロップすると便利でしょう。 (この説明で分からなかった場合は、 13. コマンドの基本 も参照)

以後のコマンドでは、cat の代わりに gpg などのコマンドを使います。操作対象のファイルを指定する方法は、cat の時と同じです。

暗号化 #

共通鍵暗号を用いて暗号化する手順は、gpg -ca ファイル名 です。

作成したhimitsu.txt という平文を gpg -ca というコマンドで暗号化して himitsu.txt.asc という暗号文ファイルを新たに作成します。

gpg -ca himitsu.txt

コマンド入力語「共通鍵」に相当する文字列を入力しますが、デモには録画されていません。ターミナルにタイプする際も表示されません。

暗号文を cat himitsu.txt.asc で表示すると、人には読めなさそうな雰囲気であることは分かります。

共通鍵を入力する操作がうまくいかない場合は、gpg -ca の代わりに gpg --pinentry-mode loopback -ca とオプションを追加してしてみてください。(コマンド入力はコピーペーストでも良いです)
オプションの -a と 拡張子 .asc は ASCII の意味です。 このオプションにより、暗号化後の文字列がテキストとして表示可能な符号化が使われます。トラブル対応がしやすいのでお勧めです。

復号 #

暗号化されたファイルを復号するには、gpg -d himitsu.txt.asc のように、gpg -d の後に対象ファイルを指定してください。

パスフレーズを聞かれたら、暗号化の際に用いた文字列 (共通鍵) を入れると復号できます。

例外として、暗号化直後に自分で復号した場合は、パスフレーズを聞かれません。gpg-agent という鍵を一時的に記憶する仕組みが働いているためです。ログアウト・ログインしなおしてから復号を試みると、自分の場合でもパスフレーズを聞かれます。
暗号化で必要だった場合は、復号の際にも同様にgpg --pinentry-mode loopback -d とオプションを追加してください。

授業で指定された ITC-LMS に提出したり、 電子メールで友達に暗号化されたファイルを添付で送って復号してもらいましょう。 受け取った側は、添付ファイルを保存して、保存したファイルをファインダで開いてから、ターミナルにドラッグアンドドロップすると対象ファイルの指定を楽にできるでしょう。

PDFやワードファイルなど (テキストファイル以外) を暗号化することもできます。その際は復号に gpg -d -o output.pdf などとと出力ファイル名を指定する -o オプションを追加します。復号後に適切なアプリケーションでそのファイルを開いてください。
暗号と署名 共通鍵暗号の体験 公開鍵暗号と署名の検証