2011-04-05 33 views
2

我实现标准签名方案的任务,它涉及公共密钥加密原语,如:
环状基团
幂,
随机素数生成,
模运算,
哈希功能等。的指导实施的密码方案

如果你能给我提供一些好的链接来指导我实施这些方案,那将会非常有帮助。

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

谢谢!

回答

1

对于模块化算术,你可能想看看Handbook of Applied Cryptography,尤其是第2章和第14章(第14章是关于实现,但是第2章预习了底层数学,如果你不掌握,你不会走得太远那些)。 IEEE 1363-2000也是一个很好的来源,因为它详细描述了许多算法(特别是在附录A中)(不幸的是,这个文档不是免费的,这个事实引起了一些争议,因为许多贡献者的确做出了贡献,结果将是免费的; Google为“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)。

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