2011-04-05 31 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中提供。