所以我想我对椭圆曲线密码学的理论有很好的理解,但是我对加密后的消息是如何解密的还不太清楚。所以我的问题是
谢谢你的帮助
发布于 2015-12-30 22:26:59
如何加密和解密消息?
嗯,使用ECC进行公钥加密的最简单方法是使用ECIES。在这个系统中,Alice (解密人员)有一个私钥a (是一个整数)和一个公钥A = aG (它是一个EC点);她向每个人发布她的公钥A,并将她的私钥保密。
现在,当Bob想将便条传递给Alice时,他首先选择一个随机值b,并计算bG和bA;然后,他将点bA交给密钥派生函数h,该函数生成一组对称密钥;然后,他使用对称密钥加密(和MAC)消息。然后,他将值bG和\operatorname{Encrypt}_{h(bA)}(\text{note})发送给Alice。
当Alice接收到这两个值时,她首先计算点a(bG),这与b(aG) = bA相同;然后,她将该点传递给相同的键派生函数,该函数产生与Bob相同的对称密钥。然后,她解密值\operatorname{Encrypt}_{h(bA)}(\text{note}),恢复便笺(并通过检查MAC来验证它是否在传输过程中被修改)。
如果您检查这一点,您可以看到Alice和Bob实际上所做的是执行椭圆曲线Diffie-Hellman操作,然后使用共享的秘密(对称地)加密消息。这似乎有点欺骗,但是这符合公钥加密的条件(任何拥有公钥的人都可以加密,只有私钥的持有者才能解密),它还避免了将消息可逆地转换为椭圆曲线点的问题(这是可以实现的,但也可以是虚构的)。
如何确定公钥和私钥?
这很容易;对于任何ECC方法,私钥都是一个随机整数a,介于1和n之间--生成器的顺序,而公钥是aG,私钥和生成器的点乘(这只是每个人都同意的曲线上的一个点)。而且,如果你在学习中没有遇到这种情况,生成器n的顺序是极小值,所以nG是“无穷大点”;当我们选择曲线时,我们确保这是一个大素数。
https://crypto.stackexchange.com/questions/31602
复制相似问题