GPGはもう古い?Linuxでファイルをシンプルに暗号化する「age」の使い方ガイド

Security tutorial - IT technology blog
Security tutorial - IT technology blog

GPGという悩みの種と、その理想的な代替案

10以上のサーバーシステムをセキュリティ監査した結果、ある矛盾に気づきました。GPG(GNU Privacy Guard)は暗号化の黄金律とされていますが、実際には日常的に使っている人はほとんどいません。理由は至ってシンプルで、GPGは使いにくすぎるからです。キーリングの管理や信頼(trust)の設定、呪文のような長いコマンドを覚えるのは、SysAdminにとって苦行でしかありません。

中には、GPGを触るくらいなら強度の低いZIPパスワードで済ませてしまう人も見てきました。そこで登場するのがage(Actually Good Encryption)です。元GoogleのセキュリティエンジニアであるFilippo Valsorda氏によって開発されたageは、ミニマリズムの哲学に基づいています。軽量で設定不要、すると何より「使い間違い」がほぼ起きない設計になっています。

30秒でageを導入する

理屈はさておき、まずはインストールしてみましょう。ageはシステムの設定を変更することなく、すぐに実行できるように設計されています。

1. クイックインストール

UbuntuやDebianの場合は、以下のコマンドを実行するだけです:

sudo apt update && sudo apt install age

macOSユーザーなら、Homebrewが最も手っ取り早いです:

brew install age

2. キーペア(公開鍵・秘密鍵)の作成

複雑なキーリング管理は忘れましょう。ageでは、鍵は単なるプレーンテキストファイルです。

age-keygen -o my_key.txt

my_key.txtファイルを開くと、以下のような内容が表示されます:

# 作成日: 2023-10-27T10:00:00+07:00
# 公開鍵: age1ql3z7hjy74nz3t2... (暗号化ファイルを受け取るためにこれを共有します)
AGE-SECRET-KEY-1... (これは秘密鍵です。厳重に保管してください)

3. 実践:暗号化と復号

公開鍵を使ってdatabase_backup.sql暗号化してみましょう:

age -r age1ql3z7hjy74nz3t2... -o backup.sql.age database_backup.sql

復号するには、保存した秘密鍵ファイルを指定するだけです:

age -d -i my_key.txt backup.sql.age > backup_restored.sql

なぜ私はGPGではなくageを選ぶのか?

自動化スクリプトを運用する際、GPGはパスフレーズ入力のためにユーザーの対話(tty)を求めることが多く、エラーの原因になりがちです。ageはこの問題を根本的に解決します。手動の介入なしで、自動化パイプラインの中でスムーズに動作します。

  • 設定ファイルにおさらば: GPGは鍵を~/.gnupgに保存しますが、ここはパーミッションエラーが起きやすい場所です。ageはそんなことは気にしません。鍵ファイルを置いた場所で、そのまま動作します。
  • 最新のアルゴリズム: 古いRSAの代わりに、ageはX25519とChaCha20-Poly1305を採用しています。これらのアルゴリズムは高速なだけでなく、鍵の長さが短いため、コピー&ペーストも容易です。
  • パイプ処理への最適化: ageはLinuxのパイプとの相性が抜群です。一時ファイルをディスクに書き出すことなく、データをRAM上で直接処理できます。

DevOpsのための3つの実践的なシナリオ

以下は、業務をより効率化するために私がageを活用している方法です。

1. パスワード暗号化でSlackやTelegram経由で送信する

鍵を作成せずに同僚に設定ファイルを素早く送りたい場合は、共通鍵(パスワード)暗号化を使用します:

age -p -o config.age config.json

2. 既存のSSH鍵を活用する(非常に便利)

これが最も便利な機能です。自分のSSH公開鍵(id_ed25519.pub)をそのまま暗号化に利用できます。さらに、GitHubから同僚の鍵を取得して使うことも可能です:

curl https://github.com/username.keys | age -R - -o secret.age data.txt

3. 中間ファイルなしでディレクトリをバックアップする

圧縮してから暗号化するのではなく、tarからのデータストリームを直接ageに流し込むことができます。これにより、数十GBのフォルダをバックアップする際の一時的なディスク使用量を50%削減できます:

tar cvz /var/www/html | age -r age1ql3z... > website_backup.tar.gz.age

「策士策に溺れる」ことのないよう注意点

ツールがいかに優れていても、使い方が間違っていれば危険です。5年間のシステム運用の経験から得た、いくつかの重要なアドバイスを紹介します:

  1. 分離の原則: my_key.txtを暗号化されたデータと同じサーバーに置かないでください。ハッカーに侵入された場合、錠前と鍵を同時に渡すことになります。
  2. スマートな鍵管理: 秘密鍵の内容はBitwardenやVaultなどのパスワードマネージャーに保存してください。/tmpディレクトリなどに放置してはいけません。
  3. コマンド履歴への配慮: パスワード(フラグ -p)を使用する際は、コマンドの先頭にスペースを入れて実行してください(Bashの場合)。これにより、.bash_historyに履歴が残るのを防げます。

ageに切り替えてから、ファイルのセキュリティ対策を面倒に感じることがなくなりました。これは「一つのことを、完璧にこなす」という Unix の哲学を忠実に守っています。GPGの煩雑さに疲れているなら、今すぐageを試してみてください。もう元には戻れなくなるはずです。

Share: