Answers:
我认为您的要求是有效的,但另一方面,这也很困难,因为您正在混合使用对称和非对称加密。如果我错了,请纠正我。
推理:
结论:基本上,您想重新使用密码短语进行对称加密。您要提供密码短语的唯一程序是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(基于哈希的消息身份验证代码)。
openssl enc -aes-256-cbc -in my.pdf -out mydata.enc
,解密:openssl enc -aes-256-cbc -d -in mydata.enc -out mydecrypted.pdf
两个命令都要求输入密码。看到man enc
(在Rh / fedora的/ centos的),用于像密钥文件的所有选项,base64编码等
我宁愿使用该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
您最终将得到两个文件,即加密文件和加密密码短语,但是将其放入脚本中将可以很好地工作。
您甚至可以添加一个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用作加密密钥。
更新:使用带有LU块设备的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 的选项使用文件的实际内容作为一个大密码。它不会从文件中读取openssl密钥,而只是使用它。您可以根据需要使用随机字节文件--key-file
。
--key-file
确实是该选项的错误选择名称,应该是--password-file