對稱密鑰算法與非對稱密鑰算法

一、.對稱密鑰算法

1.定義:對稱加密算法即,加密和解密使用相同密鑰的算法。(加密Key=解密key);對稱密鑰算法又分爲分組密碼 (Block Cipher)流密碼(Stream Cipher)。

常用算法包括DES(Data Encryption Standard,數據加密算法) 、3DES(Triple Data Encryption Algorithm,三重數據加密算法)、 AES(Advanced Encryption Standard,高級加密標準,又稱Rijndael加密法) 、PBE(Password-based encryption,基於密碼驗證)、RC4(來自Rivest Cipher 4的縮寫)、 SM1 、SM4(國產)

2.優點:加密速度快,便於硬件實現和大規模生產

缺點:需要保障密鑰安全;無法用來簽名和抗抵賴;

每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量呈幾何級數增長,密鑰管理成爲用戶的負擔。對稱加密算法在分佈式網絡系統上使用較爲困難,主要是因爲密鑰管理困難,使用成本較高。

    (1)DES(Data Encryption Standard,數據加密算法)
  
  DES是最基本的對稱加密算法,也是使用頻率最高的一種算法,加密密鑰與解密密鑰相同。DES出身比較好,出自IBM之手,後被美國軍方採納,之後便廣泛流傳,但是近些年使用越來越少,因爲DES使用56位密鑰,以現代計算能力,24小時內即可被破解。雖然如此,在某些簡單應用中,我們還是可以使用DES加密算法。DES使用56位長度的密鑰,有些提供商可能附加8位奇偶校驗位。
  
  算法流程:
  
  發送者構建祕鑰-->發送祕鑰--> 接收者
  
  發送者明文-->DES算法+祕鑰加密--> 密文--> 接收者
  
  接收者--> DES算法+祕鑰解密--> 明文

(2)3DES(Triple Data Encryption Algorithm,三重數據加密算法)
  
  3DES(或稱爲Triple DES)是三重數據加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當於是對每個數據塊應用三次DES加密算法。由於計算機運算能力的增強,原版DES密碼的密鑰長度變得容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼算法。 
  DES被很多密碼學機構質疑,因爲算法是半公開的,因此違反柯克霍夫原則,所以在這個基礎上,延伸了3重DES.
  
  算法流程:
  
  發送者構建祕鑰-->發送祕鑰--> 接收者
  
  發送者明文-->3DES算法+祕鑰加密--> 密文--> 接收者
  
  接收者--> 3DES算法+祕鑰解密--> 明文

(3)AES(Advanced Encryption Standard,高級加密標準,又稱Rijndael加密法)
  
  高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣爲全世界所使用。經過五年的甄選流程,高級加密標準由美國國家標準與技術研究院(NIST)於2001年11月26日發佈於FIPS PUB 197,並在2002年5月26日成爲有效的標準。2006年,高級加密標準已然成爲對稱密鑰加密中最流行的算法之一。 
  
  AES是目前使用最多的對稱加密算法之一,AES至今尚未聽說有被破解的案例。
  
  AES通常用於移動通信系統加密以及基於SSH協議的軟件,如SSH Client,secureCRT
  
  AES是用來替代DES的,因爲DES有很多被破解,而3DES效率又比較慢
  
  AES加密算法的默認密鑰長度爲128,還可以選擇192、256.
  
  注意:JDK實現AES算法,使用256位密鑰長度時要獲得無政策限制權限文件,BC不會存在該問題。無政策限制權限是指某些國家的進口管制限制,java發佈的運行環境包中中的加解密有一定限制。
  
   算法流程:
  
  發送者構建祕鑰-->發送祕鑰--> 接收者
  
  發送者明文-->AES算法+祕鑰加密--> 密文--> 接收者
  
  接收者--> AES算法+祕鑰解密--> 明文

(4)PBE(Password-based encryption,基於密碼驗證)
  
  PBE算法(Password Based Encryption,基於口令加密)是一種基於口令的加密算法,其特點是使用口令代替了密鑰,而口令由用戶自己掌管,採用隨機數雜湊多重加密等方法保證數據的安全性。PBE算法在加密過程中並不是直接使用口令來加密,而是加密的密鑰由口令生成,這個功能由PBE算法中的KDF函數完成。KDF函數的實現過程爲:將用戶輸入的口令首先通過“鹽”(salt)的擾亂產生準密鑰,再將準密鑰經過散列函數多次迭代後生成最終加密密鑰,密鑰生成後,PBE算法再選用對稱加密算法對數據進行加密,可以選擇DES、3DES、RC5等對稱加密算法。
  
  特點:
  
  結合了消息摘要算法和對稱加密算法的優點,本質上是對MD5/SHA以及DES/3DES/AES算法的包裝,不是新的算法,不過也是最爲牛逼的一種方式。
  
  鹽:指加密的隨機字符串或者口令等,也可以人爲是一些擾碼,防止密碼的暴力破解
  
  算法流程:
  
  發送者構建口令-->發送口令--> 接收者
  
  發送者構建鹽
  
  發送者明文-->PBE算法+口令+鹽加密--> 密文(同時發送鹽)--> 接收者
  
  接收者--> PBE算法+口令+鹽解密--> 明文
 (5)RC4(來自Rivest Cipher 4的縮寫) 

       RC4於1987年提出,和DES算法一樣。是一種對稱加密算法,也就是說使用的密鑰爲單鑰(或稱爲私鑰)。

但不同於DES的是。RC4不是對明文進行分組處理,而是字節流的方式依次加密明文中的每個字節。解密的時候也是依次對密文中的每個字節進行解密。

       特點:

        算法簡單,執行速度快;

       並且密鑰長度是可變的,可變範圍爲1-256字節(8-2048比特)。

     (在現在技術支持的前提下,當密鑰長度爲128比特時,用暴力法搜索密鑰已經不太可行,所以能夠預見RC4的密鑰範圍任然能夠在今後相當長的時間裏抵禦暴力搜索密鑰的攻擊。實際上,現在也沒有找到對於128bit密鑰長度的RC4加密算法的有效攻擊方法。)

      關鍵變量:

       1、密鑰流:RC4算法的關鍵是依據明文和密鑰生成相應的密鑰流,密鑰流的長度和明文的長度是相應的。也就是說明文的長度是500字節,那麼密鑰流也是500字節。當然,加密生成的密文也是500字節。由於密文第i字節=明文第i字節^密鑰流第i字節;

       2、狀態向量S:長度爲256。S[0],S[1].....S[255]。每一個單元都是一個字節。算法執行的不論什麼時候。S都包含0-255的8比特數的排列組合,僅僅只是值的位置發生了變換;

       3、暫時向量T:長度也爲256,每一個單元也是一個字節。

假設密鑰的長度是256字節。就直接把密鑰的值賦給T,否則,輪轉地將密鑰的每一個字節賦給T。

       4、密鑰K:長度爲1-256字節。注意密鑰的長度keylen與明文長度、密鑰流的長度沒有必定關係。通常密鑰的長度趣味16字節(128比特)。

(6)SM1

定義:國密 SM1( SM1 cryptographic algorithm),國密 SM1 算法是由國家密碼管理局編制的一種商用密碼分組標準對稱算法

    SM1 爲對稱加密。其加密強度與AES相當。該算法不公開,調用該算法時,需要通過加密芯片的接口進行調用;該算法是國家密碼管理部門審批的 SM1 分組密碼算法 , 分組長度和密鑰長度都爲 128 比特, 僅以 IP 核的形式存在於芯片中。採用該算法已經研製了系列芯片、智能 IC 卡、智能密碼鑰匙、加密卡、加 密機等安全產品,廣泛應用於電子政務、電子商務及國民經濟的各個應用領域(包括國家政 務

通、警務通等重要領域)。

(7)SM4

2012年3月,國家密碼管理局正式公佈了包含SM4分組密碼算法在內的《祖沖之序列密碼算法》等6項密碼行業標準。其分組長度爲128bit,密鑰長度也爲128bit。加密算法與密鑰擴展算法均採用32輪非線性迭代結構,以字(32位)爲單位進行加密運算,每一次迭代運算均爲一輪變換函數F。SM4算法加/解密算法的結構相同,只是使用輪密鑰相反,其中解密輪密鑰是加密輪密鑰的逆序。

3.分組密碼 (Block Cipher)

一次加密解密操作作用於一個數據塊,例如64位算法:DES、 3DES、AES 、DES替代者、RC2、 RC5、BLOWFISH 、TWOFISH

分組密碼設計原則:

安全性角度:

(1)“混亂原則”:爲了避免密碼分析者利用明文與密文之間的依賴關係進行破譯,密碼的設計應該保證這種依賴關係足夠複雜。

(2)“擴散原則” :爲避免密碼分析者對密鑰逐段破譯,密碼的設計應該保證密鑰的每位數字能夠影響密文中的多位數字 ;同時,爲了避免密碼分析者利用明文的統計特性,密碼的設計應該保證明文的每位數字能夠影響密文中的多位數字,從而隱藏明文的統計特性。

可實現性角度:

(1)應該具有標準的組件結構 (子模塊),以適應超大規模集成電路的實現。

(2)分組密碼的運算能在子模塊上通過簡單的運算進行

4.流密碼(Stream Cipher)

一次加密解密操作作用於一位或一個字節。如算法:RC4

5.對稱密碼模式:

電子密碼本(Eletronic CoodBook, ECB),密碼分組鏈(Cipher Block Chaining , CBC),密文反饋( Cipher FeedBack , CFB),輸出反饋(Output FeedBack , OFB )。

電子密碼本模式 Electronic Code Book:

優點:

(1)簡單;(2)有利於並行計算;(3)誤差不會被傳送;

缺點:

(1)不能隱藏明文的模式;(2)可能對明文進行主動攻擊;

密碼分組鏈模式 Cipher Block Chaining:

優點:不容易主動攻擊,安全性好於ECB,適合傳輸長度長的報文,是SSL、IPSec的 標準。

缺點:(1)不利於並行計算;(2)誤差傳遞;(3)需要初始化向量IV

二.非對稱密鑰算法(也稱公開密鑰算法)

1.定義:非對稱密碼體制也叫公開密鑰密碼體制、雙密鑰密碼體制。其原理是加密密鑰與解密密鑰不同,形成一個密鑰對,用其中一個密鑰加密的結果,可以用另一個密鑰來解密 。

      目前普遍使用的非對稱加密算法主要有RSA、Elgamal(離散對數)、ECC(橢圓曲線)等

2.特點:加密和解密使用不同的密鑰;一個密鑰公開,稱公鑰;一個密鑰保密,稱私鑰

常用算法:RSA 、ECC、 DSA(Digital Signature Algorithm)

優點:密鑰分配,不必保持信道的保密性 ;可以用來簽名和防抵賴

(1)RSA加密簽名特性:

RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。

在RSA加密算法,由於PADDING的不一致,會導致加密結果每次不一致;使用PKCS1Padding加密結果不一致;使用NoPadding加密結果一致;簽名結果每次是一致的。

RSA算法的安全性:

在理論上,rsa 的安全性取決於模n分解的困難性,但數學上至今還未證明分解模就是攻擊rsa的最佳辦法。

人們完全可以設想有另外的途徑破譯rsa,如求解密指數d或找到(p-1)(q-1)等。但這些途徑都不比分解n來的容易。

已公開的或已知的攻擊方法:

1,針對RSA最流行的攻擊一般是基於大數因數分解。

1999年,RSA-155 (512 bits)被成功分解,花了五個月時間(約8000 MIPS年)和224 CPU hours在一臺有3.2G中央內存的Cray C916計算機上完成。

ECC 160bit算法等級,相當於RSA 1024bit密鑰提供的保密強度,210bit與RSA2048算法強度相當,計算量則更小,處理速度更快,存儲空間和傳輸帶寬佔用較少

2,秀爾算法

量子計算裏的秀爾算法能使窮舉的效率大大的提高。由於RSA算法是基於大數分解(無法抵抗窮舉攻擊),因此在未來量子計算能對RSA算法構成較大的威脅。一個擁有N量子比特的量子計算機,每次可進行2^N次運算,理論上講,密鑰爲1024位長的RSA算法,用一臺512量子比特位的量子計算機在1秒內即可破解。

(2)非對稱密鑰算法-ECC:(ECC-橢圓曲線加密 Ellipse Curve Cryptography)

基於橢圓曲線理論的公鑰加密技術(1985)與傳統的基於大質數因子分解困難性的加密方法不同,ECC通過橢圓曲線方程式的性質產生密鑰

(3)DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準),嚴格來說不算加密算法;

ECDSA簽名算法:

(1)選擇一條橢圓曲線Ep(a,b),和基點G;

(2)選擇私有密鑰k(k<n,n爲G的階),利用基點G計算公開密鑰K=kG;

(3)產生一個隨機整數r(r<n),計算點R=rG;

(4)將原數據和點R的座標值x,y作爲參數,計算SHA1做爲hash,即Hash=SHA1(原數據,x,y);

(5)計算s≡r - Hash * k (mod n)

(6)r和s做爲簽名值,如果r和s其中一個爲0,重新從第3步開始執行

ECDSA驗證:

(1)接受方在收到消息(m)和簽名值(r,s)後,進行以下運算

(2)計算:sG+H(m)P=(x1,y1), r1≡ x1 mod p。

(3)驗證等式:r1 ≡ r mod p。

(4)如果等式成立,接受簽名,否則簽名無效。

各取所長:對稱密碼和非對稱密碼結合;使用對稱密碼加密數據;協商對稱密鑰算法;非對稱密碼加密密鑰;公鑰加密密鑰;私鑰解密;數字證書解決了數據完整性和不可否認性

3.HASH算法:

特點:輸入長度不定,輸出長度爲定值;不可逆;碰撞機率大

常見算法:

MD5     128Bit

Sha-1   160Bit

SHA-224, SHA-256, SHA-384 和SHA-512

HASH算法主要應用於:散列算法最重要的用途在於給證書、文檔、密碼等高安全係數的內容添加加密保護。這一方面的用途主要是得益於散列算法的不可逆性,這種不可逆性體現在,你不僅不可能根據一段通過散列算法得到的指紋來獲得原有的文件,也不可能簡單地創造一個文件並讓它的指紋與一段目標指紋相一致。

在密碼學中,hash算法的作用主要是用於消息摘要和簽名

一個優秀的 hash 算法,將能實現:

(1)正向快速:給定明文和 hash 算法,在有限時間和有限資源內能計算出 hash 值。

(2)逆向困難:給定(若干) hash 值,在有限時間內很難(基本不可能)逆推出明文。

(3)輸入敏感:原始輸入信息修改一點信息,產生的 hash 值看起來應該都有很大不同。

(4)衝突避免:很難找到兩段內容不同的明文,使得它們的 hash 值一致(發生衝突)。即對於任意兩個不同的數據塊,其hash值相同的可能性極小;對於一個給定的數據塊,找到和它hash值相同的數據塊極爲困難。

(ECDSA每次簽名信息是否一樣:不一樣,因爲ECDSA簽名算法的第(3)步產生一個隨機整數r(r<n),計算點R=rG;導致最終的簽名信息不一樣。)

Sha-1   160Bit

    安全哈希加密技術,是當今世界最先近的加密算法。主要用於文件身份識別、數字簽名和口令加密等。
    對於明文信息A,通過SHA1算法,生成一條160位長的識別碼B。且明文信息A和識別碼B之間同時滿足以下條件:
     1、對於任意兩條不同的明文信息A1、A2,其識別碼B1、B2都不相同。
     2、無法通過逆向算法由識別碼B倒推出明文信息A。
MOONCRM的用戶密碼採用SHA1加密存儲,即服務器上存儲的只是由用戶密碼生成的識別碼,而用戶密碼本身並沒有存儲在服務器上。用戶輸入登陸口令時,系統會根據輸入口令生成相應識別碼並與系統中所存儲的識別碼進行比較,如二者一致,則認爲口令正確。系統中沒有存儲用戶原始的口令值,即使有人獲得口令文件,也無法破解用戶登陸密碼,確保用戶密碼絕對安全。

MD5     128Bit

  Message-Digest泛指字節串(Message)的Hash變換,就是把一個任意長度的字節串變換成一定長的大整數。請注意是“字節串”而不是“字符串”這個詞,是因爲這種變換隻與字節的值有關,與字符集或編碼方式無關。
  MD5將任意長度的“字節串”變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因爲原始的字符串有無窮多個,這有點象不存在反函數的數學函數
   MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。 

       MD5是一種不可逆的加密算法 安全性很高 一般在網上用作判斷文件完整性
如果一個文件被修改或不完整 算出來的MD5碼是和原來不一樣的 所以當你害怕下的東西有病毒或木馬或不完整 可以用MD5計算器算一下 再和網站上提供的值對比關於軟件很多地方有下的 軟件就一個作用 把軟件拖進去 然後算出MD5碼
這個基本上是軟件內部利用MD5加密導致,本身幾乎無效驗方法,因爲MD5不可以反編譯,方法寫個過程,或下載MD5文件 調用MD5(PASSWORD)
MD5中的MD代表Message Digest,就是信息摘要的意思,不過這個信息摘要不是信息內容的縮寫,而是根據公開的MD5算法對原信息進行數學變換後得到的一個128位(bit)的特徵碼。
       這個特徵碼有如下特性,首先它不可逆,例如我有一段祕密的文字如:"My Secret Words",經算法變換後得到MD5碼(b9944e9367d2e40dd1f0c4040d4daaf7),把這個碼告訴其他人,他們根據這個MD5碼是沒有系統的方法可以知道你原來的文字是什麼的。其次,這個碼具有高度的離散性,也就是說,原信息的一點點變化就會導致MD5的巨大變化,例如"ABC" MD5(902fbdd2b1df0c4f70b4a5d23525e932)和"ABC "(多了一空格)MD5(12c774468f981a9487c30773d8093561)差別非常大,而且之間沒有任何關係,也就是說產生的MD5碼是不可預測的。最後由於這個碼有128位那麼長,所以任意信息之間具有相同MD5碼的可能性非常之低,通常被認爲是不可能的。 所以一般認爲MD5碼可以唯一地代表原信息的特徵,通常用於密碼的加密存儲,數字簽名,文件完整性驗證等。2004年,已經被山東大學王小云教授破解了。比如:2345 兩個相加的和再相乘 2+3=5 4+5=9 5*9=45

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章