導航:首頁 > 文檔加密 > 密碼學和信息加密的復習資料

密碼學和信息加密的復習資料

發布時間:2023-03-02 01:32:04

Ⅰ 密碼學筆記

別人用A的公鑰加密傳輸的信息,只有A的私鑰可以解密。保證了傳輸的信息的安全性。

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

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

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

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

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

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

四、伺服器用私鑰解密後,再加密將字元串傳回客戶端。

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

六、此後,雙方使用對稱加密演算法加密數據,進行傳輸。

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

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

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

採用 Feistel網路。

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

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

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

加解密結構相同,輪數任意,函數任意。

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

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

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

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

採用的是 Rijndael 演算法,SPN結構。

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

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

一輪中:

SubBytes,按位元組,將輸入分開,以每個位元組為索引,查表找值,替換。

ShiftRows(平移行),按位元組,打亂上面的輸出。

MixColumns (混合列),按4個位元組,比特運算。

與輪秘鑰進行 XOR 。

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

流密碼:對數據流,連續處理,需要保持內部狀態,記錄進度。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

對每個分組,計數器遞增後,加密,得到密鑰流。

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

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

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

密文=明文的E次方 MOD N

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

明文=密文的D次方 MOD N

D 和 N 的組合就是私鑰。

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

L為 p-1 和 q-1 的最小公倍數

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

1 < E < L

E 和 L 的最大公約數為 1

根據 E ,計算 D

1 < E < L

E × D MOD L = 1

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

求對數很容易,求 離散對數 很困難

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

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

加密後,密文長度翻倍

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

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

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

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

輸入的消息 又稱為,原像

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

完整性 又稱為,一致性

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

用時短

消息不同,散列值不同

具備單向性

MD是消息摘要的意思

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

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

其餘的統稱為 SHA-2,散列值長度為各自後面的數字

歐盟版本

第三代 SHA

消息上限 2^64 bit。

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

過程:

消息末尾添加 1

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

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

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

過程:

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

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

ABCDE 五個 32bit 的緩沖區,保存了 160bit 的消息內部狀態。

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

最終得到 160bit 的最終內部狀態。

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

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

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

認證技術包括 消息驗證碼 和 數字簽名

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

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

message authentication code,簡稱 MAC。

相當於 使用共享密鑰的單向散列函數

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

IPsec:對IP協議增加安全性,採用的是消息認證碼

SSL/TLS:網上購物等場景中所用協議。

過程:

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

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

與 消息 組合,計算散列值

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

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

對第三方證明

防止否認

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

RSA:利用質因數分解難度的那個

ElGamal:利用求離散對數的困難度的那個,數字簽名有漏洞,現僅用於公鑰密碼

DSA:Schnorr演算法與ElGamal方式的變體,只能用於數字簽名

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

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

ITU 國際電信聯盟和 ISO 國際標准化組織制定的 X.509 規范如下

大體包含以下內容:

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

數字簽名演算法——簽名時所用的演算法

數字簽名——得到的數字簽名

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

PKI 的組成要素如下

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

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

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

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

DES 的密鑰 實質長度(即,除去校驗錯誤的比特後的長度)7位元組

DES-EDE2 的實質長度 14位元組,DES-EDE3 的實質長度 21位元組

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

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

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

CEK:Contents Encrypting Key

KEK: Key Encrypting Key

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

兩種方法:

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

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

事先共享

秘鑰分配中心

使用公鑰密鑰

Diffie-Hellman 密鑰交換

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

原理:

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

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

優點:

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

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

意義:

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

步驟:

P 為非常大的質數,G 為 P 的 生成元

目的為,將 隨機數 A 的信息 含蓄地發給了 B

目的為,將 隨機數 B 的信息 含蓄地發給了 A

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

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

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

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

由來:

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

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

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

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

於是,選擇單向散列函數對口令生成散列值,作為密鑰。

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

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

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

隨機性

不可預測性

不可重見性

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

弱偽隨機數(不可用於密碼學)

強偽隨機數

真隨機數

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

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

種子是用來對偽隨機數生成器的 內部狀態進行初始化

R1 = (A × R0 + C) MOD M

數據有限,不能用於密碼學

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

利用 AES 等對稱密鑰對內部狀態進行加密

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

與內部狀態 XOR,加密後輸出, 得到偽隨機數序列

對偽隨機數序列加密後,作為 下一個內部狀態

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

TLS 由 TLS 記錄協議 和 TLS 握手協議 疊加而成。

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

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

負責 傳遞 變更密碼的信號

發生錯誤時 通知對方

傳輸數據

Ⅱ 密碼學部分 數據加密標准(DES)相關知識來回答,越詳細約好

額……我該說啥呢……
首先給你一個網址看看:http://kweenzy.blog.51cto.com/1093584/1008506
嘛……這個就是我本人的博客,所以不算抄襲哈……

1、見鏈接中【輪結構】下面的圖,每一個方框的右下角都寫了諸如「56bit」的字樣(1bit就是1位)……
2、見整個文章的中部位置紅色字體「密鑰的處理流程……」下面所述……
3、和4、……請參見原文然後想一下該怎麼回答……不過S盒的工作原理是啥我還真不知道……
5、DES的安全弱點啊……最顯而易見的是有弱密鑰,但是數量很少,在每次產生子密鑰的時候稍微做一下檢查就可以解決這個問題,貌似也說不上什麼弱點?以及,S盒是整個運算里唯一的一個非線性運算,其他的都是線性運算,線性運算就表示可以進行反推,所以S盒的安全性非常重要!但是S盒是完全公開的啊……更神奇的是研究了半天發現了一些S盒的規律但是根據發現出來的規律編程重新生成S盒的話,安全性沒有這個S盒高!另外,其實整個DES的加密過程經過了NSA(美國國家安全局)的修改,他們還拒絕提供為什麼修改的信息,所以很多人擔心其實NSA可以分分鍾破解DES……其他的安全弱點……記不清了……回頭找資料來補充回答哈……
6、我靠不會描述!……騷年你自己加油看完資料再思考怎麼進行數學描述……
7、密鑰的使用順序是相反的……【其實好像密鑰進行左循環移位時,加密密鑰第一輪移位是1位,解密密鑰第一輪是0位……
8、騷年你自己加油畫出示意圖……【EDE就是先加密再解密再加密,3就是使用三個不同的密鑰K1K2K3……

Ⅲ 密碼學基礎

​ 密碼學是研究如何保護信息安全性的一門科學,涉及數學、物理、計算機、資訊理論、編碼學、通訊技術等學科,已經在生活中得到廣泛應用。

​ 密碼學組成分支分為編碼學和密碼分析學。密碼編碼學主要研究對信息進行編碼,實現信息的隱蔽。密碼分析學主要研究加密消息的破譯或消息的偽造。二者相互獨立,又相互依存,在矛盾與斗爭中發展,對立統一。

​ 密碼學的發展歷史大致可劃分為三個階段:

機密性

僅有發送方和指定的接收方能夠理解傳輸的報文內容。竊聽者可以截取到加密了的報文,但不能還原出原來的信息,即不能得到報文內容。

鑒別

發送方和接收方都應該能證實通信過程所涉及的另一方, 通信的另一方確實具有他們所聲稱的身份。即第三者不能冒充跟你通信的對方,能對對方的身份進行鑒別。

報文完整性

即使發送方和接收方可以互相鑒別對方,但他們還需要確保其通信的內容在傳輸過程中未被改變。

不可否認性

如果人們收到通信對方的報文後,還要證實報文確實來自所宣稱的發送方,發送方也不能在發送報文以後否認自己發送過報文。

​ 密碼體制是一個使通信雙方能進行秘密通信的協議。密碼體制由五要素組成,P(Plaintext明文集合),C(Ciphertext密文集合),K(Key密鑰集合),E(Encryption加密演算法),D(Decryption解密演算法),且滿足如下特性: 

<script type="math/tex; mode=display" id="MathJax-Element-1"> p ∈ P </script>

<script type="math/tex; mode=display" id="MathJax-Element-2"> c ∈ C </script>

<script type="math/tex; mode=display" id="MathJax-Element-3"> k1 ∈ K, k2 ∈ K </script>

<script type="math/tex; mode=display" id="MathJax-Element-6"> E_{k1}(p) = c,D_{k2}(c) = p </script>

​ 無論是用手工或機械完成的古典密碼體制,還是採用計算機軟體方式或電子電路的硬體方式完成的現代密碼體制,其加解密基本原理都是一致的。都是基於對明文信息的替代或置換,或者是通過兩者的結合運用完成的。

​ 替代(substitution cipher):有系統地將一組字母換成其他字母或符號;

​ 例如『help me』變成『ifmq nf』(每個字母用下一個字母取代)。

​ 置換(Transposition cipher):不改變字母,將字母順序重新排列;

​ 例如『help me』變成『ehpl em』(兩兩調換位置)。

​ 密碼分析者通常利用以下幾種方法對密碼體制進行攻擊:

​ 已知明文分析法: 

知道一部分明文和其對應的密文,分析發現秘鑰。

​ 選定明文分析法: 

設法讓對手加密自己選定的一段明文,並獲得對應的密文,在此基礎上分析發現密鑰。

​ 差別比較分析法: 

設法讓對方加密一組差別細微的明文,通過比較他們加密後的結果來分析秘鑰。

​ 無條件安全: 

無論破譯者的計算能力有多強,無論截獲多少密文,都無法破譯明文。

​ 計算上安全:

​ 破譯的代價超出信息本身的價值,破譯所需的時間超出信息的有效期。

​ 任何密碼系統的應用都需要在安全性和運行效率之間做出平衡,密碼演算法只要達到計算安全要求就具備了實用條件,並不需要實現理論上的絕對安全。1945年美國數學家克勞德·E·香農在其發布的《密碼學的數學原理》中,嚴謹地證明了一次性密碼本或者稱為「弗納姆密碼」(Vernam)具有無條件安全性。但這種絕對安全的加密方式在實際操作中需要消耗大量資源,不具備大規模使用的可行性。事實上,當前得到廣泛應用的密碼系統都只具有計算安全性。

​ 一個好的密碼體制應該滿足以下兩個條件:

在已知明文和密鑰的情況下,根據加密演算法計算密文是容易的;在已知密文和解密密鑰的情況下,計算明文是容易的。

在不知道解密密鑰的情況下,無法從密文計算出明文,或者從密文計算出明文的代價超出了信息本身的價值。

常見的密碼演算法包括:

​ 對稱密碼體制也稱單鑰或私鑰密碼體制,其加密密鑰和解密密鑰相同,或實質上等同, 即從一個易於推出另一個。

​ 優點:保密性高,加密速度快,適合加密大量數據,易於通過硬體實現; 

缺點:秘鑰必須通過安全可靠的途徑傳輸,秘鑰的分發是保證安全的關鍵因素;

​ 常見對稱密碼演算法:DES (密鑰長度=56位)、3DES( 三個不同的密鑰,每個長度56位)、AES(密鑰長度128/192/256可選)、IDEA(密鑰長度128位)、RC5(密鑰長度可變)。

​ 根據加密方式的不同,對稱密碼又可以分為分組密碼和序列密碼。

​ 將明文分為固定長度的組,用同一秘鑰和演算法對每一塊加密,輸出也是固定長度的密文,解密過程也一樣。

​ 又稱為流密碼,每次加密一位或一位元組的明文,通過偽隨機數發生器產生性能優良的偽隨機序列(密鑰流),用該序列加密明文消息序列,得到密文序列,解密過程也一樣。

​ 非對稱密碼體制又稱雙鑰或公鑰密碼體制,其加密密鑰和解密密鑰不同,從一個很難推出另一個。其中的加密密鑰可以公開,稱為公開密鑰,簡稱公鑰;解密密鑰必須保密,稱為私有密鑰,簡稱私鑰。

​ 優點:密鑰交換可通過公開信道進行,無需保密。既可用於加密也可用於簽名。 

缺點:加密速度不如對稱密碼,不適合大量數據加密,加密操作難以通過硬體實現。

​ 非對稱密碼體制不但賦予了通信的保密性,還提供了消息的認證性,無需實現交換秘鑰就可通過不安全信道安全地傳遞信息,簡化了密鑰管理的工作量,適應了通信網的需要,為保密學技術應用於商業領域開辟了廣闊的前景。

​ 常見的非對稱密碼演算法:RSA(基於大整數質因子分解難題)、ECC(基於橢圓曲線離散對數難題)。

對非對稱密碼的誤解 

非對稱密碼比對稱密碼更安全? 

任何一種演算法的安全都依賴於秘鑰的長度、破譯密碼的工作量,從抗分析的角度看,沒有哪一方更優越;

​ 非對稱密碼使對稱密碼成為過時技術? 

公鑰演算法很慢,一般用於密鑰管理和數字簽名,對稱密碼將長期存在,實際工程中採用對稱密碼與非對稱密碼相結合。

​ 哈希函數將任意長的消息映射為一個固定長度的散列值,也稱消息摘要。消息摘要可以作為認證符,完成消息認證。 

哈希是單向函數,從消息摘要來推理原消息是極為困難的。哈希函數的安全性是由發生碰撞的概率決定的。如果攻擊者能輕易構造出兩個不同的消息具有相同的消息摘要,那麼這樣的哈希函數是不可靠的。

​ 常見的哈希函數有:MD5,SHA1,HMAC。

​ 數字簽名是公鑰密碼的典型應用,可以提供和現實中親筆簽名相似的效果,在技術上和法律上都有保證。是網路環境中提供消息完整性,確認身份,保證消息來源(抗抵賴性)的重要技術。

​ 數字簽名與驗證過程:

​ 發送方用哈希函數從報文文本中生成一個128位的散列值(或報文摘要),發送方用自己的私鑰對這個散列值進行加密來形成自己的數字簽名。然後,這個數字簽名將作為報文的附件和報文一起發送給接收方。接收方收到報文後,用同樣的哈希函數從原始報文中計算出散列值(或報文摘要),接著再用發送方的公鑰來對報文附加的數字簽名進行解密得出另一個散列值,如果兩個散列值相同,那麼接收方就能確認該數字簽名是發送方的。通過數字簽名能夠實現消息的完整性和不可抵賴性。 

​ 在網路安全中,密鑰的地位舉足輕重

。如何安全可靠、迅速高效地分配密鑰、管理密鑰一直是密碼學領域中的重要問題。

​ 密鑰生成可以通過在線或離線的交互協商方式實現,如密碼協議等 。密鑰長度應該足夠長。一般來說,密鑰長度越大,對應的密鑰空間就越大,攻擊者使用窮舉猜測密碼的難度就越大。選擇密鑰時,應該避免選擇弱密鑰,大部分密鑰生成演算法採用隨機過程或偽隨機過程生成密鑰。

​ 採用對稱加密演算法進行保密通信,需要共享同一密鑰。通常是系統中的一個成員先選擇一個秘密密鑰,然後將它傳送另一個成員或別的成員。X9.17標准描述了兩種密鑰:密鑰加密密鑰和數據密鑰。密鑰加密密鑰加密其它需要分發的密鑰;而數據密鑰只對信息流進行加密。密鑰加密密鑰一般通過手工分發。為增強保密性,也可以將密鑰分成許多不同的部分然後用不同的信道發送出去。

​ 密鑰附著一些檢錯和糾錯位來傳輸,當密鑰在傳輸中發生錯誤時,能很容易地被檢查出來,並且如果需要,密鑰可被重傳。接收端也可以驗證接收的密鑰是否正確。發送方用密鑰加密一個常量,然後把密文的前2-4位元組與密鑰一起發送。在接收端,做同樣的工作,如果接收端解密後的常數能與發端常數匹配,則傳輸無錯。

​ 當密鑰需要頻繁的改變時,頻繁進行新的密鑰分發的確是困難的事,一種更容易的解決辦法是從舊的密鑰中產生新的密鑰,有時稱為密鑰更新。可以使用單向函數進行更新密鑰。如果雙方共享同一密鑰,並用同一個單向函數進行操作,就會得到相同的結果。

​ 密鑰可以存儲在腦子、磁條卡、智能卡中。也可以把密鑰平分成兩部分,一半存入終端一半存入ROM密鑰。還可採用類似於密鑰加密密鑰的方法對難以記憶的密鑰進行加密保存。

​ 密鑰的備份可以採用密鑰託管、秘密分割、秘密共享等方式。

​ 密鑰託管:

​ 密鑰託管要求所有用戶將自己的密鑰交給密鑰託管中心,由密鑰託管中心備份保管密鑰(如鎖在某個地方的保險櫃里或用主密鑰對它們進行加密保存),一旦用戶的密鑰丟失(如用戶遺忘了密鑰或用戶意外死亡),按照一定的規章制度,可從密鑰託管中心索取該用戶的密鑰。另一個備份方案是用智能卡作為臨時密鑰託管。如Alice把密鑰存入智能卡,當Alice不在時就把它交給Bob,Bob可以利用該卡進行Alice的工作,當Alice回來後,Bob交還該卡,由於密鑰存放在卡中,所以Bob不知道密鑰是什麼。

​ 秘密分割:

​ 秘密分割把秘密分割成許多碎片,每一片本身並不代表什麼,但把這些碎片放到一塊,秘密就會重現出來。

​ 秘密共享:

​ 將密鑰K分成n塊,每部分叫做它的「影子」,知道任意m個或更多的塊就能夠計算出密鑰K,知道任意m-1個或更少的塊都不能夠計算出密鑰K。秘密共享解決了兩個問題:一是若密鑰偶然或有意地被暴露,整個系統就易受攻擊;二是若密鑰丟失或損壞,系統中的所有信息就不能用了。

​ 加密密鑰不能無限期使用,有以下有幾個原因:密鑰使用時間越長,它泄露的機會就越大;如果密鑰已泄露,那麼密鑰使用越久,損失就越大;密鑰使用越久,人們花費精力破譯它的誘惑力就越大——甚至採用窮舉攻擊法。

​ 不同密鑰應有不同有效期。數據密鑰的有效期主要依賴數據的價值和給定時間里加密數據的數量。價值與數據傳送率越大所用的密鑰更換越頻繁。如密鑰加密密鑰無需頻繁更換,因為它們只是偶爾地用作密鑰交換,密鑰加密密鑰要麼被記憶下來,要麼保存在一個安全地點,丟失該密鑰意味著丟失所有的文件加密密鑰。

​ 公開密鑰密碼應用中的私鑰的有效期是根據應用的不同而變化的。用作數字簽名和身份識別的私鑰必須持續數年(甚至終身),用作拋擲硬幣協議的私鑰在協議完成之後就應該立即銷毀。即使期望密鑰的安全性持續終身,兩年更換一次密鑰也是要考慮的。舊密鑰仍需保密,以防用戶需要驗證從前的簽名。但是新密鑰將用作新文件簽名,以減少密碼分析者所能攻擊的簽名文件數目。

​ 如果密鑰必須替換,舊鑰就必須銷毀,密鑰必須物理地銷毀。

​ PKI是一個利用公鑰加密技術為密鑰和證書的管理,所設計的組件、功能子系統、操作規程等的集合,它的主要任務是管理密鑰和證書,為網路用戶建立安全通信信任機制。

​ 數字證書是一個包含用戶身份信息、公鑰信息、證書認證中心(CA)數字簽名的文件。

​ 作用:數字證書是各類終端實體和最終用戶在網上進行信息交流及商業活動的身份證明,在電子交易的各個緩解,交易的各方都需要驗證對方數字證書的有效性,從而解決相互間的信任問題。

​ CA全稱Certificate Authentication,是具備權威性的數字證書申請及簽發機構。

​ CA作為PKI的核心部分,主要由注冊伺服器組、證書申請受理和審核機構、認證中心伺服器三者組成。

​ 注冊伺服器:通過 Web Server 建立的站點,可為客戶提供24×7 不間斷的服務。客戶在網上提出證書申請和填寫相應的證書申請表。

​ 證書申請受理和審核機構:負責證書的申請和審核。

認證中心伺服器:是數字證書生成、發放的運行實體,同時提供發放證書的管理、證書廢止列表(CRL)的生成和處理等服務。

​ 通過CA可以實現以下功能:

​ 1. 接收驗證最終用戶數字證書的申請; 

2. 確定是否接受最終用戶數字證書的申請和審批; 

3. 向申請者頒發、拒絕頒發數字證書; 

4. 接收、處理最終用戶數字證書的更新; 

5. 接受最終用戶數字證書的查詢、撤銷; 

6. 產生和發布CRL(證書廢止列表); 

7. 數字證書的歸檔; 

8. 密鑰歸檔; 

9. 歷史數據歸檔;

五、量子密碼

5.1 量子計算

​ 由於量子計算技術取得了出人意料的快速發展,大量僅能抵禦經典計算機暴力破解的密碼演算法面臨被提前淘汰的困境 。

​ 非對稱密碼系統有效解決了對稱密碼面臨的安全密鑰交換問題,因而廣泛應用於公鑰基礎設施、數字簽名、聯合授權、公共信道密鑰交換、安全電子郵件、虛擬專用網以及安全套接層等大量網路通信活動之中。不幸的是,隨著量子計算的發展,包括RSA密碼、ECC密碼以及DH密鑰交換技術等非對稱密碼演算法已經從理論上被證明徹底喪失了安全性。相對於對稱密碼系統還可以採取升級措施應對量子威脅,非對稱密碼系統必須採取全新方法進行重建 。

5.2 量子密碼

​ 量子密碼是以量子力學和密碼學為基礎,利用量子物理學中的原理實現密碼體制的一種新型密碼體制,與當前大多使用的經典密碼體制不一樣的是,量子密碼利用信息載體的物理屬性實現。目前量子密碼用於承載信息的載體包括光子、壓縮態光信號、相干態光信號等。

​ 由於量子密碼體制的理論基礎是量子物理定理,而物理定理是物理學家經過多年的研究與論證得出的結論,有可靠的理論依據,且不論在何時都是不會改變的,因此,理論上,依賴於這些物理定理的量子密碼也是不可攻破的,量子密碼體制是一種無條件安全的密碼體制。

Ⅳ 【密碼學筆記】第3部分 對稱密碼

跟諸位大牛相比,筆者閱歷尚淺、經驗不足,筆記中若有錯誤,還需繼續修正與增刪。歡迎大家的批評與指正。

查看上一篇請點擊以下鏈接: 【密碼學筆記】第2部分 歷史上的密碼

1. XOR運算

2. 一次性密碼本

3. 對稱密碼演算法

    3.1 DES

    3.2 三重DES

    3.3 AES

    3.4 Rijndael

4. 對稱密碼的選擇

5. 對稱密碼的評價

參考書目

XOR運算,又稱為 異或 運算,運算結果是 同0異1 。

對同一個比特序列進行兩次XOR之後就會回到最初的狀態,因此XOR運算可用於對稱密碼的加密和解密。

一次性密碼本(又稱為 維納密碼 )是一種非常簡單的密碼,它的原理是「 將明文與一串隨機的比特序列進行XOR運算 」。

一次性密碼本是無法破譯的。 這是因為在對它嘗試解密的過程中,所有的排列組合都會出現,既會包含規則字元串,也會包含英文單詞,還會包含亂碼。由於明文中所有可能的排列組合都會出現,因此 我們無法判斷其中哪一個才是正確的明文 。

一次性密碼本是一種非常不實用的密碼。 原因如下:

a. 密鑰的配送 。( 最大的問題 )如果能夠有一種方法將密鑰安全地發送出去,那麼就可以用同樣的方法安全地發送明文。

b. 密鑰的保存 。 密鑰的長度必須和明文的長度相等。 如果能夠有辦法安全保存與明文一樣長的密鑰,那就有辦法安全保存明文本身。

c. 密鑰的重用 。在一次性密碼本中絕對不能重用過去用過的隨機比特序列,因為作為密鑰的比特序列一旦泄露,過去所有的機密通信內容將全部被解密。

d. 密鑰的同步 。在通信過程中,發送者和接收者的密鑰的比特序列不允許有任何錯位,否則錯位的比特後的所有信息都將無法解密。

e. 密鑰的生成 。一次性密碼本需要生成大量的隨機數,這里的隨機數並不是通過計算機程序生成的偽隨機數,而必須是無重現性的真正隨機數。

DES是一種將64比特的明文加密成64比特的密文的對稱密碼演算法,它的密鑰長度是56比特。

DES是以64比特的明文(比特序列)為一個單位來進行加密的,這個64比特的單位稱為 分組 。以分組為單位進行處理的密碼演算法稱為 分組密碼 。

DES每次只能加密64比特的數據,如果要加密的明文比較長,就需要對DES加密進行迭代,而迭代的具體方式就稱為 模式(mode) 。

DES的基本結構又稱為 Feistel網路 ,這一結構不僅被用於DES,在其他很多密碼演算法中也有應用。在Feistel網路中,加密的各個步驟稱為 輪(round) ,整個加密過程就是進行若干次輪的循環。下圖展現的是Feistel網路中一輪的計算流程。DES是一種16輪循環的Feistel網路。

一輪的具體計算步驟 如下:

a. 將輸入的數據等分為左右兩部分;

b. 將輸入的右側直接發送到輸出的右側;

c. 將輸入的右側發送到輪函數;

d. 輪函數根據右側數據和子密鑰,計算出一串看上去是隨機的比特序列;

e. 將上一步得到的比特序列與左側數據進行XOR運算,並將結果作為加密後的左側。

我們需要用不同的子密鑰對一輪的處理重復若干次,並在每兩輪處理之間將左側和右側的數據對調。

Feistel網路的解密操作只要按照相反的順序來使用子密鑰就可以完成了。

Feistel網路的性質 :

a. 輪數可以任意增加;

b. 加密時無論使用任何函數作為輪函數都可以正確解密(即使該函數不存在反函數);

c. 加密和解密可以用完全相同的結構來實現。

綜上所述,無論是任何輪數、任何輪函數,Feistel網路都可以 用相同的結構實現加密和解密 ,且加密的結果必定能夠正確解密。

三重DES是為了增加DES的強度,將DES重復3次所得到的一種密碼演算法,也稱為 TDEA ,通常縮寫為 3DES 。

明文經過三次DES處理才能變成最後的密文,由於DES密鑰的長度實質上是56比特,因此三重DES的密鑰長度就是168比特。

三重DES並不是進行三次DES加密,而是 加密→解密→加密 的過程,目的是 讓三重DES能夠兼容普通的DES ,當所有密鑰都相同時,三重DES也就等同於普通的DES。

盡管三重DES目前還被銀行等機構使用,但其處理速度不高,除了特別重視向下兼容性的情況以外,很少被用於新的用途。

AES是取代其前任標准(DES)而成為新標準的一種對稱密碼演算法。全世界的企業和密碼學家提交了多個對稱密碼演算法作為AES的候選,最終選出了一種名為 Rijndael 的對稱密碼演算法,並將其確定為AES。

AES的選拔並不僅僅考慮一種演算法是否存在弱點,演算法的速度、實現的容易性等也都在考慮范圍內。此外,這種演算法還必須能夠在各種平台上有效工作。

Rijndael是由比利時密碼學家設計的 分組密碼演算法 ,被選為新一代的標准密碼演算法——AES。

和DES一樣,Rijndael演算法也是由多個 輪 構成的,其中每一輪分為 SubBytes 、 ShiftRows 、 MixColumns 和 AddRoundKey 共4個步驟。DES使用Feistel網路作為其基本結構,而Rijndael使用的是 SPN結構 。

加密過程 :

a. 首先,需要 逐個位元組 地對16位元組的輸入數據進行SubBytes處理,即以每個位元組的值(0~255)為索引,從一張擁有256個值的 替換表 (S-Box)中查找出對應值( 類似於簡單替換密碼 )。

b. 進行ShiftRows處理,即以4位元組為單位的 行(row) 按照一定的規則向左平移,且每一行平移的位元組數是不同的。

c. 進行MixColumns處理,即對一個4位元組的值進行比特運算,將其變為另外一個4位元組值。

d. 最後,將MixColumns的輸出與輪密鑰進行 XOR ,即進行AddRoundKey處理。至此,Rijndael的一輪就結束了。實際上,在Rijndael中需要重復進行10~14輪計算。

在SPN結構中, 輸入的所有比特在一輪中都會被加密 。和每一輪都只加密一半輸入的比特的Feistel網路相比,這種方式的優勢在於 加密所需要的輪數更少 。此外,這種方式還有一個優勢,即 SubBytes、ShiftRows和MixColumns可以分別以位元組、行和列為單位進行並行計算 。

在Rijndael的 加密 過程中,每一輪所進行的處理為:

SubBytes→ShiftRows→MixColumns→AddRoundKey

而在 解密 時,則是按照相反的順序來進行的,即:

AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes

解密過程 :

Rijndael演算法背後有著 嚴謹的數學結構 ,即從明文到密文的計算過程可以全部用公式來表達,這是以前任何密碼演算法都不具備的性質。如果Rijndael的公式能夠通過數學運算來求解,那也就意味著Rijndael能夠通過數學方法進行破譯,這也為新的攻擊方式的產生提供了可能。

(1) 因為現在用暴力破解法已經能夠在現實的時間內完成對DES的破譯, DES不應再用於任何新的用途 。但是也需要保持與舊版本軟體的兼容性。

(2) 盡管在一些重視兼容性的環境中會使用三重DES,但 我們也沒有理由將三重DES用於新的用途 ,它會逐漸被AES所取代。

(3) 現在應該使用的演算法是AES(Rijndael) ,因為它安全、快速,而且能夠在各種平台上工作。

(4) AES最終候選演算法應該可以作為AES的備份 ,因為這些密碼演算法也都經過了嚴格的測試,且沒有發現任何弱點。

(5) 一般來說, 我們不應該使用任何自製的密碼演算法 ,而是應該使用AES。

優點 :

使用一種密鑰空間巨大,且在演算法上沒有弱點的對稱密碼,就可以通過密文來確保明文的機密性。 巨大的密鑰空間能夠抵禦暴力破解,演算法上沒有弱點可以抵禦其他類型的攻擊。

不足 :

a. 用對稱密碼進行通信時,還會出現 密鑰的配送問題 ,即如何將密鑰安全地發送給接受者。為了解決密鑰配送問題,需要 公鑰密碼技術 。

b. 盡管使用對稱密碼可以確保機密性,但僅憑這一點還並不能完全放心。 例如發送者可能發送偽造的密文,並利用解密時返回的錯誤來盜取信息。

衷心感謝您的閱讀。

查看下一篇請點擊以下鏈接: 【密碼學筆記】第4部分 分組密碼的模式

Ⅳ 密碼學基礎(二):對稱加密

加密和解密使用相同的秘鑰稱為對稱加密。

DES:已經淘汰
3DES:相對於DES有所加強,但是仍然存在較大風險
AES:全新的對稱加密演算法。

特點決定使用場景,對稱加密擁有如下特點:

速度快,可用於頻率很高的加密場景。

使用同一個秘鑰進行加密和解密。

可選按照128、192、256位為一組的加密方式,加密後的輸出值為所選分組位數的倍數。密鑰的長度不同,推薦加密輪數也不同,加密強度也更強。

例如:
AES加密結果的長度由原字元串長度決定:一個字元為1byte=4bit,一個字元串為n+1byte,因為最後一位為'',所以當字元串長度小於等於15時,AES128得到的16進制結果為32位,也就是32 4=128byte,當長度超過15時,就是64位為128 2byte。

因為對稱加密速度快的特點,對稱加密被廣泛運用在各種加密場所中。但是因為其需要傳遞秘鑰,一旦秘鑰被截獲或者泄露,其加密就會玩完全破解,所以AES一般和RSA一起使用。

因為RSA不用傳遞秘鑰,加密速度慢,所以一般使用RSA加密AES中鎖使用的秘鑰後,再傳遞秘鑰,保證秘鑰的安全。秘鑰安全傳遞成功後,一直使用AES對會話中的信息進行加密,以此來解決AES和RSA的缺點並完美發揮兩者的優點,其中相對經典的例子就是HTTPS加密,後文會專門研究。

本文針對ECB模式下的AES演算法進行大概講解,針對每一步的詳細演算法不再該文討論范圍內。

128位的明文被分成16個位元組的明文矩陣,然後將明文矩陣轉化成狀態矩陣,以「abcdefghijklmnop」的明文為例:

同樣的,128位密鑰被分成16組的狀態矩陣。與明文不同的是,密文會以列為單位,生成最初的4x8x4=128的秘鑰,也就是一個組中有4個元素,每個元素由每列中的4個秘鑰疊加而成,其中矩陣中的每個秘鑰為1個位元組也就是8位。

生成初始的w[0]、w[1]、w[2]、w[3]原始密鑰之後,通過密鑰編排函數,該密鑰矩陣被擴展成一個44個組成的序列W[0],W[1], … ,W[43]。該序列的前4個元素W[0],W[1],W[2],W[3]是原始密鑰,用於加密運算中的初始密鑰加,後面40個字分為10組,每組4個32位的欄位組成,總共為128位,分別用於10輪加密運算中的輪密鑰加密,如下圖所示:

之所以把這一步單獨提出來,是因為ECB和CBC模式中主要的區別就在這一步。

ECB模式中,初始秘鑰擴展後生成秘鑰組後(w0-w43),明文根據當前輪數取出w[i,i+3]進行加密操作。

CBC模式中,則使用前一輪的密文(明文加密之後的值)和當前的明文進行異或操作之後再進行加密操作。如圖所示:

根據不同位數分組,官方推薦的加密輪數:

輪操作加密的第1輪到第9輪的輪函數一樣,包括4個操作:位元組代換、行位移、列混合和輪密鑰加。最後一輪迭代不執行列混合。

當第一組加密完成時,後面的組循環進行加密操作知道所有的組都完成加密操作。

一般會將結果轉化成base64位,此時在iOS中應該使用base64編碼的方式進行解碼操作,而不是UTF-8。

base64是一種編碼方式,常用語傳輸8bit位元組碼。其編碼原理如下所示:

將原數據按照3個位元組取為一組,即為3x8=24位

將3x8=24的數據分為4x6=24的數據,也就是分為了4組

將4個組中的數據分別在高位補上2個0,也就成了8x4=32,所以原數據增大了三分之一。

根據base64編碼表對數據進行轉換,如果要編碼的二進制數據不是3的倍數,最後會剩下1個或2個位元組怎麼辦,Base64用x00位元組在末尾補足後,再在編碼的末尾加上1個或2個=號,表示補了多少位元組,解碼的時候,會自動去掉。

舉個栗子:Man最後的結果就是TWFu。

計算機中所有的數據都是以0和1的二進制來存儲,而所有的文字都是通過ascii表轉化而來進而顯示成對應的語言。但是ascii表中存在許多不可見字元,這些不可見字元在數據傳輸時,有可能經過不同硬體上各種類型的路由,在轉義時容易發生錯誤,所以規定了64個可見字元(a-z、A-Z、0-9、+、/),通過base64轉碼之後,所有的二進制數據都是可見的。

ECB和CBC是兩種加密工作模式。其相同點都是在開始輪加密之前,將明文和密文按照128/192/256進行分組。以128位為例,明文和密文都分為16組,每組1個位元組為8位。

ECB工作模式中,每一組的明文和密文相互獨立,每一組的明文通過對應該組的密文加密後生成密文,不影響其他組。

CBC工作模式中,後一組的明文在加密之前先使用前一組的密文進行異或運算後再和對應該組的密文進行加密操作生成密文。

為簡單的分組加密。將明文和密文分成若干組後,使用密文對明文進行加密生成密文
CBC

加密:

解密:

Ⅵ 加密基礎知識二 非對稱加密RSA演算法和對稱加密

上述過程中,出現了公鑰(3233,17)和私鑰(3233,2753),這兩組數字是怎麼找出來的呢?參考 RSA演算法原理(二)
首字母縮寫說明:E是加密(Encryption)D是解密(Decryption)N是數字(Number)。

1.隨機選擇兩個不相等的質數p和q。
alice選擇了61和53。(實際應用中,這兩個質數越大,就越難破解。)

2.計算p和q的乘積n。
n = 61×53 = 3233
n的長度就是密鑰長度。3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。實際應用中,RSA密鑰一般是1024位,重要場合則為2048位。

3.計算n的歐拉函數φ(n)。稱作L
根據公式φ(n) = (p-1)(q-1)
alice算出φ(3233)等於60×52,即3120。

4.隨機選擇一個整數e,也就是公鑰當中用來加密的那個數字
條件是1< e < φ(n),且e與φ(n) 互質。
alice就在1到3120之間,隨機選擇了17。(實際應用中,常常選擇65537。)

5.計算e對於φ(n)的模反元素d。也就是密鑰當中用來解密的那個數字
所謂"模反元素"就是指有一個整數d,可以使得ed被φ(n)除的余數為1。ed ≡ 1 (mod φ(n))
alice找到了2753,即17*2753 mode 3120 = 1

6.將n和e封裝成公鑰,n和d封裝成私鑰。
在alice的例子中,n=3233,e=17,d=2753,所以公鑰就是 (3233,17),私鑰就是(3233, 2753)。

上述故事中,blob為了偷偷地傳輸移動位數6,使用了公鑰做加密,即6^17 mode 3233 = 824。alice收到824之後,進行解密,即824^2753 mod 3233 = 6。也就是說,alice成功收到了blob使用的移動位數。

再來復習一下整個流程:
p=17,q=19
n = 17 19 = 323
L = 16 18 = 144
E = 5(E需要滿足以下兩個條件:1<E<144,E和144互質)
D = 29(D要滿足兩個條件,1<D<144,D mode 144 = 1)
假設某個需要傳遞123,則加密後:123^5 mode 323 = 225
接收者收到225後,進行解密,225^ 29 mode 323 = 123

回顧上面的密鑰生成步驟,一共出現六個數字:
p
q
n
L即φ(n)
e
d
這六個數字之中,公鑰用到了兩個(n和e),其餘四個數字都是不公開的。其中最關鍵的是d,因為n和d組成了私鑰,一旦d泄漏,就等於私鑰泄漏。那麼,有無可能在已知n和e的情況下,推導出d?
(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有將n因數分解,才能算出p和q。
結論:如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。
可是,大整數的因數分解,是一件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法。維基網路這樣寫道:"對極大整數做因數分解的難度決定了RSA演算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA演算法愈可靠。假如有人找到一種快速因數分解的演算法,那麼RSA的可靠性就會極度下降。但找到這樣的演算法的可能性是非常小的。今天只有短的RSA密鑰才可能被暴力破解。到2008年為止,世界上還沒有任何可靠的攻擊RSA演算法的方式。只要密鑰長度足夠長,用RSA加密的信息實際上是不能被解破的。"

然而,雖然RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何。此外,RSA的缺點還有:
A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。
B)分組長度太大,為保證安全性,n 至少也要 600bits以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。因此, 使用RSA只能加密少量數據,大量的數據加密還要靠對稱密碼演算法

加密和解密是自古就有技術了。經常看到偵探電影的橋段,勇敢又機智的主角,拿著一長串毫無意義的數字苦惱,忽然靈光一閃,翻出一本厚書,將第一個數字對應頁碼數,第二個數字對應行數,第三個數字對應那一行的某個詞。數字變成了一串非常有意義的話:
Eat the beancurd with the peanut. Taste like the ham.

這種加密方法是將原來的某種信息按照某個規律打亂。某種打亂的方式就叫做密鑰(cipher code)。發出信息的人根據密鑰來給信息加密,而接收信息的人利用相同的密鑰,來給信息解密。 就好像一個帶鎖的盒子。發送信息的人將信息放到盒子里,用鑰匙鎖上。而接受信息的人則用相同的鑰匙打開。加密和解密用的是同一個密鑰,這種加密稱為對稱加密(symmetric encryption)。

如果一對一的話,那麼兩人需要交換一個密鑰。一對多的話,比如總部和多個特工的通信,依然可以使用同一套密鑰。 但這種情況下,對手偷到一個密鑰的話,就知道所有交流的信息了。 二戰中盟軍的情報戰成果,很多都來自於破獲這種對稱加密的密鑰。

為了更安全,總部需要給每個特工都設計一個不同的密鑰。如果是FBI這樣龐大的機構,恐怕很難維護這么多的密鑰。在現代社會,每個人的信用卡信息都需要加密。一一設計密鑰的話,銀行怕是要跪了。

對稱加密的薄弱之處在於給了太多人的鑰匙。如果只給特工鎖,而總部保有鑰匙,那就容易了。特工將信息用鎖鎖到盒子里,誰也打不開,除非到總部用唯一的一把鑰匙打開。只是這樣的話,特工每次出門都要帶上許多鎖,太容易被識破身份了。總部老大想了想,乾脆就把造鎖的技術公開了。特工,或者任何其它人,可以就地取材,按照圖紙造鎖,但無法根據圖紙造出鑰匙。鑰匙只有總部的那一把。

上面的關鍵是鎖和鑰匙工藝不同。知道了鎖,並不能知道鑰匙。這樣,銀行可以將「造鎖」的方法公布給所有用戶。 每個用戶可以用鎖來加密自己的信用卡信息。即使被別人竊聽到,也不用擔心:只有銀行才有鑰匙呢!這樣一種加密演算法叫做非對稱加密(asymmetric encryption)。非對稱加密的經典演算法是RSA演算法。它來自於數論與計算機計數的奇妙結合。

1976年,兩位美國計算機學家Whitfield Diffie 和 Martin Hellman,提出了一種嶄新構思,可以在不直接傳遞密鑰的情況下,完成解密。這被稱為"Diffie-Hellman密鑰交換演算法"。這個演算法啟發了其他科學家。人們認識到,加密和解密可以使用不同的規則,只要這兩種規則之間存在某種對應關系即可,這樣就避免了直接傳遞密鑰。這種新的加密模式被稱為"非對稱加密演算法"。

1977年,三位數學家Rivest、Shamir 和 Adleman 設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字命名,叫做RSA演算法。從那時直到現在,RSA演算法一直是最廣為使用的"非對稱加密演算法"。毫不誇張地說,只要有計算機網路的地方,就有RSA演算法。

1.能「撞」上的保險箱(非對稱/公鑰加密體制,Asymmetric / Public Key Encryption)

數據加密解密和門鎖很像。最開始的時候,人們只想到了那種只能用鑰匙「鎖」數據的鎖。如果在自己的電腦上自己加密數據,當然可以用最開始這種門鎖的形式啦,方便快捷,簡單易用有木有。

但是我們現在是通信時代啊,雙方都想做安全的通信怎麼辦呢?如果也用這種方法,通信就好像互相發送密碼保險箱一樣…而且雙方必須都有鑰匙才能進行加密和解密。也就是說,兩個人都拿著保險箱的鑰匙,你把數據放進去,用鑰匙鎖上發給我。我用同樣的鑰匙把保險箱打開,再把我的數據鎖進保險箱,發送給你。

這樣看起來好像沒什麼問題。但是,這裡面 最大的問題是:我們兩個怎麼弄到同一個保險箱的同一個鑰匙呢? 好像僅有的辦法就是我們兩個一起去買個保險箱,然後一人拿一把鑰匙,以後就用這個保險箱了。可是,現代通信社會,絕大多數情況下別說一起去買保險箱了,連見個面都難,這怎麼辦啊?

於是,人們想到了「撞門」的方法。我這有個可以「撞上」的保險箱,你那裡自己也買一個這樣的保險箱。通信最開始,我把保險箱打開,就這么開著把保險箱發給你。你把數據放進去以後,把保險箱「撞」上發給我。撞上以後,除了我以外,誰都打不開保險箱了。這就是RSA了,公開的保險箱就是公鑰,但是我有私鑰,我才能打開。

2.數字簽名
這種鎖看起來好像很不錯,但是鎖在運輸的過程中有這么一個嚴重的問題:你怎麼確定你收到的開著的保險箱就是我發來的呢?對於一個聰明人,他完全可以這么干:
(a)裝作運輸工人。我現在把我開著的保險箱運給對方。運輸工人自己也弄這么一個保險箱,運輸的時候把保險箱換成他做的。
(b)對方收到保險箱後,沒法知道這個保險箱是我最初發過去的,還是運輸工人替換的。對方把數據放進去,把保險箱撞上。
(c)運輸工人往回運的時候,用自己的鑰匙打開自己的保險箱,把數據拿走。然後復印也好,偽造也好,弄出一份數據,把這份數據放進我的保險箱,撞上,然後發給我。
從我的角度,從對方的角度,都會覺得這數據傳輸過程沒問題。但是,運輸工人成功拿到了數據,整個過程還是不安全的,大概的過程是這樣:

這怎麼辦啊?這個問題的本質原因是,人們沒辦法獲知,保險箱到底是「我」做的,還是運輸工人做的。那乾脆,我們都別做保險箱了,讓權威機構做保險箱,然後在每個保險箱上用特殊的工具刻上一個編號。對方收到保險箱的時候,在權威機構的「公告欄」上查一下編號,要是和保險箱上的編號一樣,我就知道這個保險箱是「我」的,就安心把數據放進去。大概過程是這樣的:

如何做出刻上編號,而且編號沒法修改的保險箱呢?這涉及到了公鑰體制中的另一個問題:數字簽名。
要知道,刻字這種事情吧,誰都能幹,所以想做出只能自己刻字,還沒法讓別人修改的保險箱確實有點難度。那麼怎麼辦呢?這其實困擾了人們很長的時間。直到有一天,人們發現:我們不一定非要在保險箱上刻規規矩矩的字,我們乾脆在保險箱上刻手寫名字好了。而且,刻字有點麻煩,乾脆我們在上面弄張紙,讓人直接在上面寫,簡單不費事。具體做法是,我們在保險箱上嵌進去一張紙,然後每個出產的保險箱都讓權威機構的CEO簽上自己的名字。然後,CEO把自己的簽名公開在權威機構的「公告欄」上面。比如這個CEO就叫「學酥」,那麼整個流程差不多是這個樣子:

這個方法的本質原理是,每個人都能夠通過筆跡看出保險箱上的字是不是學酥CEO簽的。但是呢,這個字體是學酥CEO唯一的字體。別人很難模仿。如果模仿我們就能自己分辨出來了。要是實在分辨不出來呢,我們就請一個筆跡專家來分辨。這不是很好嘛。這個在密碼學上就是數字簽名。

上面這個簽字的方法雖然好,但是還有一個比較蛋疼的問題。因為簽字的樣子是公開的,一個聰明人可以把公開的簽字影印一份,自己造個保險箱,然後把這個影印的字也嵌進去。這樣一來,這個聰明人也可以造一個相同簽字的保險箱了。解決這個問題一個非常簡單的方法就是在看保險箱上的簽名時,不光看字體本身,還要看字體是不是和公開的字體完全一樣。要是完全一樣,就可以考慮這個簽名可能是影印出來的。甚至,還要考察字體是不是和其他保險櫃上的字體一模一樣。因為聰明人為了欺騙大家,可能不影印公開的簽名,而影印其他保險箱上的簽名。這種解決方法雖然簡單,但是驗證簽名的時候麻煩了一些。麻煩的地方在於我不僅需要對比保險箱上的簽名是否與公開的筆跡一樣,還需要對比得到的簽名是否與公開的筆跡完全一樣,乃至是否和所有發布的保險箱上的簽名完全一樣。有沒有什麼更好的方法呢?

當然有,人們想到了一個比較好的方法。那就是,學酥CEO簽字的時候吧,不光把名字簽上,還得帶上簽字得日期,或者帶上這個保險箱的編號。這樣一來,每一個保險箱上的簽字就唯一了,這個簽字是學酥CEO的簽名+學酥CEO寫上的時間或者編號。這樣一來,就算有人偽造,也只能偽造用過的保險箱。這個問題就徹底解決了。這個過程大概是這么個樣子:

3 造價問題(密鑰封裝機制,Key Encapsulation Mechanism)
解決了上面的各種問題,我們要考慮考慮成本了… 這種能「撞」門的保險箱雖然好,但是這種鎖造價一般來說要比普通的鎖要高,而且鎖生產時間也會變長。在密碼學中,對於同樣「結實」的鎖,能「撞」門的鎖的造價一般來說是普通鎖的上千倍。同時,能「撞」門的鎖一般來說只能安裝在小的保險櫃裡面。畢竟,這么復雜的鎖,裝起來很費事啊!而普通鎖安裝在多大的保險櫃上面都可以呢。如果兩個人想傳輸大量數據的話,用一個大的保險櫃比用一堆小的保險櫃慢慢傳要好的多呀。怎麼解決這個問題呢?人們又想出了一個非常棒的方法:我們把兩種鎖結合起來。能「撞」上的保險櫃裡面放一個普通鎖的鑰匙。然後造一個用普通的保險櫃來鎖大量的數據。這樣一來,我們相當於用能「撞」上的保險櫃發一個鑰匙過去。對方收到兩個保險櫃後,先用自己的鑰匙把小保險櫃打開,取出鑰匙。然後在用這個鑰匙開大的保險櫃。這樣做更棒的一個地方在於,既然對方得到了一個鑰匙,後續再通信的時候,我們就不再需要能「撞」上的保險櫃了啊,在以後一定時間內就用普通保險櫃就好了,方便快捷嘛。

以下參考 數字簽名、數字證書、SSL、https是什麼關系?
4.數字簽名(Digital Signature)
數據在瀏覽器和伺服器之間傳輸時,有可能在傳輸過程中被冒充的盜賊把內容替換了,那麼如何保證數據是真實伺服器發送的而不被調包呢,同時如何保證傳輸的數據沒有被人篡改呢,要解決這兩個問題就必須用到數字簽名,數字簽名就如同日常生活的中的簽名一樣,一旦在合同書上落下了你的大名,從法律意義上就確定是你本人簽的字兒,這是任何人都沒法仿造的,因為這是你專有的手跡,任何人是造不出來的。那麼在計算機中的數字簽名怎麼回事呢?數字簽名就是用於驗證傳輸的內容是不是真實伺服器發送的數據,發送的數據有沒有被篡改過,它就干這兩件事,是非對稱加密的一種應用場景。不過他是反過來用私鑰來加密,通過與之配對的公鑰來解密。
第一步:服務端把報文經過Hash處理後生成摘要信息Digest,摘要信息使用私鑰private-key加密之後就生成簽名,伺服器把簽名連同報文一起發送給客戶端。
第二步:客戶端接收到數據後,把簽名提取出來用public-key解密,如果能正常的解密出來Digest2,那麼就能確認是對方發的。
第三步:客戶端把報文Text提取出來做同樣的Hash處理,得到的摘要信息Digest1,再與之前解密出來的Digist2對比,如果兩者相等,就表示內容沒有被篡改,否則內容就是被人改過了。因為只要文本內容哪怕有任何一點點改動都會Hash出一個完全不一樣的摘要信息出來。

5.數字證書(Certificate Authority)
數字證書簡稱CA,它由權威機構給某網站頒發的一種認可憑證,這個憑證是被大家(瀏覽器)所認可的,為什麼需要用數字證書呢,難道有了數字簽名還不夠安全嗎?有這樣一種情況,就是瀏覽器無法確定所有的真實伺服器是不是真的是真實的,舉一個簡單的例子:A廠家給你們家安裝鎖,同時把鑰匙也交給你,只要鑰匙能打開鎖,你就可以確定鑰匙和鎖是配對的,如果有人把鑰匙換了或者把鎖換了,你是打不開門的,你就知道肯定被竊取了,但是如果有人把鎖和鑰匙替換成另一套表面看起來差不多的,但質量差很多的,雖然鑰匙和鎖配套,但是你卻不能確定這是否真的是A廠家給你的,那麼這時候,你可以找質檢部門來檢驗一下,這套鎖是不是真的來自於A廠家,質檢部門是權威機構,他說的話是可以被公眾認可的(呵呵)。
同樣的, 因為如果有人(張三)用自己的公鑰把真實伺服器發送給瀏覽器的公鑰替換了,於是張三用自己的私鑰執行相同的步驟對文本Hash、數字簽名,最後得到的結果都沒什麼問題,但事實上瀏覽器看到的東西卻不是真實伺服器給的,而是被張三從里到外(公鑰到私鑰)換了一通。那麼如何保證你現在使用的公鑰就是真實伺服器發給你的呢?我們就用數字證書來解決這個問題。數字證書一般由數字證書認證機構(Certificate Authority)頒發,證書裡麵包含了真實伺服器的公鑰和網站的一些其他信息,數字證書機構用自己的私鑰加密後發給瀏覽器,瀏覽器使用數字證書機構的公鑰解密後得到真實伺服器的公鑰。這個過程是建立在被大家所認可的證書機構之上得到的公鑰,所以這是一種安全的方式。

常見的對稱加密演算法有DES、3DES、AES、RC5、RC6。非對稱加密演算法應用非常廣泛,如SSH,
HTTPS, TLS,電子證書,電子簽名,電子身份證等等。
參考 DES/3DES/AES區別

Ⅶ 密碼學相關知識梳理

密碼學是研究編制密碼和破譯密碼的技術科學。

密碼學的歷史最早可以追溯到幾千年以前,古今中外都有密碼學運用的記載,從歷史看,戰爭很大程度給密碼學提供了應用環境,推動了密碼學的發展,密碼學按照發展歷程,大體可以分為三個階段,手工加密、機械加密和計算機加密階段,下面是近代密碼學的一些重要進展。
1949年,資訊理論始祖克勞德·艾爾伍德·香農(Claude Elwood Shannon)發表了《保密系統的通信理論》一文,把密碼學建立在嚴格的數學基礎之上,奠定理論基礎,從此成為真正的科學。
1976年,密碼學專家惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)兩人發表了《密碼學的新方向》一文,解決了密鑰管理的難題,把密鑰分為加密的公鑰和解密的私鑰,提出了密鑰交換演算法Diffie-Hellman。
1977年,美國國家標准技術研究所制定數據加密標准(Data Encryption Standard ),將其頒布為國家標准。
1977年,麻省理工學院的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出RSA加密演算法,RSA就是他們三人姓氏開頭字母拼在一起組成的。
1997年4月,美國ANSI發起徵集AES(advanced encryption standard)的活動,並為此成立了AES工作小組,經過幾年的時間篩選,最終採用了由比利時的Joan Daemen和Vincent Rijmen設計的Rijndael演算法,並在2002年5月26日成為有效的加密標准。

按密碼體制劃分:對稱密碼體制密碼學和非對稱密碼體制密碼學對應的有對稱密碼演算法和非對稱密碼演算法。

消息摘要演算法又稱散列演算法,其核心在於散列函數的單向性,即通過散列函數可獲得對應的散列值,但不可通過該散列值反推其原始信息,這是消息摘要演算法的安全性的根本所在,我們通常使用該演算法判斷數據的完整性。

消息摘要演算法我們常見比如MD(Message Digest)、SHA(Secure Hash Algorithm)、HMAC(Hash Message Authentication Code)等,常用於驗證數據的完整性,是數字簽名演算法的核心演算法。

我們以微信支付的介面調用分析一下摘要演算法怎麼應用的,首先可以打開微信支付如下相關文檔:
微信支付統一下單介面文檔
微信支付簽名過程

對稱加密簡單的說就是加密和解密使用同一個密鑰,解密演算法是加密演算法的逆運算。

對稱加密演算法主要有DES、DES演算法的變種DESede、DES替代者AES演算法、IDEA、PBE等

非對稱加密演算法稱為雙鑰或公鑰加密演算法,跟對稱加密演算法不同的是,對稱加密演算法只一個密鑰,非對稱加密演算法 一個公鑰和一個私鑰,一個用於加密,另外一個用於解密。
簡單的說:一對密鑰公鑰A和私鑰B,A加密只能B解密,B加密只能A解密。

非對稱加密演算法源於DH演算法(Diffie-Hellman,密鑰交換演算法)由W.Diffie和 M.Hellman共同提出,該演算法為非對稱加密演算法奠定了基礎,下面我們先來了解下密鑰交換演算法DH和ECDH演算法。
為什麼需要密鑰交換演算法?前面我們提到對稱加密演算法加解密都是用同一個密鑰,我們可以想一下,我們怎樣能安全的把一個密鑰給到對方呢?比如我們經常用到HTTPS,大家都說HTTPS加密了是安全的,那它加密的密鑰怎麼來的呢?很顯然我們在訪問一個https地址的時候,事先並沒有密鑰,訪問過程中客戶端跟服務端通過握手協議協商出來的密鑰,如果服務端直接把密鑰在網路上傳輸那肯定不安全的,所以這過程到底發生了什麼?後面專門分析https的時候會詳細寫,這里先了解下該演算法。
DH密鑰交換演算法的安全性基於有限域上的離散對數難題
ECDH密鑰交換演算法是基於橢圓曲線加密

從上面圖中可以看出,DH&ECDH密鑰交換演算法交互雙方都會向對方公開一部分信息,即所謂的公鑰,這部分即使被別人拿到了也不會威脅到最終的密鑰,這里很關鍵的一點是甲乙兩方公布的公鑰是不相同的,但是最終生成的密鑰兩邊是一致的,這里是利用的演算法原理,有興趣的可以去查閱詳細的演算法公式,因為最終的密鑰不需要傳輸給對方,所以很大程度保證安全性。
非對稱加密演算法:
比較典型的非對稱加密演算法有RSA、ECC、ElGamal,RSA演算法基於大數因子分解難題,而ElGamal和ECC演算法則是基於離散對數難題。

從上面消息傳遞模型我們可以看出,非對稱加密演算法遵循「私鑰加密,公鑰解密」和「公鑰加密,私鑰解密」的原則,但是有一點需要注意,公鑰是公開的,所以用在什麼場景是需要根據該演算法的特徵來考慮的,比如既然公鑰是公開的,你用私鑰加密敏感數據傳遞給第三方合適么?顯然不合適,因為公鑰公開的,別人都可以拿到公鑰,也就意味著你加密的數據都可以解密,所以適合的場景比如私鑰加密,公鑰只是用來驗證加密的內容,每個人都可以來驗證,該場景是不在乎加密內容被其它攻擊者看到的,甚至說內容本來就是公開的,對於接收者用公鑰確保內容沒有被篡改即可,所以我們通常說非對稱演算法「私鑰簽名,公鑰驗證簽名」,另外一點,「公鑰加密,私鑰解密」,因為私鑰只有我們自己手上有,所以理論上也只有我們自己可以解密,這樣是安全的,https證書驗證以及握手協議過程中會體現這一點。

數字簽名演算法可以看做是一種帶有密鑰的消息摘要演算法,並且這種密鑰包含了公鑰和私鑰。也就是說數字簽名演算法是非對稱加密演算法和消息摘要演算法的結合體,遵循「私鑰簽名,公鑰驗證」的簽名認證方式。
數字簽名演算法是公鑰基礎設施(Public Key Infrastructure,PKI)以及許多網路安全機制(SSL/TLS,VPN等)的基礎。
數字簽名演算法要求能夠驗證數據完整性、認證數據來源,並起到抗否認的作用。

數字簽名演算法主要包括RSA、DSA、ECDSA共3種演算法,其中RSA演算法源於整數因子分解問題,DSA和ECDSA演算法源於離散對數問題。

我們以螞蟻金服開放平台上介面簽名方案為例,詳細說明可以打開如下文檔:
螞蟻開放平台簽名專區

Ⅷ 密碼學知識精粹

① 替換法
替換法很好理解,就是用固定的信息將原文替換成無法直接閱讀的密文信息。例如將 b 替換成 w ,e 替換成p ,這樣bee 單詞就變換成了wpp,不知道替換規則的人就無法閱讀出原文的含義。
替換法有單表替換和多表替換兩種形式。

② 移位法
移位法就是將原文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後得出密文,典型的移位法應用有 「 愷撒密碼 」。
例如約定好向後移動2位(abcde - cdefg),這樣 bee 單詞就變換成了dgg。

古典密碼破解方式--頻率分析法

古典密碼的安全性受到了威脅,外加使用便利性較低,到了工業化時代,近現代密碼被廣泛應用。

恩尼格瑪機
恩尼格瑪機是二戰時期納粹德國使用的加密機器,其使用的加密方式本質上還是移位和替代,後被英國破譯,參與破譯的人員有被稱為計算機科學之父、人工智慧之父的圖靈。

① 散列函數加密(消息摘要,數字摘要)
散列函數,也見雜湊函數、摘要函數或哈希函數,可將任意長度的消息經過運算,變成固定長度數值,常見的有MD5、SHA-1、SHA256,多應用在文件校驗,數字簽名中。
MD5 可以將任意長度的原文生成一個128位(16位元組)的哈希值
SHA-1可以將任意長度的原文生成一個160位(20位元組)的哈希值
特點:消息摘要(Message Digest)又稱為數字摘要(Digital Digest)
它是一個唯一對應一個消息或文本的固定長度的值,它由一個單向Hash加密函數對消息進行作用而產生
使用數字摘要生成的值是不可以篡改的,為了保證文件或者值的安全

MD5演算法 : 摘要結果16個位元組, 轉16進制後32個位元組
SHA1演算法 : 摘要結果20個位元組, 轉16進制後40個位元組
SHA256演算法 : 摘要結果32個位元組, 轉16進制後64個位元組
SHA512演算法 : 摘要結果64個位元組, 轉16進制後128個位元組

② 對稱加密
對稱密碼應用了相同的加密密鑰和解密密鑰。對稱密碼分為:序列密碼(流密碼),分組密碼(塊密碼)兩種。流密碼是對信息流中的每一個元素(一個字母或一個比特)作為基本的處理單元進行加密,塊密碼是先對信息流分塊,再對每一塊分別加密。
例如原文為1234567890,流加密即先對1進行加密,再對2進行加密,再對3進行加密……最後拼接成密文;塊加密先分成不同的塊,如1234成塊,5678成塊,90XX(XX為補位數字)成塊,再分別對不同塊進行加密,最後拼接成密文。前文提到的古典密碼學加密方法,都屬於流加密。

示例
我們現在有一個原文3要發送給B
設置密鑰為108, 3 * 108 = 324, 將324作為密文發送給B
B拿到密文324後, 使用324/108 = 3 得到原文
常見加密演算法
DES : Data Encryption Standard,即數據加密標准,是一種使用密鑰加密的塊演算法,1977年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),並授權在非密級政府通信中使用,隨後該演算法在國際上廣泛流傳開來。
AES : Advanced Encryption Standard, 高級加密標准 .在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標准。這個標准用來替代原先的DES,已經被多方分析且廣為全世界所使用。
特點
加密速度快, 可以加密大文件
密文可逆, 一旦密鑰文件泄漏, 就會導致數據暴露
加密後編碼表找不到對應字元, 出現亂碼,故一般結合Base64使用
加密模式
ECB : Electronic codebook, 電子密碼本. 需要加密的消息按照塊密碼的塊大小被分為數個塊,並對每個塊進行獨立加密
優點 : 可以並行處理數據
缺點 : 同樣的原文生成同樣的密文, 不能很好的保護數據
CBC : Cipher-block chaining, 密碼塊鏈接. 每個明文塊先與前一個密文塊進行異或後,再進行加密。在這種方法中,每個密文塊都依賴於它前面的所有明文塊
優點 : 同樣的原文生成的密文不一樣
缺點 : 串列處理數據
填充模式:當需要按塊處理的數據, 數據長度不符合塊處理需求時, 按照一定的方法填充滿塊長的規則
NoPadding不填充.

對應的AES加密類似,但是如果使用的是AES加密,那麼密鑰必須是16個位元組。

加密模式和填充模式:
AES/CBC/NoPadding (128)
AES/CBC/PKCS5Padding (128)
AES/ECB/NoPadding (128)
AES/ECB/PKCS5Padding (128)
DES/CBC/NoPadding (56)
DES/CBC/PKCS5Padding (56)
DES/ECB/NoPadding (56)
DES/ECB/PKCS5Padding (56)
DESede/CBC/NoPadding (168)
DESede/CBC/PKCS5Padding (168)
DESede/ECB/NoPadding (168)
DESede/ECB/PKCS5Padding (168)
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

PS: Base64是網路上最常見的用於傳輸8Bit位元組碼的可讀性編碼演算法之一
可讀性編碼演算法不是為了保護數據的安全性,而是為了可讀性
可讀性編碼不改變信息內容,只改變信息內容的表現形式
所謂Base64,即是說在編碼過程中使用了64種字元:大寫A到Z、小寫a到z、數字0到9、「+」和「/」
Base64 演算法原理:base64 是 3個位元組為一組,一個位元組 8位,一共 就是24位 ,然後,把3個位元組轉成4組,每組6位(3 * 8 = 4 * 6 = 24),每組缺少的2位會在高位進行補0 ,這樣做的好處在於 base取的是後面6位而去掉高2位 ,那麼base64的取值就可以控制在0-63位了,所以就叫base64,111 111 = 32 + 16 + 8 + 4 + 2 + 1 =

toString()與new String ()用法區別

③ 非對稱加密
非對稱密碼有兩支密鑰,公鑰(publickey)和私鑰(privatekey),加密和解密運算使用的密鑰不同。用公鑰對原文進行加密後,需要由私鑰進行解密;用私鑰對原文進行加密後(此時一般稱為簽名),需要由公鑰進行解密(此時一般稱為驗簽)。公鑰可以公開的,大家使用公鑰對信息進行加密,再發送給私鑰的持有者,私鑰持有者使用私鑰對信息進行解密,獲得信息原文。因為私鑰只有單一人持有,因此不用擔心被他人解密獲取信息原文。
特點:
加密和解密使用不同的密鑰
如果使用私鑰加密, 只能使用公鑰解密
如果使用公鑰加密, 只能使用私鑰解密
處理數據的速度較慢, 因為安全級別高
常見演算法:RSA,ECC

數字簽名
數字簽名的主要作用就是保證了數據的有效性(驗證是誰發的)和完整性(證明信息沒有被篡改),是非對稱加密和消息摘要的應用

keytool工具使用
keytool工具路徑:C:\Program Files\Java\jre1.8.0_91\bin

--- END

閱讀全文

與密碼學和信息加密的復習資料相關的資料

熱點內容
excel表格單列數據加密 瀏覽:646
給同事的解壓話語 瀏覽:990
linux關閉網卡命令行 瀏覽:452
史上最漂亮程序員 瀏覽:768
java實現excel的導入 瀏覽:758
光遇賬號如何轉移安卓 瀏覽:266
5分之13除以26的演算法 瀏覽:342
蘭州安寧區買解壓包子 瀏覽:641
php接收圖片代碼 瀏覽:668
hci命令 瀏覽:662
福建伺服器大區雲空間 瀏覽:840
筆桿子程序員 瀏覽:745
手機軟體易驗證加密 瀏覽:589
文檔加密只讀模式也不能看到 瀏覽:431
把jpg轉換成pdf的軟體 瀏覽:874
linuxeth0mac 瀏覽:192
windows編程知乎 瀏覽:442
壓縮工期超過40 瀏覽:249
Android怎麼優化內存 瀏覽:106
linuxetcsysconfig 瀏覽:396