一、對(duì)稱加密和非對(duì)稱加密入門
1. 如何不被竊聽(tīng) —— 加密
- 這種加密方案在密碼學(xué)里稱為對(duì)稱密碼,加密方和解密方使用的是相同的密鑰。
- 知名的密碼算法有 AES(2001)、Blowfish(1993)、DES(1977),再遠(yuǎn)一點(diǎn),有二戰(zhàn)時(shí)期的恩尼格碼(轉(zhuǎn)輪機(jī)原理,德國(guó))、紫色密碼(轉(zhuǎn)輪機(jī)原理,日本),以及著名的凱撒密碼(沒(méi)錯(cuò)就是地中海北岸那個(gè)凱撒)、柵欄密碼等。
2. 如何交換密鑰 —— 非對(duì)稱加密
解決信道安全問(wèn)題
- Bob 事先生成一對(duì)公鑰和私鑰,私鑰 pri 由自己保管,把公鑰 pub 發(fā)給 Alice。
- Alice 使用 pub 對(duì)消息內(nèi)容進(jìn)行加密,Bob 用 pri 進(jìn)行解密。
- 需要注意的是, 只有私鑰才可以解密,所以即使 Eve 竊取到了 pub(只有 pub 被傳輸而容易被竊?。?,她也無(wú)法解密。
- 這種加密方式在密碼學(xué)里稱為非對(duì)稱密碼,所謂“非對(duì)稱”指的是加密方和解密方用的密鑰不一樣。
- 知名的非對(duì)稱算法有:DSA(數(shù)字簽名算法,只能用于簽名,1991)、ECC(橢圓曲線加密,1985)、RSA(公鑰加密算法,1977)等。
- 這些算法除了用于加密外,還可以用于 數(shù)字簽名。非對(duì)稱算法有個(gè)致命弱點(diǎn): 性能很低。實(shí)際應(yīng)用中一般采用混合加密體制、哈希簽名體制。
3. 如何防止數(shù)據(jù)篡改 —— MAC
圖中的 MAC 指的是 消息認(rèn)證碼(Message Authentication Code),你現(xiàn)在不需知道它的原理,只要記住 :(1)傳入兩個(gè)參數(shù) message 和 key,進(jìn)行一系列計(jì)算后得到一個(gè)值叫 MAC。(2)只有 message 和 key 相同的情況下,才能得到相同的 MAC。
- 消息認(rèn)證碼有多種實(shí)現(xiàn)方式,其中最常見(jiàn)的是 HMAC(Hash MAC),即使用哈希算法來(lái)實(shí)現(xiàn) MAC,還有一種是基于分組密碼算法的 MAC,不常見(jiàn)。
- 聰明如你,肯定會(huì)想到如果 key 被竊取該怎么辦?這就涉及到 數(shù)字簽名了,后文會(huì)講到。
4. 如何校驗(yàn)身份 —— MAC
- MAC包含幾種實(shí)現(xiàn)方式:基于 HASH 的 MAC 稱為 HMAC,應(yīng)用比較廣泛。
- 有些同學(xué)應(yīng)該接觸過(guò)阿里云的 Access Key,其實(shí)就是 HMAC 的原理。
- 有些同學(xué)在兩個(gè)系統(tǒng)之間API調(diào)用時(shí),會(huì)使用同一個(gè) key 做 md5 計(jì)算來(lái)實(shí)現(xiàn) API 鑒權(quán),這稱為“加鹽HASH”,可以簡(jiǎn)單理解為 HMAC 的簡(jiǎn)化版。
- 同樣的,如果 key 被竊取該怎么辦?這可以用 數(shù)字簽名來(lái)解決。
5.更進(jìn)一步 —— 數(shù)字簽名
發(fā)送方是用 私鑰進(jìn)行簽名,而接收方用 公鑰 進(jìn)行驗(yàn)簽,這跟加密情況正好相反。
6. 公鑰的身份證 —— 數(shù)字證書
偽造公鑰,Bob 需要事先生成公鑰 pub 和私鑰 pri ,然后把 pub 分發(fā)給 Alice。那么攻擊過(guò)程就從這入手,Eve 生成自己的一對(duì)公鑰 pub' 和 私鑰 pri',截獲 Bob 的 pub,并用自己的 pub' 冒充 Bob 的公鑰發(fā)給 Alice。
這是個(gè)“偷天換日”的過(guò)程,Eve 通過(guò)偽造公鑰(中間人攻擊),不光竊聽(tīng)到 Alice 的消息,還能保證整個(gè)過(guò)程中 Alice 和 Bob 都沒(méi)有察覺(jué)!
Eve 不是喜歡偽造公鑰嗎,Bob 這次就要請(qǐng) Trent 為自己的公鑰注冊(cè)一張 “身份證” —— 數(shù)字證書。見(jiàn)證如見(jiàn)人,哦不對(duì),見(jiàn)證如見(jiàn)公鑰!以下是注冊(cè)數(shù)字證書的過(guò)程:
- Bob 請(qǐng)求 Trent 為自己的公鑰 pub 注冊(cè)一個(gè)證書。
- Trent 收到請(qǐng)求后,用自己的私鑰 pri ' 對(duì) pub(以及身份信息) 進(jìn)行簽名,得到一個(gè) sign。
- Trent 把證書 certificate = pub + sign 頒發(fā)給 Bob。
- Bob 把自己的證書 pub + sign 發(fā)給 Alice。
- Alice 使用 Trent 的公鑰 pub ' 對(duì) sign 進(jìn)行驗(yàn)簽,如果校驗(yàn)成功則說(shuō)明 pub 的確是 Bob 的公鑰,因?yàn)樗嘈?Trent 的權(quán)威性。
Eve 不可能找 Trent 為她辦一個(gè) Bob 的數(shù)字證書,因?yàn)?Trent 不會(huì)同意的,就像警察蜀黍不會(huì)給我辦一張別人的身份證一樣。所以,Eve 無(wú)法偽造 Bob 的公鑰。
- 考慮到非對(duì)稱算法的效率問(wèn)題,實(shí)際應(yīng)用中一般是先對(duì)數(shù)據(jù)進(jìn)行哈希,然后才用私鑰對(duì)哈希值(摘要)進(jìn)行簽名。
- Trent 在密碼技術(shù)領(lǐng)域中一般稱為 認(rèn)證機(jī)構(gòu)(Certification Authority,即 CA)。
- 以數(shù)字證書為基礎(chǔ),業(yè)界制定了一系列的規(guī)范和規(guī)格,比如由誰(shuí)頒發(fā)證書、如何進(jìn)行頒發(fā)、如何作廢證書等,稱為 公鑰基礎(chǔ)設(shè)施(Public-Key Infrastructure,即 PKI)。
二、對(duì)稱加密常見(jiàn)密碼學(xué)
AES,DES,3DES,TDEA,Blowfish,RC5,IDEA
三、非對(duì)稱加密經(jīng)典算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)