共通鍵暗号

26.8.2. 共通鍵暗号

公開鍵暗号に比べて簡単に使える,共通鍵暗号を使ってみましょう.

平文 (ひらぶん) himitsu.txt を暗号化して, 暗号文 himitsu.txt.asc を作ります. 暗号文を復号して平文を得ます.

このとき,同じ鍵で暗号化と復号ができる対称性から,対称鍵暗号とも言います.

準備 #

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

テキストエディタをつかって himitsu.txt を作成しましょう. 作成したら,中身を確認しましょう.CUIとGUIの両方で確認すると良いです.

  • ファイルブラウザで でファイルを見つけて,ダブルクリック (colab) または Google Chrome などの適切なアプリケーションににドラッグアンドドロップする
  • ターミナルで,cat コマンドで内容を確認する.cat に続けて,空白とファイルパスをタイプしてエンターを押す.ホームディレクトリに作った場合は,cat himitsu.txt となる.

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

暗号化 #

himitsu.txt という平文を暗号化して himitsu.txt.asc という暗号文ファイルを新たに作成しましょう.
共通鍵暗号を用いて暗号化する手順は,gpg -ca ファイル名 です.
  • -cac は,共通鍵で暗号化するという意味です.a は ASCII armor の意味で,出力をASCIIとして読める形式に整えます.
  • ファイル名の末尾の .txt.asc は見慣れないかもしれませんが,拡張子 .txt の末尾に,新たな拡張子 .asc を追加して,元のファイルとの関係を明瞭に表現する意図です.なお asc は ASCII の頭文字ですが,内容を保証する者ではありません.
gpg -ca himitsu.txt

Colab セルでは,共通鍵のキーボード入力が難しいのであらかじめファイルに保存しておいて,それを使うよう指示します. --batch --passphrase-file weak-passphrase.txt が追加部分で,weak-passphrase.txt がパスフレーズを書いたファイル名です.

play_circle
%%shell
gpg -ca --batch --passphrase-file weak-passphrase.txt himitsu.txt

どのような場合でも,操作対象のファイルである himitsu.txt は最後に配置します.
ターミナルでの実行例

ターミナルで実行する場合,「共通鍵」に相当する文字列を入力します.それらの文字列は,ターミナルにタイプする際,表示されません.また,デモにも表示されていません.

ターミナルで,共通鍵の入力で何度も聞かれる場合は,8文字以上英数字記号を混ぜるなど複雑にすることで解決することがあります.あるいは,gpg -ca の代わりに gpg --pinentry-mode loopback -ca とオプションを追加して対応してください.(コマンド入力はコピーペーストでも良いです)

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

復号 #

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

himitsu.txt.asc を復号した内容を画面に表示します.このとき,暗号化で使われた共通鍵をキーボードから入力します.

gpg -d himitsu.txt.asc

colab で行うには,暗号化の時と同じであらかじめ鍵をファイルに保存しておいて,それを使って復号するよう指示します. --batch --passphrase-file weak-passphrase.txt が追加部分でした.

gpg -d --batch --passphrase-file weak-passphrase.txt himitsu.txt.asc

復号した内容を保存する場合は,-o decoded.txt などと復号後に生成するファイル名を変更しましょう
gpg -o decoded.txt -d himitsu.txt.asc

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

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

教員の指示に従って,指定のパスフレーズで暗号化したファイルを,UTOLに添付しましょう. ダウンロードしたファイルを,復号してみましょう.

手元のファイルをcolab に送るには,左のサイドバーから右クリックで表示される upload メニューを使います.

応用 #

テキストファイルだけでなく,PDFなども暗号化・復号できます. その場合は,バイナリーファイルなので,cat による確認はできません.復号後に GUI アプリケーションで開くことはできます.

復号の際はgpg -d -o output.pdf などとと出力ファイル名の拡張子を,想定するものに指定 してください.
はじめての検証 previous page 26.8.2. 共通鍵暗号 next page 公開鍵暗号
このサイトは開発版の はいぱーワークブック です.