1. 程式人生 > >加密技術及流行加密演算法

加密技術及流行加密演算法

深入淺出談加密
加密技術已經滲透進了整個資訊時代,任何人都不可避免地要接觸到——即使你根本不知道“加密”是什麼。銀行卡、登入計算機的口令、電子郵件的賬號密碼……無一例外地跟加密技術緊緊聯絡在一起
任何一個安全專家提起如今資訊科技的安全保護措施,都不可避免要涉及一個詞:加密(encrypt)。的確,縱觀當今資訊世界,加密離我們並不遙遠,從小小的個人密碼,到重要機密檔案,無一不是經過加密後的產物。
許多人一提起“加密”,都會有一種畏懼心理,以為加密技術絕對是“新手勿近”的尖端科技。其實不然,加密實際上一直陪伴在你一生的成長之中,回憶一下小時候很多人都玩過的智力遊戲:007收到遇害同事的字條,上面寫著4FEFKKILJK81IP,根據事先約定,已知C=3、Q=H,問該同事要傳遞什麼資訊給007?如果把這道題目放到資訊科技領域來看待,就是一條經過簡單替換字元演算法加密的字串,它把原始字元改為使用相對應的數字排序來替代,從而產生了一組“沒有意義”的字元組合,但是因為我們知道C=3等若干條件,所以稍加排序即可得到這樣的句子:Do not trust Hary,這個過程也被稱為“解密”(decrypt)。
有些讀者也許會不屑一顧,就這麼簡單的遊戲也算加密?別忘了,我們是在已經知道“C=3”的前提下完成“解密”的,換句話說,也就是已經知道了“演算法”,否則光憑以上一組不知所云的字串,誰能解開其中的祕密?

加密和解密


“就不讓你直接看到資訊”——將與之相似的思路加以擴充,便成了“加密”的來由;而拓展“我偏要看到你不想讓我看的資訊”的思想,則發展出了“解密”技術。加密和解密從誕生之日起,就是一對不可分割的難兄難弟。
加密作為保障資料安全的一種方式,很早就出現在人類的資訊傳遞中,從遠古時代開始,人們就已經在採用一種如今稱為“編碼”(Code)的方法用於保護文字資訊。最早影響全世界的加密技術誕生於戰爭年代,由德國人發明,用於傳遞情報資訊;而最早影響全世界的解密技術,也誕生於戰爭年代,由英美人開發出來用於破譯德國人的情報資訊。正是戰爭讓加解密技術不斷改進發展,直到現在,加密技術仍然在為資訊時代的資料安全服務。
說了這麼多,也該為加密技術做一個較為準確而科學的概念了,所謂“加密”,就是對原內容為明文的檔案或資料按某種演算法進行處理,使其成為不可讀的程式碼,經過這樣處理的資料通常稱為“密文”,密文只能在經過相對應的反向演算法處理後才能恢復原來的內容,通過這樣的途徑來達到保護資料不被非法竊取、閱讀的目的,而將該編碼資訊轉化為其原來資料的過程,就是“解密”。
無論哪一個國家,都會有專家專注於加密技術的研究,因此也就出現了形形色色的加密演算法,這些加密演算法按照生物界“弱肉強食”的定律發展並完善著。其中,強度高(不容易被破解)的演算法得以保留和繼續發展,強度低的演算法最終被時間淘汰。除了一些公開的加密演算法之外,也存在著一部分未公開的私人加密演算法。通常我們提及加密技術時所說的“MD5加密”、“SHA-1加密”、“RSA加密”等,其實就是在說它們所採用的演算法。

演算法:關鍵的抉擇
“我想要葡萄,還想要橙子,可是我只能選擇其中一樣,我該選哪個?”如果要為自己的資料加密,我們就不得不面對這樣一個選擇,因為世界上的演算法不止一個,究竟什麼演算法才是最適合的呢?於是,我們逐漸陷入一個選擇的泥潭中。其實,在選擇使用哪種演算法作為你的加密基礎前,如果能對各種常見演算法的原理有個大概的瞭解,相信你就不會感到那麼迷茫了。

基於“訊息摘要”的演算法
“訊息摘要”(Message Digest)是一種能產生特殊輸出格式的演算法,這種加密演算法的特點是:無論使用者輸入什麼長度的原始資料,經過計算後輸出的密文都是固定長度的,這種演算法的原理是根據一定的運算規則對原資料進行某種形式的提取,這種提取就是“摘要”,被“摘要”的資料內容與原資料有密切聯絡,只要原資料稍有改變,輸出的“摘要”便完全不同,因此,基於這種原理的演算法便能對資料完整性提供較為健全的保障。但是,由於輸出的密文是提取原資料經過處理的定長值,所以它已經不能還原為原資料,即訊息摘要演算法是“不可逆”的,理論上無法通過反向運算取得原資料內容,因此它通常只能被用來做資料完整性驗證,而不能作為原資料內容的加密方案使用,否則誰也無法還原。儘管如此,“訊息摘要”演算法還是為密碼學提供了健全的防禦體系,因為連專家也無法根據攔截到的密文還原出原來的內容。
如今常用的“訊息摘要”演算法經歷了多年驗證發展而保留下來的演算法已經不多,這其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等,其中最廣泛應用的是基於MD4發展而來的MD5演算法。
MD5演算法


MD5演算法的全稱是“訊息摘要演算法5”(Message-Digest Algorithm version.5),它是當前公認的強度最高的加密演算法。出現在MD5之前的是MD2和MD4,雖然這三者的演算法結構多少有點相似,但是由於MD2誕生於8位計算的時代,因此它的設計與後來出現的MD4、MD5完全不同,因此不能進行簡單的替代。然而,無論是MD2、MD4還是MD5,它們都是在獲得一個隨機長度資訊的基礎上產生一個128位資訊摘要的演算法。
MD2演算法是Rivest在1989年開發的,它很慢(因為是為8位機器設計的),但相當安全。在這個演算法中,首先要對資訊進行資料補位,使資訊的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到資訊末尾,並且根據這個新產生的資訊計算出雜湊值(Hash),最終運算結果即為類似於“d41d8cd98f00b204e9800998ecf8427e”的摘要,而且這個值是惟一的。
為了加強演算法的安全性,Rivest在1990年又開發出MD4演算法。MD4演算法同樣需要填補資訊以確保資訊的位元組長度加上448後能被512整除(資訊位元組長度除以512的餘數為448)。然後,一個以64位二進位制表示的資訊的最初長度被新增進來。

然而,MD4存在一個嚴重漏洞,那就是“衝突”(Collisions)。“衝突”是所有基於“摘要”的演算法都要面對的最大問題,由於它們是根據“不完整”的資料內容產生的密文,如果運算過程存在瑕疵,就會在處理某些不同資料時產生相同的摘要,這帶來的後果可是致命的。因為“摘要”演算法的原則是原資料不可還原,因此驗證的過程並不同於簡單加密運算裡的“資料還原匹配”,驗證端同樣要根據原資料運算得到的摘要作為憑據與客戶端發來的摘要進行匹配檢驗,如果兩段字串完全相同,即視為驗證通過。這是在“摘要演算法”理論上“不可逆且惟一”的基礎上採用的安全檢驗方法,驗證方可以不需要索取原資料,而只要擁有一個有效的摘要即可完成對客戶端的身份確認,大大減少了原資料被入侵者截獲的機率。
但是這樣的驗證方式就產生了一個“看似不可能”的缺陷:假如入侵者能偽造出一段資料,使之能在通過“摘要”計算後產生的摘要與真正的原資料產生的摘要一樣,那麼入侵者便能冒充原資料持有者通過身份驗證。這在理論上是不可能的,然而現實總是不會讓人那麼愉快,由於演算法不可避免地出現了漏洞,使得這個設想成為了事實,這就是“衝突”的來源:某兩個或多個數據產生的摘要出現了完全雷同的現象,使得使用者能在輸入了即使不是原資料的密碼後能順利通過驗證,因為身份檢驗程式發現原本儲存的使用者資訊的簽名資料與接收到的資料的運算結果完全一致,於是認為請求方為合法使用者,就給予通過了。這種運算結果相同的現象,就是“衝突”。

“衝突”會造成非常危險的後果,因此MD4被無情地拋棄了,取而代之的是在MD4基礎上加強了演算法的MD5,它在MD4的基礎上增加了“安全帶”(Safety Belts)的概念,雖然MD5比MD4稍微慢一些,但卻大大減小了衝突的發生率,雖然很早以前就有專家發現MD5演算法在專門用於尋找“衝突”的機器上平均每24天就會產生一個“衝突”,但是對於一般應用來說,這種機率非常低微,因此MD5至今仍然是最強健的加密演算法之一。
有讀者也許會問,既然MD5是不可逆的,那麼網路上存在的那些“MD5密碼破解工具”又是什麼回事?其實,那並不是破解,至今MD5還沒能被完全破解過,雖然曾經有過一篇報道稱中國的一個教授破解了MD5加密演算法,但是後來這個結論又被推翻了。網路上流傳的那些工具純粹是依賴於“運氣+機器效能+耐心”的產品而已,它們的原理是“窮舉”,即程式在一定的資料範圍內產生一系列資料組合進行MD5運算,再把運算結果與獲取的摘要進行比較,如果兩者相同,就被定義為“破解”了。這只是一種窮舉法而已,實際意義不大,要知道在不產生衝突的前提下生成一個與原資料完全相同的字串要有多少運氣的成分,更何況它還完全依賴於你的機器效能,如果對方密碼簡單如123456這樣的形式,我們還可能僥倖在1分鐘~1天內運算出來,但是如果對方密碼是[email protected]這樣的組合呢?MD5的高強度使得它如此難以破解,因此成為大眾首選,許多入侵者在辛苦取得目標網站資料庫後,一看password欄位都是0ca175b9c0f726a831d895e269332461的形式,第一反應都會是“暈倒!又白乾了!”
對稱/非對稱金鑰加密演算法
由於“摘要”演算法加密的資料僅僅能作為一種身份驗證的憑據使用,如果我們要對整個文件資料進行加密,就不能採用這種“不可逆”的演算法了。“金鑰”演算法(Key Encoding)的概念因此而被提出,與開頭提到的智力題類似,此類演算法通過一個被稱為“金鑰”的憑據進行資料加密處理,接收方通過加密時使用的“金鑰”字串進行解密,即雙方持有的“密碼”相同(對稱)。如果接收方不能提供正確的“金鑰”,解密出來的就不是原來的資料了。
以上是“對稱金鑰”的概念,那麼“非對稱金鑰”又該怎麼理解呢?有人用郵箱作為比喻,任何人都可以從郵箱的信封入口塞進信件,但是取信的權力卻僅僅在於持有郵箱鑰匙的人的手上。這個眾人皆知的信封入口就是“公鑰”(Public Key),而你持有的郵箱鑰匙就是“私鑰”(Private Key)。這種演算法規定,對方給你傳送資料前,可以用“公鑰”加密後再發給你,但是這個“公鑰”也無法解開它自己加密的資料,即加密過程是單向的,這樣即使資料被途中攔截,入侵者也無法對其進行破解,能還原資料內容的只有“私鑰”的持有者,這就是“非對稱金鑰”加密演算法,也稱為“公共金鑰演算法”。
你也許會想,這兩種形式加密出來的資料如果稍加耐心進行分析,一定能找到變化規律從而直接破解。這個想法沒錯,但是專家早就思考過這個可能性了,因此這種演算法雖然是採用某個字串作為憑據進行加密操作的,可是它可能把憑據拆分為多個不同的“子段”並進行多次運算,最終的結果就是讓你難以發現變化的規律,破解也就難上加難。
基於“對稱金鑰”的加密演算法主要有DES、TripleDES、RC2、RC4、RC5和Blowfish等;基於“非對稱金鑰”的加密演算法主要有RSA、Diffie-Hellman等。
對稱金鑰:DES、TripleDES演算法
美國國家標準局在1973年開始研究除國防部以外其他部門的計算機系統的資料加密標準,最終選用了IBM公司設計的方案作為非機密資料的正式資料加密標準(DES即Data Encryption Standard)。DES演算法從誕生開始,就被各個領域廣泛採用,包括ATM櫃員機、POS系統、收費站等,DES以它高強度的保密效能為大眾服務,那麼,它是如何工作的呢?
DES演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的金鑰也是64位。首先,DES把輸入的64位資料塊按位重新組合,並把輸出分為L0、R0兩部分,每部分各長32位,並進行前後置換,最終由L0輸出左32位,R0輸出右32位,根據這個法則經過16次迭代運算後,得到L16、R16,將此作為輸入,進行與初始置換相反的逆置換,即得到密文輸出。
DES演算法具有極高的安全性,到目前為止,除了用窮舉搜尋法對DES演算法進行攻擊外,還沒有發現更有效的辦法,而56位長金鑰的窮舉空間為256,這意味著如果一臺計算機的速度是每秒種檢測100萬個金鑰,那麼它搜尋完全部金鑰就需要將近2285年的時間,因此DES演算法是一種很可靠的加密方法。
對稱金鑰:RC演算法
RC系列演算法是大名鼎鼎的RSA三人組設計的金鑰長度可變的流加密演算法,其中最流行的是RC4演算法,RC系列演算法可以使用2048位的金鑰,該演算法的速度可以達到DES加密的10倍左右。
RC4演算法的原理是“攪亂”, 它包括初始化演算法和偽隨機子密碼生成演算法兩大部分,在初始化的過程中,金鑰的主要功能是將一個256位元組的初始數簇進行隨機攪亂,不同的數簇在經過偽隨機子密碼生成演算法的處理後可以得到不同的子金鑰序列,將得到的子金鑰序列和明文進行異或運算(XOR)後,得到密文。
由於RC4演算法加密採用的是異或方式,所以,一旦子金鑰序列出現了重複,密文就有可能被破解,但是目前還沒有發現金鑰長度達到128位的RC4有重複的可能性,所以,RC4也是目前最安全的加密演算法之一。
非對稱金鑰:RSA演算法
RSA演算法是目前最流行的公鑰密碼演算法,它使用長度可以變化的金鑰。RSA是第一個既能用於資料加密也能用於數字簽名的演算法。
RSA演算法的原理如下:
1.隨機選擇兩個大質數p和q,p不等於q,計算N=pq;
2.選擇一個大於1小於N的自然數e,e必須與(p-1)×(q-1)互素。
3.用公式計算出d:d×e = 1 (mod (p-1)×(q-1)) 。
4.銷燬p和q。
最終得到的N和e就是“公鑰”,d就是“私鑰”,傳送方使用N去加密資料,接收方只有使用d才能解開資料內容。
RSA的安全性依賴於大數分解,小於1024位的N已經被證明是不安全的,而且由於RSA演算法進行的都是大數計算,使得RSA最快的情況也比DES慢上好幾倍,這也是RSA最大的缺陷,因此它通常只能用於加密少量資料或者加密金鑰。需要注意的是,RSA演算法的安全性只是一種計算安全性,絕不是無條件的安全性,這是由它的理論基礎決定的。因此,在實現RSA演算法的過程中,每一步都應儘量從安全性方面考慮。

小密碼,大學問
隨著資訊化走進千家萬戶,人們越來越關注自己的資料安全,而資料安全除了在攻防體系上必須有所保障以外,關鍵的一點就是要對其進行強度夠高的加密,進一步減小資料被盜竊後的損失。這一觀點早已在網路論壇的發展中得到了證實,早期的論壇資料庫都是未經過加密處理就直接儲存的,在這個前提下,只要入侵者拿到了資料庫,就等於拿到了整個論壇,因為密碼欄位是明文形式的。有些重要的網站甚至使用一些後臺沒有提供資料加密方案的程式做站點,這是非常不明智的。
確定了加密方案後,有些人就自己寫演算法進行資料加密,殊不知這也算產生了安全隱患,通常個人無法寫出高強度的加密演算法,入侵者如果稍加分析便能破譯內容,你的辛苦也就付之東流。相反,如果採用在國際得到安全認證的流行加密方案,資料安全反而提高了,何樂而不為?

 

相關推薦

加密技術流行加密演算法

深入淺出談加密加密技術已經滲透進了整個資訊時代,任何人都不可避免地要接觸到——即使你根本不知道“加密”是什麼。銀行卡、登入計算機的口令、電子郵件的賬號密碼……無一例外地跟加密技術緊緊聯絡在一起。任何一個安全專家提起如今資訊科技的安全保護措施,都不可避免要涉及一個詞:加密(en

Android 將本地圖片轉換為Base64加密字串根據加密串反向生成圖片

一.需求場景     某些時候,我們要傳遞圖片到伺服器端,那麼是走IO還是直接將二進位制資料流通過Base64轉碼加密後變更為字串傳遞給伺服器呢?其實兩種方式均可實現功能,而對於容量比較小的圖片,如在2MB以內的圖片來說,採用Base64加密字串傳遞的方式

Oracle中定義DES加密解密MD5加密函式

(4)函式使用示例 DES加密: update tb_salarysign_staff s set s.staffpwd =encrypt_des(s.staffpwd, 'test#5&124*!de'); DES解密:select decrypt_des(s.staffpwd, 'test

加密ic aes256 加密app

以前沒接觸過加密ic,只知道加密ic是通過i2c和mcu通訊,前段時間做的專案算是第一次用上了。 這個專案的要求是通過加密ic 既要能加密我們的韌體 也要能加密配合我們韌體使用的app。mcu和ic之間用i2c通訊,mcu和app之間走usb通道 我們的方案是這樣的: 由

Java進階 八 Java加密技術之對稱加密 非對稱加密 不可逆加密算法

歐洲 再次 div 數據安全 識別 交易 standard 計算 領域 對稱加密 非對稱加密 不可逆加密算法 根據密鑰類型不同可以將現代密碼技術分為兩類:對稱加密算法(私鑰密碼體系)和非對稱加密算法(公鑰密碼體系)。 1 對稱加密算法 原理 對稱加密算法中,數據

視頻內容誰來保護?阿裏雲視頻加密技術架構原理解讀

視頻處理 log 加速 alt 不同的 均可 .com 平臺 內核 視頻行業的從業者——尤其是在線教育、財經分析等重視內容版權的播放平臺都知道,視頻安全是一個非常重要的基礎需求。用戶通過一次付費行為,就可以拿到付費視頻的播放URL,將播放URL進行二次分發,這種行為叫做盜鏈

以前寫的兩本書《安全之路:Web滲透技術實戰案例解析(第2版)》和《黑客攻防實戰加密與解密》

Web滲透技術及實戰案例解析 黑客攻防實戰加密與解密 應一些朋友的要求,我重新將書封面和購買地址發一下說明一下:www.antian365.com原來域名轉移到國外去了。現在國家對境外域名在國內訪問必須實名制,進行備份啥的,情況你懂的。最近正在制作《黑客攻防實戰加密與解密》的視頻課程,對黑客攻防過程遇

加密技術加密演算法AES在資訊保安中的應用

隨著網路資訊科技的迅猛發展,網路資料加密的要求也日益提高,AES的應用首先體現在網路資訊保安領域中,以下四點就能很好的證明AES加密演算法的廣泛應用。 1. 無線 網路應用由於無線網路的通訊通道較有線網路更為開放,安全性的要求更高。目前,無線網路主要有兩個標準 :一是用於 WLAN的IEEE803.11協議

加密技術加密演算法的分類

為了滿足資訊保安中的不同需要,產生了特點各異的加密演算法。按照加密時對明文的處理方式,密碼演算法可分為序列密碼和分組密碼演算法.序列密碼演算法是對明文訊息按字元逐位進行處理,它利用少量的金鑰通過某種複雜的運算產生大量的偽隨機位流,用於對明文位流的加密;金鑰在每次

加密技術:神經網路及其混沌加密演算法

人類的思維活動自古以來一直是人們*感興趣的課題之一,在古代,人們總是認為人類的思堆活動是在心臟部位完成的,後來人們才逐漸意識到人類思維活動應該是由大腦來完成的。因此,人們希望通過研究動物大腦的細胞結構和活動機理來詳細瞭解人類各種智慧活動行為如學習,聯想,識別及睡

HTTP和HTTPS的區別HTTPS加密演算法

HTTPS協議的埠是443,HTTP協議的埠是80,其中HTTPS是相對安全的 HTTP是超文字傳輸協議 應用層協議 FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。 傳輸層協議的有 TCP協議、UDP協議 HTTP和HTTPS的概念        

Java加密技術——對稱加密演算法一覽

Java加密技術(二)——對稱加密演算法    Java對稱加密演算法,最常用的莫過於DES資料加密演算法。 DES  Data Encryption Standard,即資料加密演算法。是IBM公司

PHP中加密形式演算法介紹

1.Md5()加密演算法——單向加密,不能解密 語法:String md5(string $str,$raw=false), $str:必需。規定要計算的字串, $raw:可選。規定十六進位制或二進位制輸出格式: TRUE - 原始 16 字元二進位制格式 FALS

關於druid數據庫密碼加密流程問題

reat 如果 命令 -c init 被拒絕 進行 true ora 最近項目中需要在配置中將數據庫密碼加密,就使用了阿裏的druid來實現,將流程和問題和大家分享一下。 項目使用的是Spring加jetty,原先數據庫連接使用的是Apache的DBCP:commons-d

什麽是私有密鑰密碼技術——密鑰加密算法采用同一把密鑰進行加密和解密

解密 網絡安全 位操作 線性復雜 對稱 大量 控制 全局 相位 什麽是私有密鑰密碼技術 私有密鑰(Symmetric Key),又叫對稱密鑰。密鑰加密算法采用同一把密鑰進行加密和解密。它的優點是加密和解密速度非常快,但密鑰的分發和管理比較困難。信息的發送者和接收者必須明確同

Java加密技術(一)——BASE64與單向加密算法MD5&SHA&MAC

sha256 integer 被人 sent 發現 Coding design 如果 targe http://snowolf.iteye.com/blog/379860 加密解密,曾經是我一個畢業設計的重要組件。在工作了多年以後回想當時那個加密、解密算法,實在是太單

aNDROID實現aEs加密技術

android java .com and androi aid ava lis 加密 JaVa%E9%9D%A2%E8%AF%95%E7%AC%94%E8%AF%95%E9%A2%98%E5%A4%A7%E6%B1%87%E6%80%BB%282%29 http://m

Java加密技術(八)——數字證書

keystore 表示 encode png 代碼 簽名 更新 rsa加密 turn 原文:http://snowolf.iteye.com/blog/391931 請大家在閱讀本篇內容時先閱讀 Java加密技術(四),預先了解RSA加密算法。 在構建Java代碼實現前

非對稱加密技術- RSA算法數學原理分析

這樣的 另一個 href 使用 兩個 對稱 基礎 大於 深入淺出 非對稱加密技術,在現在網絡中,有非常廣泛應用。加密技術更是數字貨幣的基礎。 所謂非對稱,就是指該算法需要一對密鑰,使用其中一個(公鑰)加密,則需要用另一個(私鑰)才能解密。 但是對於其原理大部分同學應該都是一

數據加密技術發展

代碼安全“AI”時代已經到來,數據安全問題,已經兵臨城下。網絡安全之敵,已經不是信息系統本身的問題,而是要命的運營風險問題!數據加密技術也在這激流中奮勇向前,不斷完善,在這萬物互聯的大時代下一路保駕護航!?數據加密技術是一項非常古老的技術,早在公元前2000多年前,埃及人就開始使用特別的象形文字作為信息編碼來