我一直在学习ECC的基本原理,在这一点上我有点困惑:是什么构成ECC密钥交换中的公钥,以及何时生成这个公钥?
在https://www.youtube.com/watch?v=F3zzNa42-tQ和StackOverflow Q&A 椭圆曲线密码学的基本解释的视频中,公开密钥是在密钥交换发生时生成的。公钥是产生点“乘以”各方的私钥。因为生成器点在每次握手时都会发生变化,所以公钥不能事先生成。
如果是这样,那么产生ECC公钥的目的是什么?对于我正在从事的项目,需要生成一个公钥,将其放在证书签名请求中,以便与AWS连接。此外,还有用于创建ECC公钥的openssl功能:
openssl ec -in ecc_private.pem -pubout -out ecc_public.pem
“公钥”这个词是否被松散地使用了?有多个公钥吗?
发布于 2018-01-26 08:55:21
正如已在另一个答复中指出,$A$和$B$在视频中是爱丽丝和鲍勃的公钥。公钥是每一方生成密钥对的一部分,通常表示为$\operatorname{Gen}$。使用ECC,可以在任何时候从私钥生成密钥,因为公钥是在$\operatorname{Gen}$函数中的私钥之后生成的,即通过将私钥值与基点$G$相乘。
基点是客户端和服务器在握手过程中商定的域参数的一部分,预计ECDH不会更改。在执行短暂-短期密钥协议时,每一方都会重新生成密钥对。在这种情况下,密钥协议不执行任何一方的身份验证,因为公钥不能被另一方信任;身份验证是单独执行的。可以使用任何方法执行该身份验证,包括具有不同静态密钥对的ECDSA。在这种情况下,静态公钥通常位于由证书颁发机构签名的证书中。
您正在生成的是一个静态或密钥,它的生命时间显示在证书中(在此之后,它不再受信任,也不会自毁)。该密钥仍然只是私钥$s$与域参数的$G$相乘。这是一个确定性的计算:因此每个密钥对只有一个公钥。用于此密钥的参数可能与用于密钥协商的短暂密钥对所使用的参数不同;这些参数由证书中的公钥编码表示。
因此,不,“公钥”一词在这里不是“松散”使用的。
也有短暂的静态,甚至静态的Diffie-Hellman,虽然它们都没有经常使用。在这种情况下,静态公钥可以是证书的一部分并受信任。因此,持有静态密钥的实体将被验证。一个拥有短暂密钥对的政党没有经过身份验证,可能需要登录,例如,如果它是一个网站用户。
如前所述,这并不是经常使用的;ECDH证书并不常见,静态Diffie-Hellman不提供前向保密--如果静态密钥的机密性受到破坏,会话数据就会被知道。
您正在生成一个可用于身份验证的静态密钥对。在使用ECDHE加密套件时,您还需要生成一个短暂的密钥对,但这是隐藏在TLS实现中的。幸运的是,ECC密钥对的生成相对较快:只是随机化和点乘。这是使用ECC的主要好处之一。
发布于 2018-01-26 02:23:31
使用视频符号,$A = \alpha G$被视为Alice的公钥,而$B = \beta G$被视为Bob的公钥。
Alice使用私钥$\alpha$和Bob的公钥$B$计算共享Diffie-Hellman密钥,其格式为$K = \alpha B$。
鲍勃同样使用他的私钥$\beta$和Alice的公钥$A$来获得共享Diffie-Hellman密钥$K = \beta A$。
很容易验证,由Alice计算的共享密钥与Bob计算的共享密钥相同:$\alpha B= \beta A= (\alpha\beta)G$。
https://crypto.stackexchange.com/questions/55028
复制相似问题