奇妙的安全旅行之加密算法概述
前言
hi,大家好呀,信息安全作為當前社會中比較重要的一個課題,已經覆蓋了人們生活的方方面面,雖然有時候我們可能并沒有意識到,其實信息安全防護已經在背后默默的保護我們的信息安全了。例如,當你在互聯網上瀏覽網站時;當你準備注冊或者登陸一個網站,需要輸入密碼時;當你在購物網站買商品進行支付時;當你到銀行取錢時…
可以說信息安全是關系國家、城市信息、行業用戶、百姓利益的關鍵問題,尤其是數據安全,身份隱私等信息的安全對于每個人都很重要。互聯網最初,大家的安全意識還沒有那么高,很多信息都是明文傳輸,甚至數據庫中也是明文傳輸,這就帶來了很多安全問題,比如網站被劫持,數據庫被拖庫,個人密碼遭泄露等,已經給企業和社會都帶來了非常高的威脅性。
今天我們就帶大家一起開啟我們的本次安全旅行,給大家詳細深入的講解一下加密算法的前世今生。本次安全之旅會帶大家深入的了解一下我們在開發中常用到的一些加密算法及實現方式(本次示例均使用Java語言實現),希望能增強大家對加密算法的了解和認識,并能根據業務場景熟練應用。如果大家喜歡這個系列的文章,歡迎大家點贊、分享,在這里謝謝大家的支持啦!
基礎概念
密碼學的發展已經很久了,早在古希臘時期,人類就發明了置換密碼。二戰期間,德國軍方啟用“恩尼格瑪”密碼機,密碼學在戰爭中起著非常重要的作用。在1997年,美國國家標準局公布實施了“美國數據加密標準(DES)”,民間力量開始全面介入密碼學的研究和應用中,采用的加密算法有 DES、RSA、SHA 等。
在密碼學中有一些基礎的概念,在我們正式開始學習之前,我們先從了解一下密碼學中的相關概念。
- 明文:指沒有經過加密的信息或數據,通常可以直接識別出,例如個人信息、密碼等。由于沒有經過加密,明文很容易被識別與破解,因此在傳輸明文之前必須進行加密處理。
- 密文:將明文通過加密算法按照一定規則進行加密之后,明文就會變成密文,通常為一堆無序字符,密文的形式復雜難以識別及理解。
- 密鑰:加密算法中使用的加密參數,它是在明文轉換為密文或將密文轉換為明文的算法中輸入的參數。密鑰分為對稱密鑰與非對稱密鑰。
- 加密:將明文通過加密算法變成密文的過程。
- 對稱加密:通信雙方同時掌握一個密鑰,加密解密都是由一個密鑰完成的(即加密密鑰等于解密密鑰,加解密密鑰可以相互推倒出來)。雙方通信前共同擬定一個密鑰,不對第三方公開。
- 分組加密:分組密碼是將明文分成固定長度的組,每一組都采用同一密鑰和算法進行加密,輸出也是固定長度的密文。
- 解密:將密文通過加密算法解密還原為明文的過程。
加密算法
隨著技術的發展,也同時為了應對加密算法的安全性,我們的加密算法和安全保障手段也是不斷變化升級的,目前在工作中常用的加密算法主要分為以下幾種:
- 消息摘要算法
- 對稱加密算法
- 非對稱加密算法
- 國密算法
每種算法又包括不同的實現,其算法復雜度、安全性以及效率都有區別,為了便于大家從整體上對加密算法有個整體認識,我繪制了下面這種圖,需要的建議收藏保存。
消息摘要算法
消息摘要算法也被稱為哈希(Hash)算法或散列算法,是一種單向加密算法。在信息安全技術中,經常需要驗證消息的完整性,散列(Hash)函數提供了這一服務,它對不同長度的輸入消息,產生固定長度的輸出。這個固定長度的輸出稱為原輸入消息的"散列"或"消息摘要"(Message digest)。散列算法從嚴格意義上來講并不算是加密算法,因為其結果是不可逆的,既然是不可逆的,那么當然不是用來加密的,而是主要用來做數字簽名的。
消息摘要算法主要包含以下三種:
- MD (Message Digest) 消息摘要算法
- SHA (Secure Hash Algorithm) 安全散列算法
- HMAC (Keyed-Hashing for Message Authentication) 消息認證碼算法
常見的消息摘要算法有:MD2、MD4、MD5、SHA-1、SHA-256、SHA-512、HMAC 等。
消息摘要算法具有如下幾個特性:
- 運算速度快
- 輸出長度固定
- 運算不可逆:已知運算結果的情況下,無法通過逆運算得到原文。
- 高度離散性:輸入值的細微變化,會導致運算結果差異巨大。
- 弱碰撞性:不同輸入值的散列值極低概率會出現結果相同。
MD 算法
MD 算法是由著名的非對稱算法 RSA 發明人之一的羅納德·李維斯特設計,MD 系列包含 MD2、MD4 以及最典型的 MD5。MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法第五版),是由 MD2 和 MD4 發展而來。
SHA 算法
SHA 算法,即安全散列算法(Secure Hash Algorithm)是一種與MD5同源的數據加密算法,該算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的散列算法之一,并被廣泛使用。
SHA 實際上是一系列算法的統稱,分別包括:SHA-1、SHA-224、SHA-256、SHA-384 以及 SHA-512。
HMAC 算法
HMAC 是密鑰相關的消息認證碼,HMAC 運算利用哈希算法,以一個密鑰和一個消息為輸入,生成一個消息摘要作為輸出。
我們在使用 MD 或 SHA 消息摘要算法時,可以保證數據的完整性。但是在網絡傳輸場景下,消息發送者僅發送原始數據和數據摘要信息是不夠的,黑客可以通過偽裝原始數據和數據摘要信息,達到攻擊的目的,HMAC 算法通過密鑰和數據共同生成消息摘要,黑客在不知道密鑰的情況下,偽造數據和消息摘要難度進一步加大。
對稱加密算法
對稱加密算法是應用較早的加密算法,技術比較成熟。在對稱加密算法中,數據發送方將明文和加密密鑰一起經過特定的加密算法處理后,使其變成復雜的、無法理解的加密密文后發送給接收方。接收方收到密文報文后,若想解讀原文,則需要使用報文加密時用的同一個密鑰及相同算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密算法中,雙方使用的密鑰只有一個,雙方都需要使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須獲得加密密鑰。
常見的對稱加密算法有:DES、3DES(TripleDES)和AES。
DES 算法
DES 算法全稱為 Data Encryption Standard,即數據加密算法,它是IBM公司于1975年研究成功并公開發布的。DES 算法的入口參數有三個:Key、Data、Mode。其中Key為8個字節,共64位,是DES算法的工作密鑰;Data也為8個字節64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。
3DES 算法
3DES(或稱為Triple DES)是三重數據加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當于是對每個數據塊應用三次DES加密算法。由于計算機運算能力的增強,原版DES密碼的密鑰長度變得容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼算法。
AES 算法
AES(Advanced Encryption Standard),高級加密標準是美國國家標準技術研究所在2001年發布的,AES是一個對稱分組密碼算法,旨在取代DES成為廣泛使用的標準。
AES 算法是一種最常見的對稱加密算法(微信小程序加密傳輸就是用這個加密算法),根據使用的密碼長度,AES 算法最常見的有3種加密方案,用以適應不同的場景要求,分別是AES-128、AES-192 和 AES-256。
非對稱加密算法
非對稱加密需要兩個密鑰:公鑰 (public key) 和私鑰 (private key)。公鑰和私鑰是一對,如果用公鑰對數據加密,那么只能用對應的私鑰解密。如果用私鑰對數據加密,只能用對應的公鑰進行解密。因為加密和解密用的是不同的密鑰,所以稱為非對稱加密。
非對稱加密算法對于密鑰的保密性上要好于對稱加密算法,它消除了用戶需要交換密鑰的安全隱患。但是加解密速度要遠遠慢于對稱加密,在某些極端情況下,甚至能比對稱加密慢上1000倍。
常見的非對稱加密算法有:RSA 、DSA 和ECC 。
RSA 算法
RSA 加密算法是目前最有影響力的公鑰加密算法,并且被普遍認為是目前最優秀的公鑰方案之一。RSA 是第一個能同時用于加密和數字簽名的算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被 ISO 推薦為公鑰數據加密標準。RSA 加密算法基于一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。
DSA 算法
DSA 是基于整數有限域離散對數難題的,其安全性與 RSA 相比差不多。DSA 的一個重要特點是兩個素數公開,這樣,當使用別人的 p 和 q 時,即使不知道私鑰,你也能確認它們是否是隨機產生的,還是作了手腳。RSA算法卻做不到。DSA 只是一種算法,和 RSA 不同之處在于它不能用作加密和解密,也不能進行密鑰交換,只用于簽名,它比RSA要快很多。
簡單的說,這是一種更高級的驗證方式,用作數字簽名。不單單只有公鑰、私鑰,還有數字簽名。私鑰加密生成數字簽名,公鑰驗證數據及簽名,如果數據和簽名不匹配則認為驗證失敗。數字簽名的作用就是校驗數據在傳輸過程中不被修改,數字簽名,是單向加密的升級。
ECC 算法
橢圓加密算法(ECC)是一種公鑰加密算法,由 Koblitz 和 Miller 兩人于 1985 年提出,其數學基礎是利用橢圓曲線上的有理點構成 Abel 加法群上橢圓離散對數的計算困難性。公鑰密碼體制根據其所依據的難題一般分為三類:大整數分解問題類、離散對數問題類、橢圓曲線類。有時也把橢圓曲線類歸為離散對數類。橢圓曲線密碼體制是目前已知的公鑰體制中,對每比特所提供加密強度最高的一種體制。
比特幣錢包公鑰的生成就使用了橢圓曲線算法,通過橢圓曲線乘法可以從私鑰計算得到公鑰, 這是不可逆轉的過程。
對稱加密算法與非對稱加密算法的區別
- 對稱加密算法
加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經常發送數據的場合。缺點是密鑰的傳輸比較麻煩,一旦密鑰泄露會有比較嚴重的安全問題。
- 非對稱加密算法
加密和解密用的密鑰是不同的,這種加密方式是用數學上的難解問題構造的,通常加密解密的速度比較慢,適合偶爾發送數據的場合。優點是密鑰傳輸方便。常見的非對稱加密算法為RSA、ECC 和 EIGamal。 實際中,一般是通過RSA加密AES的密鑰,傳輸到接收方,接收方解密得到AES密鑰,然后發送方和接收方用AES密鑰來進行加解密。
像https就是用非對稱密鑰協商出對稱密鑰,再用對稱密鑰來加密業務數據。
國密算法
國密即國家密碼局認定的國產密碼算法,即商用密碼。
國密算法是國家密碼局制定標準的一系列算法。其中包括了對稱加密算法,橢圓曲線非對稱加密算法,雜湊算法。具體包括SM1、SM2、SM3、SM4等。
SM1 算法
SM1 為對稱加密。其加密強度與AES相當。該算法不公開,調用該算法時,需要通過加密芯片的接口進行調用。
采用該算法已經研制了系列芯片、智能IC卡、智能密碼鑰匙、加密卡、加密機等安全產品,廣泛應用于電子政務、電子商務及國民經濟的各個應用領域(包括國家政務通、警務通等重要領域)。
SM2 算法
SM2為非對稱加密,基于ECC。該算法已公開。由于該算法基于ECC,故其簽名速度與秘鑰生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一種)安全強度比RSA 2048位高,但運算速度快于RSA。
SM3 算法
SM3 消息摘要,可以用MD5作為對比理解。該算法已公開,校驗結果的摘要長度為256位。
SM4 算法
SM4 無線局域網標準的分組數據算法。對稱加密,密鑰長度和分組長度均為128位。
由于SM1、SM4加解密的分組大小為128bit,故對消息進行加解密時,若消息長度過長,需要進行分組,要消息長度不足,則要進行填充。
總結
在你看到或看不到的地方,安全已經在我們生活中無處不在了,安全事情無大小,同時安全也是大家最關心的問題,通過上面的介紹,相信大家也對加密算法有了整體的認識,那么接下來就跟我一起,對常用的加密算法來進一步學習,更深的認識吧。
創作不易,如果大家喜歡本文,歡迎點贊,轉發,你的關注是我們繼續前進的動力 _
歡迎大家關注「我是開發者FTD」公眾號,微信號:ForTheDevelopers
也歡迎大家添加我的個人微信交流,微信號:ForTheDeveloper
關注開發,更關注開發者!
總結
以上是生活随笔為你收集整理的奇妙的安全旅行之加密算法概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最优化学习笔记(四)共轭梯度法
- 下一篇: C语言学习及应用笔记之一:C运算符优先级