Web開發(fā)必須了解的密碼學(xué)技術(shù)

對稱加密與非對稱加密

按照密鑰的使用形式垮媒,加密算法可以分為對稱加密和非對稱加密(又叫公鑰加密)倔韭。對稱加密在加密和解密的過程中,使用相同的秘鑰芝此;而非對稱加密在加密過程中使用公鑰進行加密憋肖,解密使用私鑰

對稱加密的加密和解密需要使用相同的密鑰婚苹,所以需要解決密鑰配送問題岸更。

非對稱加密的處理速度遠低于對稱密鑰

密鑰:一個加密算法中,輸入為明文和密鑰膊升,輸出為密文怎炊。在加密算法中,密鑰通常是像238435639047397537493753453945379346236這樣的 一串非常大的數(shù)字廓译。

對稱加密下的密鑰配送問題

發(fā)送者A想要發(fā)一封郵件給接受者B,但是不想被人看到其中的內(nèi)容评肆。A決定使用對稱加密的方法。但是我們知道非区,對稱在對稱加密中瓜挽,加密與解密需要使用同樣的密鑰。B想要看到接收到的內(nèi)容必須要有A的密鑰院仿。也就是說秸抚,A需要把密鑰安全地送到B的手上。

那如果把加密后的密文和密鑰一同通過郵件發(fā)送給B行不行呢歹垫?答案是不行的剥汤。因為一旦被加密的密文和密鑰同時落在竊聽者C的手中,C就可以用密鑰對密文進行解密排惨。

對稱加密被竊聽的過程

混合密碼系統(tǒng)

混合密碼系統(tǒng)吭敢,是將對稱密碼和非對稱密碼的優(yōu)勢相結(jié)合的方法∧喊牛混合密碼系統(tǒng)

解決了對稱密碼的密鑰配送問題鹿驼,又解決了非對稱密碼的加密與解密速度問題欲低。

混合密碼系統(tǒng)中會先用快速的對稱密碼,對消息進行加密畜晰,這樣消息就變?yōu)槊芪睦常WC消息機密性。然后凄鼻,用非對稱加密對對稱密碼的密鑰進行加密腊瑟,因為密鑰一般比要加密的信息短,加密和解密的速度就得到保證了块蚌。這樣闰非,密碼配送問題就得到了解決。

混合密碼系統(tǒng)的加密流程

單向散列函數(shù)

單向散列函數(shù)也稱為消息摘要函數(shù)(message digest function)峭范,哈希函數(shù)财松,適用于檢查消息完整性的加密技術(shù)。

單向散列函數(shù)有一個輸入和一個輸出纱控,其中輸入稱為信息辆毡,輸出稱為散列值。單向散列函數(shù)可以根據(jù)消息的內(nèi)容計算出散列值其徙,篡改后的信息的散列值計算結(jié)果會不一樣胚迫,所以散列值可以被用來檢查消息的完整性

單向散列函數(shù)輸出的散列值也成為消息摘要唾那,或者指紋访锻。散列來源于英文"hash"一值,單向散列函數(shù)的作用闹获,實際上就是將很長的消息剁碎期犬,然后混合成固定長度的散列值。

無法解決的問題

使用單向散列函數(shù)可以實現(xiàn)完整性的檢查避诽,但有些情況下即便能檢查完整性也是沒有意義的龟虎。

例如,主動攻擊者D偽裝成發(fā)送者A發(fā)送消息和散列值給B沙庐。這時鲤妥,B能夠通過單向散列函數(shù)檢查消息的完整性,但這只是對D發(fā)送的信息進行完整性檢查拱雏,而無法識別出D的偽裝棉安。

辨別偽裝需要用到認證,用于認證的技術(shù)包括消息認證碼數(shù)字簽名铸抑,消息認證碼可以保證信息沒有被篡改贡耽,而數(shù)字簽名還能向第三方做出保證。

消息認證碼

消息認證碼(MAC)是一種與密鑰相關(guān)聯(lián)的單向散列函數(shù)。

消息認證碼

使用步驟

(1)發(fā)送者A與接收者B事先共享密鑰蒲赂。

(2)發(fā)送者A根據(jù)請求信息阱冶,計算MAC值(使用共享密鑰)。

(3)發(fā)送者A將請求信息和MAC值發(fā)送給接收者B滥嘴。

(4)接收者B根據(jù)接收到的信息木蹬,計算MAC值。

(5)接收者B將自己計算的MAC值與A發(fā)送過來的MAC值進行對比若皱。

(6)如果MAC值一致届囚,則接收者B可以斷定請求來自發(fā)送者A。

依然存在密鑰配送問題

在消息認證碼中是尖,發(fā)送者A與接受者B共享密鑰,這個密鑰不可以被攻擊者獲取泥耀,如果攻擊者獲取到這個密鑰饺汹。則攻擊者也可以計算出MAC值漫萄,從而可以進行偽裝攻擊套利。
因此,要解決密鑰配送問題间螟,我們需要向?qū)ΨQ密碼一樣夸溶,使用一些共享密鑰的方法逸吵,如公鑰密碼,密鑰分配中心缝裁,或其他安全的方式發(fā)送密鑰扫皱。

MAC與對稱密碼認證

MAC技術(shù)中,發(fā)送者與接受者需要使用相同的密鑰進行加密捷绑;對稱加密中韩脑,密文只有使用和加密時相同的密鑰才能正確解密,否則將會產(chǎn)生看上去雜亂無章的“明文”粹污。那么段多,是否可以用對稱密碼進行認證呢?

答案是不可以壮吩。假設(shè)我們要發(fā)送的明文就是一串隨機的比特序列进苍,我們將明文用對稱密碼加密之后發(fā)送出去,當接受者收到密文并進行解密時鸭叙,看上去都是一串隨機的比特序列觉啊,那我們怎么判斷信息是否來自攻擊者呢?

更準確地說递雀,我們無法根據(jù)“是否雜亂無章”而判斷認證是否通過柄延,這不是一個可行的標準。而使用MAC則可以通過對比MAC碼,得到一個明確的結(jié)果搜吧。

MAC無法解決的問題

對第三方的證明

接收者B收到了來自A的信息后市俊,想要想第三方驗證者D證明這條信息確實是A發(fā)送的。但是MAC無法進行這樣的證明滤奈。

對于驗證著D來說摆昧,知道密鑰的人有A和B,只要知道密鑰蜒程,就可以計算出正確的MAC值绅你。因此,D不可以斷定信息是由A發(fā)送的昭躺,因為也有可能是B自己偽造信息發(fā)送給自己的忌锯。

無法防止否認

接受者B收到了A發(fā)送過來的信息,里面包含有B與A共享的密鑰計算出來的领炫,因此B斷定這條信息來自A偶垮。

但是,A可以聲稱自己并沒有向B發(fā)送過這條信息帝洪。因為A與B都擁有密鑰似舵,A可以聲稱該信息的MAC值,是由B計算出來的葱峡,而不是自己砚哗。

數(shù)字簽名

數(shù)字簽名,就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串砰奕,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明蛛芥。

數(shù)字簽名是非對稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應(yīng)用。

簽名的生成與驗證

在數(shù)字簽名技術(shù)中脆淹,涉及到兩種行為:生成消息簽名驗證數(shù)字簽名常空。

生成消息簽名這一行為是由消息的發(fā)送者A來完成的,也稱為“對消息簽名”盖溺。生成簽名就是根據(jù)消息內(nèi)容計算數(shù)字簽名的值漓糙,這個行為意味著“我認可改消息的內(nèi)容”。

驗證數(shù)字簽名這一行為一般由消息的接受者B來完成烘嘱,也可以由消息的驗證者來完成昆禽。驗證的結(jié)果可以是成功或者失敗,成功以為著消息屬于A蝇庭,失敗則意味著消息不屬于A 醉鳖。

數(shù)字簽名對簽名密鑰驗證密鑰進行了區(qū)分,使用驗證密鑰是無法生成簽名的哮内。簽名密鑰只能有簽名者持有盗棵,而驗證密鑰則是任何需要驗證簽名的人都可以持有壮韭。

在公鑰密碼中,密鑰分為加密密鑰和解密密鑰纹因,用加密密鑰無法進行解密喷屋。解密密鑰只能有需要解密的人持有,而加密密鑰則是任何需要加密的人都可以持有瞭恰⊥筒埽可以說,數(shù)字簽名就是將公鑰密碼“反過來用”來實現(xiàn)的惊畏。

數(shù)字簽名的流程

發(fā)送者A需要對消息簽名恶耽,而接受者B要對簽名進行驗證。那么颜启,A需要事先生成一個包括公鑰和私鑰的密鑰對偷俭,而需要驗證簽名的B則需要得到A的公鑰。

簽名和驗證的過程如下:

簽名和驗證流程
  1. A用自己的私鑰對信息進行加密缰盏。用私鑰加密得到的密文就是A對這條信息的簽名社搅,由于只有A才持有自己的私鑰,因此除了A以外乳规,其他人是無法生成相同的簽名的。
  2. A將信息和簽名發(fā)送給B
  3. B用A的公鑰對收到的簽名進行解密合呐。如果收到的簽名確實是用Alice的私鑰進行加密得到的密文暮的,那么用A的公鑰應(yīng)該能夠正確解密,反之淌实,則不能正確解密冻辩。
  4. B將解密得到的結(jié)余A發(fā)送的信息進行對比,兩者一直拆祈,簽名驗證成功恨闪。兩者不一致,則簽名驗證失敗放坏。

除了對消息進行加密得到簽名咙咽,我們還可以對消息的散列值進行加密,得到簽名淤年。這樣無論消息有多長钧敞,我們對消息進行加密和解密都是非常快速的麸粮。

與MAC相比下的優(yōu)勢

可以防止否認 溉苛。還記得為什么MAC無法防止否認嗎?正是因為密鑰由通信的雙方共同持有愚战,發(fā)送者A可以謊稱消息認證碼是由接受者B生成的。而在數(shù)字簽名技術(shù)中,加密的私鑰只由一方持有寂玲,只有持有密鑰的一方才可以生成簽名塔插。

第三方的證明 。同理敢茁,因為私鑰僅由單方面持有佑淀,簽名僅能由私鑰的持有者生成,所以可以實現(xiàn)第三方的證明彰檬。

證書

什么是證書

公鑰證書(Public-Key Certificate,PKC)由認證機構(gòu)(CA)生成伸刃,用于確認公鑰確實屬于此人。

認證機構(gòu)逢倍,就是能確認“公鑰確實屬于此人”并能夠生成數(shù)字簽名的個人或者組織捧颅。

證書的使用場景

下面通過代表性的應(yīng)用場景來理解證書的作用。

image

我們用文字進一步說明這些步驟都做了些什么较雕。

  1. B生成密鑰對
  2. B在認證機構(gòu)D注冊自己的公鑰
  3. 認證機構(gòu)D用自己的私鑰對B的公鑰施加簽名并生成證書
  4. A得到帶認證機構(gòu)D的數(shù)字簽名的B的公鑰
  5. A使用認證機構(gòu)D的公鑰驗證數(shù)字簽名碉哑,確認B的公鑰的合法性
  6. A用B的公鑰加密信息并發(fā)送給B
  7. B用自己的私鑰解密密文得到A的信息

各種密碼技術(shù)對比

對稱密碼與非對稱密碼

對稱密碼 公鑰密碼
發(fā)送者 用共享密鑰加密 用公鑰加密
接受者 用共享密鑰加密 用私鑰解密
密鑰配送問題 存在 不存在
機密性 可保證 可保證

消息認證碼與數(shù)字簽名

消息認證碼 數(shù)字簽名
發(fā)送者 用共享密鑰計算MAC值 用私鑰生成簽名
接受者 用共享密鑰計算MAC值 用公鑰驗證簽名
密鑰配送問題 存在 不存在,但是公鑰需要另外驗證
完整性 可保證 可保證
認證 可保證(僅限通信雙方) 可保證(可使用與第三方)
防止否認 不可保證 可保證

參考

《圖解密碼學(xué)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亮蒋,一起剝皮案震驚了整個濱河市扣典,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慎玖,老刑警劉巖贮尖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異趁怔,居然都是意外死亡湿硝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門润努,熙熙樓的掌柜王于貴愁眉苦臉地迎上來关斜,“玉大人,你說我怎么就攤上這事铺浇×⌒螅” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵鳍侣,是天一觀的道長裁着。 經(jīng)常有香客問我,道長拱她,這世上最難降的妖魔是什么二驰? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮秉沼,結(jié)果婚禮上桶雀,老公的妹妹穿的比我還像新娘矿酵。我一直安慰自己,他們只是感情好矗积,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布全肮。 她就那樣靜靜地躺著,像睡著了一般棘捣。 火紅的嫁衣襯著肌膚如雪辜腺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天乍恐,我揣著相機與錄音评疗,去河邊找鬼。 笑死茵烈,一個胖子當著我的面吹牛百匆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呜投,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼加匈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仑荐?” 一聲冷哼從身側(cè)響起雕拼,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粘招,沒想到半個月后悲没,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡男图,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了甜橱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逊笆。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖岂傲,靈堂內(nèi)的尸體忽然破棺而出难裆,到底是詐尸還是另有隱情,我是刑警寧澤镊掖,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布乃戈,位于F島的核電站,受9級特大地震影響亩进,放射性物質(zhì)發(fā)生泄漏症虑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一归薛、第九天 我趴在偏房一處隱蔽的房頂上張望谍憔。 院中可真熱鬧匪蝙,春花似錦、人聲如沸习贫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苫昌。三九已至颤绕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祟身,已是汗流浹背奥务。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留月而,地道東北人汗洒。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像父款,于是被迫代替她去往敵國和親溢谤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容