對稱加密:
DES
DES是1977年美國聯邦信息處理標準中使用的一種對稱密碼技術,曾今被美國和其他國家政府銀行使用。
不過現在已被暴力破解,我們除了用它解密以前的密文外,已不再使用DES了。不過這裏我們可以用它來了解下什麼是對稱加密。
<!--more-->
加密和解密
DES是一種把64比特明文加密成64比特的密文的對稱密碼算法,密鑰長度56位,其中每隔7比特有個錯誤檢查比特。結果DES密鑰總長度爲64比特。
分組密碼
DES以64比特明文爲一個單位進行加密,這64比特單位稱爲分組。so,以分組爲單位處理密碼的算法稱爲分組密碼。DES屬於分組密碼。
DES每次只能加密64比特數據,如果明文較長,就需要對DES加密進行迭代,迭代的具體方式稱爲模式。後文會描述。
圖DES加密與解密流程
三重DES
三重DES只是將DES重複3次,爲了增加DES強度
AES
目前很安全
。。。。。
分組密碼模式
.....好多.....
非對稱加密
公鑰密碼
在對稱密碼中,由於加密解密的密鑰是相同的,因此密鑰配送就成了問題。如過使用公鑰密碼,就解決了配送問題。
密鑰配送問題:
解決密鑰配送有多個方法,但都很難處理
- 雙方通信時如果要加密,密鑰不能在通信內容中。否則會被中間人竊聽。
- 雙方可以事先共享密鑰,如果雙方離得很近自然好說。但如果離得很遠就不能在消息裏傳播密鑰,因爲可能會被竊聽。郵寄存儲卡也可能會被竊取。假如一個公司有1000人需要彼此加密通信,那密鑰數可能會達到50萬個,這個不現實。
- 如果有個密鑰分配中心存儲密鑰,那1000人的數據庫會有1000個密鑰。但如果員工增加,密鑰也要增加,數據庫負荷會加大,如果數據庫癱瘓,全公司的通信就會癱瘓。密鑰分配中心也可能會遭到攻擊.
- Diffie-Hellman密鑰交換。是個方案。我們在後續會討論
公鑰密碼解決配送問題
兩種密鑰。一種是加密密鑰,一種是解密密鑰
這裏有公鑰和私鑰,公鑰和私鑰既可以當做加密密鑰,也可以做解密密鑰。只是使用場景不同
你既可以用公鑰加密,私鑰解密。也可以用公鑰解密,私鑰加密。區別只是在於使用場景。
公鑰和私鑰是一一對應的,一對公鑰和私鑰統稱爲密鑰對
我們來看一種公鑰加密,私鑰解密的情景。
Alice要發消息給Bob
- Bob要接受消息,生成密鑰對。私鑰自己保管,公鑰發給Alice
- 公鑰被截獲也沒關係。因爲公鑰只負責加密
- Alice用公鑰對消息加密,發送給Bob。
- 即使密文中間被截獲也沒關係,公鑰無法解密
- Bob用自己私鑰揭祕
如圖所示
公鑰密碼的問題
- 公鑰是否是正確合法的.假如中間人給你換了個公鑰呢?
- 處理速度要比對稱加密慢很多,大約只有百分之一
我們後面討論這兩個問題
RSA
RSA加密
密文 = 明文 E mod N (mod是取模的意思)
E和N的組合就是公鑰 簡稱 “公鑰是(E,N)”
RSA解密
明文 = 密文 D mod N
D和N的組合就是私鑰
中間人攻擊
這個邏輯很簡單,中間人替換掉了接受者得公鑰,向對方提供了自己的公鑰。結果發送者用的中間人的公鑰加密消息發送出去,中間人接受到消息並用自己私鑰解密得到明文。再僞造一個假消息用接受者的公鑰加密還給接受者。具體流程如圖:
混合密碼技術
組成機制:
- 用對稱密碼加密消息
- 通過僞隨機數生成器生成對稱密碼加密中使用的會話密鑰
- 用公鑰加密會話密鑰
- 從混合密碼系統外部賦予公鑰密碼時使用的密鑰
# 混合密碼系統加密解密過程
加密:
- 使用僞隨機生成器生成會話密鑰 ,會話密鑰加密明文生成密文
- 用接受者的公鑰加密會話密鑰
- 兩個密文組合後發送出去
解密:
- 收到消息先解密會話密鑰,用接受者的私鑰解密,得到會話密鑰
- 用會話密鑰解密加密過得密文,即可得到消息
認證
單向散列函數
輸入稱爲消息,輸出稱爲散列值。
單向散列函數可以根據消息的內容計算出散列值,而散列值就可以被用來檢查消息的完整性。
單向散列函數的性質:
- 根據任意長度的消息計算出固定長度的散列值
- 能夠快速計算出散列值
- 消息不同散列值也不同
- 兩個不同消息產生同一個散列值的情況稱爲碰撞
- 要找到和該消息具有相同散列值的另外一條消息是非常困難的。這一性質稱爲弱抗碰撞性
- 要找到散列值相同的兩條不同消息是非常困難的。稱爲強抗碰撞性
- 具備單向性
關於術語
單項散列函數又稱爲消息摘要函數,哈希函數或者雜湊函數
實際應用
- 檢測軟件是否篡改
- 基於口令的加密(PBE):原理是將口令和炎(僞隨機數)混合後計算其散列值,然後將這個散列值用作加密密鑰
- 消息認證碼:檢測並防止通信過程中得錯誤,篡改和僞裝
- 數字簽名
- 僞隨機數生成器
- 一次性口令
消息認證碼
消息的認證是指:“消息來自正確的發送者”。通過使用消息認證碼,我們就可以同時識別出篡改和僞裝,既可以確認消息完整性,也可以進行認證。
消息認證碼的輸入包括任意消息的長度和一個接受者和發送者之間的共享密鑰,輸出是固定長度,這個數據稱爲MAC值。
消息認證碼是一種與密鑰相關聯的單項散列函數。
如圖:
使用步驟:如圖
數字簽名
數字簽名就是將公鑰反過來用實現的。
公鑰加密就是用公鑰加密消息,用私鑰解密密文。
而數字簽名是用私鑰對消息生成簽名,傳輸數字簽名的密文,最後用公鑰解密驗證簽名。
如圖所示:
解釋一下:用私鑰加密所得的密文,只能用公鑰才能解密。這就是說,如果某個公鑰成功解密了密文,那就證明這段密文是由與他配對的私鑰進行加密所得的。
數字簽名方法
- 直接對消息簽名
-
對消息的散列值簽名
如圖:
通過RSA實現數字簽名
簽名 = 消息的D次方 mod N
D和N就是簽名者的私鑰
有簽名求得的消息 = 簽名的E次方 mod N
E和N就是簽名者的公鑰
數字簽名無法解決的問題
公鑰必須屬於真正的發送者。即使數字簽名算法再強大,如果你得到的公鑰是僞造的,那麼數字簽名也會完全失敗。我們需要使用一種社會性的基礎設施,即公鑰基礎設施。簡稱PKI。
見下文。
證書
公鑰證書和身份證,駕照很相似,裏面有姓名,證件號,地址等個人信息,以及屬於此人的公鑰,由認證機構施加數字簽名。只要看到公鑰證書,我們就可以知道認證機構認定該公鑰的確屬於此人。公鑰證書簡稱證書。
證書應用場景
如圖:
公鑰基礎設施(PKI)
公鑰基礎設施是爲了能夠更有效地運用公鑰而制定的一系列規範和規格的總稱。
PKI的組成要素
- 用戶———使用PKI的人
- 認證機構————頒發證書的人
- 倉庫————保存證書的數據庫
用戶
分兩種:1.一種是使用PKI註冊自己的公鑰的人。
2.另一種是使用已註冊的公鑰的人。
認證機構(CA)
認證機構接受對證書進行管理的人。認證機構具體行爲如下:
- 生成密鑰對
- 在註冊公鑰時對本人進行身份認證
- 生成並頒發證書
- 作廢證書
倉庫
保管證書的數據庫,也叫證書目錄
PKI組成要素
密鑰,隨機數與應用技術
什麼是密鑰
- 密鑰本身就是一個巨大的數字,數字大小不重要,重要的是密鑰空間的大小,也就是說可能出現密鑰的總數量。因爲密鑰空間越大,暴力破解就越困難。密鑰空間大小有密鑰長度決定。
- 密鑰與明文是等價的,假如明文具有100萬的價值,那麼這段密鑰也具有100萬的價值;假如明文值1億,密鑰也值1億。
- 不要使用自己開發的密碼算法進行加密,而是使用一個經過全世界密碼雪茄共同驗證的密碼算法。如果你使用了自己的密鑰,可能會出現你的密鑰被長時間破解了,你依然無法知曉。 信息的機密性不應該依賴密碼算法本身,而是依賴於妥善保管的密鑰。
Diffie-Hellman 密鑰交換
Diffie-Hellman 密鑰交換算法,通信雙方僅通過交換一些可以公開的信息就能夠生產出共享密鑰的
基於口令的密碼(PBE)
基於口令的密碼就是一種根據口令生成的密鑰並用該密鑰進行加密的方法。其中加密和解密使用同一種密鑰
PBE加密過程如圖:
3個步驟:
- 生成KEK
- 生成會話密鑰並加密
- 加密消息
PBE解密過程:
個人覺得是不是箭頭反了?
隨機數
隨機數的用途
-
生成密鑰
用於對稱密碼和消息認證碼 -
生成密鑰對
用於公鑰密碼和數字簽名 -
生成初始化向量(IV)
用於分組密碼的CBC,CFB和OFB模式 -
生成nonce
用於防禦重放攻擊以及分組密碼的CTR模式等 -
生成鹽
用於基於口令的密碼(PBE)等
其中生成密鑰和生成密鑰對是最重要的,即使密碼強度再高,只要攻擊者知道了密鑰,就會立刻變得形同虛設。因此我們需要用隨機數來生成密鑰,使之無法被攻擊者看穿。
隨機數的性質
- 隨機性
- 不可預測性
- 不可重現性
如圖
僞隨機數生成器
通過硬件生成的隨機數列是根據傳感器收集的熱量,聲音的變化等事實上是無法預測的。像這樣的設備就稱爲隨機數生成器。
而可以生成隨機數的軟件則稱爲僞隨機數生成器。因爲軟件無法生成真隨機數。
僞隨機數生成器具有“內部狀態”,並根據外部輸入的“種子”來生成僞隨機數列
僞隨機數生成器的內部狀態
僞隨機數生成器的內部狀態,是指僞隨機數生成器歲管理的內存中的數值。
當有一條僞隨機數的請求時,僞隨機數生成器會根據內存中的數值進行技術,並將結果輸出。隨後改變自己的內部狀態。因此,根據內部狀態計算僞隨機數的方法和改變內部狀態的方法組合起來,就是僞隨機數生成的算法。
僞隨機數生成器的種子
僞隨機數的種子是用來對僞隨機數生成器的內部狀態進行初始化。僞隨機數生成器是公開的,但種子是需要自己保密的。由於種子不可以被攻擊者知道,因此不可以使用容易被預測的值。
PGP---密碼技術的完美組合
用PGP加密
用PGP解密
用PGP生成數字簽名
PGP驗證數字簽名
PGP生成數字簽名並加密
PGP解密並驗證數字簽名