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

2021-09-13 19:04:26 字數 4758 閱讀 5091

原文閱讀:

數字簽名是乙個帶有金鑰的訊息摘要演算法,這個金鑰包括了公鑰和私鑰,用於驗證資料完整性、認證資料**和抗否認,遵循osi參考模型、私鑰簽名和公鑰驗證。也是非對稱加密演算法和訊息摘要演算法的結合體,常見的數字簽名演算法主要有rsa、dsa、ecdsa三種,本文對數字簽名演算法進行詳細介紹。

hash又譯雜湊、摘要等名,本文統一稱hash。

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

rsa數字簽名演算法主要包括md和sha兩種演算法,例如我們熟知的md5和sha-256即是這兩種演算法中的一類,具體如下**分布

演算法輸出hash長度

中繼hash長度

資料區塊長度

最大輸入長度

迴圈次數

碰撞攻擊

效能示例(mib/s)

md5128

128512

無限[4]

64<64 (已碰撞)

335sha-0160

160512

264 − 1

80<80 (已碰撞)

-sha-1160

160512

264 − 1

80<80 (已碰撞)

192sha-2sha-224

sha-256

224256

256512

264 − 1

64112

128139

sha-384

sha-512

sha-512/224

sha-512/256

384512

224256

5121024

2128 − 1

80192

256112

128154

sha-3sha3-224

sha3-256

sha3-384

sha3-512

224256

384512

1600

1152

1088

832576

無限24

112128

192256

-shake128

shake256

d (arbitrary)

d (arbitrary)

1344

1088

min(d/2, 128)

min(d/2, 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的如今已經明確不具備安全性可言了。

在2023年1月1日後基於sha-1簽發的ssl和**簽名的x.509證書已不具備安全性可言,多個作業系統、瀏覽器都建議將基於sha-1而簽發的證書、**簽名替換至sha-2的產品,但目前在windows xp(官方已停更)作業系統上仍然只相容基於sha-1演算法的ssl和**簽名產品。

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

1.3. sha-2演算法

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

1.4. sha-3演算法

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

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步驟中加密產生的摘要進行比對,如果兩者一至,則說明傳輸過程的資訊沒有被破壞和篡改,否則傳輸資訊則不安全。

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金鑰長度比

104512

1065:1

108768

1326:1

1011

1024

1607:1

1020

2048

21010:1

1078

21000

60035:1

下表是rsa和ecc速度比較

功能security builder 1.2

163位ecc(ms)

bsafe 3.0

1,023位rsa(ms)

金鑰對生成3.8

4,708.3

簽名2.1(ecnra)

3.0(ecdsa)

228.4

認證9.9(ecnra)

10.7(ecdsa)

12.7

diffie—hellman金鑰交換7.3

1,654.0

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

可用於 ecdhe 數字簽名的演算法主要有 rsa 和 ecdsa,也就是目前金鑰交換 + 簽名有三種主流選擇:

對於ssl數字證書和**簽名證書以及其它非對稱加密產品來說,rsa目前普及度最高,以sha-256簽名演算法最廣,對於更高階基於ecc簽名演算法是需要對證書請求檔案csr和根證書都有相應的要求。

sha-2

自2023年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。

數字簽名介紹

公開金鑰也稱為非對稱金鑰,每個人都有一對唯一對應的金鑰 公開金鑰 簡稱公鑰 和私人金鑰 簡稱私鑰 公鑰對外公開,私鑰由個人秘密儲存 用其中一把金鑰加密,就只能用另一把金鑰解密。非對稱金鑰加密演算法的典型代表是rsa。因為公鑰是公開對外發布的,所以想給私鑰持有者傳送資訊的人都可以取得公鑰,用公鑰加密資...

數字簽名演算法

gost3411,keccak,md2,md4,md5,sha1,ripemd128,ripemd160,ripemd256,ripemd320,sha224,sha256,sha384,sha512,sha3,skein,sm3,tiger,whirlpool rsa演算法實現參見另一篇文章 md...

數字簽名演算法 RSA

數字簽名 又稱公鑰數字簽名 是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,乙個用於簽名,另乙個用於驗證,但法條中的電子簽章與數字簽名,代表之意義並不相同,電子簽章用以辨識及確認電子檔案簽署人身份 資格及電子檔案真偽者...