如何使用 ssh 公钥进行 gpg 加密?

eky*_*yle 6 ssh gnupg public-key-encryption

我在一个名为 的文件中有一个公钥key.pub,其内容如下所示:

ssh-rsa AAAAB...<snip>...t+f klahnakoski
Run Code Online (Sandbox Code Playgroud)

我想用它来加密文件gpg。所需的 shell 命令序列是什么?

我想序列看起来像:

  • 将密钥转换为 gpg 友好格式
  • 发明一些凭据来签署密钥
  • 发明一个用户以方便将密钥添加到密钥环
  • 执行加密

谢谢!

小智 7

RSA 密钥只能用于加密其密钥长度的一部分。例如,2048 位 RSA 密钥只能用于加密大约 245 个字节。

看:

https://security.stackexchange.com/questions/33434/rsa-maximum-bytes-to-encrypt-comparison-to-aes-in-terms-of-security

因此,要加密/解密大量数据(文件),您将使用使用公钥加密的对称密钥,而不是公钥本身。

此外,您不会向公共SSH 密钥添加对称密钥,因为对称密钥是秘密,而公共 SSH 密钥不是秘密。对称密钥应添加到私有SSH 密钥中。

它类似于以下内容:

要转换文件格式,请安装monkeysphere 工具集(Ubuntu)

sudo apt-get install monkeysphere
Run Code Online (Sandbox Code Playgroud)

使用 pem2openpgp 工具将私钥转换为 gpg 格式。管道到 gpg 进行导入。

pem2openpgp userid-ssh@example.com < id_rsa | gpg --import

# Check it's there
gpg --list-secret-keys
Run Code Online (Sandbox Code Playgroud)

编辑您在密钥中的信任级别。

gpg --edit-key userid-ssh@example.com
gpg> trust
Run Code Online (Sandbox Code Playgroud)

添加您需要的信任级别(例如终极)

导入的密钥仅适用于创建证书,不适用于签名或加密。

加密

该密钥是 RSA 密钥,不能用于加密/解密大量数据。如果你想这样做,你必须添加一个对称加密子密钥。加密时,GPG 将使用此子密钥而不是原始 SSH 密钥。

gpg> addkey
Please select what kind of key you want:
   (3) DSA (sign only)
   (4) RSA (sign only)
   (5) Elgamal (encrypt only)
   (6) RSA (encrypt only)
Your selection? 6
Run Code Online (Sandbox Code Playgroud)

现在您可以使用基于SSH 密钥的身份进行加密和解密。

gpg -vv -r userid-ssh@example.com -e -a unencrypted_file.txt
Run Code Online (Sandbox Code Playgroud)

那么这有多大用处呢?

嗯,使用 GPG 生成和管理您的 SSH 密钥作为身份验证子密钥比尝试相反的方法更有意义。事实上,它可以集成到 SSH 而不是 ssh-agent。


nba*_*ari 0

也许ssh-vault可以给你一些想法,它遵循与 PGP 相同的原理,并使用公共 ssh 密钥仅加密密码。