最近在研讀《圖解密碼技術(shù)》這本書庶艾,將有一系列的密碼學(xué)學(xué)習(xí)筆記,涉及到密碼的相關(guān)概念、對稱加密货抄、非對稱加密、單向散列函數(shù)积暖、消息認(rèn)證碼怪与、數(shù)字簽名、數(shù)字證書等內(nèi)容遍愿,同時涉及到代碼部分也會使用Golang進行展示耘斩,感興趣的可以關(guān)注更新哦。好了坞笙,今天先講講密碼學(xué)中的一些概念性的問題荚虚。
發(fā)送者版述、接收者和竊聽者
請想象一個Alice向Bob發(fā)送電子郵件的場景。在這個場景中渴析,發(fā)出郵件的Alice稱為 發(fā)送者(sender)檬某,而收到郵件的Bob則稱為 接收者(receiver)恢恼。
當(dāng)某個人向另一個人發(fā)送信息時,發(fā)出信息的人稱為發(fā)送者,而收到信息的人稱為接收者牵署。另外喧半,被發(fā)送的信息有時也統(tǒng)稱為 消息(message)。
郵件是通過互聯(lián)網(wǎng)從Alice的計算機發(fā)送到Bob的計算機的取具。在發(fā)送郵件時扁耐,郵件會經(jīng)過許多臺計算機和通信設(shè)備進行中轉(zhuǎn),在這個過程中块仆,就存在被惡意竊聽者(eavesdropper)偷看到的可能性
竊聽者Eve并不一定是人類悔据,有可能是安裝在通信設(shè)備上的某種竊聽器俗壹,也可能是安裝在郵件軟件和郵件服務(wù)器上的某些程序。
盡管郵件內(nèi)容原本應(yīng)該只有發(fā)送者和接收者兩個人知道肛捍,但如果不采取相應(yīng)的對策之众,就存在被第三方知道的風(fēng)險。
加密和解密
那么如何防止竊聽者的竊聽呢缀蹄?Alice不想讓別人看到郵件的內(nèi)容膘婶,于是她決定將郵件進行加密(encrypt)后再發(fā)送出去。
加密之前的消息稱為明文(plaintext)衅码,加密之后的消息稱為密文(cipher-text)脊岳。
- 明文加密之后就會變成看不懂的密文
Bob收到了來自Alice的加密郵件垛玻,但作為接收者的Bob也是無法直接閱讀密文的帚桩,于是
Bob需要對密文進行解密(decrypt)之后再閱讀嘹黔。解密就是將密文恢復(fù)成明文的過程。
- 密文解密之后就變成了原來的明文
將消息加密后發(fā)送的話郭蕉,即使消息被竊聽浙值,竊聽者得到的也只是密文檩小,而無法得知加密前的明文內(nèi)容
-
將消息加密后發(fā)送, 竊聽者只能得到密文
在上述場景中,Alice將郵件進行加密筐付,而Bob則進行解密阻肿,這樣做的目的,是為了不讓竊聽者Eve讀取郵件的內(nèi)容Alice和Bob通過運用密碼(cryptography)技術(shù)较解,保證了郵件的機密性(confidentiality)赴邻。
秘鑰
密碼算法
用于解決復(fù)雜問題的步驟,通常稱為算法(algorithm)奸焙。從明文生成密文的步驟彤敛,也就是加密的步驟,稱為“加密算法"玄糟,而解密的步驟則稱為“解密算法"袄秩。加密嫂拴、解密的算法合在一起統(tǒng)稱為密碼算法筒狠。
秘鑰
密碼算法中需要密鑰(key)∠渎伲現(xiàn)實世界中的“鑰'',是像 :key: 這樣的形狀微妙而復(fù)雜的小金屬片灶伊。然而寒跳,密碼算法中的密鑰,則是像203554728568477650354673080689430768這樣的一串非常大的數(shù)字米辐。
加密书释、解密與秘鑰
無論是在加密時還是在解密時,都需要知道密鑰狸页。
正如保險柜的鑰匙可以保護保險柜中存放的貴重物品一樣扯再,密碼中的密鑰可以保護你的重要數(shù)據(jù)。即使保險箱再堅固齿穗,如果鑰匙被盜, 里面的貴重物品也會被盜饺律。同樣地我們也必須注意不要讓密碼的密鑰被他人竊取。
凱撒密碼
愷撒密碼(Caesar cipher)是一種相傳尤利烏斯·愷撒曾使用過的密碼脖卖。愷撒于公元前100年左右誕生于古羅馬巧颈,是一位著名的軍事統(tǒng)帥。
<font color="red">愷撤密碼是通過將明文中所使用的字母表按照一定的字?jǐn)?shù)“平移”來進行加密的</font>十籍。比如在日語(例如平假名)或者漢語(例如漢語拼音)或者英文字母表中都可以用同樣的思路來實現(xiàn)愷撒密碼。
為了講解方便惨篱,我們用小寫字母(a围俘,b,c簿寂,…)來表小明文宿亡,用大寫字母(A,B克胳,C坤按,...)來表示密文馒过。
現(xiàn)在我們將字母表平移3個字母腹忽,于是,明文中的a在加密后就變成了與其相隔3個字母的D窘奏,以此類推着裹。b變成E,c變成F骇扇,d變成G......v變成Y少孝,w變成Z,而x則會回到字母表的開頭而變成A袁翁,相應(yīng)地,y變成B粱胜,z變成C年柠。通過下圖我們可以很容易地理解“平移"的具體工作方式。
凱撒密碼的加密
這里答憔,我們假設(shè)要保密的信息為monkey d luffy這個男孩的名字掀抹。我們暫且不管這個名字到底代表一位真實的男性,還是只是一種暗號蓉驹,只考慮將它在保密的狀態(tài)下發(fā)送給接收者揪利。
此時,明文包含下列12個字母:monkeydluffy, 接下來我們對明文中的字母逐一加密:
m ---> P
o ---> R
n ---> Q
k ---> N
e ---> H
y ---> B
d ---> G
l ---> O
u ---> X
f ---> I
f ---> I
y ---> B
這樣瞻润,明文 monkey d luffy 就被轉(zhuǎn)換成了密文PRQNHB G OXIIB甜刻,monkey d luffy這個詞我們能夠看懂,但
PRQNHB G OXIIB就看不懂了傻铣。
愷撒密碼中祥绞,將字母表中的字母平移這個操作就是密碼的算法,而平移的字母數(shù)量則相當(dāng)于密鑰两踏。在上面的例子中丧荐,密鑰為3(如下圖)。
凱撒密碼的解密
現(xiàn)在弓坞,假設(shè)接收者已經(jīng)收到了密文PRQNHB G OXIIB,由于密文本身是看不懂的戚扳,因此必須將它解密成明文族吻。
愷撒密碼的解密過程是使用與加密時相同的密鑰進行反向的平移操作超歌。用剛才的例子來說,只要反向平移3個字母就可以解密了巍举。
P ---> m
R ---> o
Q ---> n
N ---> k
H ---> e
B ---> y
G ---> d
O ---> l
X ---> u
I ---> f
I ---> f
B ---> y
這樣我們就得到了明文monkeydluffy懊悯。
在這個場景中, 秘鑰3必須由發(fā)送者和接收者事先約定好桃焕。
密碼信息安全常識與威脅
密碼信息安全常識
在繼續(xù)下面的內(nèi)容之前观堂,我們先來介紹一些關(guān)于密碼的常識岖妄。剛剛開始學(xué)習(xí)密碼的人常常會對以下這幾條感到不可思議寂祥,因為它們有悖于我們的一般性常識。
- 不要使用保密的密碼算法
- 使用低強度的密碼比不進行任何加密更危險
- 任何密碼總有一天都會被破解
- 密碼只是信息安全的一部分
不要使用保密的密碼算法
很多企業(yè)都有下面這樣的想法:
“由公司自己開發(fā)一種密碼算法福扬,并將這種算法保密惜犀,這樣就能保證安全。然而汽烦,這樣的想法卻是大錯特錯莉御,使用保密的密碼算法是無法獲得高安全性的。我們不應(yīng)該制作或使用任何保密的密碼算法牍颈,而是應(yīng)該使用那些已經(jīng)公開的、被公認(rèn)為強度較高的密碼算法讥蔽。
這樣做的原因主要有以下兩點:
-
密碼算法的秘密早晚會公諸于世
從歷史上看画机,密碼算法的秘密最終無一例外地都會被暴露出來步氏。例如: RSA公司開發(fā)的RC4密碼算法曾經(jīng)也是保密的,但最終還是有一位匿名人士開發(fā)并公開了與其等效的程序戳护。
一旦密碼算法的詳細信息被暴露腌且,依靠對密碼算法本身進行保密來確保機密性的密碼系統(tǒng)也就土崩瓦解了。反之巫击,那些公開的算法從一開始就沒有設(shè)想過要保密精续,因此算法的暴露絲毫不會削弱它們的強度。
-
開發(fā)高強度的密碼算法是非常困難的
- 要比較密碼算法的強弱是極其困難的顷级,因為密碼算法的強度并不像數(shù)學(xué)那樣可以進行嚴(yán)密的證明确垫。密碼算法的強度只能通過事實來證明,如果專業(yè)密碼破譯者經(jīng)過數(shù)年的嘗試仍然沒有破解某個密碼算法翔冀,則說明這種算法的強度較高披泪。
- 稍微聰明一點的程序員很容易就能夠編寫出“自己的密碼系統(tǒng)"。這樣的密碼在外行看來貌似牢不可破控硼,但在專業(yè)密碼破譯者的眼里,要破解這樣的密碼幾乎是手到擒來佩厚。
- 現(xiàn)在世界上公開的被認(rèn)為強度較高的密碼算法说订,幾乎都是經(jīng)過密碼破譯者長期嘗試破解未果而存活下來的陶冷。因此,如果認(rèn)為“公司自己開發(fā)的密碼系統(tǒng)比那些公開的密碼系統(tǒng)更強”埂伦,那只能說是過于高估自己公司的能力了沾谜。
- 試圖通過對密碼算法本身進行保密來確保安全性的行為,一般稱為隱蔽式安全性(securitybyobscurity)婚温,這種行為是危險且愚蠢的媳否。
- 反過來說,將密碼算法的詳細信息以及程序源代碼全部交給專業(yè)密碼破譯者力图,并且為其提供大量的明文和密文樣本掺逼,如果在這樣的情況下破譯一段新的密文依然需要花上相當(dāng)長的時間,就說明這是高強度的密碼晓折。
使用低強度的密碼比不進行任何加密更危險
一般人們會認(rèn)為.就算密碼的強度再低兽泄,也比完全不加密要強吧病梢?其實這樣的想法是非常危險的。
正確的想法應(yīng)該是:與其使用低強度的密碼觅彰,還不如從一開始就不使用任何密碼這主要是由于用戶容易通過“密碼”這個詞獲得一種“錯誤的安全感”钮热。對于用戶來說,安全感與密碼的強度無關(guān)飒责,而只是由“信息已經(jīng)被加密了”這一事實產(chǎn)生的仆潮,而這通常會導(dǎo)致用戶在處理一些機密信息的時候麻痹大意。
任何密碼總有一天會被破譯
如果某種密碼產(chǎn)品宣稱“本產(chǎn)品使用了絕對不會被破解的密碼算法”拾并,那么你就要對這個產(chǎn)品的安全性打個問號了鹏浅,這是因為絕對不會被破解的密碼是不存在的隐砸。
無論使用任何密碼算法所生成的密文,只要將所有可能的密鑰全部嘗試一遍继控,就總有一天可以破譯出來胖眷。因此,破譯密文所需要花費的時間冶忱,與要保密的明文的價值之間的權(quán)衡就顯得非常重要境析。
密碼只是信息安全的一部分
我們還是回到Alice給Bob發(fā)送加密郵件的例子劳淆。即便不去破解密碼算法,也依然有很多方法能夠知道Alice所發(fā)送的郵件內(nèi)容, 例如:
攻擊者可以不去試圖破譯經(jīng)過加密的郵件括勺,而是轉(zhuǎn)而攻擊Alice的電腦以獲取加密之前的郵件明文。
上面提到的攻擊手段奈辰,都與密碼的強度毫無關(guān)系乱豆。要保證良好的安全性,就需要理解“系統(tǒng)”這一概念本身的性質(zhì)復(fù)雜的系統(tǒng)就像一根由無數(shù)個環(huán)節(jié)相連組成的鏈條房官,如果用力拉续滋,鏈條就會從其中最脆弱的環(huán)節(jié)處斷開疲酌。因此,系統(tǒng)的強度取決于其中最脆弱的環(huán)節(jié)的強度湿颅。
最脆弱的環(huán)節(jié)并不是密碼粥诫,而是人類自己。
密碼信息威脅
我們將信息安全所面臨的威脅與用來用對這些威脅的密碼技術(shù)直接的關(guān)系用一張圖標(biāo)來表示出來谊囚。