UnixまたはLinuxのコマンドラインに慣れていたら、通常の環境であれば、どこでも余分なインストール作業をせずに出来る方法です(そうでない環境があれば知りたい)。
なお、秘密鍵などを運ぶ場合は、その運び方について、そのサーバーごとに秘密鍵の運び方はポリシーがあるかもしれないので気をつけてください(暗号化してもメールでもslack経由は禁止とかあるかもしれません)。
あと、下記の方法は、複数の人による秘密の搬送は、あまり考えて無いです。「合言葉と反復回数」のみ電話で声で話すなどのやり方を、追加的に必要とします。
以下ですること :
openssl コマンドを使って、安全とされる aes-256-cbcの方式を使って、ヒストリに残らないように、その日だけ覚えておけば良い呪文のような合言葉を使って(例, 1waseda2waseda3waseda)
何か秘密にしたい概ねキロバイト程度のファイルを、base64コマンドを使って、暗号化された平文ファイルに変換し、後で、同じ合言葉で復号する。
さらに、時間が少し掛かるようにして、スパイされそうになっても何分も待たせる心理的シールドの効果も追加する。
- コマンドラインで関数を定義 :
# bash用の関数を定義 :
encode () { openssl aes-256-cbc -e -in <( cat ) -pass pass:$2 -iter $3 | base64 > $1 ; }
decode () { openssl aes-256-cbc -d -in <( base64 -d $1 ) -pass pass:$2 -iter $3 ; }
-
パスフレーズと圧縮するファイルの名前を指定 :
暗号化するときも、複合化するときも、その時に使うサーバーで以下を実行する。つまり、最低、合計2回実行。
read -s AIKOTOBA # ヒストリなどに全く履歴を残さずに合言葉を変数に格納。その日くらいだけ頭に残すので長めがお勧め。
FILE='暗号化ファイルの名前' # 次の項目3.のコマンドラインが理解出来るなら、ここで決めなくても良い。
- 以下の2行のどちらかで、パスフレーズ付きの圧縮または解凍ができる :
cat 元ファイル | encode $FILE $AIKOTOBA 100000000 # ← 暗号化する時の端末で実行。
decode $FILE $AIKOTOBA 100000000 > 元ファイル # ← 復号する時の端末で実行。 > による出力先は元ファイルと違う名前も可。
ここで1億という数は、反復する計算の回数であり、今の計算機なら約1分程度。20億を指定すると約20分(2の31乗以上の数は指定できないようだ)。この反復は、暗号論的に意味が余りないかも知れない。しかし、万一パスフレーズがばれても、反復回数が非常に多いことで計算時間を数分かかるので、スパイにはいつまで経っても計算機の調子が悪いように見える。