1、什麼是OpenSSL?
OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。
2、OpenSSL的組成
OpenSSL三部分組成
1:libcrypto庫
2:libssl庫
3:openssl 多用途命令行工具
3、OpenSSL加密算法和協議
1)對稱加密算法
算法種類:
DES:現代加密算法;8個字節位一塊兒,64位加密算法。已被破解
3DES:DES升級版,三個數量級,千倍
AES:高級加密標準:128bit位,192bits位,256bits位,384bits位
對稱加密的特性:
機密解密同一個祕鑰
加密原始數據分割成固定大小的塊,逐個加密
對稱加密的缺陷:
祕鑰過多
祕鑰分發困難
2)公鑰加密算法
祕鑰的種類
公鑰:從私鑰中提取產生,可公開給所有人
私鑰:通過工具創建,使用者自己留存,必須保證其私密性
特點:用公鑰加密的數據,只能使用與之對應的私鑰解密,反之亦然
用途:
數字簽名:主要用於讓接收方確認發送放的身份
密鑰交換:發送發用對方公鑰加密一段對稱密鑰,併發送給對方
算法:
RAS
RSA公鑰加密算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。1987年首次公佈,當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前爲止已知的絕大多數密碼***,已被ISO推薦爲公鑰數據加密標準。
DAS 數字簽名算法
3)單向加密
特性:
只能加密不能解密,提取數據指紋(特徵)
定長輸出;
雪崩效應(數據微小變化,數據驗證將會發生巨大變化)
算法:
MD5 固定128位定長輸出;
sha1 160位的定長輸出
sha224
sha256
sha384
sha512
4)祕鑰交換
公鑰加密:獲取對方公鑰,只有對方私鑰才能解密
算法採用 DH算法:deffie-hellman
4、公鑰加密過程(snow-->bamboo)
snow給bamboo發送數據需要進行以下步驟:
1、snow首先使用單向加密算法算法算出這段數據的特徵;
2、並使用自己的私鑰將這段特徵碼進行加密,生成數字簽名。並把這段簽名附加在數據後面;
3、然後snow使用對稱加密算法將數據進行加密,(自己生成的一個一次性的對稱祕鑰)然後通過bamboo的公鑰對對稱加密碼進行加密,並將其附加數據報文的後面
當bamboo收到snow傳輸過來的數據後會做如下解密和驗證步驟:
1:bamboo使用自己的私鑰進行對數據的密碼進行解密,這種方法就叫做祕鑰交換;
2:bamboo使用解密出來的密碼將數據進行解密;
3:bamboo然後使用snow的公鑰解密這段數據的加密後的特徵碼,然後使用同種加密算法算出這段數據的特徵碼與解密出來的特徵碼比較是否一致,如果一樣,數據完整性得到了保證了;
以上既保證了數據的完整性,保密性,和唯一性,但是如果在網絡中有人冒充bamboo,將其公鑰給了snow,怎麼來解決這一問題?CA第三方公鑰合法性效驗中心。
5、CA的出現!
證書授證中心,作爲電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。CA中心(GlobalSign)爲每個使用公開密鑰的用戶發放一個數字證書,數字證書的作用是證明證書中列出的用戶合法擁有證書中列出的公開密鑰。CA機構的數字簽名使得***者不能僞造和篡改證書。它負責產生、分配並管理所有參與網上交易的個體所需的數字證書,因此是安全電子交易的核心環節。
6、各加密算法命令
1)對稱加密
工具:opensslenc, gpg
算法:3des, aes, blowfish, twofish
enc命令:man enc
加密:
openssl enc -e -des3 -a -salt -in filename
-out filename.encryption
解密:
openssl enc -d -des3 -a -salt –in testfile.encryption
-out testfile
2)單向加密
工具:md5sum, sha1sum, sha224sum,sha256sum…
openssl dgst
dgst命令:
openssl dgst -md5 [-hex默認] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
3)生成用戶密碼
工具:passwd,openssl passwd
opensslpasswd-1 -salt SALT(最多8位)
opensslpasswd-1 –salt centos
[root@localhost testdir]# openssl passwd -1 -salt $(openssl rand -hex 10)
Password:
$1$8e0dbb21$N4b97PdbzsQpBdw9zNcAU1
4)生成隨機數:man sslrand
openssl rand -base64|-hex NUM
NUM: 表示字節數;-hex時,每個字符4位,出現的字符數爲NUM*2
[root@localhost testdir]# openssl rand -base64 10LMAeXPhRn3m3pg==
[root@localhost testdir]# openssl rand -hex 10
55f6e4a8c9c9ce58c1c0
5)公鑰加密:
算法:RSA, ELGamal
工具:gpg, opensslrsautl(man rsautl)
數字簽名:
算法:RSA, DSA, ELGamal
密鑰交換:
算法:dh
DSA: Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:
生成私鑰: # (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提出公鑰: # openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE -pubout