密碼學的歷史可以追溯到幾千年前,古今中外都有使用密碼學的記載。歷史上,戰爭在很大程度上為密碼學提供了應用環境,促進了密碼學的發展。按照發展歷程,密碼學大致可以分為三個階段:人工加密、機械加密和計算機加密。以下是現代密碼學的壹些重要進展。
1949年,信息論鼻祖克勞德·艾爾伍德·香農發表了《安全系統的通信理論》壹文,將密碼學建立在嚴格的數學基礎上,奠定了理論基礎,從此成為真正的科學。
1976年,Bailey Whitfield Diffie和Martin Edward Hellman兩位密碼學家發表了《密碼學的新方向》壹文,解決了密鑰管理問題,將密鑰分為加密公鑰和解密私鑰,提出了密鑰交換算法Diffie-Hellman。
65438-0977年,美國國家標準技術研究所制定了數據加密標準,並作為國家標準頒布。
1977年,麻省理工學院的羅恩·裏維斯特、阿迪·阿迪·薩莫爾和倫納德·阿德曼共同提出了RSA加密算法,RSA由他們姓氏的首字母組成。
1997年4月,美國ANSI發起了征求AES(高級加密標準)的活動,並為此成立了AES工作組。經過幾年的篩選,比利時的瓊·代蒙和文森特·裏門設計的Rijndael算法最終被采用,並於2002年5月26日成為有效的加密標準。
按密碼體制分:對稱密碼體制密碼體制和非對稱密碼體制密碼體制分別對應對稱密碼體制和非對稱密碼體制。
消息摘要算法也叫hash算法,其核心在於單向hash函數,即通過hash函數可以得到對應的hash值,但是不能從hash值推斷出原始信息,這是消息摘要算法的根本安全性,我們通常用這個算法來判斷數據的完整性。
消息摘要算法,如MD(Message Digest)、SHA(Secure Hash Algorithm)、HMAC(Hash Message authentic ation Code)等,常用於驗證數據的完整性,是數字簽名算法的核心算法。
我們用微信支付的接口調用來分析總結算法是如何應用的。首先,我們可以打開微信支付的以下相關文檔:
微信支付統壹訂購接口文檔
微信支付簽名流程
對稱加密簡單來說就是加密和解密使用同壹個密鑰,解密算法是加密算法的逆運算。
對稱加密算法主要有DES、DESede、DES替代AES算法、IDEA、PBE等。
非對稱加密算法稱為雙密鑰或公鑰加密算法。與對稱加密算法不同,對稱加密算法只有壹個密鑰,非對稱加密算法有壹個公鑰和壹個私鑰,壹個用於加密,壹個用於解密。
簡單來說:壹對密鑰公鑰A和私鑰B,A加密只能被B解密,B加密只能被A解密..
非對稱加密算法起源於W.Diffie和M.Hellman***提出的DH算法(Diffie-Hellman,key exchange algorithm),為非對稱加密算法奠定了基礎。讓我們先來了解壹下密鑰交換算法DH和ECDH。
為什麽需要密鑰交換算法?正如我們前面提到的,對稱加密算法使用相同的密鑰進行加密和解密。我們可以想壹想,怎樣才能放心地把壹把鑰匙交給對方?例如,我們經常使用HTTPS,每個人都說HTTPS加密後是安全的,那麽它是如何獲得其加密密鑰的呢?顯然,當我們訪問壹個https地址時,我們事先並沒有壹個密鑰。客戶端和服務器在訪問過程中通過握手協議協商的密鑰如果服務器直接在網絡上傳輸肯定是不安全的,那麽這個過程中發生了什麽呢?後面具體分析https的時候我會詳細寫的。我們先來了解壹下這個算法。
DH密鑰交換算法的安全性是基於有限域上的離散對數問題。
ECDH密鑰交換算法是基於橢圓曲線加密的。
從上圖可以看出,DH &:ECDH密鑰交換算法的雙方都會向對方公開壹部分信息,也就是所謂的公鑰,即使被他人獲取也不會威脅到最終的密鑰。這裏的關鍵點是,甲乙雙方公布的公鑰是不壹樣的,但是最終生成的密鑰兩邊是壹樣的。這是算法的原理。有興趣的可以咨詢詳細的算法公式,因為最終的密鑰不需要互相傳輸,所以安全性有很大程度的保證。
不對稱加密算法:
典型的非對稱加密算法有RSA、ECC和ElGamal,RSA算法是基於大數的因式分解問題,而ElGamal和ECC算法是基於離散對數問題。
從上面的消息傳遞模型可以看出,非對稱加密算法遵循“私鑰加密,公鑰解密”和“公鑰加密,私鑰解密”的原則,但是有壹點需要註意,公鑰是公開的,所以需要根據算法的特點來考慮。比如,既然公鑰是公開的,那麽妳用私鑰加密敏感數據並傳輸給第三方是否合適?明顯不合適,因為公鑰是公開的,別人可以得到公鑰,也就意味著妳所有的加密數據都可以被解密,所以壹個合適的場景,比如私鑰加密,就是公鑰只用來驗證加密的內容,所有人都可以驗證。這種情況不關心加密的內容被其他攻擊者看到,甚至不關心內容是公開的。對於接收方來說,使用公鑰來保證內容沒有被篡改就足夠了。所以我們通常說的非對稱算法“私鑰簽名,公鑰驗證簽名”,還有壹點,“公鑰加密,私鑰解密”,因為私鑰只在我們手裏,所以理論上只有我們能解密,是安全的,這壹點會體現在https證書驗證和握手協議的過程中。
數字簽名算法可以看作是壹個有密鑰的消息摘要算法,這個密鑰包含壹個公鑰和壹個私鑰。也就是說,數字簽名算法是非對稱加密算法和消息摘要算法的結合,遵循“私鑰簽名,公鑰驗證”的簽名認證模式。
數字簽名算法是公鑰基礎設施(PKI)和許多網絡安全機制(SSL/TLS、VPN等)的基礎。).
數字簽名算法要求能夠驗證數據的完整性,認證數據的來源,並起到抗抵賴的作用。
數字簽名算法主要有RSA、DSA和ECDSA * * *,其中RSA算法由整數因式分解問題導出,DSA和ECDSA算法由離散對數問題導出。
我們以螞蟻金服開放平臺上的接口簽名方案為例,詳細說明以下單據可以打開:
螞蟻開放平臺簽名區