2009-07-20 53 views
1

我正在實現一個簡單的許可證文件系統,並想知道我目前的執行方式是否有任何錯誤。這是基於RSA的簽名(具有恢復)方案密碼合理嗎?

消息數據小於密鑰。我使用RSA,密鑰大小爲3072bits。

許可證頒發者生成要簽名的消息,並使用基於RSA的直接方法對其簽名,然後應用類似的方法對消息進行加密。加密的消息和簽名一起存儲爲許可證文件。

  1. Sha512該消息。
  2. 使用私鑰簽名散列。
  3. 用私鑰簽名消息。
  4. 連接並傳輸。

在收到的驗證過程:

  1. 解密消息用公鑰
  2. 散列消息
  3. 從與公共密鑰文件解密的哈希,並與比較本地哈希。

到目前爲止實施工作正常,出現有效。

我目前零填充的消息相匹配的密鑰長度,這可能是 不好動(我相信我應該使用一個PKCS填充算法,如1或1.5?)

請問這個戰略似乎有效? 我忽略了任何明顯的缺陷或觀點嗎?

回答

3

我注意到的主要缺陷:你必須驗證當你解密時填充仍然存在。 (如果您事先知道消息長度,那麼您可能能夠使用自己的填充方案逃脫,但如果您提到使用現有的填充方案,可能仍然是一個好主意)。

我不知道你爲什麼要加密消息本身 - 正如你已經注意到的那樣,任何人都可以使用公鑰解密,因此它不會添加除混淆之外的任何內容。您可能只需發送消息和加密填充散列。

我建議使用提供「簽名消息」功能的高級庫,如cryptlibKeyCzar(如果可以的話)。這些受益於更多的眼球比你的代碼可能會看到,並照顧所有的niggly填充問題和類似。

+0

加密郵件純粹是混淆,是的。在傳輸Enc [x]和Enc [Hash [x]]方面是否存在漏洞?我假設沒有哈希是正確(並嚴重)填充。我的實現基於優秀的公共領域LibTomCrypt。我使用了Wei Dai的CryptoPP,但RSA簽名與恢復似乎沒有用最新推薦的簽名方案實現。 – 2009-07-20 12:10:29