前言
最近工作中用到了加密相關(guān)的技術(shù)點(diǎn)沃缘,非常頭疼躯枢,常被公鑰加密、簽名等一系列概念搞的頭大槐臀,所以買來《圖解密碼技術(shù)》這本書锄蹂,想大概的梳理一下密碼技術(shù)的入門知識(shí)。
讀完之后對(duì)基本的密碼技術(shù)概念有了大概的了解峰档,所以寫下這篇博客來做一下讀后的總結(jié)败匹,希望可以幫到大家。
密碼技術(shù)的發(fā)展
這里咱們不談密碼學(xué)的具體發(fā)展軌跡讥巡,我們來回憶一下日常遇到的跟加密相關(guān)的技術(shù)掀亩,從最開始的對(duì)稱加密,到公鑰加密欢顷,再到混合加密系統(tǒng)槽棍,認(rèn)證簽名等,其實(shí)密碼技術(shù)一步步的發(fā)展都是為了解決一個(gè)個(gè)信息安全面臨的問題抬驴,也就是彌補(bǔ)上代(用上代這個(gè)詞可能不合適)加密方式的缺陷炼七。
咱們先對(duì)幾種加密方式做一個(gè)總的梳理〔汲郑看一下下面這個(gè)圖吧豌拙。
密碼學(xué)家一直在和信息交換過程中存在的中間人作斗爭(zhēng),從最開始的單純的為了防止竊聽使用對(duì)稱機(jī)密题暖,但是為了解決對(duì)稱加密存在的秘鑰配送問題而出現(xiàn)的公鑰加密按傅,解決了防竊聽,還有存在的信息被篡改的問題胧卤,中間者偽裝發(fā)送者的問題唯绍,甚至消息否認(rèn)的問題,每個(gè)問題都產(chǎn)生了對(duì)應(yīng)的解決方式枝誊,我們下面一一來說况芒。
機(jī)密性
對(duì)稱加密和公鑰加密(非對(duì)稱加密)
基本概念大家都是知道的,對(duì)稱加密是雙方使用相同的秘鑰進(jìn)行加密解密叶撒,我們常提到的DES绝骚,三重DES耐版,AES都是對(duì)稱密碼算法。我們應(yīng)該注意這三者都根據(jù)明文和秘鑰生成密文的算法皮壁。
但是對(duì)稱加密存在秘鑰配送問題椭更。就是我怎么樣把秘鑰給到跟我通信的人,當(dāng)然了兩個(gè)人直接見面通過U盤拷貝可以蛾魄,但是現(xiàn)實(shí)場(chǎng)景不允許我見到每一個(gè)跟我通信的人來配送秘鑰虑瀑,同時(shí)因?yàn)殡p方都是用同一個(gè)密碼,如果我們?cè)诰W(wǎng)絡(luò)上交換秘鑰滴须,被中間人獲取到秘鑰舌狗,那他就完全可以竊聽我們的通信了。所以就產(chǎn)生了公鑰加密扔水。
公鑰加密就是我生成一個(gè)秘鑰對(duì)痛侍,一公鑰一私鑰,公鑰和私鑰之間存在強(qiáng)烈的數(shù)學(xué)對(duì)應(yīng)關(guān)系魔市,書中有說到主届,但是畢竟我們數(shù)學(xué)功力薄弱,不太能很深的理解里面的數(shù)學(xué)關(guān)系待德,有興趣的大家可以自己查一下君丁。只要大家記住一個(gè)秘鑰對(duì),公鑰加密的只有對(duì)應(yīng)的私鑰能解密将宪,同時(shí)私鑰加密的也只有對(duì)應(yīng)的公鑰能解密绘闷。(這句話很重要)
我們?cè)谑褂霉€加密時(shí),私鑰自己保留较坛,公鑰公布出去印蔗,任何人都可以獲得到。這樣有人給我發(fā)消息丑勤,就可以使用我提供給他的公鑰進(jìn)行加密华嘹,然后密文只有我的私鑰可以解密,這樣就可以一定程度解決竊聽問題法竞。因?yàn)橹虚g人劫持到密文之后沒有私鑰來解密除呵。
RSA就是我們使用的公鑰密碼算法。
混合密碼系統(tǒng)
公鑰密碼的處理速度遠(yuǎn)遠(yuǎn)的低于對(duì)稱密碼爪喘。為了解決這個(gè)問題產(chǎn)生了混合密碼系統(tǒng)。
這個(gè)圖大家應(yīng)該能很容易看懂纠拔,偽隨機(jī)數(shù)生成器生成了會(huì)話密鑰秉剑,其實(shí)也就是混合系統(tǒng)中的對(duì)稱加密密鑰,我們的明文直接用這個(gè)密鑰進(jìn)行加密稠诲,得到消息的密文侦鹏,因?yàn)槭菍?duì)稱加密所以說速度很快诡曙。
同時(shí)使用接受者的公鑰對(duì)這個(gè)會(huì)話密碼進(jìn)行加密,得到會(huì)話密碼的密文略水。同時(shí)組合這兩種密文价卤,發(fā)給接受者。
解密的圖我就不用上了渊涝,大家可以反推一下慎璧,接受者先使用自己的秘鑰解密會(huì)話密碼密碼,得到會(huì)話密碼的明文跨释,然后在使用這個(gè)密碼解密消息胸私。也許有小伙伴會(huì)說,這不是也使用到了公鑰加密嘛鳖谈,怎么速度不也慢岁疼?公鑰加密來加密一個(gè)會(huì)話密碼肯定比加密通信的消息的工作量小啊 ~
這里要注意的是,在每次通信中缆娃,會(huì)話密碼對(duì)會(huì)變的捷绒,所以我們的主要任務(wù)還是要保證私鑰的安全,因?yàn)檫@個(gè)會(huì)話密碼如果泄露只是影響到了一次通信贯要,但是私鑰如果泄露暖侨,所有的通信就會(huì)被破譯了。
公鑰加密問題
公鑰加密也存在中間人攻擊問題郭毕,比如你的朋友在向你索要你的公鑰的時(shí)候被人監(jiān)聽它碎,在你給朋友發(fā)送公鑰時(shí),中間人截獲到你的公鑰显押,同時(shí)把自己的公鑰發(fā)給了你的朋友扳肛,這時(shí)你的朋友收到的公鑰就是中間人的了。然后你的朋友給你發(fā)了一個(gè)“我喜歡你”乘碑,然后用中間人的公鑰進(jìn)行了加密挖息,在發(fā)送消息給你的時(shí)候,中間人依然可以劫持到兽肤,然后他用自己的私鑰解密出來了明文“我喜歡你”套腹,再用他劫持到的你的公鑰給你發(fā)了一條“我討厭你”,然后收到消息并解密的你........ 大家應(yīng)該明白我的意思了资铡,這類問題的解決方式下面會(huì)說到电禀。
完整性和認(rèn)證
單向散列函數(shù)
我們有一個(gè)文件需要保存,但是一頓時(shí)間之后在用的時(shí)候笤休,我們?cè)趺礃域?yàn)證這個(gè)文件是否被人篡改過尖飞?
有一個(gè)方法就是我把文件拷貝到U盤里面,隨身攜帶,但是如果文件很大呢政基,每次這樣是不是很不方便贞铣。這樣就用到了單向散列函數(shù)。
單向散列函數(shù)有一個(gè)輸入一個(gè)輸出沮明,輸入稱為消息辕坝,輸出稱為散列值。單向散列函數(shù)也稱為信息摘要函數(shù)荐健,哈希函數(shù)或者雜湊函數(shù)酱畅。比如我們熟悉的SHA-1、SHA-256等SHA開頭的那一些摧扇。當(dāng)然了這里的消息不一定是非要是文字圣贸,也可以是圖像音視頻文件,畢竟所有文件最終都是二進(jìn)制扛稽。
這樣我們就不需要保存文件了吁峻,只要保存了散列值,然后對(duì)比散列值就可以了在张。
消息認(rèn)證碼 (MAC)
完整性解決消息是否被篡改的問題用含,消息認(rèn)證指的是“消息來自正確的發(fā)送者”這一性質(zhì)。
其實(shí)很容易理解帮匾,就是雙方使用共享密鑰啄骇,然后利用HMAC此類使用單向散列函數(shù)構(gòu)建消息驗(yàn)證碼的方法,對(duì)通信的消息計(jì)算出MAC值瘟斜,然后把消息和MAC值一起傳遞缸夹,再接收放使用共享密鑰也計(jì)算出MAC值,然后對(duì)比來認(rèn)證螺句。
消息認(rèn)證碼也有問題虽惭,例如“第三方證明”和“防止否認(rèn)”,這些大家可以自己去上網(wǎng)查一下解釋的列子蛇尚,這種東西舉例子來說更容易懂芽唇,占用篇幅太大,本文省略取劫。
數(shù)字簽名
數(shù)字簽名大家可以當(dāng)做是現(xiàn)實(shí)中的蓋章匆笤,使用數(shù)字簽名可以識(shí)別篡改和偽裝,還可以防止否認(rèn)谱邪。
簽名和驗(yàn)簽
其實(shí)簽名和驗(yàn)簽還是用到我們的公鑰加密炮捧。上面我們提到過公鑰和私鑰之間的關(guān)系,公鑰加密私鑰解密惦银,同時(shí)私鑰加密也只能用它對(duì)應(yīng)的公鑰解密咆课。私鑰加密其實(shí)就是簽名灌砖,對(duì)應(yīng)公鑰解密也就是驗(yàn)簽。因?yàn)樗借€只有一個(gè)人持有傀蚌,所以使用該私鑰加密的消息相當(dāng)于被該使用者簽名,同時(shí)我們使用它對(duì)應(yīng)的公鑰如果能正確的解密蘸吓,那就肯定消息是這個(gè)人發(fā)送的善炫,這樣也就實(shí)現(xiàn)了防否認(rèn)。
下面是數(shù)字簽名方法
不多做解釋了库继,消息明文和簽名完之后的密文一起發(fā)送箩艺,這樣既可以防篡改又可以防否認(rèn)了。
上面這種方法是對(duì)消息直接進(jìn)行簽名宪萄,如果消息過大會(huì)非常的耗時(shí)艺谆,這樣我們可以使用對(duì)散列值進(jìn)行簽名的方法來代替對(duì)消息直接簽名。
好的拜英,到這時(shí)我們說到數(shù)字簽名基本解決了很多問題静汤,識(shí)別篡改和偽裝,還可以防否認(rèn)居凶,但是我們使用數(shù)字簽名要有一個(gè)大前提虫给,那就是用于驗(yàn)證簽名的公鑰必須屬于真正的發(fā)送者!
這樣是不是感覺進(jìn)入到了死循環(huán)呢侠碧,解決了一堆的問題之后抹估,回到了公鑰的合法性這個(gè)問題上。這就要使用證書了弄兜。
證書
公鑰證書和我們的現(xiàn)實(shí)中的證件類似的药蜻,都包含姓名、組織替饿、郵箱语泽、地址等個(gè)人信息,以后屬于此人的公鑰盛垦,并由認(rèn)證機(jī)構(gòu)施加數(shù)字簽名湿弦。只要看到公鑰證書,我們就可以知道認(rèn)證機(jī)構(gòu)認(rèn)定此公鑰屬于此人腾夯。
下面給一個(gè)簡(jiǎn)單的例子吧
也許會(huì)有人問颊埃,那怎么確認(rèn)這個(gè)認(rèn)證機(jī)構(gòu)是不是權(quán)威的呢?
確實(shí)會(huì)有這種問題蝶俱,認(rèn)證也不簡(jiǎn)單的發(fā)一個(gè)證書而已班利,有一套完整的公鑰基礎(chǔ)設(shè)施(PKI)。
簡(jiǎn)單的提一下PKI包括三個(gè)要素榨呆,用戶罗标、認(rèn)證機(jī)構(gòu)和倉(cāng)庫(kù),也涉及到注冊(cè)證書和作廢證書一些邏輯,大家自己查閱吧闯割,我就不繼續(xù)說了彻消。
寫在最后
本片文章簡(jiǎn)單的梳理了一些密碼技術(shù)的基礎(chǔ),從對(duì)稱加密到數(shù)字簽名宙拉、證書宾尚,希望筆者講的還算清晰,也希望本文能給大家?guī)硪恍椭?/p>
密碼技術(shù)在我們的工作中有很多的應(yīng)用谢澈,比如眾所周知的SSL/TLS(在此之上承載http就是我們的https)煌贴。我們之后再找時(shí)間專門的來說一下https吧。
感謝大家讀完我的文章锥忿。
文章使用圖片來自《圖解密碼技術(shù)》