一、加密需要和安全機制
1.不加密流量的易受攻擊性
密碼/數據嗅探 數據操作 驗證操作 相當于郵寄明信片
2.不安全的傳統協議
telnet、FTP、POP3等等;不安全密碼http、sendmail、NFS等等;不安全信息Ldap、NIS、rsh等等;不安全驗證
3.NIST定義的安全屬性:美國國家標準與技術研究院
1) 保密性: 數據保密性 隱私性2)完整性:不可篡改 數據完整性 系統完整性3)可用性
4.安全攻擊:STRIDE
Spoofing(假冒)、Tampering(篡改)、Repudiation(否認)、Information Disclosure(信息泄漏)、 Denial of Service(拒絕服務)和Elevation of Privilege(提升權限)
5.安全機制:
加密、數字簽名、訪問控制、數據完整性、認證交換、流量填充、路由控制、公證
6.安全服務
認證 訪問控制 數據保密性 連接保密性 無連接保密性 選擇域保密性 流量保密性 數據完整性 不可否認性
7.設計基本原則
使用成熟的安全系統 以小人之心度輸入數據 外部系統是不安全的 最小授權 減少外部接口 缺省使用安全模式 安全不是似是而非 從STRIDE思考在入口處檢查 從管理上保護好你的系統
二、安全算法與加密方法概念解析
1.安全算法
常用安全技術 認證 授權 安全通信 審計 密碼算法和協議: 對稱加密 公鑰加密 單向加密 認證協議 Linux系統:OpenSSL, gpg(pgp協議的實現)
2.對稱加密算法
1)對稱加密:加密和解密使用同一個密鑰 DES:Data Encryption Standard,56bits 3DES: AES:Advanced (128, 192, 256bits) Blowfish,Twofish IDEA,RC6,CAST52) 特性: 1、加密、解密使用同一個密鑰,效率高 2、將原始數據分割成固定大小的塊,逐個進行加密3)缺陷: 1、密鑰過多 2、密鑰分發 3、無法實現數據來源確認
3.非對稱加密算法
1)公鑰加密:密鑰是成對出現 公鑰:公開給所有人;public key 私鑰:自己留存,必須保證其私密性;secret key 2)特點:用公鑰加密數據,只能使用與之配對的私鑰解密;反之亦然 功能: 3)數字簽名:主要在于讓接收方確認發送方身份 4)對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰后發送給對方 5)數據加密:適合加密較小數據 6)缺點:密鑰長,加密解密效率低下 7)算法: RSA(加密,數字簽名),DSA(數字簽名),ELGamal 8)基于一對公鑰/密鑰對 用密鑰對中的一個加密,另一個解密 9)實現加密: 接收者 生成公鑰/密鑰對:P和S 公開公鑰P,保密密鑰S 發送者 使用接收者的公鑰來加密消息M 將P(M)發送給接收者 接收者 使用密鑰S來解密:M=S(P(M)) 10)實現數字簽名 發送者 生成公鑰/密鑰對:P和S 公開公鑰P,保密密鑰S 使用密鑰S來加密消息M 發送給接收者S(M) 接收者 使用發送者的公鑰來解密M=P(S(M)) 11)結合簽名和加密使用或者分離簽名
4.單向散列
1)將任意數據縮小成固定大小的“指紋” 任意長度輸入 固定長度輸出 若修改數據,指紋也會改變(“不會產生沖突”) 無法從指紋中重新生成數據(“單向”)2)功能:數據完整性3)常見算式 md5: 128bits、sha1: 160bits、sha224sha256、sha384、sha5124)常用工具 md5sum | sha1sum [ --check ] file openssl、gpg rpm -V5)find ./ -type f -exec md5sum {} \;常用來分析兩套文件系統的文件變化情況
5.密鑰交換
1)密鑰交換:IKE(Internet Key Exchange ) 公鑰加密: DH (Deffie-Hellman):2)DH 1、A: a,p協商生成公開的整數a,大素數p B: a,p 2、A:生成隱私數據:x (x<p ),計算得出a^x%p,發送給B B:生成隱私數據:y,計算得出a^y%p,發送給A 3、A:計算得出(a^y%p)^x = a^xy%p,生成為密鑰
B:計算得出(ax%p)y = a^xy%p, 生成為密鑰
6.CA和證書
1)PKI: Public Key Infrastructure 簽證機構:CA(Certificate Authority) 注冊機構:RA( registry Authority) 證書吊銷列表:CRL(Certificate revoke list) 證書存取庫:2)X.509:定義了證書的結構以及認證協議標準 版本號、序列號、簽名算法、頒發者、有效期限、主體名稱、主體公鑰、CRL分發點、擴展信息、發行者簽名 3)證書類型 證書授權機構的證書 服務器 用戶證書4)獲取證書兩種方法: 使用證書授權機構 生成簽名請求(csr) 將csr發送給CA 從CA處接收簽名5)自簽名的證書 自已簽發自己的公鑰
6.安全協議
1)SSL: Secure Socket Layer TLS: Transport Layer Security 1995:SSL 2.0 Netscape 1996: SSL 3.0 1999: TLS 1.0 2006: TLS 1.1 RFC(Request For Comments )4346 2008:TLS 1.2 當前使用 2015: TLS 1.3 功能:機密性,認證,完整性,重放保護2)兩階段協議,分為握手階段和應用階段 握手階段(協商階段):客戶端和服務器端認證對方身份(依賴于PKI體系,利用數字證書進行身份認證), 并協商通信中使用的安全參數、密碼套件以及主密鑰。后續通信使用的所有密鑰都是通過MasterSecret生成。 應用階段:在握手階段完成后進入,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信。3)SSL/TLS protocol 安全套接字層/傳輸層安全性協議圖示
4)ssl/TLS協議過程 Handshake協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換; ChangeCipherSpec 協議:一條消息表明握手協議已經完成 Alert 協議:對握手協議中一些異常的錯誤提醒,分為fatal和warning兩個級別,fatal類型錯誤會直接中斷SSL鏈接,而warning級別的錯誤SSL鏈接仍可繼續,只是會給出錯誤警告 Record 協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等。 HTTPS 協議:就是“HTTP 協議”和“SSL/TLS 協議”的組合。HTTP over SSL”或“HTTP over TLS”,對http協議的文本數據進行加密處理后,成為二進制形式傳輸5)協議請求與回應過程圖示
二、常用加密工具使用詳解
1.OpenSSL開源項目
1)三個組件: openssl: 多用途的命令行工具 libcrypto: 加密算法庫 libssl:加密模塊應用庫,實現了ssl及tls 2)openssl命令 兩種運行模式:交互模式和批處理模式 opensslversion:程序版本號 標準命令、消息摘要命令、加密命令 標準命令: enc, ca, req, ... enc查看命令的詳細使用方法 3)對稱加密 工具:opensslenc, gpg 算法:3des, aes, blowfish, twofish 4)enc命令:man enc 加密: openssl enc -e -des3 -a -salt -in /tmp/fstab -out fstab.cipher 解密: openssl enc -d -des3 -a -salt -in fstab.cipher -out fstab 5)opensl dgst -md5 fstab==md5sum fstab 6)單向加密: 工具:md5sum, sha1sum, sha224sum,sha256sum… openssldgst 7)dgst命令:man dgst openssldgst -md5 [-hex] /PATH/TO/SOMEFILE openssldgst -md5 fstab md5sum /PATH/TO/SOMEFILE 8)MAC: Message Authentication Code,單向加密的一種延伸應用,用于實現網絡通信中保證所傳輸數據的完整性機制 CBC-MAC HMAC:使用md5或sha1算法 9)生成用戶密碼: passwd命令:man sslpasswd opensslpasswd -1 -salt SALT(最多8位) opensslpasswd -1 –salt centos 10)生成隨機數:man sslrand opensslrand -base64|-hex NUM NUM: 表示字節數;-hex時,每個字符4位,出現的字符數為NUM*2 11)公鑰加密 算法:RSA, ELGamal 工具:gpg, opensslrsautl(man rsautl) 12)數字簽名 算法:RSA, DSA, ELGamal 13)密鑰交換 算法:dh DSA: Digital Signature Algorithm DSS:Digital Signature Standard RSA: 14)密鑰生成過程 生成密鑰對兒:man genrsa 生成私鑰: openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS (umask077; openssl genrsa -out key.pri –des 2048) 從私鑰中提取出公鑰: openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE openssl rsa -in aaa.key -pubout -out aaa.pub 隨機數生成器:偽隨機數字 鍵盤和鼠標 塊設備中斷 /dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞 /dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞
2.OpenSSL的CA機制
1)PKI:Public Key Infrastructure CA:證書認證 RA:證書注冊 CRL:證書吊銷 證書存取庫2)建立私有CA: OpenCA openssl3)證書申請及簽署步驟 1.生成申請請求 2.RA核驗 3.CA簽署 4.獲取證書4)創建CA和申請證書 openssl的配置文件:/etc/pki/tls/openssl.cnf (1) 創建所需要的文件 touch /etc/pki/CA/index.txt echo 01 > /etc/pki/CA/serial (2)CA自簽證書 生成私鑰 cd /etc/pki/CA/ (umask066; openssl genrsa -out /etc/pki/CA/private/cakey.pem2048) 生成自簽名證書 openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem -new: 生成新證書簽署請求; -x509: 專用于CA生成自簽證書; -key: 生成請求時用到的私鑰文件; -days n:證書的有效期限; -out /PATH/TO/SOMECERTFILE: 證書的保存路徑 (3)頒發證書 (a) 在需要使用證書的主機生成證書請求; 給web服務器生成私鑰 (umask066; openssl genrsa -out/etc/httpd/ssl/httpd.key 2048) 生成證書申請文件 openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr (b) 將證書請求文件傳輸給CA (c) CA簽署證書,并將證書頒發給請求者; opensslca -in /tmp/httpd.csr –out /etc/pki/CA/certs/httpd.crt -days 365 注意:證書中國家,省,公司名稱必須和CA一致(配置文件中有定義,如果想要不一致也可以,則可以去修改配置文件完成) (d) 查看證書中的信息: openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|subject|serial|dates (4) 吊銷證書 (a) 在客戶端獲取要吊銷的證書的serial openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject (b) 在CA上,根據客戶提交的serial與subject信息,對比檢驗是否與index.txt文件中的信息一致 吊銷證書: openssl ca -revoke /etc/pki/CA/newcerts/ SERIAL.pem 注:在index.txt中保存的證書信息前是V為有效證書,如果是R則為已吊銷的證書 在文件/etc/pki/CA/newcerts中有每個證書對應的序列號 (c) 生成吊銷證書的編號(第一次吊銷一個證書時才需要執行) echo 01 > /etc/pki/CA/crlnumber (d) 更新證書吊銷列表 openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl 查看crl文件 openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text 注:客戶端中配置的有關于證書的吊銷列表從互聯網哪里下載,以保證證書的有效性
3.應用程序RPM
1)文件完整性的兩種實施方式2)被安裝的文件 MD5單向散列 rpm -versify package_name(or -V)3)發行的軟件包文件 GPG公鑰簽名 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat* rpm --checksig pakage_Pfile_name(or -K)
4.gpg工具的使用
1)使用gpg實現對稱加密 對稱加密file文件 gpg -c file ls file.gpg 解密file gpg -o file2 -d file.gpg 注:如果加密和解密在同一臺主機上,解密的時候不需要輸入密碼2)使用gpg工具實現公鑰加密 在hostA主機上生成公鑰/私鑰對 gpg --gen-key 在hostA主機上查看公鑰 gpg --list-keys 在hostA主機上導出公鑰wang.pubkey gpg -a --export -o wang.pubkey 從hostA主機上復制公鑰文件到需加密的B主機上 scp wang.pubkey hostB 在需加密數據的hostB主機上生成公鑰/私鑰對 gpg --list-keys gpg --gen-key 在hostB主機上導入公鑰 gpg --import wang.pubkey gpg--list-keys 用從hostA主機導入的公鑰,加密hostB主機的文件file,生成file.gpg gpg -e -r wangedu file file file.gpg 復制加密文件到hostA主機 scp fstab.gpg hostA 在hostA主機解密文件 gpg -d file.gpg gpg -o file -d file.gpg 刪除公鑰和私鑰 gpg --delete-secret-keys wangedu gpg --delete-keys wangedu
原創文章,作者:提著醬油瓶打醋,如若轉載,請注明出處:http://www.www58058.com/49149
文章分類很明確,層次感很強,內容也很豐富,繼續保持。