本篇文章首先介紹什么是對稱加密、非對稱加密、數字簽名、HASH 等相關概念。
前言
為什么有加密學、加密算法這個東西的出現那 ...
原因很簡單隱私 ?? 、秘密不想讓其他人知道,涉及到個人隱私、國家利益、戰爭的原因所以把重要信息加密,讓其他攔截到的人看不懂。先舉個例子說明一下什么是密鑰、加密算法這些關鍵詞后面會用到。
古典算法 愷撒密碼
愷撒密碼的原理是,對于明文的各個字母,根據它在 26 個英文字母表中的位置,按某個固定間隔 n 變換字母,即得到對應的密文。這個固定間隔的數字 n 就是加密密鑰,同時也是解密密鑰。例 CRYPTOGRAPHY 是明文,使用密鑰 n = 3,加密過程如圖所示:
明文: C R Y P T O G R A P H Y
| | |
| |................. | 密鑰:n = 3
| | |
密文: F U B S W R J U D S K B
明文的第一個字母 C 在字母表中的位置設為 1,以 n = 3 為間隔,往后第 3 個字母是 F,把 C 置換為 F;依此類推,直到把明文中的字母置換完畢,即得到密文。通信的對方得到密文之后,用同樣的密文 n = 3 ,對密文的每個字母,按往前間隔 3 得到的字母進行置換的原則,即可解密得到明文。
通過凱撒密碼我們應該明白這個簡單的加密解密過程了。
秘鑰:n = 3
加密、解密算法:加減 n 的過程
對稱加密
定義
采用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
加密過程
我們可以通過上面的 凱撒密碼 這個簡單模型理解對稱加密。
常用算法
常見的對稱加密算法有 DES、3DES、AES、Blowfish、IDEA、RC5、RC6
對稱加密的優缺點
- 優點:稱加密算法的優點是算法公開、計算量小、加密速度快、加密效率高。
- 缺點:對稱加密算法的缺點是在數據傳送前,發送方和接收方必須商定好秘鑰,然后使雙方都能保存好秘鑰。其次如果一方的秘鑰被泄露,那么加密信息也就不安全了。
非對稱加密
定義
非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。
加密過程
下面通過舉例 畫圖來幫助大家理解這個過程。
- 通信雙方用戶 A 、B 都會生成一對 公鑰-私鑰 并且把自己的公鑰交給對方。
- A 用戶給 B 用戶發信息并且用 B 公鑰進行加密。
- B 用戶收到消息后用自己本地的 B 私鑰 進行解密。
由于 公鑰 加密的數據只有 與其配對的私鑰 才能解開,所以只要用戶 A、B 牢牢的把自己私鑰保存好就可以啦。這就解決了 對稱加密 在網絡安全不可靠情況下的密鑰傳遞及加密通信。
非對稱加密存在風險
右上圖我們可以發現非對稱加密的公鑰是公開的,當壞人用 公鑰 B 模擬一下消息給 B 用戶發信息 "借我 1 萬元" B 用戶用自己的 私鑰B 解密(成功解密),沒毛病給你 1 萬。。。。
這里有個問題就是 B 用戶要確定給我發消息的一定是 A 用戶,那怎么確定那???下面我們來說一下數字簽名。
數字簽名
定義
數字簽名是非對稱密鑰加密技術與數字摘要技術的應用(私鑰和公鑰互相可解)。
數字簽名就是將公鑰密碼反過來使用。簽名者將消息用私鑰加密(這是一種反用,因為通常公鑰密碼中私鑰用于解密),然后公布公鑰 。驗證者使用公鑰將加密訊息解密并比對消息。
作用
- 確認消息在傳輸過程中沒有丟位,沒被篡改(完整性)
- 確認消息的發送者是發布公鑰的 Alice(認證)
- 確認Alice的確發布過該消息(不可否認性)
操作過程
通過用 私鑰 A 對消息進行簽名 ,然后通過 公鑰 A 驗證 后的得到的消息對比解密后的消息一直則確定了這個消息確實是 A 用戶發來的。
摘要算法(HASH)
通過上圖中的簽名可以驗證 發消息者的準確性,但是存在一個問題就是我們的傳輸數據量變大了,這顯然是不合理的。下面我們將用到 摘要算法(HASH)他可以大大減小我們簽名數據的大小。
原理
摘要算法是一個神奇的算法,散列就是通過把一個叫做散列算法的單向數學函數應用于數據,將任意長度的一塊數據轉換為一個定長的、不可逆轉的數字,其長度通常在128~256位之間。所產生的散列值的長度應足夠長,因此使找到兩塊具有相同散列值的數據的機會很少。(可以理解為源文件的指紋)
摘要算法具有以下特性
只要源文本不同,計算得到的結果,必然不同(或者說機會很少)。
無法從結果反推出源數據(那是當然的,不然就能量不守恒了)。
常見的摘要算法:
MD5、 SHA-1、MAC、CRC
通過使用 HASH 我們可以很大程度上的減少簽名數據的大小并且可以保證數據的唯一性。
數字證書
現實生活中的證書
在現實生活中,證書顧名思義,就是權限機構頒發的證明。比如英語 6 級證書,就是教育部門頒發給通過了6級考核的個人的證明,證明這個人的英語能力。我們來看一下這個證書的組成:
- 被證明人:老王
- 內容:通過了英語六級
- 蓋章:教育部門的公章或鋼印
當老王用這張證書找工作時,用人單位會通過查看證書的各項內容(尤其是公章),來驗證證書的合法性和老王的能力。在現實生活中經常有假的 6 級證書,這些假證書最重要的就是有一個假公章。現實生活中使用法律法規來約束私刻假公章的行為,但是用人單位可能不能十分準確的判斷公章是真是假。而數字簽字可以來解決該類問題。
數字證書
數字證書就是通過數字簽名實現的數字化的證書,在現實生活中公章可以被偽造,但是在計算數字世界中,數字簽名是沒辦法被偽造的,比如上述證書中,在一個證書文件中寫明了證書內容,頒發證書時,教育部門用他們的私鑰對文件的摘要信息進行簽名,將簽名和證書文件一起發布,這樣就能確保該證書無法被偽造。驗證證書是否合法時,首先用教育部門的公鑰(公鑰是公開的誰都可以獲取到)對簽名進行解密得到一個摘要信息,使用教育部門同樣的摘要算法得到證書的另一個摘要信息,對比兩個摘要信息是否一致就能確定該證書是否合法。在一般的證書組成中部分中,還加入了一些其他信息,比如證書的有效期。
數字證書也有很多的簽發機構,不同的簽發機構簽發的證書,用途也是不一樣的,例如在 Web 訪問中為了防止 Web 內容在網絡中安全傳輸,需要用到的 SSL 證書則需要向幾家公認的機構簽發。這些簽發第三方機構統稱為 CA(Certificate Authority)。
根證書
那么我們如何保證第三方證書的安全行那,那就是需要我們的根證書對他們進行簽發,這是所有的根源了根證書不需要被任何機構簽發了。根證書大部分都是跟著系統一起打包進去的。例如 Android 系統中,則存放在 /system/etc/security/ 目錄下,想要了解看看這篇文章Android 根證書管理與證書驗證。 在訪問網絡的時候我們可以查看這個服務器網站的相關簽發證書機構,如圖。
關于數字證書、數字簽名不明的可以看看這片非常通俗易懂文章 數字簽名、證書是什么?