当您访问google.com时,“主题公钥算法”下的证书显示:
Elliptic Curve Public Key
ANSI X9.62 elliptic curve prime256v1 (aka secp256r1, NIST P-256)
Key size: 256 bits
显然是ECDSA。我以为ECDSA仅用于签名/签名,而不用于 进行密钥交换。我想念什么?
答案 0 :(得分:1)
该密钥没有限制。从技术上讲,大多数椭圆曲线密钥(省略了Bernstein)都可以用于ECDSA签名,ECDH或ECMQV密钥协议或ECIES加密。 X9.62建立了编码,因为它是第一次发布,但是其他操作使用相同的曲线,关键值和编码。 (许多应用程序还使用X9.62最初创建的点编码,但是这里有一些变化。)
但是证书确实如此。。证书(还)将KeyUsage extension设置为digitalSignature(并将ExtendedKeyUsage extension设置为id-kp-serverAuth)。这意味着当在TLS中使用时,只能用于ECDSA签名来认证服务器。
TLS / SSL通常使用仅签名证书。如今,大多数TLS连接都使用“临时”密钥(不在证书中)来达成密钥协议,并与进行签名证书的密钥(或更确切地说,是通过与公钥证书匹配的私钥)来进行服务器身份验证,以及可选的(但很少有)客户端身份验证。 这提供了(Perfect) Forward Secrecy ,这意味着即使服务器私有密钥后来遭到破坏,先前会话的记录也无法解密,因此其内容仍然是安全的(至少免受此攻击; SSL / TLS仅涵盖传输,并且永远不会在会话期间或会话结束后在任何端点提供保护。在SSL成立之初,人们通常并不在意PFS,但是在斯诺登让很多人意识到大规模监视计划(尤其是经理,老板,用户和客户等非技术人员)之后,这些选择变得更加广泛必需或推荐并使用。
对于TLS1.0-1.2(和SSL3,但您不应再使用它,因为它已损坏),密钥协议和签名(服务器身份验证)在密码套件中链接:所有使用ECDSA证书进行服务器身份验证的密码套件ECDHE密钥协议,以及使用(整数)DSA *证书进行服务器身份验证的所有密码套件都使用(整数)DHE密钥协议; DHE中的E和ECDHE中的最后E是短暂的。由于RSA同时支持签名和加密,因此可以将RSA证书密钥 用于密钥传输(加密),但是不再建议这样做,也可以将其用于签署任何一种临时密钥协议。 (*对于歇斯底里的葡萄干,SSL / TLS标准使用DSS表示DSA。)对于TLS 1.3,现在分别选择了这些算法,但是实际上在公共网上需要使用一些临时密钥协议,并且几乎需要使用一些签名证书总是如此,因此它们将可能与现在相同的组合使用,只是不再允许仅使用RSA的密钥加密。
请参阅:
https://security.stackexchange.com/questions/20803/how-does-ssl-work(伟大的Ursine史诗)
https://security.stackexchange.com/questions/3638/security-of-pki-certificates-certificate-authorities-forward-secrecy
https://security.stackexchange.com/questions/8343/what-key-exchange-mechanism-should-be-used-in-tls
https://security.stackexchange.com/questions/35471/is-there-any-particular-reason-to-use-diffie-hellman-over-rsa-for-key-exchange