低熵數據的簽名:它們可以偽造嗎?
我正在開發一個應用程序,其中我有一個物理產品辨識標籤,其中包含一組公共的低熵數據(約 50 個字節),例如序列號和其他資訊,所有這些都在標籤上隨時可用。我想使用基於雜湊的簽名算法來提供產品有效的真實性檢查。
- 這是一個合理的想法嗎?低熵數據會導致問題嗎?
- 為了獲得密鑰,有人必須獲得多少這些產品標籤?
編輯:一個更好的問題可能是,這個簽名可以在沒有密鑰的情況下被偽造嗎?
- 有沒有辦法只用 256 位的輸出數據安全地做到這一點?
- 這是一個合理的想法嗎?
聽起來不錯,只要:
- 您使用強 RSA 密鑰(例如,至少 2048 位)
- 您使用了良好的 RSA 簽名填充方法
- 您以某種方式阻止攻擊者修改您用來驗證的 RSA 公鑰
低熵數據會導致問題嗎?
不,低熵數據不存在問題。
- 為了獲得密鑰,有人必須獲得多少這些產品標籤?
沒有已知的方法可以恢復 RSA 私鑰,即使您給攻擊者一個 Oracle 來簽署任意數量的任意消息(這比您擁有的攻擊場景要強得多)。
正如另一個答案中所說:是的,這是一個合理的想法,RSA 允許對低熵公共數據進行安全簽名,可以公開驗證該數據是否匹配所述數據,但如果沒有私鑰則無法生成。有效簽名和公鑰的範例不會洩露私鑰或產生其他簽名的方式。一些標準化的簽名方案會定期執行此操作(但當然沒有什麼可以防止複制公共數據及其簽名)。
現在問題補充說:
有沒有辦法只用 256 位的輸出數據安全地做到這一點?
不使用 RSA。256 位 RSA 簽名將是不安全的,因為它們(在幾位之內)與公共模數一樣寬,而且 256 位太小了(384 位在 1990 年代已經太小了,而且已經取得了相當大的進展從那時起,看到這個)。
256 位已接近邊緣,而是在錯誤的一邊,這是經過嚴格審查的簽名方案可以提供的高安全性。我最近問過這個問題,對我所知道的標準化方案進行了盤點,在未來幾十年通常推薦用於高安全性的 128 位安全級別下,沒有任何低於 384 位的東西。
另一方面,如果一個人對 90 位安全性感到滿意(這仍然會使使用今天的手段預計的攻擊成本達到數十億歐元),並且不需要標準化的東西,那麼可以使用短 Schnorr 簽名(這名義上將是 270 位)和一些技巧來交換更長的簽名生成和/或驗證時間與更少的簽名位。如果需要,我可以詳細說明。
另一種選擇是BLS 簽名,例如在曲線 BN254 或 BN256 上,它符合尺寸目標,並且根據這些 評論至少會相當安全,但這超出了我的舒適區。