【发布时间】:2011-09-14 07:13:48
【问题描述】:
我听说您可以使用私钥来加密数据作为数字签名的一种方法。换句话说,您可以使用您的私钥加密消息。
在文本中,他们似乎总是说只有公钥可以加密,而私钥可以解密文本。
我假设这是一个错误的选择。一个密钥的单个实例是否只能做一个或另一个,但哪个密钥是公共或私有的不是它的功能问题,而是它的分布或缺乏它。
【问题讨论】:
标签: cryptography public-key-encryption
我听说您可以使用私钥来加密数据作为数字签名的一种方法。换句话说,您可以使用您的私钥加密消息。
在文本中,他们似乎总是说只有公钥可以加密,而私钥可以解密文本。
我假设这是一个错误的选择。一个密钥的单个实例是否只能做一个或另一个,但哪个密钥是公共或私有的不是它的功能问题,而是它的分布或缺乏它。
【问题讨论】:
标签: cryptography public-key-encryption
对于初学者来说,术语令人困惑。 RSA 可用于 2 种不同的加密功能:数据加密和数字签名。
对于数据加密,您 加密数据使用接收者的公钥; 他们 解密 使用他们的私钥。请注意,由于 RSA 的各种限制,被加密和解密的“数据”通常只是对称算法的密钥。
对于数字签名,您 签署使用您的私钥; 他们 验证使用您的公钥对数据的签名。同样,RSA 的各种限制意味着 RSA 算法实际操作的通常是数据的安全散列。
有时签名操作被称为“用私钥加密”,而验证操作被称为“用公钥解密”。我认为这只会让人们感到困惑,所以我总是更喜欢在这种情况下使用签名和验证的术语。此外,“加密”和“解密”对于 DSA 和 ECDSA 等其他签名算法毫无意义。
【讨论】:
You CAN generate public key from private key.
你不能从公钥生成私钥(嗯,你可能可以,但这在计算上非常昂贵)。
这就是两者的区别。由于算法的工作方式,它们不可互换(因此,例如,您不应该公开您的私钥,并将公钥留给自己)。
以RSA 为例。算法基础是整数分解问题。你选择两个大整数 p 和 q 并将它们相乘得到 n = p*q。然后创建公钥和私钥:
然后:
从私钥计算公钥很容易:
n = p*q
e = d^(-1) mod φ(n),其中 φ(n) = (p-1)(q-1)
【讨论】:
您将您的加密密钥公开,并将您的解密密钥保密。这样,任何人都可以向您发送只有您可以解密的加密数据。
如果您反过来这样做,那么您将是唯一能够加密您的数据的人,但任何人都可以解密它。这是没有意义的。如果每个人都可以解密您的消息,您不妨不加密地发送它。加密消息然后公开解密密钥是没有意义的。
【讨论】:
加密有两种类型,一种是对称的,另一种是非对称的。在对称中,用于加密和解密的密钥是相同的。在非对称中,用于加密的密钥是公钥,解密是私钥..
所有工作都基于密钥保密的原则。在通常用作 SSL / TLS 协议一部分的数字签名中,使用非对称加密来验证和共享主密钥,该主密钥进一步用于加密通信线路.
【讨论】: