私が読めるようにSSH秘密鍵のパスワードを知り、ファイルを暗号化したいとしましょう。機密情報を暗号化または難読化したいストレージを共有しています。リポジトリには情報が含まれていますが、特別な場合にのみ開きます。
SSHエージェントを使用していると仮定すると、後で自分で開くことができるようにファイルを暗号化する簡単な方法はありますか?
なぜGPGを使うのかわかりません。質問ここ;基本的に私はパスワードを知っており、SSHキーと同じパスワードを使用してファイルを復号化したいと思います。可能ですか?
答え1
あなたの要件は妥当だと思いますが、対称暗号化と非対称暗号化を混在しているため、難しいこともあります。間違っていたら訂正してください。
推理:
- 秘密鍵のパスワードは秘密鍵を保護するためのものであり、他のものではありません。
- これにより、次のような状況が発生します。秘密鍵を使って自分だけが復号できるものを暗号化しようとしています。これには秘密鍵は使用されず、公開鍵が使用されます。秘密鍵で暗号化したものは何でも公開鍵(署名)で復号化できますが、これはもちろん望むものではありません。 (公開鍵で暗号化された内容は秘密鍵でのみ復号できます。)
- したがって、データを暗号化するには公開鍵を使用する必要がありますが、これには秘密鍵のパスワードは必要ありません。復号化には秘密鍵とパスワードのみが必要です。
結論として:デフォルトでは、対称暗号化のためにパスワードを再利用しようとしています。パスワードを提供する唯一のプログラムはssh-agentであり、そのプログラムは暗号化/復号化にパスワードのみを使用しません。このパスワードは秘密鍵のロック解除にのみ使用され、その後は忘れてしまいます。
おすすめ:パスワードで保護されたキーファイルをopenssl enc
使用して暗号化します。gpg -e --symmetric
情報を共有する必要がある場合は、両方のプログラムの公開鍵インフラストラクチャを使用してPKI /信頼ネットワークを作成できます。
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(ハッシュベースのメッセージ認証コード)と呼びます。
答え2
私はこの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
1つを追加して整理することもできます。
理想的には、パスワードのサイズを最大化し、rand 64
公開鍵のサイズを変更できます。
答え3
見ているルクス/dm-暗号化。適切なオプションを使用して、ssh-private-key を暗号化キーとして使用できます。
アップデート:LUKSおよびLVブロックデバイスを使用した暗号化の例(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
。