• 您當前所在位置:主頁 > 加密技術 > 加密算法 >
    聯系智融 / CONTACT US

    技術經理:13871093995

    郵箱:gongch@zronggsoft.com

    QQ: 點擊這里給我發消息 點擊這里給我發消息
    加密算法

    3個著名加密算法(MD5、RSA、DES)的解析

    發布時間:2015-06-15 14:11
      MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的計算機科學實驗室和RSA Data Security Inc發明,經MD2、MD3和MD4發展而來。
      
      MD5將任意長度的“字節串”變換成一個128bit的大整數,并且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。
      
      MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt文件中,并對這個readme.txt產生一個MD5的值并記錄在案,然后你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。
      
      MD5還廣泛用于加密和解密技術上,在很多操作系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的, 用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然后再去和系統中保存的MD5值進行比較,而系統并不“知道”用戶的密碼是什么。
      
      RSA是第一個既能用于數據加密也能用于數字簽名的算法。它易于理解和操作,也很流行。算法的名字以發明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。它經歷了各種攻擊,至今未被完全攻破。
      
      DES算法美國國家標準局1973年開始研究除國防部外的其它部門的計算機系統的數據加密標準,于1973年5月15日和1974年8月27日先后兩次向公眾發出了征求加密算法的公告。 1977年1月,美國政府頒布:采納IBM公司設計的方案作為非機密數據的正式數據加密標準(DES?Data Encryption Standard)。
      
      1.加密算法之MD5算法在一些初始化處理后,MD5以512位分組來處理輸入文本,每一分組又劃分為16個32位子分組。算法的輸出由四個32位分組組成,將它們級聯形成一個128位散列值。
      
      首先填充消息使其長度恰好為一個比512位的倍數僅小64位的數。填充方法是附一個1在消息后面,后接所要求的多個0,然后在其后附上64位的消息長度(填充前)。這兩步的作用是使消息長度恰好是512位的整數倍(算法的其余部分要求如此),同時確保不同的消息在填充后不相同。
      
      四個32位變量初始化為:它們稱為鏈接變量(chaining variable)
      
      接著進行算法的主循環,循環的次數是消息中512位消息分組的數目。
      
      將上面四個變量復制到別外的變量中:A到a,B到b,C到c,D到d。
      
      主循環有四輪(MD4只有三輪),每輪很相擬。第一輪進行16次操作。每次操作對a,b,c和d中的其中三個作一次非線性函數運算,然后將所得結果加上第四個變量,文本的一個子分組和一個常數。再將所得結果向右環移一個不定的數,并加上a,b,c或d中之一。最后用該結果取代a,b,c或d中之一。
      
      以一下是每次操作中用到的四個非線性函數(每輪一個)。
      
      (&是與,|是或,~是非,^是異或)
      
      這些函數是這樣設計的:如果X、Y和Z的對應位是獨立和均勻的,那么結果的每一位也應是獨立和均勻的。
      
      函數F是按逐位方式操作:如果X,那么Y,否則Z。函數H是逐位奇偶操作符。
      
      設Mj表示消息的第j個子分組(從0到15),<<< s表示循環左移s位,則四種操作為:表示表示表示表示這四輪(64步)是:第一輪第二輪第三輪第四輪常數ti可以如下選擇:在第i步中,ti是4294967296*abs(sin(i))的整數部分,i的單位是弧度。
      
      (2的32次方)
      
      所有這些完成之后,將A,B,C,D分別加上a,b,c,d。然后用下一分組數據繼續運行算法,最后的輸出是A,B,C和D的級聯。
      
      MD5的安全性MD5相對MD4所作的改進:1.增加了第四輪.
      
      2.每一步均有唯一的加法常數.
      
      3.為減弱第二輪中函數G的對稱性從(X&Y)|(X&Z)|(Y&Z)變為4.第一步加上了上一步的結果,這將引起更快的雪崩效應.
      
      5.改變了第二輪和第三輪中訪問消息子分組的次序,使其更不相似.
      
      6.近似優化了每一輪中的循環左移位移量以實現更快的雪崩效應.各輪的位移量互不相同.
      
      2.加密算法之RSA算法它是第一個既能用于數據加密也能用于數字簽名的算法。它易于理解和操作,也很流行。算法的名字以發明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。它經歷了各種攻擊,至今未被完全攻破。
      
      一、RSA算法 :首先, 找出三個數其中 p, q 是兩個相異的質數, r 是與 (p-1)(q-1) 互質的數……這三個數便是接著, 找出 m, 使得這個 m 一定存在, 因為 r 與 (p-1)(q-1) 互質, 用輾轉相除法就可以得到了…..
      
      再來, 計算這兩個數便是編碼過程是, 若資料為 a, 將其看成是一個大整數, 假設如果 a >= n 的話, 就將 a 表成 s 進位 (s <= n, 通常取則每一位數均小於 n, 然後分段編碼……接下來, 計算b 就是編碼後的資料……解碼的過程是, 計算於是乎, 解碼完畢…… 等會會證明 c 和 a 其實是相等的如果第三者進行竊聽時, 他會得到幾個數他如果要解碼的話, 必須想辦法得到 r……所以, 他必須先對 n 作質因數分解………要防止他分解, 最有效的方法是找兩個非常的大質數使第三者作因數分解時發生困難………<定理>若 p, q 是相異質數a 是任意一個正整數則證明的過程, 會用到費馬小定理, 敘述如下:m 是任一質數, n 是任一整數, 則(換另一句話說, 如果 n 和 m 互質, 則運用一些基本的群論的知識, 就可以很容易地證出費馬小定理的……..
      
      <證明>因為 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整數因為在 modulo 中是 preserve 乘法的所以1. 如果 a 不是 p 的倍數, 也不是 q 的倍數時,則 a^(p-1) == 1 mod p (費馬小定理費馬小定理所以 p, q 均能整除即2. 如果 a 是 p 的倍數, 但不是 q 的倍數時,則 a^(q-1) == 1 mod q (費馬小定理)
      
      因所以3. 如果 a 是 q 的倍數, 但不是 p 的倍數時, 證明同上4. 如果 a 同時是 p 和 q 的倍數時,則這個定理說明 a 經過編碼為 b 再經過解碼為 c 時但我們在做編碼解碼時, 限制所以這就是說 a 等於 c, 所以這個過程確實能做到編碼解碼的功能…..
      
      二、RSA 的安全性RSA的安全性依賴于大數分解,但是否等同于大數分解一直未能得到理論上的證明,因為沒有證明破解 RSA就一定需要作大數分解。假設存在一種無須分解大數的算法,那它肯定可以修改成為大數分解算法。目前, RSA 的一些變種算法已被證明等價于大數分解。不管怎樣,分解n是最顯然的攻擊方法?,F在,人們已能分解多個十進制位的大素數。因此,模數n 必須選大一些,因具體適用情況而定。
      
      三、RSA的速度由于進行的都是大數計算,使得RSA最快的情況也比DES慢上倍,無論是軟件還是硬件實現。速度一直是RSA的缺陷。一般來說只用于少量數據加密。
      
      四、RSA的選擇密文攻擊RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝( Blind),讓擁有私鑰的實體簽署。然后,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:前面已經提到,這個固有的問題來自于公鑰密碼系統的最有用的特征–每個人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way HashFunction 對文檔作HASH處理,或同時使用不同的簽名算法。在中提到了幾種不同類型的攻擊方法。
      
      五、RSA的公共模數攻擊若系統中共有一個模數,只是不同的人擁有不同的e和d,系統將是危險的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互質,那末該信息無需私鑰就可得到恢復。設P為信息明文,兩個加密密鑰為e1和e2,公共模數是n,則:密碼分析者知道n、e1、e2、C1和C2,就能得到P。
      
      因為e1和e2互質,故用Euclidean算法能找到r和s,滿足:假設r為負數,需再用Euclidean算法計算C1^(-1),則另外,還有其它幾種利用公共模數攻擊的方法??傊?,如果知道給定模數的一對e和d,一是有利于攻擊者分解模數,一是有利于攻擊者計算出其它成對的e’和d’,而無需分解模數。解決辦法只有一個,那就是不要共享模數n。
      
      RSA的小指數攻擊。 有一種提高 RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易于實現,速度有所提高。但這樣作是不安全的,對付辦法就是e和d都取較大的值。
      
      RSA算法是第一個能同時用于加密和數字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。RSA的安全性依賴于大數的因子分解,但并沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學界多數人士傾向于因子分解不是NPC問題。 RSA的缺點主要有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利于數據格式的標準化。目前,SET( Secure Electronic Transaction )協議中要求CA采用比特長的密鑰,其他實體使用比特的密鑰。
      
      3.加密算法之DES算法一、DES算法美國國家標準局1973年開始研究除國防部外的其它部門的計算機系統的數據加密標準,于1973年5月15日和1974年8月27日先后兩次向公眾發出了征求加密算法的公告。加密算法要達到的目的(通常稱為DES 密碼算法要求)主要為以下四點: ☆提供高質量的數據保護,防止數據未經授權的泄露和未被察覺的修改;☆具有相當高的復雜性,使得破譯的開銷超過可能獲得的利益,同時又要便于理解和掌握;☆DES密碼體制的安全性應該不依賴于算法的保密,其安全性僅以加密密鑰的保密為基礎;☆實現經濟,運行有效,并且適用于多種完全不同的應用。
      
      1977年1月,美國政府頒布:采納IBM公司設計的方案作為非機密數據的正式數據加密標準(DES?Data Encryption Standard)。
      
      目前在國內,隨著三金工程尤其是金卡工程的啟動,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收費站等領域被廣泛應用,以此來實現關鍵數據的保密,如信用卡持卡人的PIN的加密傳輸,IC卡與POS間的雙向認證、金融交易數據包的MAC校驗等,均用到DES算法。
      
      DES算法的入口參數有三個:Key、Data、Mode。其中Key為8個字節共64位,是DES算法的工作密鑰;Data也為8個字節64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。
      
      DES算法是這樣工作的:如Mode為加密,則用Key 去把數據Data進行加密, 生成Data的密碼形式(64位)作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的數據Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。在通信網絡的兩端,雙方約定一致的Key,在通信的源點用Key對核心數據進行DES加密,然后以密碼形式在公共通信網(如電話網)中傳輸到通信網絡的終點,數據到達目的地后,用同樣的Key對密碼數據進行解密,便再現了明碼形式的核心數據。這樣,便保證了核心數據(如PIN、MAC等)在公共通信網中傳輸的安全性和可靠性。
      
      通過定期在通信網絡的源端和目的端同時改用新的Key,便能更進一步提高數據的保密性,這正是現在金融交易網絡的流行做法。
      
      DES算法詳述DES算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位,整個算法的主流程圖如下:其功能是把輸入的64位數據塊按位重新組合,并把輸出分為L0、R0兩部分,每部分各長32位,其置換規則見下表:即將輸入的第58位換到第一位,第50位換到第2位,…,依此類推,最后一位是原來的第7位。L0、R0則是換位輸出后的兩部分,L0是輸出的左32位,R0 是右32位,例:設置換前的輸入值為D1D2D3……D64,則經過初始置換后的結果為:L0=D58D50…D8;R0=D57D49…D7。
      
      經過16次迭代運算后。得到L16、R16,將此作為輸入,進行逆置換,即得到密文輸出。逆置換正好是初始置的逆運算,例如,第1位經過初始置換后,處于第40位,而通過逆置換,又將第40位換回到第1位,其逆置換規則如下表所示:放大換位表單純換位表在f(Ri,Ki)算法描述圖中,S1,S2…S8為選擇函數,其功能是把6bit數據變為4bit數據。下面給出選擇函數Si(i=1,2……的功能表:選擇函數SiS1:S2:S3:S4:S5:S6:S7:S8:在此以S1為例說明其功能,我們可以看到:在S1中,共有4行數據,命名為0,1、2、3行;每行有16列,命名為0、1、2、3,……,14、15列。
      
      現設輸入為: D=令:列=行=D1D6然后在S1表中查得對應的數,以4位二進制表示,此即為選擇函數S1的輸出。下面給出子密鑰Ki(48bit)的生成算法從子密鑰Ki的生成算法描述圖中我們可以看到:初始Key值為64位,但DES算法規定,其中第8、16、……64位是奇偶校驗位,不參與DES運算。故Key 實際可用位數便只有56位。即:經過縮小選擇換位表1的變換后,Key 的位數由64 位變成了56位,此56位分為C0、D0兩部分,各28位,然后分別進行第1次循環左移,得到C1、D1,將C1(28位)、D1(28位)合并得到56位,再經過縮小選擇換位2,從而便得到了密鑰K0(48位)。依此類推,便可得到K1、K2、……、K15,不過需要注意的是,16次循環左移對應的左移位數要依據下述規則進行:循環左移位數以上介紹了DES算法的加密過程。DES算法的解密過程是一樣的,區別僅僅在于第一次迭代時用子密鑰K15,第二次K14、……,最后一次用K0,算法本身并沒有任何變化。
      
      二、DES算法理論圖解DES的算法是對稱的,既可用于加密又可用于解密。
      
     ?。既保赫业窖a上>三、DES算法的應用誤區 DES算法具有極高安全性,到目前為止,除了用窮舉搜索法對DES算法進行攻擊外,還沒有發現更有效的辦法。而56位長的密鑰的窮舉空間為256,這意味著如果一臺計算機的速度是每一秒種檢測一百萬個密鑰,則它搜索完全部密鑰就需要將近2285年的時間,可見,這是難以實現的,當然,隨著科學技術的發展,當出現超高速計算機后,我們可考慮把DES密鑰的長度再增長一些,以此來達到更高的保密程度。
      
      由上述DES算法介紹我們可以看到:DES算法中只用到64位密鑰中的其中56位,而第8、16、24、……64位8個位并未參與DES運算,這一點,向我們提出了一個應用上的要求,即DES的安全性是基于除了8,16,24,……64位外的其余56位的組合變化256才得以保證的。因此,在實際應用中,我們應避開使用第8,16,24,……64位作為有效數據位,而使用其它的56位作為有效數據位,才能保證DES算法安全可靠地發揮作用。如果不了解這一點,把密鑰Key的8,16,24,….. .64位作為有效數據使用,將不能保證DES加密數據的安全性,對運用DES來達到保密作用的系統產生數據被破譯的危險,這正是DES算法在應用上的誤區,留下了被人攻擊、被人破譯的極大隱患。

    上一篇:java如何采用md5加密算法加密

    下一篇:沒有了

     
     
    點擊這里給我發消息

    經理電話:13871093995

    -->

    報價申請
    加密軟件價格申請
    技術咨詢
    加密軟件技術咨詢
    關注我們

    智融科技

    久久久久久久久久久精品