現在如今個人以及公司對自己的數據以及隱私越來越關注,之前美國斯諾登事件的爆出,又將通訊安全話題引發激烈的討論。下面我們就來說下linux中的加密解密,以及通訊過程中如何確保通訊的安全。
常見的加密方法有三種:對稱加密、單向加密、非對稱加密,下面簡單說下這三種加密方式。
對稱加密:加密和解密使用同一個密鑰;依賴於算法和密鑰;安全性依賴於密鑰,而非算法常見算法有DES:Data Encryption Standard, 56bits、3DES、AES: Advanced Encrpytion Standard, (128bits, 192, 256, 384, 512bits)、Blowfish、Twofish、IDEA、RC6、CAST5。此些算法都有由數學家們通過精心計算得到。
特性:
1、加密、解密使用同一密鑰;
2、將明文分隔成固定大小的塊,逐個進行加密;
缺陷:
1、密鑰過多;
2、密鑰分發;
非對稱加密:公鑰從私鑰中提取而來;使用公鑰加密的數據,只能使用與此公鑰配對兒的私鑰解密;反之亦然;有公鑰和私鑰的密鑰對,私鑰:secret key,僅允許個人使用,公鑰:public key,公開給所有獲取;私鑰擁有者用自己的私鑰加密的數據,只要用其公鑰能解密,即可認證其身份,與被通信方通信之前,首先獲取到對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,併發送給對方,對方得到自己公鑰加密的數據以及發送者的私鑰。通常的算法有RSA、DSA、ELGamal,主要的特徵有:1、密鑰長度較大,例如512bits, 2048bits, 4096bits,2、加密解密分別使用密鑰對兒中的密鑰相對進行,3、常用於數據簽名和密鑰交換
單向加密:通過提出數據的特徵碼獲得,它的特性爲:1、密鑰長度較大,例如512bits, 2048bits, 4096bits;2、雪崩效應:原始數據微小改變,將會導致結果巨大變化;3、不可逆;通常的算法有:MD5(128bits定長輸出)、SHA1(160bits定長輸出)、SHA256(160bits定長輸出)、SHA256(256bits定長輸出)、SHA512(128bits定長輸出)等。
在一次加密通信過程的過程如下。
發送者:
1、使用單向加密算法提取生成數據的特徵碼;
2、使用自己的私鑰加密特徵碼附加在數據後面;
3、生成用於對稱加密的臨時密鑰;
4、用此臨時密鑰加密數據和已經使用私鑰加密後的特徵碼;
5、使用接收方的公鑰加密此臨時密鑰,附加在對稱加密後的數據後方;
接收方:
1、使用自己的私鑰解密加密的臨時密鑰;從而獲得對稱密鑰;
2、使用對稱密鑰解密對稱加密的 數據和私鑰加密的特徵碼密文;從而獲得數據和特徵碼密文;
3、使用發送方的公鑰解密特徵碼密文,從而獲得從計算生成的特徵碼;
4、使用與對方同樣的單向加密算法計算數據的特徵碼,並與解密而來的進行比較;
此過程比較繁瑣,故通常的使用者不會手動每次去操作此過程,因此產生了SSL,SSL:secure socket layer(即獲取到對方服務器的CA證書,得到對方的公鑰,生成私鑰,然後發送給服務器端,服務器發送數據給請求方,請求方有服務器端的公鑰,可以解密,這樣就能形成聯繫),通常證書主要有兩類,主機證書以及用戶證書,用戶證書包含主機證書將自己的私鑰形成的公鑰,以及CA證書等信息。CA:CA證書的發證機構爲具有公信力的機構,一般網站會購買一個CA證書用於認證,保證公鑰信息的安全分發;
數字證書的格式(x.509 v3):
版本號(version)
序列號(serial number):CA用於惟一標識此證書;
簽名算法標誌(Signature algorithm identifier)
發行者的名稱:即CA自己的名稱;
有效期:兩個日期,起始日期和終止日期;
證書主體名稱:證書擁有者自己的名字
證書主體公鑰信息:證書擁有者自己的公鑰;
發行商的惟一標識:
證書主體的惟一標識:
擴展信息:
簽名:CA對此證書的數字簽名;
openssl是基於ssl開發的,在linux上使用,openssl的組成部分:libcrypto(加密、解密庫文件)、libssl( ssl協議實現)、openssl(多用途命令行工具,每種功能都使用專用的子命令來實現)。
下面首先來說下openssl的一些加密指令:
openssl:
子命令分類:標準命令、消息摘要命令、加密、解密相關的命令
加密文件(對稱加密):
工具:openssl enc, gpg
算法:des, 3des, aes, blowfish, twofish, idea, cast5
enc工具:
# openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMECIPHERFI
例openssl enc -e -des3 -a -salt -in path -out path.de3
# openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMECIPHERFILE -out /PATH/TO/SOMEFILE
例openssl enc -d -des3 -a -salt -in path.de3 -out path.22
單向加密:
算法:md5, sha1
工具:openssl dgst, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum
# openssl dgst -CIPHER(算法如md5) /PATH/TO/SOMEFILE...
或者 md5sum /PATH/TO/SOMEFILE
例如:
[root@localhost tmp2]# openssl dgst -md5 lib
MD5(lib)= 8fcd1d3f02caeebfa22c649471a57b28
[root@localhost tmp2]# md5sum lib
8fcd1d3f02caeebfa22c649471a57b28 lib
MAC: 消息認證碼,單向加密的一種延伸應用,用於實現在網絡通信中保證所傳輸的數據的完整性;
機制:
CBC-MAC
HMAC:使用md5或sha1算法
生成用戶密碼:
# openssl passwd -1 -salt 8bits -salt是加在密碼前面,用於加強加密
生成隨機數:
# openssl rand -hex|-base64 NUM -hex是16位 -base64生成字母和數字
隨機數生成器:
random, urandom
熵池:保存硬件中斷產生的隨機數
/dev/random:僅從熵池中返回隨機數,當熵池中的隨機數耗盡時,取隨機數的進程將會被阻塞;
/dev/urandom:先從熵池中取隨機數,當熵池中的隨機耗盡時,就通過僞隨機數生成器生成隨機數;
下面說下我們平時工作會遇到的在自己公司建立私有的CA,以及發證、簽證的過程;
使用OpenSSL構建私有CA的過程爲主機在服務器生成私鑰,然後生成自己證書文件;
(1) 私鑰用於簽發證書時,向證書添加數字簽名使用;
(2) 證書:每個通信方都導入此證書至“受信任的證書頒發機構”;
配置文件(默認CA的配置文件):/etc/pki/tls/openssl.cnf
工作目錄:/etc/pki/CA/
[root@localhost CA]# ls
certs crl newcerts private
certs證書文件存放
crl 吊銷列表
newcerts 新證書文件
private 私鑰存放位置
建立私有CA:
1、生成私鑰文件: /etc/pki/CA/private/cakey.pem
# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2、生成自簽證書
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days #、
-new: 生成新的證書籤署請求;
-key:私鑰文件路徑,用於提取公鑰;
-days N: 證書有效時長,單位爲“天”;
-out:輸出文件保存位置;
-x509:直接輸出自簽署的證書文件,通常只有構建CA時才這麼用;
3、提供輔助文件
# touch /etc/pki/CA/index.txt
# echo 01 > /etc/pki/CA/serial (01表示第一個)
給節點發證書:
1、節點申請證書
在證書申請的主機上進行如下步驟:
(1) 生成私鑰;(umask 077; openssl genrsa -out httpy.key 1024)
(2) 生成證書籤署請求; openssl req -new -key /etc/http.key -out /etc/httpd/http.csr
(3) 把請求發送給CA;
注意:
(a) 其中的subject信息部分,要與CA的保持一致;
(b) Common Name要使用此主機在通信真實使用名字;
2、CA簽發證書
(1) 驗正請求者信息
(2) 簽署證書
# httpopenssl ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N
(3) 把簽署好的證書發還給請求者
吊銷證書:
1、獲取吊銷證書的序列號;
# openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject
2、實現證書吊銷
(1) 吊銷證書
# openssl ca -revoke /PATH/FROM/CRT_FILE
(2) 生成吊銷證書的編號
echo 01 > /etc/pkie/CA/crlnumber
(3) 更新證書吊銷列表
# openssl crl -gencrl -out THISCA.cr
小結下,在公司的服務器中很有可能會用到私有CA,以保證通信的安全性。