1、對稱加密和非對稱加密入門算法
1. 如何不被竊聽 —— 加密安全
這種加密方案在密碼學裏稱爲對稱密碼,加密方和解密方使用的是相同的密鑰。性能
知名的密碼算法有 AES(2001)、Blowfish(1993)、DES(1977),再遠一點,有二戰時期的恩尼格碼(轉輪機原理,德國)、紫色密碼(轉輪機原理,日本),以及著名的凱撒密碼(沒錯就是地中海北岸那個凱撒)、柵欄密碼等。阿里雲
2. 如何交換密鑰 —— 非對稱加密加密
解決信道安全問題blog
Bob 事先生成一對公鑰和私鑰,私鑰 pri 由本身保管,把公鑰 pub 發給 Alice。md5
Alice 使用 pub 對消息內容進行加密,Bob 用 pri 進行解密。it
須要注意的是, 只有私鑰才能夠解密,因此即便 Eve 竊取到了 pub(只有 pub 被傳輸而容易被竊取),她也沒法解密。io
這種加密方式在密碼學裏稱爲非對稱密碼,所謂「非對稱」指的是加密方和解密方用的密鑰不同。入門
知名的非對稱算法有:DSA(數字簽名算法,只能用於簽名,1991)、ECC(橢圓曲線加密,1985)、RSA(公鑰加密算法,1977)等。
這些算法除了用於加密外,還能夠用於 數字簽名。非對稱算法有個致命弱點: 性能很低。實際應用中通常採用混合加密體制、哈希簽名體制。
3. 如何防止數據篡改 —— MAC
圖中的 MAC 指的是 消息認證碼(Message Authentication Code),你如今不需知道它的原理,只要記住 :(1)傳入兩個參數 message 和 key,進行一系列計算後獲得一個值叫 MAC。(2)只有 message 和 key 相同的狀況下,才能獲得相同的 MAC。
消息認證碼有多種實現方式,其中最多見的是 HMAC(Hash MAC),即便用哈希算法來實現 MAC,還有一種是基於分組密碼算法的 MAC,不常見。
聰明如你,確定會想到若是 key 被竊取該怎麼辦?這就涉及到 數字簽名了,後文會講到。
4. 如何校驗身份 —— MAC
MAC包含幾種實現方式:基於 HASH 的 MAC 稱爲 HMAC,應用比較普遍。
有些同窗應該接觸過阿里雲的 Access Key,其實就是 HMAC 的原理。
有些同窗在兩個系統之間API調用時,會使用同一個 key 作 md5 計算來實現 API 鑑權,這稱爲「加鹽HASH」,能夠簡單理解爲 HMAC 的簡化版。
一樣的,若是 key 被竊取該怎麼辦?這能夠用 數字簽名來解決。
5.更進一步 —— 數字簽名
發送方是用 私鑰進行簽名,而接收方用 公鑰 進行驗籤,這跟加密狀況正好相反。
6. 公鑰的身份證 —— 數字證書
僞造公鑰,Bob 須要事先生成公鑰 pub 和私鑰 pri ,而後把 pub 分發給 Alice。那麼攻擊過程就從這入手,Eve 生成本身的一對公鑰 pub' 和 私鑰 pri',截獲 Bob 的 pub,並用本身的 pub' 冒充 Bob 的公鑰發給 Alice。
這是個「偷天換日」的過程,Eve 經過僞造公鑰(中間人攻擊),不光竊聽到 Alice 的消息,還能保證整個過程當中 Alice 和 Bob 都沒有察覺!
Eve 不是喜歡僞造公鑰嗎,Bob 此次就要請 Trent 爲本身的公鑰註冊一張 「身份證」 —— 數字證書。見證如見人,哦不對,見證如見公鑰!如下是註冊數字證書的過程:
Bob 請求 Trent 爲本身的公鑰 pub 註冊一個證書。
Trent 收到請求後,用本身的私鑰 pri ' 對 pub(以及身份信息) 進行簽名,獲得一個 sign。
Trent 把證書 certificate = pub + sign 頒發給 Bob。
Bob 把本身的證書 pub + sign 發給 Alice。
Alice 使用 Trent 的公鑰 pub ' 對 sign 進行驗籤,若是校驗成功則說明 pub 的確是 Bob 的公鑰,由於她相信 Trent 的權威性。
Eve 不可能找 Trent 爲她辦一個 Bob 的數字證書,由於 Trent 不會贊成的,就像警察蜀黍不會給我辦一張別人的身份證同樣。因此,Eve 沒法僞造 Bob 的公鑰。
考慮到非對稱算法的效率問題,實際應用中通常是先對數據進行哈希,而後才用私鑰對哈希值(摘要)進行簽名。
Trent 在密碼技術領域中通常稱爲 認證機構(Certification Authority,即 CA)。
以數字證書爲基礎,業界制定了一系列的規範和規格,好比由誰頒發證書、如何進行頒發、如何做廢證書等,稱爲 公鑰基礎設施(Public-Key Infrastructure,即 PKI)。
2、對稱加密常見密碼學
AES,DES,3DES,TDEA,Blowfish,RC5,IDEA
3、非對稱加密經典算法
RSA、Elgamal、揹包算法、Rabin、D-H、ECC(橢圓曲線加密算法)