Rsa

RSA 和 OpenSSL 有什麼問題?

  • April 14, 2019

我們都知道,對文件進行簽名就是使用簽名者的私鑰對其雜湊進行加密。 https://commons.wikimedia.org/wiki/File:Digital_Signature_diagram.svg 我已經在網上搜尋了幾天,尋找一個簡單的線上頁面,您可以在其中使用您的私鑰簽署文本(您可以離線完成這部分),其他人可以通過輸入接收到的文本、簽名和簽名者的公鑰來驗證文本的作者。但我什麼也沒找到,只是像https://encipher.it這樣的對稱加密。所以我決定自己創建一個使用 PHP 的 OpenSSL 功能的應用程序。這是原始碼http://pastebin.com/Czp3SZHd

問題是我讀到有人說“你不能用你的私鑰加密”、“簽名與加密不同”、“沒有填充的原始 RSA 是不安全的”。

所以我很困惑。公鑰密碼學不應該是安全的嗎?也就是說,從公鑰計算私鑰是不可行的,甚至沒有用私鑰加密的明文和密文樣本。

更新:

我已將密鑰長度從 RSA-1024 更新為 RSA-2048。現在我使用帶有 RSA-PSS 的phpseclib作為預設填充進行簽名。它還使用 setHash(‘sha512’)。

資料來源: http: //pastebin.com/rSzQ5uKs

當然,我沒有考慮其他因素,如伺服器-客戶端通信、密鑰生成等。

對於密碼學家來說,*“簽署文件就是使用簽名者的私鑰加密其雜湊值”*是錯誤的,因為:

  1. 它特定於 RSA 和包括 Rabin 在內的表親密碼系統,甚至沒有遠端描述其他常見的簽名方案;
  2. 它錯過了一個重要的步驟,填充,這對於 RSA 簽名和 RSA 加密是不同的。如果我們不使用填充,則會應用一些攻擊(特別是,允許從中等數量的其他選定文件的簽名中計算文件的簽名)。

因此,問題中連結的軟體中使用的PHPopenssl_private_encrypt被命名為可怕的(應該是openssl_RSA_sign),但是當與 OPENSSL_PKCS1_PADDING (這似乎是預設值)一起使用時,我相信它使用RSASSA-PKCS1-V1_5,一種 RSA 簽名填充;它有點過時並且缺乏強有力的安全論據(與 RSASSA-PSS 相反),但目前完好無損。

注意:連結的軟體使用 SHA-1,它已經過時,並且被我們在 cryptography 中使用的定義所破壞。它實際上在 2017 年被公開破解

注意:連結的應用程序充其量與執行它的最弱的 Web 伺服器一樣值得信任,Web 客戶端用於訪問網站以進行簽名和用於簽名驗證,伺服器和客戶端之間的密碼學,源公鑰,私鑰的生成器以及曾經用來處理它的任何東西。

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