A. 密碼學相關知識梳理
密碼學是研究編制密碼和破譯密碼的技術科學。
密碼學的歷史最早可以追溯到幾千年以前,古今中外都有密碼學運用的記載,從歷史看,戰爭很大程度給密碼學提供了應用環境,推動了密碼學的發展,密碼學按照發展歷程,大體可以分為三個階段,手工加密、機械加密和計算機加密階段,下面是近代密碼學的一些重要進展。
1949年,資訊理論始祖克勞德·艾爾伍德·香農(Claude Elwood Shannon)發表了《保密系統的通信理論》一文,把密碼學建立在嚴格的數學基礎之上,奠定理論基礎,從此成為真正的科學。
1976年,密碼學專家惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)兩人發表了《密碼學的新方向》一文,解決了密鑰管理的難題,把密鑰分為加密的公鑰和解密的私鑰,提出了密鑰交換演算法Diffie-Hellman。
1977年,美國國家標准技術研究所制定數據加密標准(Data Encryption Standard ),將其頒布為國家標准。
1977年,麻省理工學院的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出RSA加密演算法,RSA就是他們三人姓氏開頭字母拼在一起組成的。
1997年4月,美國ANSI發起徵集AES(advanced encryption standard)的活動,並為此成立了AES工作小組,經過幾年的時間篩選,最終採用了由比利時的Joan Daemen和Vincent Rijmen設計的Rijndael演算法,並在2002年5月26日成為有效的加密標准。
按密碼體制劃分:對稱密碼體制密碼學和非對稱密碼體制密碼學對應的有對稱密碼演算法和非對稱密碼演算法。
消息摘要演算法又稱散列演算法,其核心在於散列函數的單向性,即通過散列函數可獲得對應的散列值,但不可通過該散列值反推其原始信息,這是消息摘要演算法的安全性的根本所在,我們通常使用該演算法判斷數據的完整性。
消息摘要演算法我們常見比如MD(Message Digest)、SHA(Secure Hash Algorithm)、HMAC(Hash Message Authentication Code)等,常用於驗證數據的完整性,是數字簽名演算法的核心演算法。
我們以微信支付的介面調用分析一下摘要演算法怎麼應用的,首先可以打開微信支付如下相關文檔:
微信支付統一下單介面文檔
微信支付簽名過程
對稱加密簡單的說就是加密和解密使用同一個密鑰,解密演算法是加密演算法的逆運算。
對稱加密演算法主要有DES、DES演算法的變種DESede、DES替代者AES演算法、IDEA、PBE等
非對稱加密演算法稱為雙鑰或公鑰加密演算法,跟對稱加密演算法不同的是,對稱加密演算法只一個密鑰,非對稱加密演算法 一個公鑰和一個私鑰,一個用於加密,另外一個用於解密。
簡單的說:一對密鑰公鑰A和私鑰B,A加密只能B解密,B加密只能A解密。
非對稱加密演算法源於DH演算法(Diffie-Hellman,密鑰交換演算法)由W.Diffie和 M.Hellman共同提出,該演算法為非對稱加密演算法奠定了基礎,下面我們先來了解下密鑰交換演算法DH和ECDH演算法。
為什麼需要密鑰交換演算法?前面我們提到對稱加密演算法加解密都是用同一個密鑰,我們可以想一下,我們怎樣能安全的把一個密鑰給到對方呢?比如我們經常用到HTTPS,大家都說HTTPS加密了是安全的,那它加密的密鑰怎麼來的呢?很顯然我們在訪問一個https地址的時候,事先並沒有密鑰,訪問過程中客戶端跟服務端通過握手協議協商出來的密鑰,如果服務端直接把密鑰在網路上傳輸那肯定不安全的,所以這過程到底發生了什麼?後面專門分析https的時候會詳細寫,這里先了解下該演算法。
DH密鑰交換演算法的安全性基於有限域上的離散對數難題
ECDH密鑰交換演算法是基於橢圓曲線加密
從上面圖中可以看出,DH&ECDH密鑰交換演算法交互雙方都會向對方公開一部分信息,即所謂的公鑰,這部分即使被別人拿到了也不會威脅到最終的密鑰,這里很關鍵的一點是甲乙兩方公布的公鑰是不相同的,但是最終生成的密鑰兩邊是一致的,這里是利用的演算法原理,有興趣的可以去查閱詳細的演算法公式,因為最終的密鑰不需要傳輸給對方,所以很大程度保證安全性。
非對稱加密演算法:
比較典型的非對稱加密演算法有RSA、ECC、ElGamal,RSA演算法基於大數因子分解難題,而ElGamal和ECC演算法則是基於離散對數難題。
從上面消息傳遞模型我們可以看出,非對稱加密演算法遵循「私鑰加密,公鑰解密」和「公鑰加密,私鑰解密」的原則,但是有一點需要注意,公鑰是公開的,所以用在什麼場景是需要根據該演算法的特徵來考慮的,比如既然公鑰是公開的,你用私鑰加密敏感數據傳遞給第三方合適么?顯然不合適,因為公鑰公開的,別人都可以拿到公鑰,也就意味著你加密的數據都可以解密,所以適合的場景比如私鑰加密,公鑰只是用來驗證加密的內容,每個人都可以來驗證,該場景是不在乎加密內容被其它攻擊者看到的,甚至說內容本來就是公開的,對於接收者用公鑰確保內容沒有被篡改即可,所以我們通常說非對稱演算法「私鑰簽名,公鑰驗證簽名」,另外一點,「公鑰加密,私鑰解密」,因為私鑰只有我們自己手上有,所以理論上也只有我們自己可以解密,這樣是安全的,https證書驗證以及握手協議過程中會體現這一點。
數字簽名演算法可以看做是一種帶有密鑰的消息摘要演算法,並且這種密鑰包含了公鑰和私鑰。也就是說數字簽名演算法是非對稱加密演算法和消息摘要演算法的結合體,遵循「私鑰簽名,公鑰驗證」的簽名認證方式。
數字簽名演算法是公鑰基礎設施(Public Key Infrastructure,PKI)以及許多網路安全機制(SSL/TLS,VPN等)的基礎。
數字簽名演算法要求能夠驗證數據完整性、認證數據來源,並起到抗否認的作用。
數字簽名演算法主要包括RSA、DSA、ECDSA共3種演算法,其中RSA演算法源於整數因子分解問題,DSA和ECDSA演算法源於離散對數問題。
我們以螞蟻金服開放平台上介面簽名方案為例,詳細說明可以打開如下文檔:
螞蟻開放平台簽名專區
B. 對稱密碼術的介紹
對稱密碼術(也稱作秘鑰密碼術)早已被人們使用了數千年,它有各種形式:從簡單的替換密碼到較復雜的構造方式。不過,數學的發展和計算能力的不斷進步使得創建牢不可破的密碼成為可能。對稱系統通常非常快速,卻易受攻擊,因為用於加密的密鑰必須與 需要對消息進行解密的所有人一起共享。IBM 開發的密碼 DES 已被廣泛使用,但如今已到了其使用壽命的盡頭,應該要更換了。無論開發人員在他們的應用程序中使用哪種密碼,都應該考慮使用的方法、認識到發生的折衷方案以及規劃功能更強大的計算機系統的前景。
C. 現代密碼學的發展歷史
人類有記載的通信密碼始於公元前400年。古希臘人是置換密碼的發明者。1881年世界上的第一個電話保密專利出現。電報、無線電的發明使密碼學成為通信領域中不可迴避的研究課題。
在第二次世界大戰初期,德國軍方啟用「恩尼格瑪」密碼機,盟軍對德軍加密的信息有好幾年一籌莫展,「恩尼格瑪」密碼機似乎是不可破的。但是經過盟軍密碼分析學家的不懈努力,「恩尼格瑪」密碼機被攻破,盟軍掌握了德軍的許多機密,而德國軍方卻對此一無所知。
太平洋戰爭中,美軍破譯了日本海軍的密碼機,讀懂了日本艦隊司令官山本五十六發給各指揮官的命令,在中途島徹底擊潰了日本海軍,導致了太平洋戰爭的決定性轉折, 相反軸心國中,只有德國是在第二次世界大戰的初期在密碼破譯方面取得過輝煌的戰績。因此,我們可以說,密碼學在戰爭中起著非常重要的作用。
隨著信息化和數字化社會的發展,人們對信息安全和保密的重要性認識不斷提高。如網路銀行、電子購物、電子郵件等正在悄悄地融入普通百姓的日常生活中,人們自然要關注其安全性如何。1977年,美國國家標准局公布實施了「美國數據加密標(DES)」,軍事部門壟斷密碼的局面被打破,民間力量開始全面介入密碼學的研究和應用中。民用的加密產品在市場上已有大量出售,採用的加密演算法有DES、IDEA、RSA等。
現有的密碼體制千千萬萬,各不相同。但是它們都可以分為單鑰密碼(對稱密碼體制)如 DES密碼,和公鑰密碼(非對稱加密體制)如RSA密碼。前者的加密過程和脫密過程相同,而且所用的密鑰也相同;後者,每個用戶都有各自的公開和秘密鑰。
編碼密碼學主要致力於信息加密、信息認證、數字簽名和密鑰管理方面的研究。信息加密的目的在於將可讀信息轉變為無法識別的內容,使得截獲這些信息的人無法閱讀,同時信息的接收人能夠驗證接收到的信息是否被敵方篡改或替換過;數字簽名就是信息的接收人能夠確定接收到的信息是否確實是由所希望的發信人發出的;密鑰管理是信息加密中最難的部分,因為信息加密的安全性在於密鑰。歷史上,各國軍事情報機構在獵取別國的密鑰管理方法上要比破譯加密演算法成功得多。
密碼分析學與編碼學的方法不同,它不依賴數學邏輯的不變真理,必須憑經驗,依賴客觀世界覺察得到的事實。因而,密碼分析更需要發揮人們的聰明才智,更具有挑戰性。
現代密碼學是一門迅速發展的應用科學。隨著網際網路的迅速普及,人們依靠它傳送大量的信息,但是這些信息在網路上的傳輸都是公開的。因此,對於關繫到個人利益的信息必須經過加密之後才可以在網上傳送,這將離不開現代密碼技術。
1976年Diffie和Hellman在《密碼新方向》中提出了著名的D-H密鑰交換協議,標志著公鑰密碼體制的出現。 Diffie和Hellman第一次提出了不基於秘密信道的密鑰 分發,這就是D-H協議的重大意義所在。
PKI(Public Key Infrastructure)是一個用公鑰概念與技術來實施和提供安全服務的具有普適性的安全基礎設施。PKI公鑰基礎設施的主要任務是在開放環境中為開放性業務提供數字簽名服務。