密碼學筆記

1 公鑰私鑰


2 公鑰加密

別人用A的公鑰加密傳輸?shù)男畔ⅲ挥蠥的私鑰可以解密。保證了傳輸?shù)男畔⒌陌踩浴?/p>

2 私鑰簽名

A用A的私鑰加密的信息,別人用A的公鑰才可以解密??梢宰C明這個信息一定是A傳輸而來的。

2 HTTPS的加密過程

共享秘鑰(對稱加密):速度快,但無法保證客戶端與服務器之間傳輸時秘鑰的安全性。

和公開密鑰(非對稱加密):安全,速度慢。

3 數(shù)據(jù)傳輸過程:

一、客戶端請求SSL(安全套接層)通信,報文中包含自己支持的SSL版本、加密算法等。

二、服務器應答,附帶自己的公鑰證書,協(xié)商定好的SSL版本、加密組件。

服務器端需要將自己的公鑰發(fā)送給客戶端,以供客戶端加密信息。

但客戶端無法確定得到的公鑰一定是目標服務器的,可能是中間人偽裝的。

服務器端公司請求數(shù)字證書認證機構(CA)對它的證書進行證明。CA 使用自己的秘鑰對服務器公司的公鑰進行加密。CA 將服務器公鑰相關的信息以明文形式寫入證書,并通過指紋算法(一個hash算法)對證書內容進行計算,得到指紋。然后,對指紋算法和指紋用私鑰進行加密,得到數(shù)字簽名。最后,將證書內容附帶數(shù)字簽名一起發(fā)布。

這樣,只要你的CA公鑰是合法的,能夠解開數(shù)字簽名的私鑰加密,且計算后指紋吻合,則可以保證服務器公鑰的合法性————是由CA認證的,且內容未被篡改過。

若是黑客的合法證書,那內容與我們的目的域名不一致,肯定不行。

三、客戶端根據(jù)自己本地的收信任的CA公鑰,解封服務器公鑰證書,得到服務器公鑰。客戶端生成一個隨機碼序列,用服務器公鑰加密后,發(fā)回服務器。

四、服務器用私鑰解密后,再加密將字符串傳回客戶端。

五、客戶端確認服務器身份后,生成對稱加密算法和共享秘鑰,使用服務器公鑰加密后,傳給服務器。

六、此后,雙方使用對稱加密算法加密數(shù)據(jù),進行傳輸。

上面過程中,一二用于獲得合法的服務器公鑰,三四用于確認服務器是否為真正私鑰持有者(因為,服務器公鑰誰都可以得到)。


1 對稱密碼


2 一次性密碼本

使用與明文比特序列一樣長的,真正的隨機數(shù)序列,進行加密,絕對安全,因為窮舉破譯后能得到整個秘鑰空間,毫無意義。

2 DES Date Encryption Standard

以分組為單位進行處理的密碼算法稱為 分組密碼。

3 加密結構

采用 Feistel網(wǎng)絡。

以 64 bit 為一個加密單位,首先分成兩部分,各32 bit 。

加密過程持續(xù)數(shù)輪,每輪中,使用子秘鑰與右側數(shù)據(jù)經過輪函數(shù)生成一個序列,然后與左側做 XOR 。

每輪結束后,左右兩側交換。

3 特點

加解密結構相同,輪數(shù)任意,函數(shù)任意。

2 三重DES triple-DES

使用秘鑰1、2、3對明文進行加密、解密、加密三個過程,稱為三重DES。

解密過程是為了兼容老版DES,如果1、2、3秘鑰相同,則成為了普通DES。

1、3秘鑰相同,2不同時,稱為DES-EDE2 。

1、2、3秘鑰不同,稱為DES-EDE3 。

2 AES advanced encryption standard

采用的是 Rijndael 算法,SPN結構。

3 加密結構

輸入分組為 128bit(16字節(jié)),秘鑰長度可以以 32bit 為單位,在128~256bit之間選擇。

該算法由多輪構成,10~14輪。

一輪中:

SubBytes,按字節(jié),將輸入分開,以每個字節(jié)為索引,查表找值,替換。

ShiftRows(平移行),按字節(jié),打亂上面的輸出。

MixColumns (混合列),按4個字節(jié),比特運算。

與輪秘鑰進行 XOR 。

1 模式


分組密碼:每次處理,特定長度的一塊數(shù)據(jù)。

流密碼:對數(shù)據(jù)流,連續(xù)處理,需要保持內部狀態(tài),記錄進度。

模式:密文有多個分組時,分組密碼的迭代方法。

模式種類

  • ECB模式 :electronic codebook mode

  • CBC模式 :cipher block chaining mode

  • CFB模式 :cipher feedback mode

  • OFB模式 :output feedback mode

  • CTR模式 :counter mode

2 ECB 電子密碼本模式

明文分組加密后,直接成為,密文分組。

特點:攻擊者無需破譯,即可操縱明文。

2 CBC 密文分組鏈接模式

3 加密結構

明文分組,與前一個密文分組XOR,加密得到自己的密文分組。

第一個分組的前一個密文分組,由 初始化向量(隨機比特序列) 代替。

加密時,需要從頭開始。因為需要與密文分組做 XOR 。

解密時,對密文分組解密,直接與密文分組 XOR 即可。

3 特點

同樣的明文分組,密文值可以不相等。

密文分組可以損壞,影響部分。

密文分組比特缺失,影響全部。

2 CFB 密文反饋模式

3 加密結構

前一個密文分組,通過加密算法得到一個比特序列,稱為 密鑰流 。

明文分組,與密鑰流 XOR,得到自己的密文分組。

解密時,加密算法對密文分組進行加密,得到密鑰流,與密文 XOR 可得到明文。

3 攻擊方式

重復攻擊:假設秘鑰相同。發(fā)送 4 個分組,攻擊者保存了后面3個。轉天,你又發(fā)送了 4 個分組,攻擊者將你后面三個替換,接收方解密后,只有 2 號分組有錯。

2 OFB 輸出反饋模式

3 加密結構

對于每個分組,初始化向量加密后,得到密鑰流。明文與密鑰流 XOR 后,得到密文。

3 特點

速度快,密鑰流可以提前生成,或者,生成秘鑰過程可以和 XOR 運算并行。

2 CTR 計數(shù)器模式

3 加密結構

對每個計數(shù)器加密得到密鑰流。密鑰流與明文分組 XOR ,得到密文分組。

計數(shù)器生成的數(shù),由一個隨機序列 nonce+從1開始的遞增數(shù)字組成。

對每個分組,計數(shù)器遞增后,加密,得到密鑰流。

3 特點

能夠以任意順序處理分組,因為加密時需要的初始數(shù)字序列能夠計算出來。

1 公鑰密碼


2 密鑰配送問題解決方法

3 事先共享密鑰

為了確保安全,有地理局限,與不同的人通信需要不同密鑰,共享繁瑣。

3 密鑰分配中心

每個員工有自己的密鑰,密鑰分配中心使用個人密鑰,包裹臨時會話密鑰,分配給各個員工使用。

2 RSA

3 加密原理

密文=明文的E次方 MOD N

E 和 N 是RSA加密用的密鑰,也就是說,E 和 N 的組合就是公鑰。

3 解密原理

明文=密文的D次方 MOD N

D 和 N 的組合就是私鑰。

3 生成密鑰對

4 求 N

尋兩個很大的質數(shù) p 和 q,相乘得到 N

4 求 L(僅在生成密鑰對過程中使用)

L為 p-1 和 q-1 的最小公倍數(shù)

4 求 E

隨機數(shù)生成器,不停地生成數(shù)字,直到滿足如下條件:

1 < E < L

E 和 L 的最大公約數(shù)為 1

4 求 D

根據(jù) E ,計算 D

1 < E < L

E × D MOD L = 1

保證 E 與 L 互質,則 D 一定存在。

3 數(shù)學原則

求對數(shù)很容易,求 離散對數(shù) 很困難

對一個大數(shù)字進行質因數(shù)分解,人類未找到高效算法

2 其它公鑰密碼

3 ElGamal方式

利用了 MOD N下,求離散對數(shù)的困難度

加密后,密文長度翻倍

3 Rabin方式

利用了 MOD N下,求平方根的困難度

3 橢圓曲線密碼 ECC

密碼實現(xiàn)通過 對橢圓曲線上的特定點進行特殊乘法。

利用了該種乘法的逆運算非常困難這一特性

1 單向散列函數(shù)


單向散列函數(shù) 又稱為,消息摘要函數(shù)、哈希函數(shù)、雜湊函數(shù)

輸入的消息 又稱為,原像

散列值 又稱為,消息摘要、指紋

完整性 又稱為,一致性

2 單向散列函數(shù)的性質

根據(jù)任意消息,計算出的散列值長度,固定

用時短

消息不同,散列值不同

消息不同,散列值相同的情況,稱為碰撞。

弱抗碰撞性:要找到,與該條消息散列值相同的,另外一條消息,非常困難。

強抗碰撞性:要找到,散列值相同的,兩條不同消息,非常困難。

密碼技術中的 單向散列函數(shù),需要強弱抗碰撞性兼?zhèn)洹?/p>

具備單向性

2 具體的單向散列函數(shù)

3 MD4、MD5

MD是消息摘要的意思

可以產生 128bit 的散列值,但它們的抗碰撞性已被攻破

3 SHA-1、SHA-256、SHA-384、SHA-512

SHA-1散列值長度為 160bit,強碰撞性已被攻破

其余的統(tǒng)稱為 SHA-2,散列值長度為各自后面的數(shù)字

3 RIPEMD-160

歐盟版本

3 AHS advanced hash standard 和 SHA-3

第三代 SHA

2 SHA-1

消息上限 2^64 bit。

3 填充

消息長度需要是 512bit 的整數(shù)倍。這樣的 512比特 稱為一個輸入分組。

過程:

消息末尾添加 1

然后添加 0,直到最后一個分組的 448比特 的位置

最后 64比特 需要保存原是消息的長度

3 計算W0~W79

對每個分組計算 80 個 32bit 的值。

過程:

將 512bit 分成 32bit × 16組,稱為 W0~W15

從15組中按規(guī)律取4組,進行 XOR 運算,結果循環(huán)左移 1 位,得到另外一組。如此反復,得到總共 80 組。

3 分組處理

ABCDE 五個 32bit 的緩沖區(qū),保存了 160bit 的消息內部狀態(tài)。

內部狀態(tài)與每個 512bit 的輸入分組混合,一共 80 個步驟。

單個步驟的處理過程異常復雜,每個步驟完成后,五個緩沖區(qū)都要循環(huán)移位,B緩沖區(qū)需要左移30bit,過程中,每個緩沖區(qū)都與輸入分組進行了運算。

最終得到 160bit 的最終內部狀態(tài)。

對單向散列函數(shù)的攻擊

暴力破解:暴力尋找與 1億元合同 散列值相同的文件

生日攻擊:準備兩份 散列值相同的 1億元合同

單向散列函數(shù)無法解決的問題

可以辨別 篡改,無法辨別 偽裝,因此還需要 認證技術

認證技術包括 消息驗證碼 和 數(shù)字簽名

消息驗證碼:可以向通信對象保證消息不被篡改

數(shù)字簽名:可以向任何人保證通信對象不被篡改

1 消息認證碼


message authentication code,簡稱 MAC。

相當于使用共享密鑰的單向散列函數(shù)

2 消息認證碼的應用實例

SWIFT:負責銀行間的交易,公鑰密碼使用前,都是人工配送密鑰的。

IPsec:對IP協(xié)議增加安全性,采用的是消息認證碼

SSL/TLS:網(wǎng)上購物等場景中所用協(xié)議。

2 HMAC Hash MAC

過程:

密鑰填充 至單向散列函數(shù)要求的輸入分組大小

填充后的密鑰 與 ipad(16進制的36不斷循環(huán))XOR,得到ipadkey

與 消息 組合,計算散列值

填充后的密鑰 與 opad(16進制的5C不斷循環(huán))XOR,得到opadkey

與 上面得到的散列值 組合,計算新的散列值,為最終的MAC值

2 消息認證無法解決的問題

對第三方證明

防止否認

因為知曉密鑰的只有兩個當事人,第三者無法確定能拿到合法的密鑰,無法自己計算合法MAC值

1 數(shù)字簽名


2 數(shù)字簽名的方法

RSA:利用質因數(shù)分解難度的那個

ElGamal:利用求離散對數(shù)的困難度的那個,數(shù)字簽名有漏洞,現(xiàn)僅用于公鑰密碼

DSA:Schnorr算法與ElGamal方式的變體,只能用于數(shù)字簽名

Rabin:利用了求MOD N中平方根的困難度,可用于數(shù)字簽名和公鑰密碼

1 證書


2 認證機構的 認證業(yè)務準則

例如,verisign公司的認證業(yè)務分為三個等級,等級越高,越嚴格

  • Class 1 郵箱認證

  • Class 2 通過第三方數(shù)據(jù)庫來確認本人身份

  • Class 3 通過當面認證和身份證明

2 證書標準規(guī)范

ITU 國際電信聯(lián)盟和 ISO 國際標準化組織制定的 X.509 規(guī)范如下

大體包含以下內容:

簽名前的證書——簽名對象的各種消息

數(shù)字簽名算法——簽名時所用的算法

數(shù)字簽名——得到的數(shù)字簽名

2 公鑰基礎設施 Public-Key Infrastructure

PKI :為了能有效使用公鑰而制定的一系列規(guī)范和規(guī)格

PKI 的組成要素如下

  • 用戶 —— 使用 PKI 的人

  • 認證機構 —— 頒發(fā)證書的人

  • 倉庫 —— 證書目錄

2 認證機構的工作

3 生成秘鑰對

兩種方法:一種是由認證機構生成,一種是由 PKI 用戶自行生成

3 注冊證書

3 作廢證書與CRL

認證機構有一個 CRL(認證作廢清單),具有數(shù)字簽名,記載了已經作廢的證書的編號。

2 證書的層級結構

認證時,從上(根證書)往下

1 密鑰


對于密鑰,關鍵的是 密鑰空間的大小

2 各類密鑰

DES 的密鑰 實質長度(即,除去校驗錯誤的比特后的長度)7字節(jié)

DES-EDE2 的實質長度 14字節(jié),DES-EDE3 的實質長度 21字節(jié)

AES 的密鑰長度可以從 128、192 和 256bit 當中選

2 不同的密鑰

3 會話密鑰和主密鑰

會話密鑰:每次通信中,僅使用一次的密鑰

主密鑰:一直被重復使用的密鑰

3 加密內容的密鑰和加密密鑰的密鑰

CEK:Contents Encrypting Key

KEK: Key Encrypting Key

2 密鑰的管理

各個步驟中的密鑰管理方法

3 生成密鑰

兩種方法:

用隨機數(shù)生成密鑰:使用具備不可預測性的偽隨機數(shù)生成器生成隨機數(shù)

用口令生成密鑰:一般使用,口令 + 一串稱為 salt 的隨機數(shù),得到他們的散列值作為密鑰(這種方法稱為:基于口令的密碼)

3 配送密鑰

事先共享

秘鑰分配中心

使用公鑰密鑰

Diffie-Hellman 密鑰交換

3 更新密鑰

密鑰更新:一種提高通信機密性的技術

原理:

使用 共享密鑰 進行通信時,定期改變密鑰。

雙方使用同樣的方法,對當前密鑰求 散列值,并作為下一個密鑰

優(yōu)點:

后向安全:防止破譯過去的內容

如果密鑰被竊聽者得到,他只能得到之后的消息,無法得到上一個密鑰,無法得到此前的消息

3 保存密鑰

對密鑰進行加密,然后保存

意義:

同時對多個密鑰進行加密,可以減少保存密鑰的數(shù)量

2 Diffie-Hellman密鑰交換

步驟:

3 雙方首先確定兩個質數(shù) P 和 G

P 為非常大的質數(shù),G 為 P 的生成元

3 甲方生成一個隨機數(shù) A,乙方生成一個隨機數(shù) B ,各自保密

3 甲方將 G^A MOD P 發(fā)給 B

目的為,將 隨機數(shù) A 的信息 含蓄地發(fā)給了 B

3 乙方將 G^B MOD P 發(fā)給 A

目的為,將 隨機數(shù) B 的信息 含蓄地發(fā)給了 A

3 甲方進行計算,得到密鑰

計算方法:密鑰 = (G ^ B MOD P) ^ A MOD P = G^(A × B) MOD P

3 乙方進行計算,得到密鑰

計算方法:密鑰 = (G ^ A MOD P) ^ B MOD P = G^(A × B) MOD P

2 生成元 G 的意義

對于一個質數(shù) P ,只有它的生成元在進行 G ^ x MOD P 時,結果能夠覆蓋 0 ~ P-1 的所有數(shù)字

2 基于口令的密碼 (PBE 基于口令的加密)

用途:用于安全的保存密鑰

由來:

一 生成會話密鑰 CEK ,加密消息

二 需要保密 會話密鑰CEK,使用 密鑰加密密鑰KEK 對會話密鑰進行保密

三 現(xiàn)在需要保密 KEK 這個密鑰,選擇使用口令生成這個 KEK

對 口令 + salt 求散列值,作為 KEK ,之后只用保存 salt 和 使用 KEK 加密后的會話密鑰 就好了,KEK也可以丟掉了

3 過程重點

保密的問題最終都歸結為了 安全保存密鑰,然而我們記不住密鑰。

于是,選擇單向散列函數(shù)對口令生成散列值,作為密鑰。

這個密鑰無需保存,我們可以通過口令隨時求得,口令也無法被反向推出,且口令方便記憶。

順帶,為了防止字典攻擊,生成口令散列值時,需要使用 口令 + salt(隨機數(shù)序列)

3 字典攻擊

事先 已準備好 候選列表 的攻擊方法

1 隨機數(shù)


2 隨機數(shù)的性質

隨機性

不可預測性

不可重見性

這三個性質,越往下越嚴格。分別稱為:

弱偽隨機數(shù)(不可用于密碼學)

強偽隨機數(shù)

真隨機數(shù)

3 偽隨機數(shù)生成器的種子

偽隨機數(shù)生成器是公開的,種子是保密的。

確保種子的不可預測性,更加容易些。

種子是用來對偽隨機數(shù)生成器的內部狀態(tài)進行初始化

2 具體的偽隨機數(shù)生成器

3 線性同余法

R1 = (A × R0 + C) MOD M

數(shù)據(jù)有限,不能用于密碼學

3 單向散列函數(shù)法

單向散列函數(shù)的單向性是支撐偽隨機數(shù)序列不可預測性的基礎

3 密碼法

利用 AES 等對稱密鑰對內部狀態(tài)進行加密

3 ANSI X9.17

從當前時間開始,利用加密算法求得加密后的時間的掩碼(因為密鑰未知,別人無法推測出掩碼信息)

與內部狀態(tài) XOR,加密后輸出,得到偽隨機數(shù)序列

對偽隨機數(shù)序列加密后,作為下一個內部狀態(tài)

1 PGP Pretty Good Privacy


針對極端情況的密碼軟件,具有全部功能。

PGP 通過信任網(wǎng)來判斷密鑰的合法性和可信度

1 SSL/TLS


2 TLS 傳輸層安全協(xié)議

TLS 由 TLS 記錄協(xié)議 和 TLS 握手協(xié)議 疊加而成。

3 TLS 記錄協(xié)議 負責底層加密

負責消息的 加密、壓縮 和 認證

3 TLS 握手協(xié)議 負責加密外的其他操作

握手協(xié)議

商定 客戶端和服務器 所用的加密算法和密鑰

密碼規(guī)格變更協(xié)議

負責 傳遞 變更密碼的信號

警告協(xié)議

發(fā)生錯誤時 通知對方

應用數(shù)據(jù)協(xié)議

傳輸數(shù)據(jù)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 《圖解密碼技術》一書介紹了很多關于密碼的知識,通讀一遍需要不少時間。為了方便學習,我對書中關鍵的部分進行了總...
    咖枯閱讀 7,534評論 1 25
  • 在深入學習區(qū)塊鏈時,不可避免的需要了解密碼學。區(qū)塊鏈算是對密碼學的一次整合運用,雖然并無太多創(chuàng)新的密碼算法,但也值...
    Kerwong閱讀 44,782評論 4 25
  • 1、加密方法分為兩大類。一類是單鑰加密(private key cryptography),還有一類是雙鑰加密(p...
    chengzhx76閱讀 817評論 0 49
  • 1. 加密方法可以分為兩大類。一類是單鑰加密(private key cryptography),還有一類叫做雙鑰...
    麥田里的野望閱讀 568評論 0 1
  • 對稱加密: DES DES是1977年美國聯(lián)邦信息處理標準中使用的一種對稱密碼技術,曾今被美國和其他國家政府銀行使...
    十三億少女夢丶閱讀 1,196評論 0 10

友情鏈接更多精彩內容