發(fā)送者、接收者和竊聽者
請想象一個(gè)Alice向Bob發(fā)送電子郵件的場景。在這個(gè)場景中,發(fā)出郵件的Alice稱為 發(fā)送者(sender),而收到郵件的Bob則稱為 接收者(receiver)。
當(dāng)某個(gè)人向另一個(gè)人發(fā)送信息時(shí),發(fā)出信息的人稱為發(fā)送者,而收到信息的人稱為接收者。另外,被發(fā)送的信息有時(shí)也統(tǒng)稱為 消息(message)。
郵件是通過互聯(lián)網(wǎng)從Alice的計(jì)算機(jī)發(fā)送到Bob的計(jì)算機(jī)的。在發(fā)送郵件時(shí),郵件會(huì)經(jīng)過許多臺(tái)計(jì)算機(jī)和通信設(shè)備進(jìn)行中轉(zhuǎn),在這個(gè)過程中,就存在被惡意竊聽者(eavesdropper)偷看到的可能性
參考:go語言中文文檔:www.topgoer.com
轉(zhuǎn)自:https://www.jianshu.com/p/6d9a72583af2
竊聽者Eve并不一定是人類,有可能是安裝在通信設(shè)備上的某種竊聽器,也可能是安裝在郵件軟件和郵件服務(wù)器上的某些程序。
盡管郵件內(nèi)容原本應(yīng)該只有發(fā)送者和接收者兩個(gè)人知道,但如果不采取相應(yīng)的對策,就存在被第三方知道的風(fēng)險(xiǎn)。
加密和解密
那么如何防止竊聽者的竊聽呢?Alice不想讓別人看到郵件的內(nèi)容,于是她決定將郵件進(jìn)行加密(encrypt)后再發(fā)送出去。
加密之前的消息稱為明文(plaintext),加密之后的消息稱為密文(cipher-text)。
明文加密之后就會(huì)變成看不懂的密文
Bob收到了來自Alice的加密郵件,但作為接收者的Bob也是無法直接閱讀密文的,于是Bob需要對密文進(jìn)行解密(decrypt)之后再閱讀。解密就是將密文恢復(fù)成明文的過程。
密文解密之后就變成了原來的明文
將消息加密后發(fā)送的話,即使消息被竊聽,竊聽者得到的也只是密文,而無法得知加密前的明文內(nèi)容
將消息加密后發(fā)送, 竊聽者只能得到密文在上述場景中,Alice將郵件進(jìn)行加密,而Bob則進(jìn)行解密,這樣做的目的,是為了不讓竊聽者Eve讀取郵件的內(nèi)容Alice和Bob通過運(yùn)用密碼(cryptography)技術(shù),保證了郵件的機(jī)密性(confidentiality)。秘鑰密碼算法用于解決復(fù)雜問題的步驟,通常稱為算法(algorithm)。從明文生成密文的步驟,也就是加密的步驟,稱為“加密算法",而解密的步驟則稱為“解密算法"。加密、解密的算法合在一起統(tǒng)稱為密碼算法。秘鑰密碼算法中需要密鑰(key)?,F(xiàn)實(shí)世界中的“鑰'',是像 :key: 這樣的形狀微妙而復(fù)雜的小金屬片。然而,密碼算法中的密鑰,則是像203554728568477650354673080689430768這樣的一串非常大的數(shù)字。
加密、解密與秘鑰
無論是在加密時(shí)還是在解密時(shí),都需要知道密鑰。
正如保險(xiǎn)柜的鑰匙可以保護(hù)保險(xiǎn)柜中存放的貴重物品一樣,密碼中的密鑰可以保護(hù)你的重要數(shù)據(jù)。即使保險(xiǎn)箱再堅(jiān)固,如果鑰匙被盜, 里面的貴重物品也會(huì)被盜。同樣地我們也必須注意不要讓密碼的密鑰被他人竊取。
凱撒密碼
愷撒密碼(Caesar cipher)是一種相傳尤利烏斯·愷撒曾使用過的密碼。愷撒于公元前100年左右誕生于古羅馬,是一位著名的軍事統(tǒng)帥。
<font color="red">愷撤密碼是通過將明文中所使用的字母表按照一定的字?jǐn)?shù)“平移”來進(jìn)行加密的</font>。比如在日語(例如平假名)或者漢語(例如漢語拼音)或者英文字母表中都可以用同樣的思路來實(shí)現(xiàn)愷撒密碼。
為了講解方便,我們用小寫字母(a,b,c,…)來表小明文,用大寫字母(A,B,C,...)來表示密文。
現(xiàn)在我們將字母表平移3個(gè)字母,于是,明文中的a在加密后就變成了與其相隔3個(gè)字母的D,以此類推。b變成E,c變成F,d變成G......v變成Y,w變成Z,而x則會(huì)回到字母表的開頭而變成A,相應(yīng)地,y變成B,z變成C。通過下圖我們可以很容易地理解“平移"的具體工作方式。
image
凱撒密碼的加密
這里,我們假設(shè)要保密的信息為monkey d luffy這個(gè)男孩的名字。我們暫且不管這個(gè)名字到底代表一位真實(shí)的男性,還是只是一種暗號(hào),只考慮將它在保密的狀態(tài)下發(fā)送給接收者。
此時(shí),明文包含下列12個(gè)字母:monkeydluffy, 接下來我們對明文中的字母逐一加密:
這樣,明文 monkey d luffy 就被轉(zhuǎn)換成了密文PRQNHB G OXIIB,monkey d luffy這個(gè)詞我們能夠看懂,但
PRQNHB G OXIIB就看不懂了。
愷撒密碼中,將字母表中的字母平移這個(gè)操作就是密碼的算法,而平移的字母數(shù)量則相當(dāng)于密鑰。在上面的例子中,密鑰為3(如下圖)。
凱撒密碼的解密
現(xiàn)在,假設(shè)接收者已經(jīng)收到了密文PRQNHB G OXIIB,由于密文本身是看不懂的,因此必須將它解密成明文。
愷撒密碼的解密過程是使用與加密時(shí)相同的密鑰進(jìn)行反向的平移操作。用剛才的例子來說,只要反向平移3個(gè)字母就可以解密了。
這樣我們就得到了明文monkeydluffy。
在這個(gè)場景中, 秘鑰3必須由發(fā)送者和接收者事先約定好。
密碼信息安全常識(shí)與威脅
密碼信息安全常識(shí)
在繼續(xù)下面的內(nèi)容之前,我們先來介紹一些關(guān)于密碼的常識(shí)。剛剛開始學(xué)習(xí)密碼的人常常會(huì)對以下這幾條感到不可思議,因?yàn)樗鼈冇秀S谖覀兊囊话阈猿WR(shí)。
不要使用保密的密碼算法
使用低強(qiáng)度的密碼比不進(jìn)行任何加密更危險(xiǎn)
任何密碼總有一天都會(huì)被破解
密碼只是信息安全的一部分
不要使用保密的密碼算法
很多企業(yè)都有下面這樣的想法:
“由公司自己開發(fā)一種密碼算法,并將這種算法保密,這樣就能保證安全。然而,這樣的想法卻是大錯(cuò)特錯(cuò),使用保密的密碼算法是無法獲得高安全性的。我們不應(yīng)該制作或使用任何保密的密碼算法,而是應(yīng)該使用那些已經(jīng)公開的、被公認(rèn)為強(qiáng)度較高的密碼算法。
這樣做的原因主要有以下兩點(diǎn):
密碼算法的秘密早晚會(huì)公諸于世從歷史上看,密碼算法的秘密最終無一例外地都會(huì)被暴露出來。例如: RSA公司開發(fā)的RC4密碼算法曾經(jīng)也是保密的,但最終還是有一位匿名人士開發(fā)并公開了與其等效的程序。一旦密碼算法的詳細(xì)信息被暴露,依靠對密碼算法本身進(jìn)行保密來確保機(jī)密性的密碼系統(tǒng)也就土崩瓦解了。反之,那些公開的算法從一開始就沒有設(shè)想過要保密,因此算法的暴露絲毫不會(huì)削弱它們的強(qiáng)度。
開發(fā)高強(qiáng)度的密碼算法是非常困難的要比較密碼算法的強(qiáng)弱是極其困難的,因?yàn)槊艽a算法的強(qiáng)度并不像數(shù)學(xué)那樣可以進(jìn)行嚴(yán)密的證明。密碼算法的強(qiáng)度只能通過事實(shí)來證明,如果專業(yè)密碼破譯者經(jīng)過數(shù)年的嘗試仍然沒有破解某個(gè)密碼算法,則說明這種算法的強(qiáng)度較高。稍微聰明一點(diǎn)的程序員很容易就能夠編寫出“自己的密碼系統(tǒng)"。這樣的密碼在外行看來貌似牢不可破,但在專業(yè)密碼破譯者的眼里,要破解這樣的密碼幾乎是手到擒來?,F(xiàn)在世界上公開的被認(rèn)為強(qiáng)度較高的密碼算法,幾乎都是經(jīng)過密碼破譯者長期嘗試破解未果而存活下來的。因此,如果認(rèn)為“公司自己開發(fā)的密碼系統(tǒng)比那些公開的密碼系統(tǒng)更強(qiáng)”,那只能說是過于高估自己公司的能力了。試圖通過對密碼算法本身進(jìn)行保密來確保安全性的行為,一般稱為隱蔽式安全性(securitybyobscurity),這種行為是危險(xiǎn)且愚蠢的。反過來說,將密碼算法的詳細(xì)信息以及程序源代碼全部交給專業(yè)密碼破譯者,并且為其提供大量的明文和密文樣本,如果在這樣的情況下破譯一段新的密文依然需要花上相當(dāng)長的時(shí)間,就說明這是高強(qiáng)度的密碼。
使用低強(qiáng)度的密碼比不進(jìn)行任何加密更危險(xiǎn)
一般人們會(huì)認(rèn)為.就算密碼的強(qiáng)度再低,也比完全不加密要強(qiáng)吧?其實(shí)這樣的想法是非常危險(xiǎn)的。
正確的想法應(yīng)該是:與其使用低強(qiáng)度的密碼,還不如從一開始就不使用任何密碼這主要是由于用戶容易通過“密碼”這個(gè)詞獲得一種“錯(cuò)誤的安全感”。對于用戶來說,安全感與密碼的強(qiáng)度無關(guān),而只是由“信息已經(jīng)被加密了”這一事實(shí)產(chǎn)生的,而這通常會(huì)導(dǎo)致用戶在處理一些機(jī)密信息的時(shí)候麻痹大意。
任何密碼總有一天會(huì)被破譯
如果某種密碼產(chǎn)品宣稱“本產(chǎn)品使用了絕對不會(huì)被破解的密碼算法”,那么你就要對這個(gè)產(chǎn)品的安全性打個(gè)問號(hào)了,這是因?yàn)榻^對不會(huì)被破解的密碼是不存在的。
無論使用任何密碼算法所生成的密文,只要將所有可能的密鑰全部嘗試一遍,就總有一天可以破譯出來。因此,破譯密文所需要花費(fèi)的時(shí)間,與要保密的明文的價(jià)值之間的權(quán)衡就顯得非常重要。
密碼只是信息安全的一部分
我們還是回到Alice給Bob發(fā)送加密郵件的例子。即便不去破解密碼算法,也依然有很多方法能夠知道Alice所發(fā)送的郵件內(nèi)容, 例如:
攻擊者可以不去試圖破譯經(jīng)過加密的郵件,而是轉(zhuǎn)而攻擊Alice的電腦以獲取加密之前的郵件明文。
上面提到的攻擊手段,都與密碼的強(qiáng)度毫無關(guān)系。要保證良好的安全性,就需要理解“系統(tǒng)”這一概念本身的性質(zhì)復(fù)雜的系統(tǒng)就像一根由無數(shù)個(gè)環(huán)節(jié)相連組成的鏈條,如果用力拉,鏈條就會(huì)從其中最脆弱的環(huán)節(jié)處斷開。因此,系統(tǒng)的強(qiáng)度取決于其中最脆弱的環(huán)節(jié)的強(qiáng)度。
最脆弱的環(huán)節(jié)并不是密碼,而是人類自己。
密碼信息威脅
我們將信息安全所面臨的威脅與用來用對這些威脅的密碼技術(shù)直接的關(guān)系用一張圖標(biāo)來表示出來。