RSA 盲簽名安全實施
注意:我不是密碼學家
我想檢查我的 RSA 盲簽名實現是否可以安全地用於生產階段的應用程序,並且我還有一些問題,我將非常感激能得到解答。
在過去的幾天裡,我做了很多研究,得出了這個結論:
簽名簽發階段
- 獲取公鑰;指數 $ e $ , 模量 $ n $
- 生成一個隨機數 $ r $ 小於且相對於模數 $ n $
- 計算私有令牌的雜湊值 $ m $
- 計算盲消息 $ M = h(m).(r^emod $ $ n) $
- 將盲消息發送到將返迴盲簽名的伺服器 $ S = M^d mod $ $ n $ , 在哪裡 $ d $ 是私人指數
- 計算非盲簽名 $ s = S.r^{-1} $
如果我是正確的,這將最終得到一個私人令牌 $ m $ 及其有效簽名 $ s $
問題1:如何乘法 $ h(m) $ 和 $ r^emod $ $ n $ ? 結果不會大於 $ n $ ?
問題 2:我可以只使用任何雜湊算法嗎? $ m $ 像 SHA-256 嗎?
問題3:伺服器在簽名之前不會散列或填充盲消息,這是正確和安全的嗎?
簽名驗證階段
- 客戶端發送其私有令牌 $ m $ 及其簽名 $ s $
- 伺服器將檢查簽名 $ s^e = h(m) $ $ mod $ $ n $
問題 4:如何實現填充方案以防止簽名因 RSA 的同態屬性而被偽造?
問題 5:這個實現是否容易受到任何攻擊?有什麼改進嗎?
注意:我不是密碼學家
我想檢查我的 RSA 盲簽名實現是否可以安全地用於生產階段的應用程序,並且我還有一些問題,我將非常感激能得到解答。
抱歉,但當我聽到這樣的問題時,聽起來像:
我不是外科醫生,但我想做一些心臟手術。這幾天我做了很多研究,我想在開始之前確保我了解基礎知識……
好吧,我不會那麼糟糕,但聽起來有點相似(如果它真的是用於“生產階段的應用程序”,它可能不會那麼遙遠。至少,如果你的心臟手術弄錯了,你就會知道它沒有工作……
有了這個我的胸膛,這裡有一些答案:
問題1:如何乘法 $ h(m) $ 和 $ r^e \bmod n $ ? 結果不會大於 $ n $ ?
實際上,您將它們乘以模 $ n $ .
問題 2:我可以在 m 上使用任何雜湊算法,例如 SHA-256 嗎?問題 4:如何實現填充方案以防止簽名由於 RSA 的同態屬性而被偽造?
我將這兩個問題放在一起,因為它們的答案相同。什麼 $ h $ 需要的不是直接的 SHA-256,而是執行散列(例如 SHA-256)然後填充結果,可能使用 PKCS 1.5 SSA 或 PSS(取決於驗證者的期望)。
問題3:伺服器在簽名之前不會散列或填充盲消息,這樣是否正確且安全?
在這種情況下,它是正確且安全的——如果伺服器對消息進行散列或填充,它就會把事情搞砸。請記住,您在第 4 步中進行了散列/填充。
另一方面(回到我原來的評論),如果你需要問這些問題,你可能還沒有準備好自己實現……