一、加密協議和算法
1.對稱加密算法:加密和解密使用同一祕鑰
主流私鑰加密算法:
DES:數據加密標準
64bit塊,加密密鑰的長度56bit
NSA
3DES,三次DES加密
AES:高級加密標準
加密密鑰的長度更長:128bit,192bit,256bit
Blowfish
Twofish
IDEA
RC4,RC6
CASTS
特性:
1.每對通信主機都需要保有一個唯一的通信密鑰,用於加密和解密數據
2.將原始的數據分割成固定大小的塊逐個加密
3.加密和解密的速度非常快
缺陷:在一臺主機上需要保有的密鑰數量比較多;密鑰的分發非常困難
2.公鑰加密算法:
由私鑰和與私鑰數學相關的公鑰構成,其中公開的密鑰爲公鑰,不公開的密鑰爲私鑰
使用公鑰加密的數據只有用與之對應的私鑰才能解密,使用私鑰加密的數據只有用與之對應的公鑰才能解密
使用公鑰加密:用於其他用戶向該用戶傳遞加密信息,只有該用戶的私鑰才能進行解密
使用私鑰加密:其他用戶使用公鑰進行解密,用於確定用戶身份,這種方法叫做數字簽名
公鑰加密算法的私鑰長度均較長:512bit,1024bit,2048bit,4096bit,8192bit,16384bit
主流公鑰加密算法:
RSA:加密,數字簽名
DSA:只能做數字簽名,也被稱爲DSS
Elgamal
缺陷:加密數據的時候,消耗的資源和時間都較多,速度很慢,因此,極少用來加密大量數據,所以進行數據加密的時候仍使用對稱加密算法,但在傳輸過程中,將對稱加密算法的密鑰通過公鑰加密算法進行加密。
3.單向加密算法:
只能加密不能解密,又稱爲"數據指紋提取",其輸出結果爲定長的特徵碼,即"數據指紋"
主流的單向加密算法:
md5:128bits定長輸出
sha系列:安全的哈希算法
sha-1,sha224,sha384,sha512
二、CA和PKI
PKI是一種遵循標準的利用公鑰加密技術爲電子商務的開展提供的一套安全基礎平臺的技術和規範,其提供安全服務利用公鑰技術和證書,包含以下內容:
1.簽證機構:CA
2.註冊機構:RA
3.證書吊銷列表:CRL
4.證書存儲庫:CR
國際標準化組織(ISO)定義了證書的結構和認證標準,:x.509協議標準
證書的組成包括:
證書的版本號
證書的序列號
有效期限
簽發算法的ID
證書主體的名稱
證書主體的公鑰
證書主體唯一標識符
發證者的唯一標識符
發證者的數字簽名
擴展信息
通信雙方進行身份認證的步驟:
1.通信雙方互相交換證書
2.雙方驗證證書的真僞
3.雙方協商加密算法
4.用CA辦法的公鑰解密證書中的CA的簽名,能解密說明證書來源可靠
5.用協商出來的加密算法加密證書,並取得特徵值,與解密出來的特徵值進行比較,如果相同,說明證書完整性有保證
6.檢查證書的有效期是否合法,如果在有效期內,則證書可用
7.檢查證書的主體名和此次通信的目標是否能夠對應;
8.檢查證書是否被吊銷
三、實現安全加密功能:
1.進行安全加密傳輸數據的一般步驟:
1)通信雙方互相交換證書,併到信任的CA進行證書有效性認證
2)發送方:
① 使用協商好的對稱加密算法進行數據加密
② 使用單向加密算法對加密後的密文抽取特徵值,並使用自己的私鑰將特徵值加密
③ 利用接收方的公鑰對對稱加密算法的私鑰進行加密
3)接收方:
① 使用自己的私鑰解密對稱加密算法的私鑰
② 使用發送方的公鑰解密被加密的特徵值,證明數據來源可靠
③ 利用相同的單向加密算法對密文進行抽取特徵值,若與發送方的特徵值相同,則證明數據完整未損壞
④ 利用對稱加密算法對密文進行解密
2.實現上述安全加密功能的協議
1)SSL:Security Socket Layer,安全套接字層
位於傳輸層和應用層之間。
2)TLS:Transport Layer Security,傳輸層安全協議
分層設計方案:
最底層:規定了基礎算法的原語的實現;包括:AES, md5, sha,...
向上一層:各種算法的基本實現;
再向上一層:各種算法組合實現的半成品;
最高層:用各種組件拼裝而成的各種成品密碼學協議軟件;
由於較低層位於某個傳輸協議上面,與上面具體的應用無關,故一般把TLS歸於傳輸層安全協議
3.SSL/TLS的handshake的四個階段:
1)客戶端向服務器索要證書並驗證證書;
發送Client Hello的消息,此消息主要內容:
支持的協議的版本,如:SSL v3.0或TLS v1.2;
客戶端生成一個隨機數,稍後用於生成回話密鑰;
支持的加密算法,如:DES,3DES,AES,RSA,....
支持的壓縮算法,如:gzip,bzip2,deflate,...
2)雙方協商生成會話密鑰:
發送Server Hello消息,此消息主要內容:
確認使用的協議的版本,如:TLS v1.2
服務器也生成一個隨機數,稍後用於生成會話密鑰;
確認加密算法和壓縮算法;
服務器的證書;
3)雙方採用以及生成的會話密鑰進行安全加密的數據通信:
① 客戶端驗證服務器證書,在確認無誤後,取出其中的服務器公鑰;
驗證服務器證書的步驟:
驗證發證機構(CA);
驗證證書的完整性;
驗證證書的持有者信息;
驗證證書的有效期;
驗證CA的吊銷列表中是否有此證書;
② 客戶端發送信息給服務器端;
③ 客戶端再次生成一個隨機數,用於公鑰加密;
④ 編碼格式的變更通知,表示以後的信息都將採用雙方已經協商好的加密算法和壓縮算法;
此時客戶端握手結束;
⑤服務器收到客戶端發送來的第三個隨機數(Pre_Master_key),計算生成此次會話用到的會話密鑰,向客戶端發送相關信息;
⑥編碼格式的變更通知,表示以後的信息都將採用雙方已經協商好的加密算法和壓縮算法;
此時服務器端握手結束;
4)雙方互相結束通信:
四、openssl命令行工具:
衆多的子命令實現各種安全加密功能
標準命令:
enc,dgst,ca,req,genrsa,rand,rsa,x509,passwd,...
對稱加密命令enc:
提供對稱加密算法,以進行數據或文件的手動加密
openssl enc -ciphername [-in filename] [-out filename] [-e] [-d] [-a/base64] [-salt]
-ciphername:加密算法的名稱
-in filename:openssl要讀取的文件路徑
-out filename:加密或解密操作後用於保存結果的文件路徑
-e:加密操作
-d:解密操作
-a/-base:用純文本格式進行密文編碼
-salt:隨機加鹽
示例:
加密文件:
openssl enc -e -des3 -in anaconda-ks.cfg -a -out anaconda-ks.cfg.encryptfile
解密文件
openssl enc -d -des3 -out anaconda-ks.cfg -a -in anaconda-ks.cfg.encryptfile
單向解密命令dgst
示例:
openssl dgst -sha1 fstab
生成隨機數命令rand:
openssl rand [-out file] [-rand file(s)] [-base] [-hex] num
示例:
openssl rand -base64 8
生成帶鹽的密碼passwd
openssl passwd -1 -salt SALT_STRING
示例:
openssl passwd -1 -salt 01234567
公鑰加密算法genrsa
生成rsa加密算法的私鑰
openssl genrsa [-out filename] [-des] [-des3] [-idea] [-f4] [-3] [numbit]
出於安全考慮,需要給創建的私鑰富裕只有擁有者才能讀寫其他人都不能讀寫的權限,建議使用下列方法生成私鑰
]#(umask 077 ; open ssl genrsa -out /tmp/my.key 4096)
]#(umask 077 ; open ssl genrsa > /tmp/my.key 4096)
umask:設置之後創建文件的權限掩碼,即對umask命令後面的權限碼進行取反即爲創建文件的權限碼。
從已經生成的私鑰文件中抽取公鑰rsa
openssl rsa [-in filename] [-out filename] [-pubout]
-pubout:抽取公鑰
-in filename:私鑰文件的路徑
-out filename:公鑰文件的路徑
示例:
openssl rsa -in key.my -out mykey.pub -pubout
五、利用openssl建立私有CA
1.首先創建CA所在主機的私鑰文件
2.生成自簽證書
3.必須爲CA提供必要的目錄協議文件以及文本級文件
目錄級文件:
/etc/pki/CA/certs
/etc/pki/CA/crl
/etc/pki/CA/newcerts
文本級文件:
/etc/pki/CA/serial保存證書序列號編號,一般初始序列號爲01
/etc/pki/CA/index.txt:證書索引
/etc/pki/tls/openssl.cnf 配置文件
示例:
創建CA的密鑰文件
]#umask 077
]#openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048
生成自簽證書
使用openssl req命令
openssl req [-out filename] [-new] [-key filename] [-x509] [-days n]
]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3653
之後需要在交互界面填寫相應信息,國家、地區、城市、單位等,生成的證書爲加密後數據
使用x509命令查看證書內容
]#openssl x509 -serial -noout -in /etc/pki/CA/cacert.pem
]#openssl x509 -subject -noout -in /etc/pki/CA/cacert.pem
完善目錄及文本文件結構
]#touch /etc/pki/CA/index.txt
]#echo 01 > /etc/pki/CA/serial
六、吊銷證書:必須在CA上執行:
1.獲取客戶端證書對應的序列號
openssl x509 -in /etc/pki/CA/certificate -noout -serial
2.吊銷證書
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
注意,上述命令中的"SERIAL"要換成準備吊銷證書的序列號
3.生成吊銷證書的吊銷索引文件;僅需要第一次吊銷證書時執行此操作:
echo "SERIAL" > /etc/pki/CA/crl/crlnumber
4.更新證書吊銷列表
openssl ca -genctl -out /etc/pki/CA/crl/ca.crl
5.查看CRL
openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
七、實現加密/解密的應用程序:gpg,可以使用gpg實現對稱加密
gpg2 [--homedir dir] [--options file] [options] command [args]
常用選項
-c:實施對稱加密
-o file , --output file:將解密結果保存於指定文件中
--gen-key:生成密鑰對,即公鑰+私鑰
--list-keys:查看公鑰
--export:導出鑰匙環上所有的公鑰,也可以導出指定名稱的公鑰:默認直接將公鑰輸出到標準輸出;需要配合使用-o或--output選項,才能將其保存到文件中
--import:導入指定的公鑰到鑰匙環
-r: 複製加密文件
-e 加密數據
--delete-key name
--delete-secret-key name
--delete-secret-and-public-key name
刪除公鑰和/或私鑰
gpg應用示例:
加密文件:
]# gpg -c fstab
解密文件:
]# gpg -o fatab.out fstab.gpg
注意參數和參數的順序
生成密鑰對:
]# gpg --gen-key
查看公鑰:
]#gpg --list-key
導出公鑰:
]#gpg -a --export -o /tmp/qhdlink.pub
在其他主機導入公鑰,以進行公鑰加密:
]# gpg --import /PATH/TO/qhdlink.phb
在其他主機上使用的公鑰加密文件:
]# gpg -e -r qhdlink.pub /PATH/TO/SOME_FILE