原文閱讀:https://www./fa... 數(shù)字簽名是一個帶有密鑰的消息摘要算法,這個密鑰包括了公鑰和私鑰,用于驗證數(shù)據(jù)完整性、認(rèn)證數(shù)據(jù)來源和抗否認(rèn),遵循OSI參考模型、私鑰簽名和公鑰驗證。也是非對稱加密算法和消息摘要算法的結(jié)合體,常見的數(shù)字簽名算法主要有RSA、DSA、ECDSA三種,本文對數(shù)字簽名算法進(jìn)行詳細(xì)介紹。 Hash又譯散列、摘要等名,本文統(tǒng)一稱Hash。 1. RSA數(shù)字簽名算法RSA是目前計算機(jī)密碼學(xué)中最經(jīng)典算法,也是目前為止使用最廣泛的數(shù)字簽名算法,RSA數(shù)字簽名算法的密鑰實(shí)現(xiàn)與RSA的加密算法是一樣的,算法的名稱都叫RSA。密鑰的產(chǎn)生和轉(zhuǎn)換都是一樣的,包括在售的所有SSL數(shù)字證書、代碼簽名證書、文檔簽名以及郵件簽名大多都采用RSA算法進(jìn)行加密。 RSA數(shù)字簽名算法主要包括MD和SHA兩種算法,例如我們熟知的MD5和SHA-256即是這兩種算法中的一類,具體如下表格分布 1.1. MD2、MD4、MD5算法最常見的是我們熟知的MD5加密算法,MD5全稱Message-Digest Algorithm 5(信息-摘要算法 5),目前比較普遍的Hash算法,是散列算法的基礎(chǔ)原理,MD5的前身有MD2、MD3和MD4。MD5算法法是輸入任意長度字符,輸出固定長度128位的算法。經(jīng)過程序流程,生成四個32位數(shù)據(jù),最后聯(lián)合起來成為一個128位Hash值,主要方式是通過求余、取余、調(diào)整長度、與鏈接變量進(jìn)行循環(huán)運(yùn)算進(jìn)而得出結(jié)果。 1.2. SHA-1算法SHA-1是由NIST NSA設(shè)計為同DSA一起使用的,SHA-1設(shè)計時基于和MD4相同原理,并且模仿了該算法,SHA-1抗窮舉(brute-force)性更好,它產(chǎn)出160位的Hash值,對于非線性運(yùn)算、移位和加法運(yùn)算也與MD5類似。SHA-1也應(yīng)用于包括TLS和SSL、PGP、SSH、S/MIME和IPsec等多種協(xié)議中,曾被視為是MD5的后繼者。SHA-1的如今已經(jīng)明確不具備安全性可言了。 在2016年1月1日后基于SHA-1簽發(fā)的SSL和代碼簽名的X.509證書已不具備安全性可言,多個操作系統(tǒng)、瀏覽器都建議將基于SHA-1而簽發(fā)的證書、代碼簽名替換至SHA-2的產(chǎn)品,但目前在Windows XP(官方已停更)操作系統(tǒng)上仍然只兼容基于SHA-1算法的SSL和代碼簽名產(chǎn)品。 就在2017年2月23日Google宣布實(shí)現(xiàn)了對SHA-1算法的碰撞破解,所以SHA-1算法已經(jīng)正式被宣布為不安全的算法,主流廠商對自身產(chǎn)品及安全要求都提升至了SHA-2算法。 1.3. SHA-2算法SHA-224、SHA-256、SHA-384和SHA-512并稱為SHA-2,發(fā)布于2001年,目前比較廣泛應(yīng)用的SSL數(shù)字證書和代碼簽名證書簽名算法均采用SHA-256算法,相較于SHA-1算法而言,至今SHA-2算法還未被破解,從某種意義上SHA-2延用了SHA-1算法,所以至少發(fā)文時間起是安全的。目前頂級CA和Google、蘋果等公司都采用基于SHA-256算法作為SSL證書和代碼簽名證書的主流簽名算法。 1.4. SHA-3算法SHA-3算法正式發(fā)布于2015年,SHA-3并不是要取代SHA-2,因為SHA-2目前并沒有出現(xiàn)明顯的弱點(diǎn)。由于對MD5、SHA-0和SHA-1出現(xiàn)成功的破解,NIST感覺需要一個與之前算法不同的,可替換的加密Hash算法,也就是現(xiàn)在的 SHA-3。 2. DSA數(shù)字簽名算法DSA全稱Digital Signature Algorithm,DSA只是一種算法,和RSA不同之處在于它不能用作加密和解密,也不能進(jìn)行密鑰交換,只用于簽名,所以它比RSA要快很多,其安全性與RSA相比差不多。DSA的一個重要特點(diǎn)是兩個素數(shù)公開,這樣,當(dāng)使用別人的p和q時,即使不知道私鑰,你也能確認(rèn)它們是否是隨機(jī)產(chǎn)生的,還是作了手腳。RSA算法卻做不到。 DSA的整個簽名算法流程如下: a. 發(fā)送方使用SHA-1和SHA-2編碼將發(fā)送內(nèi)容加密產(chǎn)生的數(shù)字摘要; 3. ECDSA橢圓曲線數(shù)字簽名算法ECDSA是用于數(shù)字簽名,是ECC與DSA的結(jié)合,整個簽名過程與DSA類似,所不一樣的是簽名中采取的算法為ECC,最后簽名出來的值也是分為r,s。而ECC(全稱Elliptic Curves Cryptography)是一種橢圓曲線密碼編碼學(xué)。 ECDH每次用一個固定的DH key,導(dǎo)致不能向前保密(forward secrecy),所以一般都是用ECDHE(ephemeral)或其他版本的ECDH算法。ECDH則是基于ECC的DH( Diffie-Hellman)密鑰交換算法。 ECC與RSA 相比,有以下的優(yōu)點(diǎn): a. 相同密鑰長度下,安全性能更高,如160位ECC已經(jīng)與1024位RSA、DSA有相同的安全強(qiáng)度。 下表是ECC和RSA安全性比較
下表是RSA和ECC速度比較
在 ECDHE 密鑰交換中,服務(wù)端使用證書私鑰對相關(guān)信息進(jìn)行簽名,如果瀏覽器能用證書公鑰驗證簽名,就說明服務(wù)端確實(shí)擁有對應(yīng)私鑰,從而完成了服務(wù)端認(rèn)證。密鑰交換和服務(wù)端認(rèn)證是完全分開的。 可用于 ECDHE 數(shù)字簽名的算法主要有 RSA 和 ECDSA,也就是目前密鑰交換 + 簽名有三種主流選擇:
4. 總結(jié)對于SSL數(shù)字證書和代碼簽名證書以及其它非對稱加密產(chǎn)品來說,RSA目前普及度最高,以SHA-256簽名算法最廣,對于更高級基于ECC簽名算法是需要對證書請求文件CSR和根證書都有相應(yīng)的要求。 SHA-2自2016年1月1日起大多CA已停止簽發(fā)不安全的SHA-1簽名算法,所有CA目前簽發(fā)的證書都要求基于SHA-2簽名算法。 FULL SHA-2與SHA-2選項類似,F(xiàn)ULL SHA-2選項將為您提供相同的SHA-2證書和中間證書,但根證書不再是基于SHA-1而是SHA-2。 ECC-FULL和“FULL-SHA-2”選項類似,你將需要提供一個基于ECC算法的CSR,同時ECC-HYBRID ECC-HYBRID與ECC-FULL一樣,ECC的幾種算法都要求根證書是RSA。 參考文獻(xiàn)非https網(wǎng)站將不再提供鏈接形式,請自行復(fù)制前往
|
|