The*_*ish 6 pgp rsa gnupg openpgp
我来自使用带有 OpenSSL 的普通旧 RSA 来满足我所有的非对称加密需求,我学到了相当多的知识,但是我很难围绕 OpenPGP 协议进行思考。因此,这将是几个问题。
在我的 Debian 盒子中,使用 GnuPG,在当前钥匙串中创建主密钥时,我注意到子密钥的默认创建。在阅读了一些之后,我了解到 GnuPG 以这种方式自动管理密钥;严格用于签名的主密钥和严格用于加密的子密钥。这让我相信他们只是为私钥和公钥使用了不同的名称:主密钥(如私钥)用于签署只有子密钥(公钥)可以解密的数据,但子密钥(公钥)只能加密数据,然后只能通过主密钥(私钥)解密。我在这个假设中是否正确,还是它们完全是 2 个单独的密钥对?
如果它们是两个单独的密钥对,那么什么在数学上将子密钥绑定到主密钥?
是否只是 GnuPG 使用这种方法,其中会自动创建子密钥以进行加密,还是 OpenPGP 协议强制要求这样做?
当我将密钥上传到密钥服务器时,上传的是哪个密钥,我的主密钥还是子密钥?或两者?
当我使用该--export
功能时,当我指定我的 UID 时会导出哪个 OpenPGP 密钥?
主密钥(如私钥)用于签署只有子密钥(公钥)可以解密的数据,但子密钥(公钥)只能加密数据,然后只能由主密钥解密(私钥)。我在这个假设中是否正确,还是它们完全是 2 个单独的密钥对?
您还没有完全正确地掌握公钥/私钥(也称为非对称)密码学的概念。每组公钥和私钥都是分开的,您发布公钥以便其他人可以使用它并将私钥保密。私钥发出的签名可以通过公钥进行验证,使用公钥加密的消息可以用私钥解密。OpenPGP 中的主键和子键对之间没有直接关系,它们是完全不同的键对。
是否只是 GnuPG 使用这种方法,其中会自动创建子密钥以进行加密,还是 OpenPGP 协议强制要求这样做?
GnuPG 中的默认设置是您有一个用于认证和签名的主密钥对,而加密子密钥仅用于加密。使用 RSA,您还可以生成支持所有这些操作的主键(使用 GnuPG 和--expert
标志,您可以!)。这主要是因为 DSA 和 Elgamal 等其他算法仅支持其中一种操作(DSA 仅用于签名,Elgamal 用于加密),您需要使用不同的密钥。
对于不同的用途使用不同的密钥也有一些优势:考虑发现一个缺陷,它允许在某些条件下根据签名计算私钥。虽然您的签名密钥将成为目标,但加密子密钥是另一个并且不受此攻击的攻击。有些人甚至考虑将主密钥限制为仅用于认证,并添加两个子密钥对是最佳做法,一个用于签名,一个用于加密。
如果它们是 2 个单独的密钥对,那么在数学上将子密钥绑定到主密钥的是什么?
在 OpenPGP 中,创建子密钥时会发出一种特殊的绑定签名。能够签名的子密钥也可以在主密钥上发出这样的绑定签名。这些特殊签名在RFC 4880、OpenPGP、5.2.1中定义。签名类型:
0x18: Subkey Binding Signature
This signature is a statement by the top-level signing key that
indicates that it owns the subkey. This signature is calculated
directly on the primary key and subkey, and not on any User ID or
other packets. A signature that binds a signing subkey MUST have
an Embedded Signature subpacket in this binding signature that
contains a 0x19 signature made by the signing subkey on the
primary key and subkey.
0x19: Primary Key Binding Signature
This signature is a statement by a signing subkey, indicating
that it is owned by the primary key and subkey. This signature
is calculated the same way as a 0x18 signature: directly on the
primary key and subkey, and not on any User ID or other packets.
Run Code Online (Sandbox Code Playgroud)
当我将密钥上传到密钥服务器时,上传的是哪个密钥,我的主密钥还是子密钥?或两者?
当我使用该
--export
功能时,当我指定我的 UID 时会导出哪个 OpenPGP 密钥?
通常,在 GnuPG 中,键 ID 和 UID 总是解析为主键。所有导出操作(上传到密钥服务器也被视为导出)还会导出您的密钥上的子密钥、用户 ID 和证书。其他操作(如签名和加密)也存在类似的情况。如果你真的想表示一个操作的子键,你必须!
在子键后面添加(例如。gpg --recipient 0xDEADBEEF! --encrypt
)。
归档时间: |
|
查看次数: |
2503 次 |
最近记录: |