Signature

與 ECDSA 或 RSA 相比的 DSS 安全性

  • July 20, 2017

OpenVPN 允許使用者根據部署的 SSL/TLS 庫選擇 TLS 密碼套件。對於 OpenSSL 1.0.2g 和 OpenVPN 2.3.11,這是一個相當長的列表(完整列表)。

在眾多選項中,有如下可用的 TLS 密碼套件:

DH-DSS-AES256-GCM-SHA384

分解為:

  • 密鑰交換:DH
  • 簽名:DSS
  • 密碼:AES256
  • 模式:GCM
  • 摘要/用於 PRN:SHA384

我正在嘗試驗證已部署密碼套件的安全性,但找不到 DSS 簽名方法的詳細資訊。

是否有其他名稱,我可以將 DSS 辨識為,或者它只是非常罕見?

DSS 性能如何,只考慮安全性?

如評論中所述,DSS 嚴格指數字簽名標準,這是美國政府下屬機構 NIST 發布的文件 (FIPS 186)。1994 年 FIPS 186 的原始版本定義(並且是其原始定義)單一算法 DSA,即數字簽名算法。FIPS 186 的更高版本主要通過引用其他地方的定義來添加其他算法:來自 X9.31 的 RSA 和更高版本的 PKCS1,來自 X9.62(和 SEC1)的 ECDSA。因此,從技術上講,DSS 現在作為一種算法標識是模棱兩可的,但是包括 SSL(現在的 TLS)在內的很多標準都是使用“DSS”設置的,而實際上它意味著 DSA,並且這些名稱仍然存在,因為更改它們和每個人都會很麻煩重要的人知道是什麼意思。

原則上,DSA 和 ECDSA 都依賴於在適當結構化的有限群中找到離散對數(或等效地求冪的單向性)的難度。對於 DSA,該群是整數乘法群以大素數為模後生成的子群,記為 $ Z_p^* $ . 對於 ECDSA,它是一個子組(通常是“不適當的”=整個組),在合適的有限域上使用合適的橢圓曲線上的點“加法”——或者是“素數”曲線 $ F_p $ 表示/實現為整數模 p ( $ Z_p $ ) 或“特徵二”或“二元”曲線 $ F_{2^m} $ 表示為對給定不可約多項式取模的二元多項式。雖然點運算通常記作加法,曲線運算記作標量乘法,但這些運算並不是普通的算術加法和乘法。

儘管在抽像上相同,但由於使用的“參數”的大小和產生的強度,存在實際差異。

FIPS 186 的原始版本指定 p,定義的素數 $ Z_p^* $ , 應該是 512 到 1024 位,僅以 64 位為步長,並且子組大小 $ q $ 只有 160 位。這些尺寸在 1990 年代就足夠了,但隨著 2000 年代過去,它們不再提供足夠的安全邊際。2009 年的 FIPS 186-3 姍姍來遲地將標準大小 p 增加到 2048 和 3072 位,將 q 增加到 224 和 256,但實施需要一些時間;作為一個值得注意的例子,Java 7 一直支持到 2015 年(並且似乎今天仍在使用,從 stackoverflow 和類似地方的 Qs 開始)並將 DSA(以及 DH!)中的 p 限制為 1024 位。

與 1980 年代和 1990 年代相比,RSA 現在同樣需要更大的尺寸,但 RSA 的標準從未設置過固定的最大值,而且大多數實現都允許一些(通常很多)餘地。因此,當大多數標準和權威機構——尤其是 SSL/TLS CA——在 2014 年或之後不久開始要求 RSA-2048 而不是 RSA-1024 時,很多人不得不生成新的密鑰和證書,但不需要更改他們的軟體(至少不是因為這個原因)。

相比之下,ECDSA 最初定義的曲線覆蓋範圍高達 500+ 位,強度高達 250+ 位,而 NSA 在其套件 B 中採用了其中的兩個(P-256 和 P-384),因此幾乎每個人都開始使用足夠強大的那兩個(或至少第一個) 。

因此,一般而言,您可以假設如果完全使用 ECDSA(或 ECDH),它可能與足夠強的參數一起使用,而您不能總是對 DSA 和 RSA 做出這種假設。但是*對於 OpenSSL,*這通常不是問題。也許是幸運的時機,OpenSSL 1.0.0 於 2010 年發布,包括增加的 FIPS 186-3 大小,所以除非你使用的是一個非常舊的系統,卡在 0.9.x 上,否則你沒問題。

DSA 和 ECDSA 的另一個特性/限制是,它們要求每個簽名使用不重複且至少名義上隨機的值(隨機數),如果您確實重複了一個值,攻擊者可以輕鬆恢復您的私鑰並偽造簽名,這不好。有一些建議可以改變這一點,包括我們自己的熊市,但還沒有太大進展。RSA 簽名並不嚴格要求隨機化,最常見的(主要是因為最舊的)方案 RSASSA-PKCS1v1_5 根本不使用它(在密鑰生成之後,這確實需要良好的隨機性,但很少這樣做)。

FWIW DES 也出現了類似的命名問題,它的正式名稱是來自當時的 NBS的數據加密標准文件FIPS 46,並定義了一個單一的算法 DEA,即數據加密算法(從 IBM 的 Lucifer 修改)。隨著時間的流逝,56 位密鑰變得太短——或者至少更明顯太短了——文件 FIPS 46 (DES) 被修改為包括 TDEA 三重數據加密算法,儘管它不是一個單獨的標準,但許多人稱之為(並且仍然稱之為)三重 DES。然後在 AES(文件)FIPS 197 發布後,定義 AEA(算法,Rindael 的配置文件)FIPS 46 被撤回,TDEA(但不是 DEA)被重新發佈為正式不是標準的特殊出版物,因此正式 DES 和 Triple- DES 不再存在。但是過去編寫的人和軟體和文件仍然引用它們,並且許多(如一些 SSL/TLS 密碼套件和 OpenSSL,以及 Java 加密)將 TDEA 稱為 DESEDE 或 DES-EDE,有時在某處附加了 3,這基本上是在 TDEA 標準化之前的討論期間使用的暱稱;

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