原文閱讀:
數字簽名是乙個帶有金鑰的訊息摘要演算法,這個金鑰包括了公鑰和私鑰,用於驗證資料完整性、認證資料**和抗否認,遵循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
數字簽名 又稱公鑰數字簽名 是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用於鑑別數字資訊的方法。一套數字簽名通常定義兩種互補的運算,乙個用於簽名,另乙個用於驗證,但法條中的電子簽章與數字簽名,代表之意義並不相同,電子簽章用以辨識及確認電子檔案簽署人身份 資格及電子檔案真偽者...