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