回答:
要件は有効だと思いますが、対称暗号化と非対称暗号化が混在しているため、一方で難しいこともあります。私が間違っている場合は修正してください。
推論:
結論:基本的に、対称暗号化のためにパスフレーズを再利用したいと思います。パスフレーズを指定したいプログラムは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 enc -aes-256-cbc -in my.pdf -out mydata.enc
、decrypt with:openssl enc -aes-256-cbc -d -in mydata.enc -out mydecrypted.pdf
両方のコマンドがパスワードを要求します。man enc
キーファイル、base64エンコーディングなどのすべてのオプションについては(rh / fedora / centosを参照)
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
公開キーのサイズを変更します。
KEYLEN_BYTES=$(ssh-keygen -l -f $PRIV_KEY | awk '{printf("%d", ($1 - 96) / 8)}')
。キーの長さを自動生成するためです。ssh-keygenの最小キー長が768ビットである場合、これは依然として最小の対称キーが672ビット、つまり84バイトになります。
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
。
"$ sudo apt-get install cryptmount crypt-setup; cat '...' > bin/myEncrypt.sh; chmod +x bin/myEncrypt.sh; ./bin/myEncrypt.sh; ...; ..."
正しく理解できれば、この方法はファイルシステムレベルの暗号化です。umount / mountが必要なfsを暗号化しますか、これを読み間違えていますか?
--key-file
cryptsetup のオプションは、ファイルの実際のコンテンツを1つの大きなパスワードとして使用します。ファイルからopensslキーを読み取らず、そのまま使用します。--key-file
必要に応じて、ランダムバイトのファイルを使用できます。
--key-file
本当にオプションの選択が不十分な名前である必要があります--password-file