加密解密及算法

一、簡介

  今天我要給你們分享的是互聯網通訊中用到的各類加密解密算法,在咱們介紹加解密知識前,首先咱們瞭解一下密碼學、密碼、加密、數字簽名、密鑰交換等相關術語的含義。git

1.1 密碼學

  密碼學是研究編制密碼和破譯密碼的技術科學。研究密碼變化的客觀規律,應用於編制密碼以保守通訊祕密的,稱爲編碼學;應用於破譯密碼以獲取通訊情報的,稱爲破譯學,總稱密碼學。算法

1.2 密碼

  密碼是通訊雙方按約定的法則進行信息特殊變換的一種重要保密手段。依照這些法則,變明文爲密文,稱爲加密變換;變密文爲明文,稱爲脫密變換。密碼在早期僅對文字或數碼進行加、脫密變換,隨着通訊技術的發展,對語音、圖像、數據等均可實施加、脫密變換。安全

加密:加密是一種以密碼方式發送信息的方法。只有擁有正確密鑰的人才能解開這個信息的密碼。對於其餘人來講,這個信息看起來就像是一系列隨機的字母、數字和符號。若是你要發送不該該讓其餘人看的敏感信息時,加密是特別重要的。服務器

數字簽名:數字簽名是一種相似寫在紙上的普通的物理簽名,可是使用了公鑰加密領域的技術實現,用於鑑別數字信息的方法。一套數字簽名一般定義兩種互補的運算,一個用於簽名,另外一個用於驗證。網絡

密鑰交換:雙方使用密鑰交換算法肯定對稱密鑰,而後用這個密鑰進行加密和解密。這個密鑰交換協議/算法只能用於密鑰的交換, 而不能進行消息的加密和解密。數據結構

1.3 算法

算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法表明着用系統的方法描述解決問題的策略機制。(百度百科)
 
算法在數學(算學)和計算機科學之中,爲任何良定義的具體計算步驟的一個序列[1],經常使用於計算、數據處理和自動推理。精確而言,算法是一個表示爲有限長[2]列表的有效方法。算法應包含清晰定義的指令[3]用於計算函數[4]。算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和初始輸入(可能爲空)開始,[5]通過一系列有限[6]而清晰定義的狀態最終產生輸出[7]並中止於一個終態。一個狀態到另外一個狀態的轉移不必定是肯定的。隨機化算法在內的一些算法,包含了一些隨機輸入。(維基百科)
 架構

二、加密算法

2.1 加密算法的特色

對稱加密:加密和解密使用同一個密碼
公鑰加密: [也可稱爲非對稱加密]
1)每一個密碼都成對兒出現,一個爲私鑰(secret key),一個爲公鑰(public key)
2)公鑰加密算法不多用來加密數據,速度太慢 比對稱加密算法加密數據的速度慢上3個數量級,1000倍左右
單向加密即散列加密:提取數據特徵碼,經常使用於數據完整性校驗
1)雪崩效應,輸入的微小改變,將會引發結果的巨大改變。不可逆,沒法根據特徵碼還原原來的數據
2) 定長輸出,不管原始數據是多大,結果大小都是相同的。輸入同樣,輸出必然相同
MAC:消息摘要碼,單向加密的延伸應用ide

  • 應用:用於實如今網絡通訊中保證所傳輸的數據完整性
  • 機制:
  • CBC-MAC
  • HMAC:使用md5和sha1算法

2.2 加密解密技術經常使用的功能及算法

對稱加密函數

  • 算法:DES, 3DES, AES, Blowfish, Twofish, RC6, CAST5
  • 工具:gpg, openssl enc
  • 加密算法 + 口令
  • 密鑰交換
  • 用戶身份認證
  • 數據完整性
    加密解密及算法

非對稱加密工具

  • 算法:RSA, EIGamal, DSA
  • 工具:openssl rsautl
  • 密鑰交換
  • 身份認證
  • 數據加密
    加密解密及算法

單向加密

  • 算法:MD5, SHA1, SHA512, CRC-32
  • 工具:sha1sum, md5sum, cksum, openssl dgst
  • 完整性

密鑰交換(IKE: Internet Key Exchange):

  • 算法: DH,公鑰加密 [並無在互聯網傳輸,比較安全]
  • Diffie-Hellman
    密鑰交換的兩種機制:
    一、公鑰加密實現:發送方用接收方的公鑰加密本身的密鑰,接收方用本身的私鑰解密獲得發送方的密鑰,逆過來亦然,從而實現密鑰交換。
    二、使用DH算法:前提發送方和接受方協商使用同一個大素數P和生成數g,各自產生的隨機數X和Y。發送方將g的X次方mod P產生的數值發送給接收方,接受方將g的Y次方mod P產生的數值發送給發送方,發送方再對接收的結果作X次方運算,接受方對接收的結果作Y次方運算,最終密碼造成,密鑰交換完成。
     
    DH算法的數學原理
    加密解密及算法

2.3公鑰加密的功用

公鑰加密、私鑰解密;反之亦然,私鑰加密、公鑰解密

  • 公鑰:pkey
  • 私鑰:skey
  • 算法:RSA, EIGamal
  • 工具:gpg, openssl rsautl

數字簽名:電子簽名私鑰用來加密,公鑰用來解密

  • 算法: RSA, EIGamal, DSA [DSA只能用來簽名,沒法用來加密]

數字證書:

*       證書格式:x50九、pkcs【x50九、pkcs12】
*       x509格式:
*               公鑰和有效期限;
*               證書的合法擁有者;(主機名)
*               證書的使用方式;
*               CA的信息;
*               CA的數字簽名;(CA簽名的校驗碼)
*       誰給CA發證:自簽署證書
X.509:定義了證書的結構以及認證協議標準
        版本號
        序列號
        簽名算法ID
        發行者名稱
        有效期限
        主體名稱
        主體公鑰
        發行者唯一標識
        主體的唯一標識
        擴展
        發行者簽名

 

三、PKI

PKI: Public Key Infrastructure 公鑰基礎設施
CA: Certificate Authority CA證書權威機構
自建CA並完成對服務器發證:

3.1 自建CA(CA端)

生成一對兒密鑰
    生成自簽證書

命令:
#(umask 077; openssl genrsa -out private/cakey.pem 2048) 【生成CA私鑰】
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem 【生成自簽證書】(.pem)

3.2 證書申請(客戶端)

生成一對兒密鑰
    生成證書申請(.csr)
    將申請發送給CA

命令:
#(umask 077; openssl genrsa -out httpd.key 2048) 生成密鑰
#openssl req -new -key httpd.key -out httpd.csr 生成證書申請 證書籤署請求(.csr)

3.3 發證(CA端)

簽署證書
    傳送給客戶端

命令:
#openssl ca -in httpd.csr -out httpd.crt -days 365 簽署證書(.crt)

3.4 PKI的實現

PKI: TLS/SSL: x509
第一種實現:互聯網著名的安全機制TLS/SSL使用的是x509證書
PKI: OpenGPG
第二種實現:這是PKI的另一種實現,它們實現證書的管理的機制不一樣,CA的信認關係傳遞機制略有不一樣。在Linux 上OpenGPG也是一種證書管理機制,或者PKI的實現架構。

SSL: Secure Socket Layer是由Netscape公司開發的一套Internet數據安全協議,當前版本爲3.0。

  • NetScape 網景
  • Secure Socket Layer
  • SSLv2, SSLv3

TLS: Transport Layer Security 是國際標準化組織開發的一個通用性協議,當前版本爲1.2。

  • TLSv1
  • http --> https
  • ldap --> ldaps
  • ftp --> ftps
  • smtp --> smtps
  • pop3 --> pop3s
  • imap --> imaps
    OpenSSL是SSL的開源實現
  • libcrpto: 通用加密庫
  • libssl: TLS/SSL的實現
  • 基於會話的、實現了身份認證、數據機密性和會話完整性的TLS/SSL庫
  • openssl: 多用途命令行工具,能夠實現單向加密、對稱加密、非對稱加密、實現私有證書頒發機構

3.5 SSL通訊原理:

加密解密及算法
SSL的握手過程爲:

  • (1) SSL客戶端經過Client Hello消息將它支持的SSL版本、加密算法、密鑰交換算法、MAC算法等信息發送給SSL服務器。

  • (2) SSL服務器肯定本次通訊採用的SSL版本和加密套件,並經過Server Hello消息通知給SSL客戶端。若是SSL服務器容許SSL客戶端在之後的通訊中重用本次會話,則SSL服務器會爲本次會話分配會話ID,並經過Server Hello消息發送給SSL客戶端。

  • (3) SSL服務器將攜帶本身公鑰信息的數字證書經過Certificate消息發送給SSL客戶端。

  • (4) SSL服務器發送Server Hello Done消息,通知SSL客戶端版本和加密套件協商結束,開始進行密鑰交換。

  • (5) SSL客戶端驗證SSL服務器的證書合法後,利用證書中的公鑰加密SSL客戶端隨機生成的premaster secret,並經過Client Key Exchange消息發送給SSL服務器。

  • (6) SSL客戶端發送Change Cipher Spec消息,通知SSL服務器後續報文將採用協商好的密鑰和加密套件進行加密和MAC計算。

  • (7) SSL客戶端計算已交互的握手消息(除Change Cipher Spec消息外全部已交互的消息)的Hash值,利用協商好的密鑰和加密套件處理Hash值(計算並添加MAC值、加密等),並經過Finished消息發送給SSL服務器。SSL服務器利用一樣的方法計算已交互的握手消息的Hash值,並與Finished消息的解密結果比較,若是兩者相同,且MAC值驗證成功,則證實密鑰和加密套件協商成功。

  • (8) 一樣地,SSL服務器發送Change Cipher Spec消息,通知SSL客戶端後續報文將採用協商好的密鑰和加密套件進行加密和MAC計算。

  • (9) SSL服務器計算已交互的握手消息的Hash值,利用協商好的密鑰和加密套件處理Hash值(計算並添加MAC值、加密等),並經過Finished消息發送給SSL客戶端。SSL客戶端利用一樣的方法計算已交互的握手消息的Hash值,並與Finished消息的解密結果比較,若是兩者相同,且MAC值驗證成功,則證實密鑰和加密套件協商成功。
     
  • 注意:在雙方通訊中,客戶端和服務器端支持的加密解密算法未必同樣。雙方要協商各自所使用算法,且是雙方支持的、可靠的算法,如:對稱加密雙方都支持的算法、非對稱加密雙方都支持的算法、單向加密雙方都支持的算法。這個過程任何第三方都能看到,不能解密就得不到裏面的數據,這個過程涉及到了認證、加密通訊、密鑰交換、雙方使用這個對稱密鑰加解密數據而這個密鑰是一次性的。
     

    3.6 互聯網應用安全通訊必需要知足如下特性

    一、私密性
    二、身份認證
    三、完整性
    加密解密及算法

openssl補充材料:

  • openssl中有以下後綴名的文件
  • .key格式:私有的密鑰
  • .crt格式:證書文件,certificate的縮寫
  • .csr格式:證書籤名請求(證書請求文件),含有公鑰信息,certificate signing request的縮寫
  • .crl格式:證書吊銷列表,Certificate Revocation List的縮寫
  • .pem格式:用於導出,導入證書時候的證書的格式,有證書開頭,結尾的格式

  • 經常使用證書協議
  • x509v3: IETF的證書標準
  • x.500:目錄的標準
  • SCEP: 簡單證書申請協議,用http來進行申請,數據有PKCS#7封裝,數據其實格式也是PKCS#10的
  • PKCS#7: 是封裝數據的標準,能夠放置證書和一些請求信息
  • PKCS#10: 用於離線證書申請的證書申請的數據格式,注意數據包是使用PKCS#7封裝這個數據
  • PKCS#12: 用於一個單一文件中交換公共和私有對象,就是公鑰,私鑰和證書,這些信息進行打包,加密放在存儲目錄中,
  • CISCO放在NVRAM中,用戶能夠導出,以防證書服務器掛掉能夠進行相應恢復。思科是.p12,微軟是.pfx
     

四、總結

4.1密碼算法總結

1、單向散列算法: 屬於摘要算法,不是一種加密算法,做用是把任意長的輸入消息串變化成固定長的輸出串的一種函數

  • BASE64(嚴格地說,屬於編碼格式,而非加密算法)
  • MD5(Message Digest algorithm 5,信息摘要算法)
  • SHA(Secure Hash Algorithm,安全散列算法)
  • HMAC(Hash Message Authentication Code,散列消息鑑別碼)
  • CRC(Cyclical Redundancy Check,循環冗餘碼校驗)

2、對稱加密算法: 加密密鑰與解密密鑰相同

  • DES(Data Encryption Standard,數據加密標準算法)
  • AES(Advanced Encryption Standard,高級加密標準)
  • PBE(Password-based encryption,基於密碼驗證)
  • RC5(參數可變的分組密碼算法 )
  • BLOWFISH(對稱密鑰分組加密算法)

3、非對稱加密算法 :加密密鑰與解密密鑰不相同

  • RSA(算法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)
  • DH(Diffie-Hellman算法,密鑰一致協議)
  • Elgamal(既能用於數據加密也能用於數字簽名)
  • DSA(Digital Signature Algorithm,數字簽名)
  • ECC(Elliptic Curves Cryptography,橢圓曲線算法)
  • Merkle-Hellman(揹包算法)
  • Miller Rabin算法(素數測試算法)
      學習完加密及各類算法後平常最多用到的場景就是加密、驗籤、密鑰交換。非對稱加密算法比對稱加密算法的速度慢3個數量級,當咱們須要加密大量的數據時,建議採用對稱加密算法,提升加解密速度。非對稱加密算法一般作簽名。對稱加密算法的鑰管理是一個複雜的過程,密鑰的管理直接決定着他的安全性,所以當數據量很小時,咱們能夠考慮採用非對稱加密算法。
      在業務使用中,咱們一般採用的方式是:非對稱加密算法管理對稱算法的密鑰,而後用對稱加密算法加密數據,這樣就集成了兩種加密算法的優勢,既有了加密速度快的優勢,又有了安全方便管理密鑰的優勢。RSA建議採用1024位的數字,ECC建議採用160位,AES採用128爲便可。
    加密解密及算法
    【實現算法難度★;設計算法難度★★★】大多公司沒有能力設計加密算法,就算實現一款加密算法也是有難度的,通常調用標準加密庫便可。
     
     

補充:算法分類能夠根據算法設計原理、算法的具體應用和其餘一些特性進行分類。程序開發中用到的算法和咱們所提到的加密算法是不一樣的。

4.2算法分類

  • 基本算法
    枚舉
    搜索
    深度優先搜索
    廣度優先搜索
    啓發式搜索
    遺傳算法
  • 數據結構的算法
  • 數論與代數算法
  • 計算幾何的算法
    凸包算法
  • 圖論的算法
    哈夫曼編碼
    樹的遍歷
    最短路徑算法
    最小生成樹算法
    最小樹形圖
    網絡流算法
    匹配算法
    分團問題
  • 動態規劃
  • 其餘
    數值分析
    加密算法
    排序算法
    檢索算法
    隨機化算法

    加密解密及算法

相關文章
相關標籤/搜索