加密解密的技術
一、對稱加密
加密方和解密方使用是同一個密鑰,加密解密的速度都很快,先將數據明文分成數據塊兒,一般來講是大小相同的,如果到最後剩下的不能與其他數據塊兒的大小相同,那麼就給它添加一些填充物,然後對每個數據塊兒逐個加密,然後把加密後的數據塊兒發給對方,每一次管理一塊兒,但是,加密後的塊兒怎麼處理,因爲每一個塊兒都是單獨處理,對方在破解數據時每一塊兒獨立破解,也就是說這樣的加密過程對反破解並沒有任何幫助。
對於加密以後的數據塊兒的處理有以下兩種方法:
① ECB:每一塊兒單獨加密,加密一個傳遞一個;
② CBC:加密後密文塊鏈,通過抑或運算實現,每一個數據塊,在發送給對方之前會實現將此數據塊與此前的數據塊做一次抑或運算,並把結果發送給對方,所以得不到第一個塊,得到其他也就沒有用,即使是第一塊,也會和一個隨機數進行抑或運算,其最大好處在於,做兩次抑或運算後可以將數據還原。
常見算法:
DES:Data Encryption Standard, 56bits數據加密標準,使用56位的密鑰長度
3DES: 在DES被機器硬件更新所摧殘破解後不甘心退出歷史而產生,對原有數據做3次複合加密(不是簡單的三次DES加密)
AES: Advanced Encryption Standard, (128bits, 192, 256, 384, 512bits)
Blowfish
Twofish
IDEA
RC6
CAST5
缺陷:1、一個人跟衆多對象通信的時候需要記的密碼過多;
2、密鑰分發困難,是最大的難題,沒有一種可靠的手段將密鑰送給一個沒有見過面的對象。
二、非對稱加密
非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。
公鑰加密算法:DSA,RSA,EIGamal
加密方和解密方使用不同的密鑰
現在主流的密鑰長度是2048
用處:
①身份認證:私鑰擁有者用自己的私鑰加密的數據,只要用其公鑰能解密,即可認證私鑰擁有者的身份;
②密鑰交換:與被通信方通信之前,首先獲取到對方的公鑰,自己生成一個加密密碼,用對方的公鑰加密,併發送給對方;
③數據加密:加密過程太慢,一般不做數據加密。
缺陷:①加密速度慢,比對稱加密慢3個數量級 1000倍,一個數量級10倍;
②公鑰加密一般不用於加密數據,主要用於實現用戶認證,數據加密主要是通過對稱加密實現的;
如何實現用戶認證:
現在假設,有兩個通信的對象,一個較小黑,一個較小白,現在小黑給小白髮了一封電子郵件,但是,小白在接受郵件的時候不希望自己的郵件的內容被篡改,這時小黑就將郵件內容加密且說自己是小黑,併產生一個公鑰和一個私鑰,私鑰小黑會隨身攜帶,而且不能外泄,公鑰則連同郵件一起發給小白,這是小白拿着小黑的公鑰如果能夠解密,則說明小黑就是小黑。這就實現了認證,但是如果小黑加密的數據很大,再加上公鑰加密要用很長時間,等加密好,小黑也無語了,所以小黑加密的不是數據而是這段數據的特徵值。
三、單向加密
單向加密就是去計算一段數據的特徵值,加密過程是不可逆的,是去計算一段數據的特徵碼,是獨一無二的,用於對數據完整性的校驗。
特點:
①雪崩效應:輸入的數據有一點點不同,結果會有巨大不同,主要目的在防暴力破解
②定長輸出:無論你輸入的數據是多長,輸出的結果都是一樣長度
算法:
MD5:message digest,輸出結果固定長度128bit
SHA1:secure hash algorithm安全的哈希算法,輸出結果固定長度160bit;
SHA256:輸出結果固定長度256bit
SHA384:輸出結果固定長度384bit
SHA512:輸出結果固定長度512bit
一次加密通信過程:
發送者:
1、使用單向加密算法提取生成數據的特徵碼;
單向加密:MD5,SHA1,SHA256,SHA384,SHA512,CRC32
2、使用自己的私鑰加密特徵碼附加在數據後面;
非對稱加密:RSA、DSA、ELGama
3、生成用於對稱加密的臨時密鑰;
4、用此臨時密鑰加密數據和已經使用私鑰加密後的特徵碼;
對稱加密:DES、3DES、AES、blowfish,twofish,IDE、RC6、CAST5
5、使用接收方的公鑰加密此臨時密鑰,附加在對稱加密後的數據後方;
非對稱加密:RSA、DSA、ELGama
接收方:
1、使用自己的私鑰解密加密的臨時密鑰;從而獲得對稱密鑰;
非對稱解密:RSA、DSA、ELGama
2、使用對稱密鑰解密對稱加密了的 數據和對方私鑰加密的特徵碼密文;從而獲得數據和特徵碼密文;
對稱解密:DES、3DES、AES、blowfish,twofish,IDE、RC6、CAST5
3、使用發送方的公鑰解密特徵碼密文,從而獲得從計算生成的特徵碼;
非對稱解密:RSA、DSA、ELGama
4、使用與對方同樣的單向加密算法計算數據的特徵碼,並與解密而來的進行比較;如果這兩個值相同,則說明數據完好,以上過程就實現了三重驗證
單向加密:MD5,SHA1,SHA256,SHA384,SHA512,CRC32
可以實現這整個過的工具:
opssh
gpg
但是這兩個過程還存在問題,就是怎麼去獲得對方的公鑰,以及在傳輸公鑰的時候怎麼避免可能出現的欺騙呢:
IKE:互聯網密鑰交換,實現雙方使眼色交換密鑰,和密鑰本身不在互聯網上傳播
PKI:公鑰基礎設施,或公鑰基礎架構,CA證書頒發機構,證書內放的就是通信人的公鑰信息。
怎樣基於證書通信:
雙方在通信時都出示證件,這個證件由某個權威機構發放,只要驗證證件內的有效信息就可以驗證對方的身份,但是在發證的時候怎樣防止中間出現欺騙呢?
這又是一個雞生蛋,蛋生雞的問題,想想該如何解決呢?
所以一些操作系統在安裝時就已經將一些權威的發證機構的證書放在你的電腦裏了,這樣在一定程度上可以解決一些問題。
證書的格式:X509,PKCS
證書廢棄列表:CRL
------------------------------------------------------------------------------------------
openssl建立私有CA的過程及吊銷證書
一、建立私有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
二、給節點發證書:
1、節點申請證書
在證書申請的主機上進行如下步驟:
(1) 生成私鑰;
(2) 生成證書籤署請求;
注意:
(a) 其中的subject信息部分,要與CA的保持一致;
(b) Common Name要使用此主機在通信真實使用名字;
(3) 把請求發送給CA;
2、CA簽發證書
(1) 驗正請求者信息
(2) 簽署證書
# openssl 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 /etc/pki/CA/newcerts/NUM.pem
NUM:查詢到的要吊銷證書的序列號
(2) 生成吊銷證書的編號
# echo 01 > /etc/pki/CA/crlnumber
(3) 更新證書吊銷列表
# openssl crl -gencrl -out /etc/pki/CA/crl/NAME.crl
NAME : 自己取的名字