仅使用 SSH -priv-key 加密文件?

仅使用 SSH -priv-key 加密文件?

假设我想通过知道我的 SSH 私钥密码来加密一个文件,以便只有我可以读取它。我正在共享一个存储库,我想在其中加密或混淆敏感信息。我的意思是,存储库将包含这些信息,但我只会在特殊情况下打开它。

  1. 假设我使用 SSH-agent,是否有一些简单的方法来加密文件以便只有我以后才能打开它?

  2. 我不明白为什么我应该为此使用 GPG,问题这里;基本上我知道密码,并且我只想使用与 SSH 密钥相同的密码来解密文件。这可能吗?

答案1

我认为你的要求是有效的,但另一方面它也很困难,因为你混合了对称和非对称加密。如果我错了,请纠正我。

推理:

  1. 您的私钥的密码只是为了保护您的私钥,而不是其他任何东西。
  2. 这会导致以下情况:您想要使用您的私钥来加密只有您可以解密的内容。你的私钥不是用来做这个的,你的公钥就是用来做这个的。无论您使用私钥加密的内容都可以通过您的公钥(签名)解密,这当然不是您想要的。 (通过您的公钥加密的内容只能通过您的私钥解密。)
  3. 因此,您需要使用公钥来加密数据,但为此,您不需要私钥密码。仅当您想解密时,您才需要您的私钥和密码。

结论:基本上,您想重复使用密码进行对称加密。您想要提供密码的唯一程序是 ssh-agent,并且该程序不会仅使用密码进行加密/解密。该密码仅用于解锁您的私钥,然后就会被遗忘。

推荐:使用openssl encgpg -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

您最终会得到两个文件,即加密文件和加密密码,但将其放入脚本中会很好地工作。

您甚至可以添加一个tar cvf file file.enc file.enc.key来整理。

最理想的情况是,您可以最大化密码短语的大小并更改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.

相关内容