去年,在工作中接觸了一些新的技術(shù)名詞:
數(shù)字簽名、數(shù)字證書(shū)、Oauth2認(rèn)證、SSL/TLS、XOR異或加密、RSA算法、單鑰加密、公鑰加密、三方認(rèn)證等。這些名詞單獨(dú)來(lái)看就是一個(gè)個(gè)技術(shù)點(diǎn),相關(guān)技術(shù)文檔也看了很多,但一直無(wú)法做到了然于心,運(yùn)用自如的地步。直到閱讀了《圖解密碼技術(shù)》這本圖書(shū),發(fā)現(xiàn)原來(lái)這些東東都屬于密碼學(xué)的范疇,理清關(guān)系之后并沒(méi)有想象中的那么繁瑣。
本文打算從三個(gè)部分捋一捋這些關(guān)系:第一部分介紹信息傳遞過(guò)程中存在的問(wèn)題,凡事都是先拋出問(wèn)題,再談解決方案;第二部分就介紹解決這些問(wèn)題的方法了,就像學(xué)習(xí)數(shù)學(xué)一樣,公式啊、定理啊啥的前人已經(jīng)幫我們做了,我們要做的只是了解它,認(rèn)識(shí)它,所以這部分并不會(huì)很難;第三部分為探索階段,那些 hacker 們是怎么攔截消息的,如何篡改消息內(nèi)容,又是如何偽裝它人身份,這些我很感興趣,但由于底子薄,探索周期可能會(huì)有點(diǎn)長(zhǎng),權(quán)當(dāng)自?shī)首詷?lè)吧.............
目錄:
一、消息傳遞的特性 —— 存在哪些安全問(wèn)題
1. 機(jī)密性 —— 不想讓竊聽(tīng)者知道消息的內(nèi)容,所以就進(jìn)行加密
2. 完整性 —— 消息傳遞過(guò)程中有沒(méi)有被修改過(guò)內(nèi)容
3. 認(rèn)證 —— 是否是不懷好意的人偽裝你的朋友發(fā)送的郵件
4. 不可否認(rèn)性 —— 借了錢要打欠條防止抵賴,信息如何防止抵賴
二、密碼學(xué)工具箱 —— 解決消息傳遞過(guò)程存在的問(wèn)題
1. 對(duì)稱加密
2. 公鑰加密
3. 單向散列函數(shù)
4. 消息認(rèn)證碼
5. 數(shù)字簽名
6. 數(shù)字證書(shū)
7. 隨機(jī)數(shù)生成器
三、探索階段
1. 怎么攔截 http 請(qǐng)求內(nèi)容
2. 怎么篡改 http 內(nèi)容
3. 怎么偽裝身份獲取權(quán)限
一、消息傳遞的特性
1. 機(jī)密性
讀書(shū)的時(shí)候喜歡在課堂和好朋友上遞小紙條,這過(guò)程存在被老師發(fā)現(xiàn)的可能性,如果小紙條的內(nèi)容涉及到說(shuō)老師的壞話,那被發(fā)現(xiàn)少不了一頓批評(píng)教育。倘若能對(duì)小紙條的內(nèi)容進(jìn)行 加密,只有你和你的朋友知道如何 解密 得到正確的內(nèi)容,這樣即使被老師發(fā)現(xiàn),也可以胡鄒一些無(wú)關(guān)緊要的話糊弄過(guò)去。
你可以和小伙伴提前商量好 加密 方式,比如:先將漢字寫成拼音,再將每個(gè)字母往后平移三個(gè)字母,像下面這樣。

明文:老師今天好丑;
明文轉(zhuǎn)拼音:lao shi jin tian hao chou;
拼音轉(zhuǎn)密文(每個(gè)字母往后平移三個(gè)字母):dor vkl mlq wldq kdr fkrx;
這樣即便老師發(fā)現(xiàn)了你們的小紙條也不知道你們?cè)谡f(shuō)啥,你的朋友在接收到小紙條時(shí)先往前平移 3 個(gè)字母再將拼音轉(zhuǎn)換為漢字即可得到明文信息。
并不是所有的消息都需要加密,如果你不想你的“秘密”被別人知道,那就加密消息吧。
2. 完整性

在下載一些免費(fèi)軟件的時(shí)候,我們很難保證我們下載的軟件與作者發(fā)布的軟件是一模一樣的,這中間會(huì)不會(huì)被一些不懷好意的人植入了病毒,等著我們掉進(jìn)陷阱。這里被植入病毒就改變了軟件的完整性,而這個(gè)過(guò)程通常是 病毒作者 在 軟件作者 (消息發(fā)布者) 和 下載軟件的用戶(消息接受者) 毫不知情的情況下進(jìn)行的篡改。

軟件作者發(fā)布軟件好比發(fā)送消息,用戶下載軟件好比接受消息,病毒作者對(duì)軟件植入病毒就好比在消息傳輸過(guò)程修改了消息的原本內(nèi)容。
我們想要的是消息保持完整性,現(xiàn)實(shí)生活中可以給朋友打個(gè)電話詢問(wèn)收到的信件內(nèi)容是否完整,但在網(wǎng)絡(luò)世界或其它很多場(chǎng)景是無(wú)法做到這種詢問(wèn)的,這需要特定的技術(shù)來(lái)保證這一點(diǎn)。
3. 認(rèn)證
不知道你們會(huì)不會(huì)收到許久不聯(lián)系的老同學(xué)發(fā)來(lái)的短信:“老同學(xué),借兩千塊錢”。

我每次收到這種消息,第一反應(yīng)總是會(huì)想 這是不是他本人 ,接著問(wèn)一些只有我和他才知道的秘密來(lái)驗(yàn)證他的身份,或者直接打個(gè)電話進(jìn)行確認(rèn),畢竟在當(dāng)今這個(gè)社會(huì),社交賬號(hào)被盜取是很正常的一件事情。

花道相約晴子妹子出來(lái)玩,無(wú)奈人晴子只中意阿楓,花道不得已就偽裝成阿楓的語(yǔ)氣給晴子寫信,晴子一看這是 “阿楓” 的信就會(huì)立馬出來(lái),然后才發(fā)現(xiàn)自己被騙了...........
由此可見(jiàn),消息也存在 偽造發(fā)送人身份 這一特性,而 認(rèn)證 就是一種特殊的手段來(lái)判別發(fā)送人到底是 本人 還是 不懷好意 的人。
4. 不可否認(rèn)性
朋友剛來(lái)上海這邊身無(wú)分文,找我借了 ¥5000.00 租房子,因?yàn)樗臀译x得比較遠(yuǎn),沒(méi)辦法直接給我寫借條,就想著通過(guò)電子郵件給我來(lái)電一封,記錄借款事項(xiàng)。

幾個(gè)月過(guò)去了,我想著他也有了錢可以還我了就去找他要錢,結(jié)果他狗日的給我耍賴,說(shuō)自己并沒(méi)有給我寫過(guò)信,頓時(shí)感覺(jué)古人的偉大,知道寫完欠條要按個(gè)指紋,想賴賬還可以根據(jù)指紋判斷確實(shí)你這個(gè)人寫的。(其實(shí)一直有個(gè)疑惑,古人沒(méi)有指紋鑒別儀器,是怎么根據(jù)指紋判斷人的唯一性??)

消息的傳遞存在 詆毀,不承認(rèn) 的特性,尤其是在互聯(lián)網(wǎng)上,文字都是印刷版的冷冰冰的。如果需要簽訂合同都是打印出紙質(zhì)版本,蓋上公司章再郵寄給他人。
不可否認(rèn)性 又是通過(guò)特定手段將消息發(fā)送者的身份和消息綁定在一定,現(xiàn)實(shí)生活中很方便,比如簽字、按指紋、蓋章等,網(wǎng)絡(luò)中出現(xiàn)此問(wèn)題,也衍生了對(duì)應(yīng)的解決方案。
5. 總結(jié)
消息的特性:
- 機(jī)密性
- 完整性
- 認(rèn)證
- 不可否認(rèn)性
這些特性在日常生活中也會(huì)出現(xiàn),但有時(shí)我們并不在乎它。
我們與他人的日常交流就不需要時(shí)時(shí)刻刻加密對(duì)話內(nèi)容;我們收到朋友發(fā)的微信也沒(méi)必要打個(gè)電話詢問(wèn)內(nèi)容是否完整;和朋友之間周轉(zhuǎn)個(gè)千兒八百的也沒(méi)打欠條的習(xí)慣。
這是因?yàn)檫@些事兒的重要性都不夠高,即便存在這些安全性問(wèn)題也不會(huì)對(duì)我們?cè)斐商蟮膿p失。但是像一些大型公司、銀行,如果不注重信息的安全性,就會(huì)讓那些不會(huì)好意的人有機(jī)可乘,結(jié)果也許會(huì)很糟糕。
未完待續(xù).................
下一篇介紹密碼工具箱,即解決本文提出的四個(gè)消息傳遞存在的問(wèn)題。