數(shù)字簽名/數(shù)字證書/對稱/非對稱加密/CA 等概念明晰

前言

此次不深入源碼、不分析原理、只厘清一些易混淆概念及其關聯(lián)。
本次將從通信演變歷史的角度出發(fā),一步步闡述概念及其作用。
通過本篇文章,你將了解到:

1、明文通信
2、密文通信
3、對稱加密
4、非對稱加密
5、消息摘要
6、數(shù)字簽名
7、CA與數(shù)字證書
8、總結

1、明文通信

大部分時候,咱們交流都是靠嘴對嘴,信息完全暴露在他人的耳朵里。


image.png

拉拉家常無關緊要,但要是涉及重要、私密的信息就不能這樣子了。
此時可能想到,那我們就說悄悄話吧。


image.png

2、密文通信

悄悄話只能是倆人近距離才能實現(xiàn),若是天各一方怎么才能將信息安全送給對方呢?
大家或多或少地看過諜戰(zhàn)片,那會兒臥底如何將信息傳給組織呢?答案是通過密碼本。


image.png

雙方約定好用一個密碼本,密碼本其實是個映射關系:

1、發(fā)送方通過密碼本將明文信息轉為不易被理解的信息,稱為密文。
2、接收方接收到密文后,通過密碼本映射關系反推出明文。

此時雙方通信是經過加密的,我們稱為密文通信。第三者想要破解信息,就需要拿到密碼本或是破譯出密碼本映射關系,從而將密文轉為明文。

3、對稱加密

隨著科學技術的發(fā)展,人們的交流由書信逐漸過渡為電子通信。


image.png

當我們在鍵盤上敲擊一段文字后,這段信息會通過網絡發(fā)送給對方,怎么保證這段信息不被別人輕易知道呢?
我們想到了加密,雙方在傳輸信息前商量好一個密鑰,發(fā)送方用密鑰將信息進行加密形成密文后再發(fā)送,接收方在收到密文后使用之前協(xié)商的密鑰進行解密。

因為加密明文、解密密文使用同一個密鑰,我們稱此種加密方式為對稱加密方式。

舉個簡單例子:


image.png

小明現(xiàn)在將信息進行對稱加密:

1、設定密鑰為:X。
2、設定加密算法為:將每個字符+X。
3、假設采用密鑰 X=1。

那么將明文hello,每個字符+1,得出如下結果:
hello--->ifmmp

小紅拿到密文ifmmp后,她知道密鑰X=1,因此她將密文每個字符-1,得出如下結果:
ifmmp--->hello

至此,小明和小紅成功進行了交流。

此時小剛想知道小明和小紅聊了啥,于是截獲了信息:


image.png

但是由于小剛拿到的是密文信息:ifmmp。因為不知道密鑰,因此無法反推出明文:hello。因此小明和小紅的信息交流安全得到了保證。

當然對稱加密算法沒那么簡單,常見的對稱加密算法有如下幾種:

1、DES(Data Encryption Standard) 數(shù)據(jù)加密標準,強度比較低,容易被破解,目前使用比較少。
2、3DES(TDEA,Triple Data Encryption Algorithm) 三重數(shù)據(jù)加密算法,是DES的增強版,對一塊數(shù)據(jù)使用3個不同的密鑰加密。
3、AES(Advanced Encryption Standard) 高級加密標準,當前主流的對稱加密算法。
4、RC4 流加密算法,由Ron Rivest 大神設計的。
5、Blowfish 塊加密算法,由Bruce Schneier 大神設計的。
6、SM4 分組密碼算法,由我國設計并由國家密碼管理局發(fā)布。

似乎使用對稱加密就可以解決咱們通信安全問題,但引入了另一個問題:

\color{Red}{小明和小紅如何約定對稱加密的密鑰呢?}

4、非對稱加密

是否有種方式可以光明正大地傳遞信息呢?
答案是:非對稱加密。

1、非對稱加密有兩個密鑰,一個是公鑰(public key),另一個是私鑰(private key)。
2、用公鑰加密后的密文只能由私鑰來解密。
3、用私鑰加密后的密文只能由公鑰來解密。
4、公鑰可以公布出來供其他人使用,而私鑰卻是需要保密,不能被別人獲取。

因加密與解密使用的不是同一個密鑰,故此種公私鑰加密方式稱為:非對稱加密。

接著來看看小明和小紅如何使用非對稱加密來實現(xiàn)安全通信。
小明和小紅分別生成自己的公私鑰:


image.png

1、小紅將自己的公鑰告訴小明。
2、小明使用小紅的公鑰加密后發(fā)送給小紅。
3、小紅使用自己的私鑰來解密,得出明文。

image.png
image.png

由上可知,用小紅的公鑰加密的信息只能由小紅的私鑰解開,只要小紅的私鑰沒有泄漏,那么小明和小紅的通信是安全的。
當然了,真正非對稱加密算法并沒有那么簡單,常見的幾種非對稱加密算法:

1、DSA(Digital Signature Algorithm)是 Schnorr 和 ElGamal 簽名算法的變種。
2、ECC(Elliptic Curves Cryptography),橢圓曲線密碼編碼學。
3、DH算法,一般用于密鑰交換。
4、RSA(Ron Rives,Adi Shamir,Leonard Adleman)三位大神一起提出的,命名取姓氏開頭字母。RSA 既可以交換密鑰,也可以用作數(shù)字簽名,是流行最廣的非對稱加密算法。

5、消息摘要

小明和小紅的通信真是安全的嗎?
此時小剛又來搞事情了:

1、因為小紅的公鑰是公開的,意味著小剛也能拿到公鑰。
2、小剛截獲了小明發(fā)送給小紅的信息,雖然小剛不能解密,但是他可以偽造信息。
3、小剛將偽造好的信息用小紅的公鑰發(fā)送小紅。
4、此過程中,小明和小紅都不知道小剛的存在,然而小剛背地里暗戳戳地替換了信息。

image.png
image.png

以上信息表明:

1、即使是密文,信息也容易被偽造。
2、小剛這種行為是中間人攻擊(Man-in-the-MiddleAttack MITM)。

小明和小紅一合計,想出來了一個辦法:

1、小明使用Hash算法將明文進行哈希,生成消息摘要。
2、小明將明文用小紅的公鑰加密并和消息摘要一起發(fā)給小紅。
3、小紅收到信息后先用私鑰解密,解密出來的明文使用Hash算法生成消息摘要,并與小明發(fā)過來的消息摘要對比,若是一致則表明消息沒被更改。

image.png
image.png

消息摘要(Message Digest)特點:

1、通過消息摘要算法,將一組不定長的源信息生成定長的目標信息。
2、不同的源信息生成的目標信息不一致。

常見的消息摘要算法:MD5、SHA1。

6、數(shù)字簽名

雖然采用了消息摘要,但是小剛依然能夠自己偽造信息,并生成對應的消息摘要,小紅收到后驗證摘要是正確的,便認為是小明發(fā)的,這種做法還是有漏洞。
在前邊用到了小紅的公鑰、私鑰,而沒用到小明的公鑰、私鑰。
在消息摘要的基礎上,想辦法讓小明的公私鑰也參與到通信過程中來:

1、小明將公鑰告訴小紅。
2、小明將消息摘要使用自己的私鑰加密并使用小紅的公鑰加密明文,兩者一并發(fā)給小紅。
3、小紅收到信息后先用自己的私鑰解密出明文,然后將加密過后的消息摘要使用小明的公鑰解密。
4、對比消息摘要是否一致。

與消息摘要過程對比,此時多了一個步驟:

用小明的私鑰加密消息摘要。

用私鑰加密的信息的過程我們稱之為:數(shù)字簽名
數(shù)字簽名具有不可抵賴性的特點。根據(jù)前面的描述,用私鑰加密的信息,只有對應的公鑰才能解開。
因此,若是小紅使用了小明的公鑰解開了密文,那么說明該消息肯定是小明發(fā)過來的。反之,小明使用私鑰加密后發(fā)出去,代表這信息是確認是自己發(fā)的,這就是他的簽名。

常見的數(shù)字簽名算法:RSA、DSA、ECDSA。
老規(guī)矩,用圖來看看小明與小紅如何使用數(shù)字簽名的。

小明發(fā)送信息過程:


image.png

小紅處理信息過程:


image.png

由上可知:
數(shù)字簽名有兩個作用:

1、證明消息是某個確定的實體發(fā)送的。
2、證明消息是沒有被串改。

整個流程小明的公私鑰、小紅的公私鑰都參與了。
因為小剛沒有小明的私鑰,所以他無法生成小明的數(shù)字簽名,最終無法通過小紅對數(shù)字簽名的驗證。

7、CA與數(shù)字證書

這么看來小剛是無能無能為力了?非也!
回顧一下之前說的對稱加密的痛點:如何傳遞對稱密鑰?
實際上非對稱加密也存在問題:如何傳遞公鑰?
可見,無論是對稱加密還是非對稱加密都需要解決密鑰傳遞問題。

若是小剛偽造了小紅的公鑰,情況如下:

1、小明在獲取小紅公鑰的時候,被小剛替換為自己的公鑰。
2、小明用小剛的公鑰(他以為是小明的)對信息進行加密,并用自己的私鑰對摘要做數(shù)字簽名。
3、小剛收到信息后用自己的私鑰解密。
4、小剛用小明的公鑰加密,并用自己的私鑰對摘要進行數(shù)字簽名。
5、同樣的方式,小剛也欺騙了小紅。
6、最后,小剛愉快地當著中間人...

image.png

因為公鑰被偽造了,所以小剛可以為所欲為。
小明如何才能知道自己收到的公鑰是小紅的呢?
這時候就需要引入權威機構:CA(Certificate Authority) 證書授權中心

有了CA,小紅發(fā)布公鑰的流程變了:

1、小紅將自己的公鑰提交給CA。
2、CA 確認小紅的身份信息,比如組織機構、姓名、城市等。
3、將以上信息和小紅的公鑰用CA的私鑰進行簽名生成數(shù)字證書
4、證書返給小紅。

用圖表示如下:


image.png

圖上5個步驟,有些同學對第4步不太理解:

小明驗證小紅的證書,因為證書是CA簽過名的,那么需要CA的公鑰來解密,那么CA 的公鑰又是如何傳給小明的?

似乎又回到了原點:如何安全傳遞公鑰的問題。
其實,信任是有起點的。
CA 不僅為他人生成證書,也生成自己的證書,CA 為自己生成的證書里包含了CA的公鑰。
CA 的證書在電腦、手機等設備出場的時候就會預置在系統(tǒng)里、瀏覽器里。

因此,當小明驗證小紅的證書時,會在系統(tǒng)里尋找能夠解開小紅證書的CA 公鑰,若是找到則說明小明證書的頒發(fā)機構是可信任的,既然信任了該證書,那么從證書里取出的公鑰,小明也認可是小紅的。
至此,小紅的公鑰就安全地傳給了小明,后面就可以愉快地通信了。

系統(tǒng)里找不到對應的證書會有什么影響?大家還記得12306網站剛開始運行的時候,用瀏覽器訪問時瀏覽器會提醒說該網站不受信任,12306提示用戶安裝自己的根證書。
這也從側面說明了,咱們不要輕易更改系統(tǒng)里的證書。

8、總結

對稱加密存在密鑰傳送被泄漏的風險,非對稱加密雖然不需要傳遞私鑰,但是需要傳遞公鑰,也存在被中間人攻擊的風險。
為此,引入了CA 生產證書解決了非對稱加密公鑰傳遞問題。

然后非對稱加密速度慢,適合加密數(shù)據(jù)量少的信息,對稱加密速度快,適合加密數(shù)據(jù)量大的信息。
如何將對稱加密與非對稱加密結合起來打造一個安全的通信鏈路,下篇我們將重點分析其中的典型:SSL/TLS 的原理與應用。

您若喜歡,請點贊、關注,您的鼓勵是我前進的動力

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容