數字簽名演算法介紹和區別

數字簽名演算法介紹和區別

4 人贊了文章

原文閱讀:數字簽名演算法介紹和區別

數字簽名是一個帶有密鑰的消息摘要演算法,這個密鑰包括了公鑰和私鑰,用於驗證數據完整性、認證數據來源和抗否認,遵循OSI參考模型、私鑰簽名和公鑰驗證。也是非對稱加密演算法和消息摘要演算法的結合體,常見的數字簽名演算法主要有RSA、DSA、ECDSA三種,本文對數字簽名演算法進行詳細介紹。

Hash又譯散列、摘要等名,本文統一稱Hash。

1. RSA數字簽名演算法

RSA是目前計算機密碼學中最經典演算法,也是目前為止使用最廣泛的數字簽名演算法,RSA數字簽名演算法的密鑰實現與RSA的加密演算法是一樣的,演算法的名稱都叫RSA。密鑰的產生和轉換都是一樣的,包括在售的所有SSL數字證書、代碼簽名證書、文檔簽名以及郵件簽名大多都採用RSA演算法進行加密。

RSA數字簽名演算法主要包括MD和SHA兩種演算法,例如我們熟知的MD5和SHA-256即是這兩種演算法中的一類,具體如下表格分布

1.1. MD2、MD4、MD5演算法

最常見的是我們熟知的MD5加密演算法,MD5全稱Message-Digest Algorithm 5(信息-摘要演算法 5),目前比較普遍的Hash演算法,是散列演算法的基礎原理,MD5的前身有MD2、MD3和MD4。MD5演算法法是輸入任意長度字元,輸出固定長度128位的演算法。經過程序流程,生成四個32位數據,最後聯合起來成為一個128位Hash值,主要方式是通過求余、取余、調整長度、與鏈接變數進行循環運算進而得出結果。

1.2. SHA-1演算法

SHA-1是由NIST NSA設計為同DSA一起使用的,SHA-1設計時基於和MD4相同原理,並且模仿了該演算法,SHA-1抗窮舉(brute-force)性更好,它產出160位的Hash值,對於非線性運算、移位和加法運算也與MD5類似。SHA-1也應用於包括TLS和SSL、PGP、SSH、S/MIME和IPsec等多種協議中,曾被視為是MD5的後繼者。SHA-1的如今已經明確不具備安全性可言了。

在2016年1月1日後基於SHA-1簽發的SSL和代碼簽名的X.509證書已不具備安全性可言,多個操作系統、瀏覽器都建議將基於SHA-1而簽發的證書、代碼簽名替換至SHA-2的產品,但目前在Windows XP(官方已停更)操作系統上仍然只兼容基於SHA-1演算法的SSL和代碼簽名產品。

就在2017年2月23日Google宣布實現了對SHA-1演算法的碰撞破解,所以SHA-1演算法已經正式被宣布為不安全的演算法,主流廠商對自身產品及安全要求都提升至了SHA-2演算法。

1.3. SHA-2演算法

SHA-224、SHA-256、SHA-384和SHA-512並稱為SHA-2,發佈於2001年,目前比較廣泛應用的SSL數字證書和代碼簽名證書籤名演算法均採用SHA-256演算法,相較於SHA-1演算法而言,至今SHA-2演算法還未被破解,從某種意義上SHA-2延用了SHA-1演算法,所以至少發文時間起是安全的。目前頂級CA和Google、蘋果等公司都採用基於SHA-256演算法作為SSL證書和代碼簽名證書的主流簽名演算法。

1.4. SHA-3演算法

SHA-3演算法正式發佈於2015年,SHA-3並不是要取代SHA-2,因為SHA-2目前並沒有出現明顯的弱點。由於對MD5、SHA-0和SHA-1出現成功的破解,NIST感覺需要一個與之前演算法不同的,可替換的加密Hash演算法,也就是現在的 SHA-3。

2. DSA數字簽名演算法

DSA全稱Digital Signature Algorithm,DSA只是一種演算法,和RSA不同之處在於它不能用作加密和解密,也不能進行密鑰交換,只用於簽名,所以它比RSA要快很多,其安全性與RSA相比差不多。DSA的一個重要特點是兩個素數公開,這樣,當使用別人的p和q時,即使不知道私鑰,你也能確認它們是否是隨機產生的,還是作了手腳。RSA演算法卻做不到。

DSA的整個簽名演算法流程如下:

  • a. 發送方使用SHA-1和SHA-2編碼將發送內容加密產生的數字摘要;
  • b. 發送方用自己的專用密鑰對摘要進行再次加密得到數字簽名;
  • c. 發送方將原文和加密後的摘要傳給接收方;
  • d. 接收方使用發送方提供的密鑰對進行解密 ,同時對收到的內容用SHA-1/SHA-2編碼加密產生同樣的摘要;
  • e. 接收方再將解密後的摘要和d步驟中加密產生的摘要進行比對,如果兩者一至,則說明傳輸過程的信息沒有被破壞和篡改,否則傳輸信息則不安全。

3. ECDSA橢圓曲線數字簽名演算法

ECDSA是用於數字簽名,是ECC與DSA的結合,整個簽名過程與DSA類似,所不一樣的是簽名中採取的演算法為ECC,最後簽名出來的值也是分為r,s。而ECC(全稱Elliptic Curves Cryptography)是一種橢圓曲線密碼編碼學。

ECDH每次用一個固定的DH key,導致不能向前保密(forward secrecy),所以一般都是用ECDHE(ephemeral)或其他版本的ECDH演算法。ECDH則是基於ECC的DH( Diffie-Hellman)密鑰交換演算法。

ECC與RSA 相比,有以下的優點:

  • a. 相同密鑰長度下,安全性能更高,如160位ECC已經與1024位RSA、DSA有相同的安全強度。
  • b. 計算量小,處理速度快,在私鑰的處理速度上(解密和簽名),ECC遠 比RSA、DSA快得多。
  • c. 存儲空間佔用小 ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多, 所以佔用的存儲空間小得多。
  • d. 帶寬要求低使得ECC具有廣泛得應用前景。

下表是ECC和RSA安全性比較

攻破時間(MIPS年)RSA/DSA(密鑰長度)ECC密鑰長度RSA/ECC密鑰長度比1045121065:11087681326:1101110241607:11020204821010:110782100060035:1

下表是RSA和ECC速度比較

功能Security Builder 1.2BSAFE 3.0163位ECC(ms)1,023位RSA(ms)密鑰對生成3.84,708.3簽名2.1(ECNRA)228.43.0(ECDSA)認證9.9(ECNRA)12.710.7(ECDSA)Diffie—Hellman密鑰交換7.31,654.0

在 ECDHE 密鑰交換中,服務端使用證書私鑰對相關信息進行簽名,如果瀏覽器能用證書公鑰驗證簽名,就說明服務端確實擁有對應私鑰,從而完成了服務端認證。密鑰交換和服務端認證是完全分開的。

可用於 ECDHE 數字簽名的演算法主要有 RSA 和 ECDSA,也就是目前密鑰交換 + 簽名有三種主流選擇:

  • RSA 密鑰交換(無需簽名);
  • ECDHE 密鑰交換、RSA 簽名;
  • ECDHE 密鑰交換、ECDSA 簽名;

4. 總結

對於SSL數字證書和代碼簽名證書以及其它非對稱加密產品來說,RSA目前普及度最高,以SHA-256簽名演算法最廣,對於更高級基於ECC簽名演算法是需要對證書請求文件CSR和根證書都有相應的要求。

SHA-2

自2016年1月1日起大多CA已停止簽發不安全的SHA-1簽名演算法,所有CA目前簽發的證書都要求基於SHA-2簽名演算法。

FULL SHA-2

與SHA-2選項類似,FULL SHA-2選項將為您提供相同的SHA-2證書和中間證書,但根證書不再是基於SHA-1而是SHA-2。

ECC-FULL

和「FULL-SHA-2」選項類似,你將需要提供一個基於ECC演算法的CSR,同時ECC-HYBRID ECC-HYBRID與ECC-FULL一樣,ECC的幾種演算法都要求根證書是RSA。

參考文獻

非https網站將不再提供鏈接形式,請自行複製前往

  • segmentfault.com/a/1190
  • imququ.com/post/ecc-cer
  • blog.sina.com.cn/s/blog
  • blog.csdn.net/xueyepiao
  • blog.syscallx.com/2016/
  • zh.wikipedia.org/wiki/S
  • zh.wikipedia.org/wiki/S
  • blog.csdn.net/zuiyuezho
  • blog.csdn.net/u01399152
  • technet.microsoft.com/l

推薦閱讀:

PKI與PGP
酷站推薦 - roe.ch/SSLsplit - transparent SSL/TLS interception
TLS完全指南(零)
如何評價《Why I stopped using StartSSL》的評論?

TAG:SSL | HTTPS | RSA加密 |