SSH秘密鍵のパスワードを知って、自分だけが読めるようにファイルを暗号化したいとします。機密情報を暗号化または難読化するリポジトリを共有しています。つまり、レポには情報が含まれますが、特別な場合にのみそれを開きます。
SSH-agentを使用している場合、後で自分だけがファイルを暗号化する簡単な方法はありますか?
これにGPGを使用する理由がわかりません。質問 here ;基本的にはパスワードがわかっているので、SSHキーと同じパスワードでのみファイルを復号化したいと思います。これは可能ですか?
あなたの要件は有効だと思いますが、対称暗号と非対称暗号を混在させているため、それも難しいです。私が間違っていたら訂正してください。
推論:
結論:基本的に、対称暗号化にパスフレーズを再利用したいとします。パスフレーズを指定したい唯一のプログラムはssh-agentであり、このプログラムはパスフレーズだけで暗号化/復号化を行いません。パスフレーズは、秘密鍵のロックを解除して忘れた場合にのみ存在します。
推奨:暗号化には、パスフレーズで保護されたキーファイルでopenssl enc
またはgpg -e --symmetric
を使用します。情報を共有する必要がある場合は、両方のプログラムの公開鍵インフラストラクチャを使用して、PKI/Web of Trustを作成できます。
Opensslでは、次のようになります。
$ openssl enc -aes-256-ctr -in my.pdf -out mydata.enc
そして復号化のようなもの
$ openssl enc -aes-256-ctr -d -in mydata.enc -out mydecrypted.pdf
更新:上記のopensslコマンドはデータの改ざんを防止しないことに注意することが重要です。 encファイルを単純にビットフリップすると、復号化されたデータも破損します。上記のコマンドではこれを検出できません。たとえば、SHA-256などの適切なチェックサムでこれを確認する必要があります。これを統合的に行う暗号化の方法があり、これはHMAC(ハッシュベースのメッセージ認証コード)と呼ばれます。
どこにでもあるようなopenssl
ユーティリティを使用したいと思います。
RSA公開鍵と秘密鍵をPEM形式に変換します。
$ openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem
$ openssl rsa -in ~/.ssh/id_rsa -pubout -outform pem > id_rsa.pub.pem
公開鍵でファイルを暗号化する:
$ openssl rsautl -encrypt -pubin -inkey id_rsa.pub.pem -in file.txt -out file.enc
秘密鍵でファイルを復号化する:
$ openssl rsautl -decrypt -inkey id_rsa.pem -in file.enc -out file.txt
しかし、Gillesが上記でコメントしたように、これは公開鍵よりも小さいファイルの暗号化にのみ適しているため、次のようなことができます:
パスワードを生成し、対称的にファイルを暗号化し、公開でパスワードを暗号化して、ファイルにキーを保存します。
$ openssl Rand 64 |
tee >(openssl enc -aes-256-cbc -pass stdin -in file.txt -out file.enc) |
openssl rsautl -encrypt -pubin -inkey id_rsa.pub.pem -out file.enc.key
秘密鍵でパスフレーズを復号化し、それを使用してファイルを復号化します。
$ openssl rsautl -decrypt -inkey id_rsa.pem -in file.enc.key |
openssl enc -aes-256-cbc -pass stdin -d -in file.enc -out file.txt
暗号化されたファイルと暗号化されたパスフレーズの2つのファイルが作成されますが、スクリプトに入れるとうまく機能します。
tar cvf file file.enc file.enc.key
片付けます。
最適には、パスフレーズのサイズを最大化し、Rand 64
を公開鍵のサイズに変更します。
luks/dm-cryptを見てください。適切なオプションを使用して、ssh-private-keyを暗号化キーとして使用できます。
更新:LV-block-deviceでLUKSを使用した暗号化の例(VGシステムでのLVテスト):
KEY=/home/youraccount/.ssh/id_dsa
DEVICE=/dev/system/test
cryptsetup luksFormat $DEVICE $KEY
cryptsetup luksOpen $DEVICE test_crypt --key-file $KEY
これにより、ブロックデバイス/ dev/mapper/test_cryptを使用してデータを保存できます(選択したファイルシステムでフォーマットした後)。
それを取り除くには、アンマウントし、cryptsetup luksClose test_crypt
を使用します。