Public-Key

來自非對稱加密的簽名

  • March 28, 2022

讓 $ (K_{enc},K_{dec}) $ 是非對稱密鑰對。在我看來,可以通過讓公共驗證密鑰成為簽名方案來創建 $ K_{ver}=K_{dec} $ (非對稱解密密鑰)和秘密簽名密鑰是 $ K_{sign}=K_{enc} $ (非對稱加密密鑰)。說與 $ H $ 一些雜湊函式和 $ m $ 待簽署: $$ s=\texttt{sign}(m,K_{sign})=\texttt{encrypt}(H(m),K_{enc}) $$ $$ \texttt{verify}(s,m,K_{ver})=\left{ \begin{array}{cc} \text{True }&\text{if } H(m)=\texttt{decrypt}(s,K_{dec})\ \text{False }&\text{else}. \end{array} \right. $$ 換句話說,一個人通過加密(散列)文件進行簽名,任何人都可以通過解密(和散列)來驗證。

NB 密鑰的公共/私有角色在應用程序之間被顛倒了! $ K_{sign}=K_{enc} $ 保持私有(忘記它將作為加密密鑰公開)和 $ K_{ver}=K_{dec} $ 公開(忘記它作為解密密鑰是私有的)。

如果是這樣,為什麼要開發單獨的簽名方案而不是重用公鑰方案?不重新利用 PKC 似乎是一種浪費。專用簽名方案效率更高嗎?

如果不是這種情況,出了什麼問題?


評論中提到的一個問題發生在 $ K_{dec} $ 揭示有關資訊 $ K_{enc} $ . 這肯定會發生在某些(大多數)方案中,例如當加密密鑰實際上是解密密鑰的某個混淆版本時,但不是全部。防止這種情況或多或少地設計了一個簽名方案(“公鑰解密”),使我的問題變得無趣。

想到的唯一具體實例是 RSA 簽名,其中加密/解密指數之間的對稱性使上述成為可能。

好的

問題中的方法導致簽名系統始終成功驗證其簽名的消息;並且存在簽名系統滿足EUF-CMA 安全屬性的非對稱加密方案和雜湊的組合,包括:

  • RSAES-OAEP接近實踐,以及像 SHA-256 這樣的標準加密散列。不過,RSA 部分需要進行兩項調整:

    • 選擇 $ e $ 隨機和大位大小(位大小的一半 $ n $ 似乎還可以)而不是 $ e=65537 $ 作為常見的(或其他較低的可猜測值,或隨機但對於問題方法的安全性而言太低)
    • 表示解密密鑰 $ K_{dec} $ 作為 $ (n,d) $ 而不是像往常一樣 $ (n,e,d,p,q,d_p,d_q,q_\text{Inv}) $ ,由關心性能的標準實現使用。

    這兩個變化都是必要的,以保持 $ e $ 的 $ K_{enc}=(n,e) $ 我們製作的秘密 $ K_{dec}=(n,d) $ 公開的,如問題所示。

  • 與原始文章中一樣的 RSA 加密,除了 $ n $ 大到足以抵抗現代分解方法²,以及比上述大得多的雜湊,以抵抗Desmedt 和 Odlyzko 攻擊

壞的

當應用於大多數非對稱密碼系統時,該方法是不安全的

請注意 $ K_{dec} $ 必須公開,因為它是驗證密鑰,並且 $ K_{enc} $ 必須保密,因為它是簽名密鑰。因此,這兩個鍵之間的關係必須是這樣的,我們可以使 $ K_{dec} $ 在保密的同時公開 $ K_{enc} $ . RSA 是我所熟知的唯一具有該屬性的加密方案系列(如上所述,它的實際實現沒有)。

對於許多非對稱加密系統,無法應用該屬性。例如,在ElGamal和它的現代後代ECIES中, $ K_{dec} $ 是一個整數,它編碼如何到達組元素 $ K_{enc} $ 通過將內部團體法應用於某個公共團體元素;因此揭示 $ K_{dec} $ 不免暴露 $ K_{enc} $ ,破壞了問題構造的安全性。

更一般地說,使用安全的非對稱加密系統和安全的雜湊並不能很好地表明通過問題的方法獲得的簽名系統是安全的,原因有很多。

當我們考慮實現安全性時,還有一個問題: $ \texttt{encrypt} $ 由於它通常是公開的,因此不需要保護其密鑰輸入的側通道洩漏。然而,問題的簽名系統需要這種保護。

該方法傾向於建構具有不合格特徵的簽名方案

將 RSA 簽名(包括通過問題的方法)與標準安全級別的 EdDSA 進行比較:

  • 簽名相當大(256 字節與 64 字節相比)
  • 公鑰很大(通常為 260 字節,而 32 字節)
  • 簽名生成很慢(比如慢了幾十倍)
  • 密鑰生成速度非常慢(比如慢了數百倍)。

而且該方法與用於建構 RSA 簽名的方法不同,即使是近親RSA-FDH也是如此。使用教科書 RSA 私鑰功能 $ h\mapsto s=h^d $ 簽署一個廣泛的雜湊 $ h=H(M) $ ; 和教科書的 RSA 公鑰函式 $ s\mapsto h=s^e\bmod n $ 然後是比較 $ h\overset?=H(M) $ 在驗證中。與問題的方法相反,公鑰 $ (n,e) $ 保持公開,而私鑰 $ (n,e,d,p,q,d_p,d_q,q_\text{Inv}) $ 仍然是秘密。與此相比,或RSASSA-PKCS1-v1_5RSASSA-PSS,問題的簽名方法:

  • 標誌慢了近四倍,因為它不能使用 $ (n,e,d,p,q,d_p,d_q,q_\text{Inv}) $ 表格 $ K_{dec} $
  • 驗證速度要慢一百到一千倍,因為它不能使用小的 $ e $ .

¹有 $ n $ 已知,如果其中之一 $ e $ 或者 $ d $ 是已知的,更少 $ n^{0.292} $ ,然後可以找到另一個,請參閱Boneh 和 Durfee。因此習慣限制為 256 位 $ e $ (例如,內置在FIPS 186-4 的密鑰生成方法中)是這樣的 $ d $ 允許找到 $ e $ .

²原推薦“即 $ d $ 應該從足夠大的集合中選擇,以便密碼分析者無法通過直接搜尋找到它”然後計算 $ e $ 從 $ d $ 是不夠的,並允許維納的 進攻,後來由博內和杜菲改進。但保持 $ d $ 秘密和製作 $ e $ public 因為問題的方法需要修復該問題。

引用自:https://crypto.stackexchange.com/questions/99307