加密计划实施指南

时间:2011-04-05 09:19:54

标签: cryptography

我有一个实现标准签名方案的任务,它将涉及公钥加密原语,如:
循环群,
幂,
随机素数生成,
模数运算,
哈希函数等。

如果您能为我提供一些指导我实施计划的良好链接,那将是非常有帮助的。

C / C ++ / Java / Python首选或任何其他方便的语言!

谢谢!

1 个答案:

答案 0 :(得分:1)

对于模块化算术,您可能需要查看Handbook of Applied Cryptography,尤其是第2章和第14章(第14章是关于实现的,但第2章是排练基础数学,如果你不顺利,你将不会走得太远不掌握那些)。 IEEE 1363-2000也是一个很好的来源,因为它详细描述了许多算法(特别是在附录A中)(不幸的是,这个文件不是免费提供的,这一事实产生了一些冲突,因为许多贡献者确实做出了贡献。假设结果是免费的;谷歌搜索“P1363-Main-11-12-99.pdf”和“P1363-A-11-12-99.pdf”以查找最后草案版本的可疑合法性下载)。但是,简单地使用现有的大整数库要容易得多。特别是,Java附带java.math.BigInteger非常有效。

对于椭圆曲线,我所知道的最佳参考是Guide to Elliptic Curve Cryptography,它不是免费的,但确实物有所值。

对于算法本身,请遵循标准。在PKCS#1中详细描述了RSA。对于DSA(也称为DSS),请参阅FIPS 186-3。这两个标准都非常易读。对于ECDSA,标准为ANSI X9.62-2005,可以百元购买(PDF格式)。

标准警告:实施加密原语 hard 。没有真正得到预期的结果,但是以安全的方式这样做。任何时候使用私钥,您可能会泄露有关该私钥的一些信息,例如通过计时(代码在给定输入上计算签名所花费的时间)。受side-channel attacks保护是一个完整的研究课题,需要深入了解密码学和数学。所以你真的真的不应该实现你自己的原语。索尼did, and failed。但是,如果您只实现签名验证(它只涉及公共元素,因此没有泄漏)那么您可能是安全的。使用现有的实现仍然是一个更好的主意。例如。标准Java已在java.securityjavax.crypto中提供了什么。