paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

GPGでファイルを単独で共通鍵暗号化する

昔映画視聴メモ用のtwitter投稿ツールを作ったのですが、APIキーの保管をどうしようか悩んでいました。

paloma69.hatenablog.com

ツールはGithubに上げているのでいつでも復元できますが、さすがにキーを上げるわけにはいきません。
とは言えPCが壊れたらまたキーを拾ってくるという作業が発生します。
別にtwitterの開発者サイトから拾えるのですが、自分で持ってた方が何かと楽ですよね。

というわけでファイルを暗号化すればどこにおいてもいいんじゃない?という考えのもと実行しようと思います。

Linuxでのファイル暗号化

よく仕事でパスワード付きzip圧縮を行いますが、今回単独ファイルなのでzipで固める必要はありません。
ファイルを開けない点ではいいのですが、どうせなら中身を暗号化したいところです。

Windowsだったらアタッシェケースとかのツールで暗号化できますが、ツールはubuntuで動かしているのでいいツールが欲しいところです。

opensslコマンドで暗号化してもいいんですが、鍵作成などの面倒なことはやりたくありません。

ここでGPGです

よくSoftware DesignでGPGで暗号化云々という記事を見ましたが、公開鍵暗号を使って暗号化、複合化ができるようです。

GnuPGの略でOpenPGPという暗号化ツールの派生らしいです。
(PGPがそれらの元々の暗号化ツールらしい)

しかし、結局鍵作る必要があるのかと思っていたところパスワードのみでも暗号化できるようです。
よかった、これでやってみよう。

ディレクトリ構成

ツールのディレクトリ構成です。

masashi@PC-ubuntu:~/movietweet$ ls -l
合計 32
-rwxrwxr-x 1 masashi masashi 1660  114  2020 README.md
drwxr-xr-x 2 masashi masashi 4096 1011 00:25 __pycache__
-rw-r--r-- 1 masashi masashi  202  94  2019 configure.py # これを暗号化したい
-rw-r--r-- 1 masashi masashi  413  76  2020 gettw.py
-rw-rw-r-- 1 masashi masashi  127  516  2020 posttw.py
-rw-rw-r-- 1 masashi masashi  180  114  2020 requests.txt
-rwxrwxr-x 1 masashi masashi  369  516  2020 tweetapi.py
-rw-r--r-- 1 masashi masashi  925  927 12:00 twmovieinfo.sh

GPGのヘルプをみると-cオプションで出来るようです。

コマンド:
 
 -s, --sign                  署名を作成
     --clear-sign            クリア・テクスト署名を作成
 -b, --detach-sign           分遣署名を作成
 -e, --encrypt               データを暗号化
 -c, --symmetric             暗号化には共通鍵暗号方式のみを使用

…

実施してみる

早速やってみます。

masashi@PC-ubuntu:~/movietweet$ gpg -c configure.py 

これだけ。
デスクトップ環境で行いましたが、パスワード入力のウィザードが出てきました。

f:id:paloma69:20210109192650p:plain

2回入力して完了。

gpgファイルが出来てます。

masashi@PC-ubuntu:~/movietweet$ ls -l
合計 36
-rwxrwxr-x 1 masashi masashi 1660  1月 14  2020 README.md
drwxr-xr-x 2 masashi masashi 4096 10月 11 00:25 __pycache__
-rw-r--r-- 1 masashi masashi  202  9月  4  2019 configure.py
-rw-rw-r-- 1 masashi masashi  272  1月  9 18:35 configure.py.gpg
-rw-r--r-- 1 masashi masashi  413  7月  6  2020 gettw.py
-rw-rw-r-- 1 masashi masashi  127  5月 16  2020 posttw.py
-rw-rw-r-- 1 masashi masashi  180  1月 14  2020 requests.txt
-rwxrwxr-x 1 masashi masashi  369  5月 16  2020 tweetapi.py
-rw-r--r-- 1 masashi masashi  925  9月 27 12:00 twmovieinfo.sh

ファイルタイプ。
暗号化データになってます。

masashi@PC-ubuntu:~/movietweet$ file configure.py.gpg 
configure.py.gpg: GPG symmetrically encrypted data (AES256 cipher)

中身を見てみましょう。

masashi@PC-ubuntu:~/movietweet$ cat configure.py.gpg 
?       ??N?5????>????eN1u?l?L4?????q????Mx????v??MK?p?w3p?x??5h?~?,B?9???????;F???<?1????J:=???|F???w?,\rT(?????TC???;?Ok0?yD8lxv?p??8??~?P?/?????Q????R??Go??|4wq?c?KA?2u??./zYZ?'?"63W?C??&?*?6K+??i?i??84??
                                               ??=?????M}??sJ??7Pmasashi@PC-ubuntu:~/movietweet$ 

ちゃんと暗号化されてますね。 これでは解読できそうもありません。
これなら別の媒体に保存しても大丈夫そうです。

別のマシンでも複合化できるかは別途確認しようと思います。

参考サイト

PGP、OpenPGP、GnuPG 暗号化の違い

GnuPG - Linux Wiki

GPG でファイルをパスワードで暗号化(共通鍵暗号)するときの簡易コマンド一覧 - Qiita