22 ssh encryption
假设我想通过知道我的 SSH 私钥密码来加密一个文件,以便只有我可以读取它。我正在共享一个存储库,我想在其中加密或混淆敏感信息。我的意思是 repo 将包含信息,但我只会在特殊情况下打开它。
假设我正在使用 SSH 代理,是否有一些简单的方法可以加密文件,只有我以后才能打开它?
我不明白为什么我应该为此使用 GPG,请在此处提问;基本上我知道密码,我只想用与我的 SSH 密钥相同的密码解密文件。这可能吗?
vas*_*uez 27
我认为您的要求是有效的,但另一方面也很困难,因为您正在混合对称和非对称加密。如果我错了,请纠正我。
推理:
结论:基本上你想重用你的密码进行对称加密。您想要提供密码的唯一程序是 ssh-agent,该程序不会仅使用密码进行加密/解密。密码仅用于解锁您的私钥,然后被遗忘。
建议:使用openssl enc
或gpg -e --symmetric
使用密码保护的密钥文件进行加密。如果您需要共享信息,您可以使用两个程序的公钥基础设施来创建 PKI/信任网络。
使用openssl,是这样的:
$ openssl enc -aes-256-ctr -in my.pdf -out mydata.enc
Run Code Online (Sandbox Code Playgroud)
和解密类似的东西
$ openssl enc -aes-256-ctr -d -in mydata.enc -out mydecrypted.pdf
Run Code Online (Sandbox Code Playgroud)
更新:需要注意的是,上述 openssl 命令不能防止数据被篡改。enc 文件中的简单位翻转也会导致解密数据损坏。上面的命令无法检测到这一点,您需要使用例如 SHA-256 之类的良好校验和进行检查。有一些加密方法可以以集成的方式执行此操作,这称为 HMAC(基于哈希的消息身份验证代码)。
kwa*_*ick 21
我更喜欢使用该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
Run Code Online (Sandbox Code Playgroud)
使用您的公钥加密文件:
$ openssl rsautl -encrypt -pubin -inkey id_rsa.pub.pem -in file.txt -out file.enc
Run Code Online (Sandbox Code Playgroud)
使用您的私钥解密文件:
$ openssl rsautl -decrypt -inkey id_rsa.pem -in file.enc -out file.txt
Run Code Online (Sandbox Code Playgroud)
但是,正如 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
Run Code Online (Sandbox Code Playgroud)
使用您的私钥解密密码短语并使用它来解密文件:
$ 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
Run Code Online (Sandbox Code Playgroud)
你最终会得到两个文件,你的加密文件和你的加密密码,但是把它放在一个脚本中它会很好地工作。
你甚至可以添加一个tar cvf file file.enc file.enc.key
来整理。
最理想的是,您可以最大化密码短语rand 64
的大小并更改为公钥的大小。
看看luks/dm-crypt。您可以使用适当的选项将 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
Run Code Online (Sandbox Code Playgroud)
这应该生成一个块设备/dev/mapper/test_crypt,您可以使用它来存储您的数据(在使用您选择的文件系统对其进行格式化之后)。
要摆脱它,请卸载它,然后使用cryptsetup luksClose test_crypt
.
归档时间: |
|
查看次数: |
24484 次 |
最近记录: |