第六章 加密与解密
6.1 什么是加密和解密?
? 加密技術是最常用的安全保密手段,利用技術手段把重要的數據變為亂碼(加密)傳送,到達目的地后再用相同或不同的手段還原(解密)。
6.2 加密技術二元素:算法和密鑰
? 算法是將普通的信息或者可以理解的信息與一串數字(密鑰)結合,產生不可理解的官方的步驟;
? 密鑰是用來對數據進行編碼和解密的一種算法。
? 在安全保密中,可通過適當的密鑰加密技術和管理機制來保證網絡的信息通信安全,使得未授權的用戶即使獲得了已加密的信息,但因不知解密方法,仍然無法了解信息內容。
6.3 為什么要加密?
? 隨著人類社會逐漸步入信息時代,信息安全也越來越受到關注。對計算機而言,信息表現為各種各樣的數據,是否采用了適當的方法對數據進行加密,已成為保障數據安全的首要方法。為了保密,一般在網絡上傳輸的重要數據文件都可以對其進行加密,但數據加密也不一定是為了在網絡間傳輸文件,而是為了保證機密文件即使失竊后也不泄漏其中的重要信息。
? 隨著網絡技術的發展,大量的數據需要在網絡上傳輸。在網絡上傳輸的數據存在著不安全的因素而變得危險,而且這種危險是TCP/IP協議所固有的。一些基于TCP/IP的服務(ftp,http,smtp,telnet)都是明文傳輸的,其機密性無法得到保證。
? 數據加密在網絡上的作用就是防止重要信息在網絡上被攔截和竊取,一個簡單的例子就是計算機口令的傳輸。
? 計算機口令極為重要,許多安全防護體系是基于口令的,口令的泄露關系到安全體系的全面崩潰。通過網絡進行登錄時,所鍵入的口令以明文的形式被傳輸到服務器,而網絡上的竊聽是一件極為容易的事情,所以很有可能被黑客嗅探并竊得用戶的口令,如果用戶是root用戶或administrator用戶,那后果是極為嚴重的。
? 解決這個問題的方法就是加密,加密后的口令即使被黑客獲得也是不可讀的,除非加密密鑰或加密方式十分脆弱,很容易被黑客破解。whatever,加密的作用是使黑客不會輕易獲得口令。
6.4 加密類型
? 加密類型有以下幾種:
? ??對稱加密:加密解密使用同一個密鑰
? ? ? DES:Data Encrption Standard,56bit
? ? ? 3DES:使用3條56位的密鑰對數據進行三次加密
? ? ? AES:Advanced Encrption Standard,128bit(默認)
? ? ? ? AES192:192bit
? ? ? ? AES256:256bit
? ? ? ? AES512:512bit
? ? ? Blowfish:一個64位分組及可變密鑰長度的對稱密鑰分組密碼算法,可用來加密64bit長度的字符串
? ??公鑰加密:也叫非對稱加密。有一對密鑰,公鑰(P)和私鑰(S)。
? ? ? 公鑰隱含于私鑰中,可以提取出來并公布出去。
? ? ? 公鑰加密算法很少用來加密數據,因為加密速度太慢,比對稱加密慢1000倍。常用于做身份驗證
? ? ? 公鑰加密能保證機密性和身份驗證:
? ? ? ? 機密性:發送方用對方的公鑰加密
? ? ? ? 身份驗證:發送方用自己的私鑰加密(數字簽名)
? ? ? 公鑰加密能實現加密和簽名功能:
? ? ? ? RSA:即能實現加密,也能實現簽名
? ? ? ? DSA:只能實現簽名
? ? ? ? ELGamal:商業加密算法
? ??單向加密:也叫散列加密,提取數據特征碼,能加密不能解密,常用于做數據完整性校驗
? ? ? MD4,MD5,SHA1,SHA192,SHA256,SHA384,SHA512,CRC-32(循環冗余檢驗碼)
? ? ? 單向加密的特性:
? ? ? ? a) 雪崩效應(輸入的微小改變,將會引起結果的巨大改變)
? ? ? ? b) 定長輸出(無論原始數據是多大,結果的長度是相同的)
? ? ? ? ? MD5:Message Digest,128位定長輸出
? ? ? ? ? SHA1:Secure Hash Algorithm,160位定長輸出
? ? ? ? c) 不可逆(無法根據特征碼還原成原始數據)
6.5 密鑰交換
? 協商生成密碼的過程叫做密鑰交換(Internet Key Exchange,IKE)
? 使用的是DH協議(Diffie-Hellman):
? ? A --> B
? ? ? p,g(大素數,生成數),在網絡中傳輸的,公開的
? ? A:自己取一個隨機數x
? ? B:自己取一個隨機數y
? ? A:g^x%p --> B
? ? B:g^y%p --> A
? ? A:(g^y%p)^x=g^yx%p
? ? B:(g^x%p)^y=g^xy%p
? 這最后得出的g^xy%p就是最終的密鑰
6.6 PKI
? PKI:Public Key Infrastructure
? PKI的核心就是CA及其信任關系
6.6.1 CA
? CA(Certificate Authority)是數字證書認證中心的簡稱,是指發放、管理、廢除數據證書的機構。
? CA的作用是檢查證書持有者身份的合法性,并簽發證書(在證書上簽字),以防證書被偽造或篡改,以及對證書和密鑰進行管理
6.6.2 數字證書
? 數字證書實際上是存在于計算機上的一個記錄,是由CA簽發的一個聲明,證明證書主體("證書申請者"擁有了證書后即成為"證書主體")與證書中所包含的公鑰的惟一對應關系
? 數字證書包含的內容:
? ? 申請者的名稱及相關信息
? ? 申請者的地址信息
? ? 申請者的公鑰
? ? 簽發證書的CA的名稱
? ? 簽發證書的CA的數字簽名(用發證機關的私鑰加密的特征碼)
? ? 證書有效期
? x509證書的內容:
? ? 公鑰及其有效期限
? ? 證書的合法擁有者
? ? 證書該如何被使用
? ? CA的信息
? ? CA簽名的校驗碼
? CRL:證書吊銷列表。CRL中記錄的是已經發出去的、沒有過期的但已經被撤銷的證書
6.6.3 PKI的實現架構
? TLS/SSL:使用x509證書
? OpenGPG
?SSL:Secure Socket Layer,安全的套接字層。只是一個庫,可以將http、smtp、ftp等應用層協議封裝成https、smtps、ftps等
? TLS:Transport Layer Security,TLSv1版本相當于SSLv3
? SSL會話過程:
? ? a) TCP三次握手
? ? b) 客戶端向服務器發起會話請求
? ? c) 服務器與客戶端協商建立SSL會話(協商加密協議:SSLv2、SSLv3、TLS;協商加密算法)
? ? d) 服務器將自己的證書發給客戶端
? ? e) 客戶端驗證證書是否是自己所信任的根證書頒發機構所發,證書是否完整
? ? f) 客戶端隨機生成一個會話密鑰(對稱密鑰),用服務器的公鑰進行加密,傳遞給服務器端
? ? g) 服務器端用客戶端生成的對稱密鑰對數據進行加密,傳輸給客戶端
6.6.4 證書申請及簽署步驟
? a) 生成申請請求
? b) RA核驗
? c) CA簽署
? d) 獲取證書
6.6.5 吊銷證書
? a) 客戶端獲取要吊銷的證書的serial
| 1 | openssl?x509?-in?/path/from/cert_file?-noout?-serial?-subject |
? b) CA端先客戶端提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致
? ? 吊銷證書:
| 1 | openssl?ca?-revoke?/etc/pki/CA/newcerts/SERIAL.pem |
? c) 生成吊銷證書的編號(第一次吊銷一個證書時)
| 1 | echo?01?>?/etc/pki/CA/crlnumber |
? d) 更新證書吊銷列表
| 1 | openssl?ca?-gencrl?-out?thisca.crl |
6.7 openssl
? 對稱加密的實現工具有openssl和gpg兩種
? openssl:OpenSSL是ssl的開源實現,是一個軟件,由三部分組成:
? ? libcrypto:加密庫
? ? libssl:TLS/SSL協議的實現。基于會話的實現了身份認證、數據機密性和會話完整性的TLS/SSL庫
? ? openssl:多用途命令行工具。能夠實現單向加密、對稱加密、非對稱加密、生成一對密鑰、私有證書頒發機構等功能
? openssl:
? ? 語法:openssl command [ command_opts ] [ command_args ]
? ? command:
? ? ? enc:加密/解密
? ? ? ? -e:加密
? ? ? ? -d:解密
? ? ? dgst:提取文件特征碼
? ? ? passwd -1:生成密碼串
? ? ? rand -base64:生成偽隨機數
? ? ? req:證書注冊提交管理
? ? ? ? -new:生成新證書簽署請求
? ? ? ? -x509:專用于CA生成自簽證書
? ? ? ? -key:生成請求時用到的私鑰文件
? ? ? ? -days n:證書的有效期限
? ? ? ? -out /path/to/somecertfile:證書的保存路徑
? ? ? x509:管理證書
? ? ? ? -in /path/from/cert_file -noout -text|-subject|-serial ? ?#查看證書中的信息
? ? ? crl:管理吊銷證書列表
? ? ? ? -in /path/from/crl_file.crl -noout -text ? ?#查看crl文件
? ? ? ca:管理CA
? openssl實現私有CA:
? ? CA的配置文件:/etc/pki/tls/openssl.cnf
? ? a) CA生成一對密鑰
| 1 2 3 | cd?/etc/pki/CA? (umask?077;openssl?genrsa?-out?private/cakey.pem?2048)????#生成密鑰,括號必須要 openssl?rsa?-in?private/cakey.pem?-pubout????#提取公鑰 |
? ? b) CA生成自簽署證書
| 1 2 3 4 | openssl?req?-new?-x509?-key?private/cakey.pem?-out?cacert.pem?-days?365????#生成自簽署證書 openssl?x509?-text?-in?cacert.pem????#讀出cacert.pem證書的內容 mkdir?certs?newcerts?crl touch?index.txt?&&?echo?01?>?serial |
? ? c) 客戶端(例如httpd服務器)生成密鑰
| 1 2 | cd?/etc/httpd?&&?mkdir?ssl?&&?cd?ssl (umask?077;openssl?genrsa?-out?httpd.key?2048) |
? ? d) 客戶端生成證書簽署請求
| 1 | openssl?req?-new?-key?httpd.key?-days?365?-out?httpd.csr |
? ? e) 客戶端把證書簽署請求文件發送給CA
| 1 | scp?httpd.csr?root@CA端IP:/root |
? ? f) CA簽署客戶端提交上來的證書
| 1 | openssl?ca?-in?/root/httpd.csr?-out?httpd.crt?-days?365 |
? ? g) CA把簽署好的證書httpd.crt發給客戶端
| 1 | scp?httpd.crt?root@客戶端IP:/etc/httpd/ssl/ |
本文轉自 忘情OK? 51CTO博客,原文鏈接:http://blog.51cto.com/itchentao/1917158,如需轉載請自行聯系原作者
總結
- 上一篇: Linux下安装mysql遇到的一些问题
- 下一篇: RDIFramework.NET V2.