數(shù)據(jù)加密和解密概述
傳輸層協(xié)議:TCP,UDP,SCTP
port:進程地址,進程向內(nèi)核注冊使用某端口(獨占)
同一主機上的進程間通信:IPC, message queue, shm, semerphor
不同主上的進程間通信:socket
client ip:port <-- --> service ip:port
clentip:55673 <-- --> service ip:80
監(jiān)聽模式:LISTEN (ip:port)
安全的目標:
- 保密性:confidentiality,確保通信信息不被任何無關的人看到
- 完整性:integrity,實現(xiàn)通信雙方的報文不會產(chǎn)生信息丟失
- 可用性:availability,通信任何一方產(chǎn)生的信息應當對授權(quán)實體可用
攻擊類型:
- 威脅保密性的攻擊:竊聽、通信量分析;
- 威脅完整性的攻擊:更改、偽裝、重放、否認
- 威脅可用性的攻擊:拒絕服務(DoS)
解決方案
技術(加密和解密)、服務(用于抵御攻擊的服務,也即是為了上述安全目標而特地設計的安全服務)
加密和解密
- 傳統(tǒng)加密方法:替代加密方法、置換加密方法
- 現(xiàn)代加密方法:現(xiàn)代塊加密方法
服務
- 認證機制
- 訪問控制機制
密鑰算法和協(xié)議
- 對稱加密
- 公鑰加密
- 單向加密
- 密鑰交換
Linux系統(tǒng)上述功能解決方案:OpenSSL(ssl),GPG(pgp)
GPG是gpg協(xié)議的實現(xiàn),OpenSSL是ssl協(xié)議和加密加密庫的實現(xiàn)
加密算法和協(xié)議:
對稱加密:
加密和解密使用同一個密鑰
DES:Data Encryption Standard,數(shù)據(jù)加密標準
3DES:Triple DES,DES的增強版,比DES多3個數(shù)量級
AES:Advanced Encryption Standard,高級加密標準 (128bits, 192bits, 256bits, 384bits)
商業(yè):Blowfish,Twofish,IDEA,RC6,CAST5
特性:
- 加密、解密使用同一個密鑰
- 將原始數(shù)據(jù)分割成為固定大小的塊,逐個進行加密
缺陷:
- 密鑰過多
- 密鑰分發(fā)困難
公鑰加密
密鑰分成公鑰和與之配對的私鑰
公鑰:從私鑰中提取產(chǎn)生;可公開給所有人;pubkey
私鑰:通過工具創(chuàng)建,使用者自己留存,必須保證其私密性;secret key;
特點:用公鑰加密的數(shù)據(jù),只能使用與之配對兒的私鑰解密;反之亦然;
用途:
- 數(shù)字簽名:主要在于讓接收方確認發(fā)送方的身份
- 密鑰交換:發(fā)送方用對方公鑰加密一個對稱密鑰,并發(fā)送給對方
- 數(shù)據(jù)加密:這種直接使用公鑰加密算法來實現(xiàn)通信時數(shù)據(jù)的保密性的方式并不常用,因為這種方式要比使用對稱加密慢上3個數(shù)量級,不推薦。
算法:
RSA:名稱由RSA三個提出者(Ron Rivest, AdiShamir, Leonard Adleman)的姓氏首字母組合而成,這種算法的可靠性由對極大整數(shù)做因數(shù)分解的難度決定;RSA既能實現(xiàn)數(shù)字簽名,又能實現(xiàn)加解密。
DSA:Digital Signature Algorithm,即數(shù)字簽名算法,又稱DSS(Digital Signature Standard, 數(shù)字簽名標準);DSA僅能實現(xiàn)數(shù)字簽名,不能用于加解密。
單向加密
即提出數(shù)據(jù)指紋,只能加密,不能解密
特性:
定長輸出:提取出來的數(shù)據(jù)量是定長的,與進行加密的數(shù)據(jù)的量無關
雪崩效應:初識條件的微小改變會引起加密結(jié)果的巨大變化
功能:用于實現(xiàn)數(shù)據(jù)完整性的驗證
算法:
md5:Message Digest 5,即信息摘要,'5'是版本號;取出的特征碼定長為128bits
sha1:Secure Hash Algorithm 1,即安全哈希算法,'1'是版本號;取出的特征碼定長為160bits
sha224:secure hash algorithm,224bits
sha256:secure hash algorithm,256bits
sha384:secure hash algorithm,384bits
sha512:secure hash algorithm,512bits
注意:CentOS 5用戶密碼加密使用的是md5,CentOS 6/7用戶密碼加密使用的是sha512.
密鑰交換: IKE(Internet Key Exchange)
- 公鑰加密:常見的算法有RSA等
- DH(Deffie-Hellman):Deffie-Hellman(迪菲-赫爾曼)算法
- 其他用于實現(xiàn)密鑰交換的算法有:ECDH(橢圓曲線DH)、ECDHE(臨時橢圓曲線DH)等
一般的過程:
1.Alice生成隨機自然數(shù)a、隨機大質(zhì)數(shù)p和原根g;
2.Alice計算,計算結(jié)果為A,并把p,g,A發(fā)送給Bob;
3.Bob生成隨機自然數(shù)b,根據(jù)Alice發(fā)過來的p,g,計算,計算結(jié)果為B;
4.Bob把B發(fā)送給Alice,并計算,計算結(jié)果為K;而Alice計算,計算結(jié)果也為K;
5.Alice和Bob以K值作為密鑰進行通信。
一次加密通信的過程
加密和發(fā)送過程:
1、當發(fā)送方Alice有數(shù)據(jù)要發(fā)送給Bob時,為了確保數(shù)據(jù)能夠完整地發(fā)送至Bob,首先需要使用單向加密算法去計算出這段要發(fā)送的數(shù)據(jù)的特征碼;
2、為了便于Bob收到數(shù)據(jù)之后可驗證身份,發(fā)送方Alice使用本地私鑰加密這段特征碼,并將加密后的特征碼附加在數(shù)據(jù)后面;
3、為了確保通信過程是保密的,發(fā)送方Alice生成一個臨時的對稱密鑰,并使用這個對稱密鑰加密整段數(shù)據(jù);
4、發(fā)送方Alice獲取Bob的公鑰,再使用Bob的公鑰加密來加密剛才生成的臨時的對稱密鑰,并把加密后的對稱密鑰附加在整段加密數(shù)據(jù)后面,而后發(fā)送給Bob。
接收和解密過程:
1、接收方Bob收到數(shù)據(jù)之后,先使用自己的私鑰去解密這段加密過的對稱密鑰(由Alice生成);
2、接收方Bob用解密得到的對稱密鑰去解密整段(發(fā)送方用對稱密鑰)加密的內(nèi)容;此時接收方Bob得到Alice發(fā)送給自己的數(shù)據(jù)和加密后的特征碼;
3、接收方Bob用對方Alice的公鑰去解密這段特征碼,如果能解密出來,則發(fā)送方的身份得到驗證(沒錯,就是Alice發(fā)送的);
4、接收方Bob再用同樣的單向加密算法去計算這段數(shù)據(jù)的特征碼,與解密得到的特征碼進行比較,如果相同,則數(shù)據(jù)完整性得到驗證,否則說明數(shù)據(jù)有可能被篡改或被破壞。
PKI:Public Key Infrastructure(公鑰基礎設施)
- 簽證機構(gòu):CA,負責簽署證書
- 注冊機構(gòu):RA,負責接收簽署證書的申請
- 證書吊銷列表:CRL,負責公開所有已經(jīng)吊銷的證書
- 證書存取庫:CR,負責將公開所有已申請的證書的相關信息
證書
為了統(tǒng)一數(shù)字證書的格式,國際電信聯(lián)盟(ITU-T)制定了數(shù)字證書標準--X.509,即數(shù)字證書的格式遵循X.509標準。在X.509v3版本中,定了數(shù)字證書的結(jié)構(gòu)以及認證協(xié)議標準。
版本號,序列號,簽名算法ID,發(fā)行者名稱,有效期限,主體名稱,主體公鑰,
發(fā)行者的惟一標識,主體的惟一標識,發(fā)行者的簽名
數(shù)字證書授權(quán)機構(gòu)--CA
前面的加密通信過程中能夠保證通信過程的保密性、通信數(shù)據(jù)的完整性,但這是以雙方(Alice和Bob)能夠在此之前可靠地獲取對方的公鑰為前提的。如果不能保證能夠可靠獲取對方公鑰,那么就有可能出現(xiàn)中間人攻擊(Man-in-the-middleattack,縮寫:MITM)。假設這個中間人是Eve,Eve就可以分別與Alice和Bob建立聯(lián)系,而這時Alice獲取的是“假的”Bob公鑰,而Bob獲取的是“假的”Alice公鑰;這時候Alice和Bob在毫不知情的情況下進行通信,但其實他們之間數(shù)據(jù)包的轉(zhuǎn)發(fā)是經(jīng)由Eve的。
上述的通信過程中缺失的一環(huán)在于通信雙方不能保證可靠地獲取對方的公鑰,因此,為了保證可靠地獲取通信對方的公鑰,于是就有了數(shù)字證書認證機構(gòu)(CertificateAuthority,縮寫:CA)。CA就是為了能夠保證通信雙方能夠可靠獲取對方的公鑰,而特地設定的一個雙方公信的第三方可信機構(gòu)。
為了避免出現(xiàn)上述一環(huán)的缺失,Alice和Bob可向公信的CA申請有效的證書,并由CA分別頒發(fā)給Alice和Bob,其中這個證書中的信息包括了證書擁有者的名稱、公鑰、證書的有效期等信息,而CA還會提取證書中信息的特征碼,并用CA自己的私鑰進行加密,再把加密后的特征碼附加在證書中最后面。此后,當雙方通信時,Alice和Bob雙方都把自己的證書發(fā)給對方,并都分別使用CA的公鑰去解密證書中的特征碼,如果能解密,則說明證書的確由他們所信任的CA機構(gòu)所頒發(fā);接著使用同樣的單向加密算法去提取證書中信息的特征碼,與解密出來的特征碼進行比較,如果兩者相同,說明證書內(nèi)容完整,沒有被篡改或破壞,而對方的證書中就有對方的公鑰。
但這又引入了一個問題,Alice和Bob如何可靠地獲取CA的呢?顯然,不能基于網(wǎng)絡通信的方式獲取CA的公鑰(一切基于網(wǎng)絡的傳輸都是不可靠的),而應該當面交易。全球有多個CA機構(gòu),這些CA的數(shù)量是有限、基本固定的;它們彼此之間存在互信鏈,也就是說CA的信任關系是可以傳遞的。為了管理方便,全球有一個根CA,它與其他CA是從屬關系。
為了解決通信主機能夠可靠獲取CA的公鑰,CA需要自簽一份證書,就是CA自簽名證書,在證書信息中包括了CA的名稱、CA的公鑰等,通信主機(這里是Alice和Bob)需要獲取CA證書,這樣才能獲取CA公鑰以及其他的CA信息,并能通過CA證書來驗證其他通信主機的證書是否可靠。CA證書的獲取需要通過當面交易來實現(xiàn),而微軟公司直接在windows操作系統(tǒng)上集成了在全球具有公信力的CA證書,但在Linux中一般不內(nèi)置CA證書,需要自己通過可靠手段獲取。
雖然通過上述手段可以極大地保證通信過程的安全性,但仍然存在問題,例如在這整個通信過程中使用的某種算法出現(xiàn)漏洞依然不夠安全。
上述的通信過程中缺失的一環(huán)在于通信雙方不能保證可靠地獲取對方的公鑰,因此,為了保證可靠地獲取通信對方的公鑰,于是就有了數(shù)字證書認證機構(gòu)(CertificateAuthority,縮寫:CA)。CA就是為了能夠保證通信雙方能夠可靠獲取對方的公鑰,而特地設定的一個雙方公信的第三方可信機構(gòu)。
CA如何在A和B通信之間發(fā)揮作用?
基本過程:
1、首先,在A和B通信之前需要互相發(fā)送證書;
2、A和B之間協(xié)商通信過程中要使用的加密算法(對稱加密、公鑰加密、單向加密、密鑰交換);
3、開始驗證證書
1)用CA的公鑰去解密CA的簽名,如果能解密,則說明證書來源可靠;
2)用同樣的單向加密算法計算出證書中信息的特征碼,與解密得到的特征碼進行比較;如果兩者相同,則說明證書完整性可靠;
3)檢查證書的有效日期是否在當前時間的合理范圍內(nèi);如果證書過期了則不會被認可;
4)檢查證書的主體名稱與期望通信的對方是否一致;如果不一致則不會被認可;
5)檢查證書是否被吊銷過;如果沒有吊銷則可使用該證書,否則證書不會被認可。
本博客參考:https://blog.csdn.net/qq_22030347/article/details/69573207