大話<數(shù)據(jù)傳輸安全與加密>

概述:

兩個計算機(jī)在互聯(lián)網(wǎng)上通信時,它們之間發(fā)送的信息如果不經(jīng)過特殊的處理,即加密機(jī)制,很容易被其他人給獲取到,如果是普通的信息,那倒是無所謂,但是如果涉及到個人的私密信息,那這樣豈不是很糟糕,本篇來說一下這個安全和加密機(jī)制。

加密算法和協(xié)議:

對稱加密:數(shù)據(jù)加密(保密性)(3DES,AES)
公鑰加密:身份認(rèn)證、密鑰交換、數(shù)據(jù)加密(不常用,比對稱加密要慢3個數(shù)量級)(RSA,DSA)
單項加密:數(shù)據(jù)完整性(MD5,SHA) 
密鑰交換:RSA、DH(迪菲-赫爾曼)、ECDH(橢圓曲線DH)、ECDHE(臨時橢圓曲線DH)

一 、對稱加密:加密和解密使用同一個密鑰

    DES:Data Encryption Standard,56bits
    3DES:
    AES:Advanced (128, 192, 256bits)
    Blowfish,Twofish
    IDEA,RC6,CAST5

特性:

1、加密、解密使用同一個密鑰,效率高
2、將原始數(shù)據(jù)分割成固定大小的塊,逐個進(jìn)行加密

缺陷:

1、密鑰過多
2、密鑰分發(fā)
3、數(shù)據(jù)來源無法確認(rèn)

二 、非對稱加密算法:即公鑰加密

  • 公鑰加密:密鑰是成對出現(xiàn)
    公鑰:公開給所有人;public key
    私鑰:自己留存,必須保證其私密性;secret key

特點:

用公鑰加密數(shù)據(jù),只能使用與之配對的私鑰解密;反之亦然

功能:

1 數(shù)字簽名:主要在于讓接收方確認(rèn)發(fā)送方身份
2 對稱密鑰交換:發(fā)送方用對方的公鑰加密一個對稱密鑰后發(fā)送給對方
3數(shù)據(jù)加密:適合加密較小數(shù)據(jù)

缺點:

密鑰長,加密解密效率低下

算法:

RSA(加密,數(shù)字簽名),DSA(數(shù)字簽名),ELGamal

具體實現(xiàn):

基于一對公鑰/密鑰對:
用密鑰對中的一個加密,另一個解密
接收者
    生成公鑰/密鑰對:P和S
    公開公鑰P,保密密鑰S
發(fā)送者
    使用接收者的公鑰來加密消息M
    將P(M)發(fā)送給接收者
接收者
    使用密鑰S來解密:M=S(P(M))

三、單項加密:將任意數(shù)據(jù)縮小成固定大小的“指紋”

特點:

1 任意長度輸入
2 固定長度輸出
3 若修改數(shù)據(jù),指紋也會改變(“不會產(chǎn)生沖突”)
4 無法從指紋中重新生成數(shù)據(jù)(“單向”)

功能:

數(shù)據(jù)完整性

常見算式:

md5: 128bits、sha1: 160bits、sha224
sha256、sha384、sha512

常用工具:

md5sum | sha1sum [ --check ] file
openssl、gpg
rpm -V


密鑰交換:IKE(Internet Key Exchange )

公鑰加密:
DH (Deffie-Hellman):

DH:
1、A: a,p協(xié)商生成公開的整數(shù)a,大素數(shù)p
     B: a,p
2、A:生成隱私數(shù)據(jù):x (x<p ),計算得出a^x%p,發(fā)送給B
    B:生成隱私數(shù)據(jù):y,計算得出a^y%p,發(fā)送給A
3、A:計算得出(a^y%p)^x = a^xy%p,生成為密鑰
    B:計算得出(a^x%p)^y = a^xy%p, 生成為密鑰

此時,A和B便生成了一個相同的密鑰,注意這個密鑰交換協(xié)議算法只能用于密鑰的交換,而不能用于消息的加密處理,當(dāng)雙方確定要用的密鑰后,要使用其他的對稱加密操作實際加密和解密數(shù)據(jù)

注意:

以上所說的加密算法和協(xié)議雖然能夠?qū)崿F(xiàn)兩個兩個計算機(jī)之間的加密通信,可是保證不了其他計算機(jī)的干預(yù)消息。

例如:A和B是互聯(lián)網(wǎng)上的兩臺主機(jī),A擁有自己的私鑰,B擁有自己的私鑰,此時如若A要給B發(fā)送消息,但是第一次它并不知道誰是B,如果此時有另一臺機(jī)器C告訴A說我就是B,然后把自己的公鑰發(fā)送給A,A此時還以為和它通信的真的是B,然而卻是A和C在通信。
那么問題來了,如何確定B的身份呢?如果此時有一個雙方都信任的第三方機(jī)構(gòu),由它來確認(rèn)B的身份,那么問題就可以解決了,隨之而來的是誰來確定這個第三方機(jī)構(gòu)的身份呢,如果是一個假的機(jī)構(gòu)呢?所以還需要這個機(jī)構(gòu)的上級來確定它,知道到了頂層。當(dāng)然這個頂層是我們所有人在心底都默認(rèn)知道和了解的。

說了這么多,這個所謂的第三方機(jī)構(gòu)就叫做CA,當(dāng)CA每確認(rèn)一臺機(jī)器的時候,就會給它頒發(fā)一個證書,具體如下:

CA和證書

PKI: Public Key Infrastructure
    簽證機(jī)構(gòu):CA(Certificate Authority)
    注冊機(jī)構(gòu):RA
    證書吊銷列表:CRL
    證書存取庫:
X.509:定義了證書的結(jié)構(gòu)以及認(rèn)證協(xié)議標(biāo)準(zhǔn)
    版本號
    序列號
    簽名算法
    頒發(fā)者
    有效期限
    主體名稱
    主體公鑰
    CRL分發(fā)點
    擴(kuò)展信息
    發(fā)行者簽名
證書類型:
    證書授權(quán)機(jī)構(gòu)的證書
    服務(wù)器
    用戶證書

獲取證書兩種方法:
    使用證書授權(quán)機(jī)構(gòu)
        生成簽名請求(csr)
        將csr發(fā)送給CA
        從CA處接收簽名
    自簽名的證書
        自已簽發(fā)自己的公鑰

證書簽發(fā)過程:如下圖所示

wKiom1fnX_2jSqXhAABParnao-Y809.png
  • 1、A將自己的公鑰發(fā)送給CA

  • 2、CA在確定A的身份后,會將證書頒發(fā)給A,其中過程如下


    1)CA會將應(yīng)有內(nèi)容整合到證書上,證書的內(nèi)容結(jié)構(gòu)如上。

    2)然后將此內(nèi)容使用單向加密算法生成特征碼(用于驗證證書完整性)

    3)最后,CA會使用自己的私鑰來對此特征嗎進(jìn)行加密,生成數(shù)字簽名(用來驗證是否為CA簽署的證書),然后發(fā)給A
  • 3)B的過程與A相同

當(dāng)B驗證A的身份時,就是通過證書來驗證的,步驟如下

  • 1 使用CA的公鑰來解密數(shù)字簽名,如果成功,則驗證了CA身份
  • 2 利用相同的單項加密算法來計算證書內(nèi)容結(jié)構(gòu)的特征碼,與原來的特征碼相比較,如果相同,則保證了證書的完整性
  • 3 從證書內(nèi)容中取出A的公鑰

加密通信過程詳解

wKiom1fnY2_C8q-BAAE40YGRdGo366.png

第一階段:ClientHello:客戶端向服務(wù)器端發(fā)起加密通信的請求

1 向服務(wù)器發(fā)送自己支持的協(xié)議版本,比如tls1.2
2 客戶端生成一個隨機(jī)數(shù),稍后用戶生成”會話密鑰“
3 自己支持的各種加密算法,比如AES,RSA等 支持的壓縮算法;
第二階段:ServerHello(回應(yīng))
1 確認(rèn)使用的加密通信協(xié)議版本,比如tls1.2;(如果版本不一樣,則拒絕通信)
2 服務(wù)器端生成一個隨機(jī)數(shù),主要在稍后用戶生成”會話密鑰“
3 確認(rèn)使用的加密方法
4 發(fā)送服務(wù)器證書
5 索要客戶端證書(不過一般服務(wù)器端都不會驗證客戶端)
第三階段:
1 驗證服務(wù)器證書,確認(rèn)無誤后,取出其公鑰;(驗證發(fā)證機(jī)構(gòu)、證書簽名、證書完整性、證書持有者、證書有效期、吊銷列表)
2 發(fā)送一下信息給服務(wù)器端
3  一個隨機(jī)數(shù):用于服務(wù)器公鑰加密
4 編碼變更通知:表示隨后的信息都將用雙方商定的加密方法和密鑰發(fā)送
5 客戶端握手結(jié)束通知
第四階段:
1 收到客戶端發(fā)來的第三個隨機(jī)數(shù)-pre-master-kty后,計算生成本次會話用到的會話密鑰
2 向客戶端發(fā)送如下消息
3 編碼變更通知:與上相同
4 服務(wù)器端握手結(jié)束通知

此時雙方已經(jīng)彼此確認(rèn)了對方的身份,并且建立一條安全的通道,接下來就可以傳輸信息了。此過程如下圖所示:

wKioL1fnciaRUIAAAAA5Hck80zM617.png

(1)A-->B
1)使用單向加密算法計算要傳輸?shù)臄?shù)據(jù)的特征碼(并沒有對原數(shù)據(jù)內(nèi)容加密)
2)使用自己的私鑰來加密這段特征碼生成數(shù)字簽名
3)使用對稱加密算法加密上面的所有數(shù)據(jù)(包括原數(shù)據(jù),特征碼,數(shù)字簽名),將生成的對稱加密的密碼附加在加密過的數(shù)據(jù)后面
4)使用B的公鑰來加密這段對稱加密的密碼,并將以上所有數(shù)據(jù)發(fā)送給B
(2)B收到A發(fā)送的數(shù)據(jù)后
1)使用B的要來解密對稱加密的密碼(如果可以解密,則保證接收放是B)
2)利用解密過的對稱加密密碼來解密這段數(shù)據(jù)
3)解密后通過利用A的公鑰來解密數(shù)字簽名(如果可以,則保證了數(shù)據(jù)是從A發(fā)的)
4)此時,呈現(xiàn)在B的有兩樣?xùn)|西,一個是原數(shù)據(jù),還有一個是特征碼。且原數(shù)據(jù)是沒有加密的。此時B需要使用相同的單項加密算法對此時的原數(shù)據(jù)計算特征碼,與A發(fā)送過來的特征碼相比較,如果相等,則保證了原數(shù)據(jù)的完整性。

至此。信息的加密與解密過程完成。


總結(jié):

在以上所述的過程中,個人認(rèn)為有幾點需要強(qiáng)調(diào):

1)單項加密并不加密原數(shù)據(jù),只是為了計算原數(shù)據(jù)的特征碼。用于數(shù)據(jù)的完整性校驗
2)對稱加密算法加密和解密都是用同一個密鑰。用于加密數(shù)據(jù)
3)公鑰加密加密的是特征碼。用于生成數(shù)字簽名
4)證書的頒發(fā)和驗證過程和數(shù)據(jù)的傳輸過程是兩個過程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容