加密算法導讀
加密一般分為對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)常見的對稱加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6 和 AES常見的非對稱加密算法:RSA、ECC (行動裝置用)、Diffie-Hellman、El Gamal、DSA (數字籤名用)常見的 Hash 算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1分組加密算法中,有ECB,CBC,CFB,OFB這幾種算法模式
什麼是對稱密碼算法
網絡安全通信中要用到兩類密碼算法,加密一般分為對稱加密(Symmetric Key Encryption)和非對稱加密(Asymmetric Key Encryption)。對稱密碼算法有時又叫傳統密碼算法、秘密密鑰算法或單密鑰算法,非對稱密碼算法也叫公開密鑰密碼算法或雙密鑰算法。對稱密碼算法的加密密鑰能夠從解密密鑰中推算出來,反過來也成立。在大多數對稱算法中,加密解密密鑰是相同的。它要求發送者和接收者在安全通信之前,商定一個密鑰。對稱算法的安全性依賴於密鑰,洩漏密鑰就意味著任何人都能對消息進行加密解密。只要通信需要保密,密鑰就必須保密。對稱算法又可分為兩類。一次只對明文中的單個位(有時對字節)運算的算法稱為序列算法或序列密碼。另一類算法是對明文的一組位進行運算,這些位組稱為分組,相應的算法稱為分組算法或分組密碼。現代計算機密碼算法的典型分組長度為64位――這個長度既考慮到分析破譯密碼的難度,又考慮到使用的方便性。後來,隨著破譯能力的發展,分組長度又提高到128位或更長。常用的採用對稱密碼術的加密方案有5個組成部分:1)明文:原始信息。2)加密算法:以密鑰為參數,對明文進行多種置換和轉換的規則和步驟,變換結果為密文。3)密鑰:加密與解密算法的參數,直接影響對明文進行變換的結果。4)密文:對明文進行變換的結果。5)解密算法:加密算法的逆變換,以密文為輸入、密鑰為參數,變換結果為明文。分組加密算法中,一般有ECB,CBC,CFB,OFB這幾種算法模式。
什麼是DES加密
DES是Data Encryption Standard(數據加密標準)的縮寫。它是由IBM公司研製的一種對稱密碼算法,美國國家標準局於1977年公布把它作為非機要部門使用的數據加密標準,三十年來,它一直活躍在國際保密通信的舞臺上,扮演了十分重要的角色。DES是一個分組加密算法,典型的DES以64位為分組對數據加密,加密和解密用的是同一個算法。它的密鑰長度是56位(因為每個第8 位都用作奇偶校驗),密鑰可以是任意的56位的數,而且可以任意時候改變。其中有極少數被認為是易破解的弱密鑰,但是很容易避開它們不用。所以保密性依賴於密鑰。DES加密的算法框架如下:首先要生成一套加密密鑰,從用戶處取得一個64位長的密碼口令,然後通過等分、移位、選取和迭代形成一套16個加密密鑰,分別供每一輪運算中使用。DES解密過程:在了解了加密過程中所有的代替、置換、異或和循環迭代之後,讀者也許會認為,解密算法應該是加密的逆運算,與加密算法完全不同。恰恰相反,經過密碼學家精心設計選擇的各種操作,DES獲得了一個非常有用的性質:加密和解密使用相同的算法!加密工作模式:ECB、CBC、CFB、OFB
ECB 電子密碼本模式:Electronic codebook 每塊堵路加密優點:分塊處理 並行處理缺點:同樣的原文得到相同的密文 容易被攻擊CBC 密碼分組連結:Cipher-block chaining 每塊加密依賴前一塊的密文優點:同樣的原文得到不同的密文 原文微下的改變影響後面全部密文缺點:加密需要串行處理 誤差傳遞CFB Cipher Feedback (CFB)/密文反饋模式密文反饋(CFB,Cipher feedback)模式類似於CBC,可以將塊密碼變為自同步的流密碼;工作過程亦非常相似,CFB的解密過程幾乎就是顛倒的CBC的加密過程:需要使用一個與塊的大小相同的移位寄存器,並用IV將寄存器初始化。然後,將寄存器內容使用塊密碼加密,然後將結果的最高x位與平文的x進行異或,以產生密文的x位。下一步將生成的x位密文移入寄存器中,並對下面的x位平文重複這一過程。解密過程與加密過程相似,以IV開始,對寄存器加密,將結果的高x與密文異或,產生x位平文,再將密文的下面x位移入寄存器。與CBC相似,平文的改變會影響接下來所有的密文,因此加密過程不能並行化;而同樣的,與CBC類似,解密過程是可以並行化的。OFB Output Feedback (OFB)/輸出反饋模式輸出反饋模式(Output feedback, OFB)可以將塊密碼變成同步的流密碼。它產生密鑰流的塊,然後將其與平文塊進行異或,得到密文。與其它流密碼一樣,密文中一個位的翻轉會使平文中同樣位置的位也產生翻轉。這種特性使得許多錯誤校正碼,例如奇偶校驗位,即使在加密前計算而在加密後進行校驗也可以得出正確結果。每個使用OFB的輸出塊與其前面所有的輸出塊相關,因此不能並行化處理。然而,由於平文和密文只在最終的異或過程中使用,因此可以事先對IV進行加密,最後並行的將平文或密文進行並行的異或處理。可以利用輸入全0的CBC模式產生OFB模式的密鑰流。這種方法十分實用,因為可以利用快速的CBC硬體實現來加速OFB模式的加密過程。
什麼是3DES加密
3DES,即triple-DES,簡單地說就是3次DES加解密的組合。現已不推薦使用。(E表示Encrypt,D表示Decrypt。)加密:cipthertext = E(k3, D(k2, E(k1, plaintext)))解密:plaintext = D(k1, E(k2, D(k3, ciphertext)))特點:如果三個密鑰都一樣,拿剛好和DES一樣。
什麼是AES加密
AES, Advanced Encryption Standard,是現行的對稱加密標準。目前(2017)如果使用對稱加密,應該使用AES。當然,只能說當前AES算法是安全的,不能保證AES永遠都是安全的。分組:128bit。密鑰:128bit、192bit、256bit。Go語言包只支持128bit,因此下例子中使用的是128bit
DSA (Digital Signature Algorithm)
DSA(Digital Signature Algorithm)是Schnorr和ElGamal籤名算法的變種,被美國NIST作為DSS(DigitalSignature Standard)。DSA加密算法主要依賴於整數有限域離散對數難題,素數P必須足夠大,且p-1至少包含一個大素數因子以抵抗Pohlig &Hellman算法的攻擊。M一般都應採用信息的HASH值。DSA加密算法的安全性主要依賴於p和g,若選取不當則籤名容易偽造,應保證g對於p-1的大素數因子不可約。其安全性與RSA相比差不多。DSA 一般用於數字籤名和認證。在DSA數字籤名和認證中,發送者使用自己的私鑰對文件或消息進行籤名,接受者收到消息後使用發送者的公鑰來驗證籤名的真實性。DSA只是一種算法,和RSA不同之處在於它不能用作加密和解密,也不能進行密鑰交換,只用於籤名,它比RSA要快很多.
ECC (Elliptic Curves Cryptography),橢圓曲線密碼編碼學。
橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為ECC),一種建立公開密鑰加密的算法,基於橢圓曲線數學。橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。橢圓曲線密碼學的主要優勢是在某些情況下它比其他的方法使用更小的密鑰 — — 比如RSA加密算法 — — 提供相當的或更高等級的安全。橢圓曲線密碼學的另一個優勢是可以定義群之間的雙線性映射,基於Weil對或是Tate對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。不過一個缺點是加密和解密操作的實現比其他機制花費的時間長。橢圓曲線密碼學,是一種建立公開密鑰加密的算法,也就輸非對稱加密.類似的還有RSA,EIGamal算法等.ECC被公認為在給定密鑰長度下最安全的加密算法.雙線性映射解釋:在數論中,一個雙線性映射是由兩個向量空間上的元素,生成第三個向量空間上一個元素之函數,並且該函數對每個參數都是線性的。
什麼是RSA
RSA加密算法是一種非對稱加密算法,在公開密鑰加密和電子商業中被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。這種算法非常可靠,密鑰越長,它就越難破解。根據已經披露的文獻,目前被破解的最長RSA密鑰是768個二進位位。也就是說,長度超過768位的密鑰,還無法破解(至少沒人公開宣布)。因此可以認為,1024位的RSA密鑰基本安全,2048位的密鑰極其安全。RSA算法用到的數學知識尋找兩個不相同的質數模運算互質數,又稱互素。若N個整數的最大公因子是1,則稱這N個整數互質。指數運算同餘根據歐拉函數和歐拉公式模反元素
ECC 和 RSA 相比
抗攻擊性強。相同的密鑰長度,其抗攻擊性要強很多倍。計算量小,處理速度快。ECC 總的速度比 RSA、DSA 要快得多。存儲空間佔用小。ECC 的密鑰尺寸和系統參數與 RSA、DSA 相比要小得多,意味著它所佔的存貯空間要小得多。這對於加密算法在 IC 卡上的應用具有特別重要的意義。帶寬要求低。當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時 ECC 帶寬要求卻低得多。帶寬要求低使 ECC 在無線網絡領域具有廣泛的應用前景。
什麼是非對稱加密
公開密鑰加密(英語:public-key cryptography,又譯為公開密鑰加密),也稱為非對稱加密(asymmetric cryptography),一種密碼學算法類型,在這種密碼學方法中,需要一對密鑰(其實這裡密鑰說法不好,就是「鑰」),一個是私人密鑰,另一個則是公開密鑰。這兩個密鑰是數學相關,用某用戶密鑰加密後所得的信息,只能用該用戶的解密密鑰才能解密。如果知道了其中一個,並不能計算出另外一個。因此如果公開了一對密鑰中的一個,並不會危害到另外一個的秘密性質。稱公開的密鑰為公鑰;不公開的密鑰為私鑰。--wiki百科
指的是加、解密使用不同的密鑰,一把作為公開的公鑰,另一把作為私鑰。公鑰加密的信息,只有私鑰才能解密。反之,私鑰加密的信息,只有公鑰才能解密。俗話來說:「要想使用非對稱加密算法,首先要有一對key,一個被稱為private key私鑰,一個成為public key公鑰,然後可以把你的public key分發給想給你傳密文的用戶,然後用戶使用該public key加密過得密文,只有使用你的private key才能解密,也就是說,只要你自己保存好你的private key,就能確保,別人想給你發的密文不被破解,所以你不用擔心別人的密鑰被盜,沒關係。 」
Hash 算法
Hash 算法特別的地方在於它是一種單向算法,用戶可以通過 Hash 算法對目標信息生成一段特定長度的唯一的 Hash 值,卻不能通過這個 Hash 值重新獲得目標信息。因此 Hash 算法常用在不可還原的密碼存儲、信息完整性校驗等。單向散列函數一般用於產生消息摘要,密鑰加密等,常見的有:MD5 (Message Digest Algorithm 5):是 RSA 數據安全公司開發的一種單向散列算法,非可逆,相同的明文產生相同的密文;SHA (Secure Hash Algorithm):可以對任意長度的數據運算生成一個 160 位的數值。SHA-1 與 MD5 的比較 :因為二者均由 MD4 導出,SHA-1 和 MD5 彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:對強行供給的安全性:最顯著和最重要的區別是 SHA-1 摘要比 MD5 摘要長 32 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對 MD5 是 2128 數量級的操作,而對 SHA-1 則是 2160 數量級的操作。這樣,SHA-1 對強行攻擊有更大的強度;對密碼分析的安全性:由於 MD5 的設計,易受密碼分析的攻擊,SHA-1 顯得不易受這樣的攻擊;速度:在相同的硬體上,SHA-1 的運行速度比 MD5 慢。
對稱加密與非對稱加密對比
在管理方面:公鑰密碼算法只需要較少的資源就可以實現目的,在密鑰的分配上,兩者之間相差一個指數級別(一個是 n 一個是 n2)。所以私鑰密碼算法不適應廣域網的使用,而且更重要的一點是它不支持數字籤名;在安全方面:由於公鑰密碼算法基於未解決的數學難題,在破解上幾乎不可能。對於私鑰密碼算法,到了 AES 雖說從理論來說是不可能破解的,但從計算機的發展角度來看。公鑰更具有優越性;從速度上來看:AES 的軟體實現速度已經達到了每秒數兆或數十兆比特。是公鑰的 100 倍,如果用硬體來實現的話這個比值將擴大到 1000 倍。對稱加密優缺點:對稱加密相比非對稱加密算法來說,加解密的效率要高得多、加密速度快。但是缺陷在於對於密鑰的管理和分發上比較困難,不是非常安全,密鑰管理負擔很重。非對稱加密優缺點:安全性更高,公鑰是公開的,密鑰是自己保存的,不需要將私鑰給別人。缺點:加密和解密花費時間長、速度慢,只適合對少量數據進行加密。