在C语言中实现ECC

5
我想使用非对称椭圆曲线密码学来实现「自己的混合加密引擎」,而不是使用其他算法如RSA或ElGamal。
假设我想使用提供更高安全性的曲线,哪些曲线应该使用?根据我所了解的,我认为可能是521比特的曲线最理想。还有更安全的方案吗?
在C/C++中,什么是最安全的实现方式(不使用C++ STL),以抵御例如侧信道攻击等攻击?我想将其实现为「单独」模块,因此我希望获得干净的源代码或好的参考资料。

11
你自己的“混合”引擎?小心。密码学的第一条规则是“你无法比专业人士做得更好”。改变现有算法很可能会削弱它们的安全性,除非你有密码学背景并完全了解加密方案的工作原理——即使如此,你也可能会削弱加密强度。 - Jonathan Grynspan
你打算用那个521位的椭圆曲线加密来保护你国家的核武器密码吗?我只是想知道你可能有什么秘密,以至于标准的FIPS 186-3实现,使用256位素数或者简单的curve-25519都不够好。这些都是容易获得的,速度快得多,而且在你的一生中,它们都不太可能被破解,也不太可能通过分解EC成为入口点(当找到实现漏洞或进行社交工程更有可能)。 - Damon
那个“第一条规则”在零处失效。 - Hernán Eche
Jonathan,我没有修改加密方案,更像是构建了自己的加密安全通信协议,而不是实现完整的SSL支持,我甚至还没有实现算法。基本上,我正在寻找C/C++中ECC的安全实现(不包括C++ STL)... - user827321
Damon,我想知道哪些方案应该足够高效和安全,个人而言,我并不在乎例如量子计算机是否会在未来打破当前的PK算法,如RSA或EC加密...我已经阅读过521位ECC等价于15360位RSA/DSA,这足以保证安全...正如你所说,实现漏洞更有可能发生。我已要求针对漏洞进行安全实现。 - user827321
1个回答

1

在考虑任何标准曲线是否足够安全之前,我会先确保加密模式确实能够抵御普通的选择明文攻击。

我认为Cramer和Shoup在2003年发表的论文《Design and Analysis of Practical Public-Key Encryption Schemes Secure against Adaptive Chosen Ciphertext Attack》是分析混合加密方案的好起点。

至于时间攻击:OpenSSL包含了一小部分选定曲线的实现,这些曲线被实现为以恒定时间运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接