古典密碼密鑰空間如何計算
A. 密碼學基礎
密碼學是研究如何保護信息安全性的一門科學,涉及數學、物理、計算機、資訊理論、編碼學、通訊技術等學科,已經在生活中得到廣泛應用。
密碼學組成分支分為編碼學和密碼分析學。密碼編碼學主要研究對信息進行編碼,實現信息的隱蔽。密碼分析學主要研究加密消息的破譯或消息的偽造。二者相互獨立,又相互依存,在矛盾與斗爭中發展,對立統一。
密碼學的發展歷史大致可劃分為三個階段:
機密性
僅有發送方和指定的接收方能夠理解傳輸的報文內容。竊聽者可以截取到加密了的報文,但不能還原出原來的信息,即不能得到報文內容。
鑒別
發送方和接收方都應該能證實通信過程所涉及的另一方, 通信的另一方確實具有他們所聲稱的身份。即第三者不能冒充跟你通信的對方,能對對方的身份進行鑒別。
報文完整性
即使發送方和接收方可以互相鑒別對方,但他們還需要確保其通信的內容在傳輸過程中未被改變。
不可否認性
如果人們收到通信對方的報文後,還要證實報文確實來自所宣稱的發送方,發送方也不能在發送報文以後否認自己發送過報文。
密碼體制是一個使通信雙方能進行秘密通信的協議。密碼體制由五要素組成,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 量子密碼
量子密碼是以量子力學和密碼學為基礎,利用量子物理學中的原理實現密碼體制的一種新型密碼體制,與當前大多使用的經典密碼體制不一樣的是,量子密碼利用信息載體的物理屬性實現。目前量子密碼用於承載信息的載體包括光子、壓縮態光信號、相干態光信號等。
由於量子密碼體制的理論基礎是量子物理定理,而物理定理是物理學家經過多年的研究與論證得出的結論,有可靠的理論依據,且不論在何時都是不會改變的,因此,理論上,依賴於這些物理定理的量子密碼也是不可攻破的,量子密碼體制是一種無條件安全的密碼體制。
B. 計算機密碼學定義
一個密碼系統是整個安全系統的一部分,由五部分組成(M,C,K,E,D):
1、明文空間M:全體明文的集合,明文(Plaintext):偽裝前的原始數據。
2、密文空間C:全體密文的集合,密文(Ciphertext):偽裝後的數據。
3、密鑰空間K:全體密鑰的集合,K = < Ke,Kd >,密鑰(Key):加密和解密分別在加密密鑰和解密密鑰的控制下進行。
4、加密演算法集合E,加密變換,ek:M→C,加密(Encryption):偽裝的過程。
5、解密演算法集合D,解密變換,dk:C→M,解密(Decryption):去掉密文的偽裝恢復出明文的過程。
加密演算法需滿足兩條准則之一,滿足兩個准則的加密演算法稱為計算上安全。
1、破譯密文的代價超過被加密信息的價值。
2、破譯密文所花的時間超過信息的有用期。
信息安全的四個要求、目標:
1、機密性:確保信息在發信方和收信方之間傳遞,而不會被不可信的第三方知道。
2、完整性:保證所接收的消息未經復制、插入、篡改、重排或重放,即保證接收的消息和所發出的消息完全一樣,對已毀壞的數據進行恢復。
3、認證性:確保接收者能夠確認消息發送者的身份沒有經過篡改。
4、不可否認性:用於防止通信雙方中的某一方對所傳輸消 息的否認,消息發出後,接收者能夠證明這一消息的確是由通信的另一方發出,消息被接收後,發出者能夠證明這一消息的確已被通信的另一方接收。
5、可用性:是指授權主體在需要信息時能及時得到服務的能力。
數學基礎
素數與合數定義:整數p是一個素數, 如果它只能被±p,±1整除。素數的個數是無限的,全體素數的集合記為P。如果整數n不是素數,則它是一個合數。
模n同餘定義:若a mod n= b mod n,則稱整數a和b模n同餘。
求最大公因子GCD的Euclidean演算法(輾轉相除法):
Step 1: r0 =a and r1 =b;
Step 2: r0 =q1r1+r2; r1 =q2r2+r3; …… ;rn-2 = qn-1rn-1+rn; until rn=0 and rn-1 ≠ 0;
Step 3: rn-1 = gcd(a,b)。
中國剩餘定理(Chinese Remainder Theorem, CRT):
設 n1, n2, …, nk 為兩兩互素的正整數,gcd(ni,nj)=1(ij),a1,a2,…,ak為整數,則同餘方程組::
x = a1 mod n1
x = a2 mod n2
……
x = ak mod nk
有模n=n1n2…nk的惟一解x。
特性:在模n(=n1n2…nk)下可將非常大的數x由一組小數(a1,a2,…,ak)表達 x →(a1,a2,…,ak)。
中國古代命題:「韓信點兵」、「孫子定理」、求一術(沈括)「鬼谷算」(周密)、「隔墻算」(周密)、「剪管術」(楊輝)、「秦王暗點兵」、「物不知數」。中國剩餘定理:孫子剩餘定理、物不知數、數論的重要命題。
費馬小定理:設p是素數,由於對任意的a(0<a<p),有gcd(a,p)=1,則 a p-1 = 1 mod p。
C. 古典密碼包括兩大類
1.古典密碼編碼方法歸根結底主要有兩種,即替換密碼和置換密碼。
D. 密碼技術(十一)之密鑰
——秘密的精華
在使用對稱密碼、公鑰密碼、消息認證碼、數字簽名等密碼技術使用,都需要一個稱為 密鑰 的巨大數字。然而,數字本身的大小並不重要,重要的是 密鑰空間的大小 ,也就是可能出現的密鑰的總數量,因為密鑰空間越大,進行暴力破解就越困難。密鑰空間的大小是由 密鑰長度 決定的。
對稱密碼DES的密鑰的實質長度為56比特(7個位元組)。
例如,
一個DES密鑰用二進制可以表示為:
01010001 11101100 01001011 00010010 00111101 01000010 00000011
用十六進制則可以表示為:
51 EC 4B 12 3D 42 03
而用十進制則可以表示為:
2305928028626269955
在對稱密碼三重DES中,包括使用兩個DES密鑰的DES-EDE2和使用三個DES密鑰的DES-EDE3這兩種方式。
DES-EDE2的密鑰長度實質長度為112比特(14位元組),比如:
51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F
DES-EDE3的密鑰的實質長度為168比特(21位元組),比如:
51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F 24 9F 61 2A 2F D9 96
對稱密碼AES的密鑰長度可以從128、192和256比特中進行選擇,當密鑰長度為256比特時,比如:
51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F 24 9F 61 2A 2F D9 96
B9 42 DC FD A0 AE F4 5D 60 51 F1
密鑰和明文是等價的 。假設明文具有100萬的價值,那麼用來加密這段明文的密鑰也就是具有100萬元的價值;如果明文值1億元,密鑰也就值1億元;如果明文的內容是生死攸關的,那麼密鑰也同樣是生死攸關的。
在對稱密碼中,加密和解密使用同一個密鑰。由於發送者和接收者需要共享密鑰,因此對稱密碼又稱為共享密鑰密碼。對稱密碼中所使用的密鑰必須對發送者和接收者以外的人保密,否則第三方就能夠解密了。
在消息認證碼中,發送者和接收者使用共享的密鑰來進行認證。消息認證碼只能由持有合法密鑰的人計算出來。將消息認證碼附加在通信報文後面,就可以識別通信內容是否被篡改或偽裝,由於「持有合法的密鑰」就是發送者和接收者合法身份的證明,因此消息認證碼的密鑰必須對發送者以外的人保密,否則就會產生篡改和偽裝的風險。
在數字簽名中,簽名生成和驗證使用不同的密鑰,只有持有私鑰的本人才能夠生成簽名,但由於驗證簽名使用的是公鑰,因此任何人都能夠驗證簽名。
對稱密碼和公鑰密碼的密鑰都是用於確保機密性的密鑰。如果不知道用於解密的合法密鑰,就無法得知明文的內容。
相對地,消息認證碼和數字簽名所使用的密鑰,則是用於認證的密鑰。如果不知道合法的密鑰,就無法篡改數據,也無法偽裝本人的身份。
當我們訪問以https://開頭的網頁時,Web伺服器和瀏覽器之間會進行基於SSL/TLS的加密通信。在這樣的通信中所使用的密鑰是僅限於本次通信的一次密鑰,下次通信時就不能使用了,想這樣每次通信只能使用一次的密鑰稱為 會話密鑰 。
由於會話密鑰只在本次通信中有效,萬一竊聽者獲取了本次通信的會話密鑰,也只能破譯本次通信的內容。
雖然每次通信都會更換會話密鑰,但如果用來生成密鑰的偽隨機數生成器品質不好,竊聽者就有可能預測出下次生成會話密鑰,這樣就會產生通信內容被破譯的風險。
相對於每次通信更換的會話密鑰,一直被重復使用的密鑰稱為 主密鑰 。
一般來說,加密的對象是用戶直接使用的信息,這樣的情況下所使用的密鑰稱為CEK(Contents Encryting Key,內容加密密鑰);相對地,用於加密密鑰的密鑰則稱為KEK(Key Encryting Key,密鑰加密密鑰)。
在很多情況下,之前提到的會話密鑰都是被作為CEK使用的,而主密鑰則是被作為KEK使用的。
生成密鑰的最好方法就是使用隨機數,因為米喲啊需要具備不易被他人推測的性質。在可能的情況下最好使用能夠生成密碼學上的隨機數的硬體設備,但一般我們都是使用偽隨機數生成器這一專門為密碼學用途設計的軟體。
在生成密鑰時,不能自己隨便寫出一些像「3F 23 52 28 E3....」這樣的數字。因為盡管你想生成的是隨機的數字,但無論如何都無法避免人為偏差,而這就會成為攻擊者的目標。
盡管生成偽隨機數的演算法有很多種,但密碼學用途偽隨機生成器必須是專門針對密碼學用途而設計的。例如,有一些偽隨機數生成器可以用於游戲和模擬演算法,盡管這些偽隨機數生成器所生成的數列看起也是隨機的,但只要不是專門為密碼學用途設計的,就不能用來生成密鑰,因為這些偽隨機數生成器不具備不可預測性這一性質。
有時候我們也會使用人類的可以記住的口令(pasword或passphrase)來生成密鑰。口令指的是一種由多個單片語成的較長的password。
嚴格來說,我們很少直接使用口令來作為密鑰使用,一般都是將口令輸入單向散列函數,然後將得到的散列值作為密鑰使用。
在使用口令生成密鑰時,為了防止字典攻擊,需要在口令上附加一串稱為鹽(salt)的隨機數,然後在將其輸入單向散列函數。這種方法稱為「基於口令的密碼(Password Based Encryption,PBE)」。
在使用對稱密碼時,如何在發送者和接收者之間共享密鑰是一個重要的問題,要解決密鑰配送問題,可以採用事先共享密鑰,使用密鑰分配中心,使用公鑰密碼等方法,除了上述方法,之前還提到一種解決密鑰配送的問題的方法稱為Diffie-Hellman密鑰交換。
有一種提供通信機密性的技術稱為 密鑰更新 (key updating),這種方法就是在使用共享密鑰進行通信的過程中,定期更改密鑰。當然,發送者和接收者必須同時用同樣的方法來改變密鑰才行。
在更新密鑰時,發送者和接收者使用單向散列函數計算當前密鑰的散列值,並將這個散列值用作新的密鑰。簡單說,就是 用當前密鑰散列值作為下一個密鑰 。
我們假設在通信過程中的某個時間點上,密鑰被竊聽者獲取了,那麼竊聽者就可以用這個密鑰將之後的通信內容全部解密。但是,竊聽者卻無法解密更新密鑰這個時間點之前的內容,因為這需要用單向散列函數的輸出反算出單向散列函數的輸入。由於單向散列函數具有單向性,因此就保證了這樣的反算是非常困難的。
這種防止破譯過去的通信內容機制,稱為 後向安全 (backward security)。
由於會話密鑰在通信過程中僅限於一次,因此我們不需要保存這種秘密。然而,當密鑰需要重復使用時,就必須要考慮保存密鑰的問題了。
人類是 無法記住具有實用長度的密鑰 的。例如,像下面這樣一個AES的128比特的密鑰,一般人是很難記住的。
51 EC 4B 12 3D 42 03 30 04 DB 98 95 93 3F 24 9F
就算勉強記住了,也只過不是記住一個密鑰而已。但如果要記住多個像這樣的密鑰並且保證不忘記,實際上是非常困難的。
我們記不住密鑰,但如果將密鑰保存下來又可能會被竊取。這真是一個頭疼的問題。這個問題很難得到徹底解決,但我們可以考慮一些合理的解決方法。
將密鑰保存生文件,並將這個文件保存在保險櫃等安全地方。但是放在保險櫃里的話,出門就無法使用了。這種情況,出門時就需要隨身攜帶密鑰。而如果將密鑰放在存儲卡隨身攜帶的話,就會產生存儲卡丟失、被盜等風險。
萬一密鑰被盜,為了能夠讓攻擊者花更多的時間才能真正使用這個密鑰,我們可以使用將密鑰加密後保存的方法,當然,要將密鑰加密,必須需要另一個密鑰。像這樣用於密碼加密的密鑰,一般稱為KEK。
對密鑰進行加密的方法雖然沒有完全解決機密性的問題,但在現實中卻是一個非常有效地方法,因為這樣做可以減少需要保管密鑰的數量。
假設計算機上有100萬個文件,分別使用不同的密鑰進行加密生成100萬個密文,結果我們手上就產生了100萬個密鑰,而要保管100萬個密鑰是很困難的。
於是,我們用一個密鑰(KEK)將這100萬個密鑰進行加密,那麼現在我們只要保管者一個KEK就可以了,這一個KEK的價值相當於簽名的100萬個密鑰的價值的總和。
用1個密鑰來代替多個密鑰進行保管的方法,和認證機構的層級化非常相似。在後者中,我們不需要信任多個認證機構,而只需要信任一個根CA就可以了。同樣的,我們也不需要確保多個密鑰的機密性,而只需要確保一個KEK的機密性就可以了。
密鑰的作廢和生成是同等重要的,這是因為密鑰和明文是等價的。
假設Alice向Bob發送了一封加密郵件。Bob在解密之後閱讀了郵件的內容,這時本次通信所使用的密鑰對於Alice和Bob來說就不需要了。不在需要的密鑰必須妥善刪除,因為如果被竊聽者Eve獲取,之前發送的加密郵件就會被解密。
如果密鑰是計算機上的一個文件,那麼僅僅刪除這個文件是不足以刪除密鑰的,因為有一些技術能夠讓刪除的文件「恢復」。此外,很多情況下文件的內容還會殘留在計算機的內存中,因此必須將這些痕跡完全抹去。簡而言之,要完全刪除密鑰,不但要用到密碼軟體,還需要在設計計算機系統時對信息安全進行充分的考慮
如果包含密鑰的文件被誤刪或者保管密鑰的筆記本電腦損壞了,會怎麼樣?
如果丟失了對稱密鑰密碼的共享密鑰,就無法解密密文了。如果丟失了消息認證碼的密鑰,就無法向通信對象證明自己的身份了。
公鑰密碼中,一般不太會發送丟失公鑰的情況,因為公鑰是完全公開的,很有可能在其他電腦上存在副本。
最大的問題是丟失公鑰密碼的私鑰。如果丟失了公鑰密碼的私鑰,就無法解密用公鑰密碼加密的密文了。此外,如果丟失了數字簽名的私鑰,就無法生成數字簽名了。
Diffie-Hellman密鑰交換(Diffie-Hellman key exchange)是1976年由Whitfield Diffie和Martin Hellman共同發明的一種演算法。使用這種演算法,通信雙方僅通過交換一些可以公開的信息就能夠生成共享秘密數字,而這一秘密數字就可以被用作對稱密碼的密鑰。IPsec 中就使用了經過改良的Diffie-Hellman密鑰交換。
2 Alice 生成一個隨機數A
A是一個1 ~ P-2之間的整數。這個數是一個只有Alice知道的密碼數字,沒有必要告訴Bob,也不能讓Eve知道。
Alice計算出的密鑰=Bob計算出的密鑰
在步驟1-7中,雙方交換數字一共有4個,P、G、G A mod P 和 G B mod P。根據這4個數字計算出Alice和Bob的共享密鑰是非常困難的。
如果Eve能歐知道A和B的任意一個數,那麼計算G A*B 就很容易了,然而僅僅根據上面的4個數字很難求出A和B的。
根據G A mod P 計算出A的有效演算法到現在還沒有出現,這問題成為有限域(finite field) 的 離散對數問題 。
Diffie-Hellman密鑰交換是利用了「離散對數問題」的復雜度來實現密鑰的安全交換的,如果將「離散對數問題」改為「橢圓曲線上離散對數問題」,這樣的演算法就稱為 橢圓曲線Diffie-Hellman 密鑰交換。
橢圓曲線Diffie-Hellman密鑰交換在總體流程上是不變的,只是所利用的數學問題不同而已。橢圓曲線Diffie-Hellman密鑰交換能夠用較短的密鑰長度實現較高的安全性。
基於口令密碼(password based encryption,PBE)就是一種根據口令生成密鑰並用該密鑰進行加密的方法。其中加密和解密使用同一個密鑰。
PBE有很多種實現方法。例如RFC2898和RFC7292 等規范中所描述的PBE就通過java的javax.crypto包等進行了實現。此外,在通過密碼軟體PGP保存密鑰時,也會使用PBE。
PBE的意義可以按照下面的邏輯來理解。
想確保重要消息的機制性。
↓
將消息直接保存到磁碟上的話,可能被別人看到。
↓
用密鑰(CEK)對消息進行加密吧。
↓
但是這次又需要確保密鑰(CEK)的機密性了。
↓
將密鑰(CEK)直接保存在磁碟上好像很危險。
↓
用另一個密鑰(KEK)對密鑰進行加密(CEK)吧。
↓
等等!這次又需要確保密鑰(KEK)的機密性了。進入死循環了。
↓
既然如此,那就用口令來生成密鑰(KEK)吧。
↓
但只用口令容易遭到字典攻擊
↓
那麼就用口令和鹽共同生成密鑰(KEK)吧。
↓
鹽可以和加密後的密鑰(CEK)一切保存在磁碟上,而密鑰(KEK)可以直接丟棄。
↓
口令就記在自己的腦子里吧。
PBE加密包括下列3個步驟:
鹽是由偽隨機數生成器生成的隨機數,在生成密鑰(KEK)時會和口令一起被輸入單向散列函數。
密鑰(KEK)是根據秘密的口令生成的,加鹽好像沒有什麼意義,那麼鹽到底起到什麼作用呢?
鹽是用來防禦字典攻擊的 。字典攻擊是一種事先進行計算並准備好候選密鑰列表的方法。
我們假設在生成KEK的時候沒有加鹽。那麼主動攻擊者Mallory就可以根據字典數據事先生成大量的候選KEK。
在這里,事先是很重要的一點。這意味著Mallory可以在竊取到加密會話的密鑰之前,就准備好了大量的候選KEK。當Mallory竊取加密的會話密鑰後,就需要嘗試將它解密,這是准備好了大量事先生成的候選KEK,就能夠大幅度縮短嘗試的時間,這就是 字典攻擊 (dictionary attack)。
如果在生成KEK時加鹽,則鹽的長度越大,候選KEK的數量也會隨之增大,事先生成的的候選KEK就會變得非常困難。只要Mallory還沒有得到鹽,就無法生成候選KEK。這是因為加鹽之後,候選KEK的數量會變得非常巨大。
具有充足長度的密鑰是無法用人腦記憶的。口令也是一樣,我們也無法記住具有充足比特數的口令。
在PBE中,我們通過口令生成密鑰(KEK),在用這個密鑰來加密會話密鑰(CEK)。由於通過口令生成的密鑰(KEK)強度不如由偽隨機數生成器生成的會話密鑰(CEK),這就好像是將一個牢固的保險櫃的鑰匙放在了一個不怎麼牢固的保險櫃保管,因此在使用基於口令的密鑰時,需要將鹽和加密後的CEK通過物理方法進行保護。例如將鹽和加密後的CEK保存到存儲卡隨身攜帶。
在生成KEK時,通過多次使用單向散列函數就可以提高安全性。例如,將鹽和口令輸入單向散列函數,進行1000次的散列函數所得到的散列值作為KEK來使用,是一個不錯的方法。
像這樣將單向散列函數進行多次迭代的方法稱為 拉伸 (stretching)。
該系列的主要內容來自《圖解密碼技術第三版》
我只是知識的搬運工
文章中的插圖來源於原著
E. 什麼是古典密碼
乘積和迭代:多種加密方法混合使用 對一個加密函數多次迭代 古典密碼編碼方法: 置換,代替,加法 把明文中的字母重新排列,字母本身不變,但其位置改變了,這樣編成的密碼稱為置換密碼。 最簡單的置換密碼是把明文中的字母順序倒過來,然後截成固定長度的字母組作為密⑴單表代替密碼
①、加法密碼
A和B是有 n個字母的字母表。 定義一個由A到B的映射:f:A→B f(ai )= bi=aj j=i+k mod n 加法密碼是用明文字母在字母表中後面第 k個字母來代替。 K=3 時是著名的凱撒密碼。 愷撒密碼——歷史上第一個密碼技術 「愷撒密碼」是古羅馬愷撒大帝在營救西塞羅戰役時用來保護重要軍情的加密系統(高盧戰記)。
②、乘法密碼
?A和B是有n個字母的字母表。?定義一個由A到B的映射:f:A→B f(ai )= bi= aj j=ik mod n 其中,(n,k)=1。?注意:只有(n,k)=1,才能正確解密。
③密鑰片語代替密碼
隨機選一個詞語,去掉其中的重復字母,寫到矩陣的第一行,從明文字母表中去掉這第一行的字母,其餘字母順序寫入矩陣。然後按列取出字母構成密文字母表
編輯本段⑵、多表代替密碼
?單表代替密碼的安全性不高,一個原因是一個明文字母只由一個密文字母代替。?構造多個密文字母表,?在密鑰的控制下用相應密文字母表中的一個字母來代替明文字母表中的一個字母。一個明文字母有多種代替。? Vigenere密碼:著名的多表代替密碼
(3)、代數密碼:
① Vernam密碼
明文、密文、密鑰都表示為二進制位: M=m1,m2,… ,mn K =k1,k2,… ,kn C =c1,c2,… ,cn
② 加密
c1= mi⊕ ki ,i=1,2,… ,n 解密 : m1= ci⊕ ki ,i=1,2,… ,n
③
因為加解密演算法是模2加,所以稱為代數密碼。
④對合運算
f=f-1,模 2加運算是對合運算。 密碼演算法是對和運算,則加密演算法=解密演算法,工程實現工作量減半。
⑤ Vernam密碼經不起已知明文攻擊
。
⑥
如果密鑰序列有重復,則Vernam密碼是不安全的。
⑦一種極端情況
一次一密 ? 密鑰是隨機序列。 ? 密鑰至少和明文一樣長。 ? 一個密鑰只用一次。
⑧
一次一密是絕對不可破譯的,但它是不實用的。
⑨
一次一密給密碼設計指出一個方向,人們用序列密碼逼近一次一密。
F. 古典加密技術中最基本的兩種演算法是什麼
替代演算法和置換移位法。
1.替代演算法
替代演算法指的是明文的字母由其他字母或數字或符號所代替。最著名的替代演算法是愷撒密碼。凱撒密碼的原理很簡單,其實就是單字母替換。我們看一個簡單的例子:
明文:abcdefghijklmnopq
密文:defghijklmnopqrst
若明文為student,對應的密文則為vwxghqw 。在這個一一對應的演算法中,愷撒密碼將字母表用了一種順序替代的方法來進行加密,此時密鑰為3,即每個字母順序推後3個。由於英文字母為26個,因此愷撒密碼僅有26個可能的密鑰,非常不安全。
為了加強安全性,人們想出了更進一步的方法:替代時不是有規律的,而是隨機生成一個對照表。
明文:abcdefghijklmnopqrstuvwxyz
密文:xnyahpogzqwbtsflrcvmuekjdI
此時,若明文為student,對應的密文則為 vmuahsm 。這種情況下,解密函數是上面這個替代對照表的一個逆置換。
不過,有更好的加密手段,就會有更好的解密手段。而且無論怎樣的改變字母表中的字母順序,密碼都有可能被人破解。由於英文單詞中各字母出現的頻度是不一樣的,通過對字母頻度的統計就可以很容易的對替換密碼進行破譯。為了抗擊字母頻度分析,隨後產生了以置換移位法為主要加密手段的加密方法。
2.置換移位法
使用置換移位法的最著名的一種密碼稱為維吉尼亞密碼。它以置換移位為基礎的周期替換密碼。
前面介紹的替代演算法中,針對所有的明文字母,密鑰要麼是一個唯一的數,要麼則是完全無規律可尋的。在維吉尼亞密碼中,加密密鑰是一個可被任意指定的字元串。加密密鑰字元依次逐個作用於明文信息字元。明文信息長度往往會大於密鑰字元串長度,而明文的每一個字元都需要有一個對應的密鑰字元,因此密鑰就需要不斷循環,直至明文每一個字元都對應一個密鑰字元。對密鑰字元,我們規定密鑰字母a,b,c,d……y,z對應的數字n為:0,1,2,3……24,25。每個明文字元首先找到對應的密鑰字元,然後根據英文字母表按照密鑰字元對應的數字n向後順序推後n個字母,即可得到明文字元對應的密文字元。
如果密鑰字為deceptive , 明文為 wearediscoveredsaveyourself,則加密的過程為:
明文: wearediscoveredsaveyourself
密鑰: deceptivedeceptivedeceptive
密文: zicvtwqngrzgvtwavzhcqyglmgj
對明文中的第一個字元w,對應的密鑰字元為d,它對應需要向後推3個字母,w,x,y,z,因此其對應的密文字元為z。上面的加密過程中,可以清晰的看到,密鑰deceptive被重復使用。
古典密碼體制將數學的方法引入到密碼分析和研究中。這為現代加密技術的形成和發展奠定了堅實的基礎。
G. 古典密碼安全演算法有哪些
世界上最早的一種密碼產生於公元前兩世紀。是由一位希臘人提出的,人們稱之為
棋盤密碼,原因為該密碼將26個字母放在5×5的方格里,i,j放在一個格子里,具體情
況如下表所示
1 2 3 4 5
1 a b c d e
2 f g h i,j k
3 l m n o p
4 q r s t u
5 v w x y z
這樣,每個字母就對應了由兩個數構成的字元αβ,α是該字母所在行的標號,β是列
標號。如c對應13,s對應43等。如果接收到密文為
43 15 13 45 42 15 32 15 43 43 11 22 15
則對應的明文即為secure message。
另一種具有代表性的密碼是凱撒密碼。它是將英文字母向前推移k位。如k=5,則密
文字母與明文與如下對應關系
a b c d e f g h i j k l m n o p q r s t u v w x y z
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
於是對應於明文secure message,可得密文為XJHZWJRJXXFLJ。此時,k就是密鑰。為了
傳送方便,可以將26個字母一一對應於從0到25的26個整數。如a對1,b對2,……,y對
25,z對0。這樣凱撒加密變換實際就是一個同餘式
c≡m+k mod 26
其中m是明文字母對應的數,c是與明文對應的密文的數。
隨後,為了提高凱撒密碼的安全性,人們對凱撒密碼進行了改進。選取k,b作為兩
個參數,其中要求k與26互素,明文與密文的對應規則為
c≡km+b mod 26
可以看出,k=1就是前面提到的凱撒密碼。於是這種加密變換是凱撒野加密變換的
推廣,並且其保密程度也比凱撒密碼高。
以上介紹的密碼體制都屬於單表置換。意思是一個明文字母對應的密文字母是確定
的。根據這個特點,利用頻率分析可以對這樣的密碼體制進行有效的攻擊。方法是在大
量的書籍、報刊和文章中,統計各個字母出現的頻率。例如,e出現的次數最多,其次
是t,a,o,I等等。破譯者通過對密文中各字母出現頻率的分析,結合自然語言的字母頻
率特徵,就可以將該密碼體制破譯。
鑒於單表置換密碼體制具有這樣的攻擊弱點,人們自然就會想辦法對其進行改進,
來彌補這個弱點,增加抗攻擊能力。法國密碼學家維吉尼亞於1586年提出一個種多表式
密碼,即一個明文字母可以表示成多個密文字母。其原理是這樣的:給出密鑰
K=k[1]k[2]…k[n],若明文為M=m[1]m[2]…m[n],則對應的密文為C=c[1]c[2]…c[n]。
其中C[i]=(m[i]+k[i]) mod 26。例如,若明文M為data security,密鑰k=best,將明
文分解為長為4的序列data security,對每4個字母,用k=best加密後得密文為
C=EELT TIUN SMLR
從中可以看出,當K為一個字母時,就是凱撒密碼。而且容易看出,K越長,保密程
度就越高。顯然這樣的密碼體制比單表置換密碼體制具有更強的抗攻擊能力,而且其加
密、解密均可用所謂的維吉尼亞方陣來進行,從而在操作上簡單易行。該密碼可用所謂
的維吉尼亞方陣來進行,從而在操作上簡單易行。該密碼曾被認為是三百年內破譯不了
的密碼,因而這種密碼在今天仍被使用著。
古典密碼的發展已有悠久的歷史了。盡管這些密碼大都比較簡單,但它在今天仍有
其參考價值。
H. 古典加密演算法有哪些 古典加密演算法
世界上最早的一種密碼產生於公元前兩世紀。是由一位希臘人提出的,人們稱之為
棋盤密碼,原因為該密碼將26個字母放在5×5的方格里,i,j放在一個格子里,具體情
況如下表所示
1 2 3 4 5
1 a b c 搜索d e
2 f g h i,j k
3 l m n o p
4 q r s t u
5 v w x y z
這樣,每個字母就對應了由兩個數構成的字元αβ,α是該字母所在行的標號,β是列
標號。如c對應13,s對應43等。如果接收到密文為
43 15 13 45 42 15 32 15 43 43 11 22 15
則對應的明文即為secure message。
另一種具有代表性的密碼是凱撒密碼。它是將英文字母向前推移k位。如k=5,則密
文字母與明文與如下對應關系
a b c d e f g h i j k l m n o p q r s t u v w x y z
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
於是對應於明文secure message,可得密文為XJHZWJRJXXFLJ。此時,k就是密鑰。為了
傳送方便,可以將26個字母一一對應於從0到25的26個整數。如a對1,b對2,……,y對
25,z對0。這樣凱撒加密變換實際就是一個同餘式
c≡m+k mod 26
其中m是明文字母對應的數,c是與明文對應的密文的數。
隨後,為了提高凱撒密碼的安全性,人們對凱撒密碼進行了改進。選取k,b作為兩
個參數,其中要求k與26互素,明文與密文的對應規則為
c≡km+b mod 26
可以看出,k=1就是前面提到的凱撒密碼。於是這種加密變換是凱撒野加密變換的
推廣,並且其保密程度也比凱撒密碼高。
以上介紹的密碼體制都屬於單表置換。意思是一個明文字母對應的密文字母是確定
的。根據這個特點,利用頻率分析可以對這樣的密碼體制進行有效的攻擊。方法是在大
量的書籍、報刊和文章中,統計各個字母出現的頻率。例如,e出現的次數最多,其次
是t,a,o,I等等。破譯者通過對密文中各字母出現頻率的分析,結合自然語言的字母頻
率特徵,就可以將該密碼體制破譯。
鑒於單表置換密碼體制具有這樣的攻擊弱點,人們自然就會想辦法對其進行改進,
來彌補這個弱點,增加抗攻擊能力。法國密碼學家維吉尼亞於1586年提出一個種多表式
密碼,即一個明文字母可以表示成多個密文字母。其原理是這樣的:給出密鑰
K=k[1]k[2]…k[n],若明文為M=m[1]m[2]…m[n],則對應的密文為C=c[1]c[2]…c[n]。
其中C[i]=(m[i]+k[i]) mod 26。例如,若明文M為data security,密鑰k=best,將明
文分解為長為4的序列data security,對每4個字母,用k=best加密後得密文為
C=EELT TIUN SMLR
從中可以看出,當K為一個字母時,就是凱撒密碼。而且容易看出,K越長,保密程
度就越高。顯然這樣的密碼體制比單表置換密碼體制具有更強的抗攻擊能力,而且其加
密、解密均可用所謂的維吉尼亞方陣來進行,從而在操作上簡單易行。該密碼可用所謂
的維吉尼亞方陣來進行,從而在操作上簡單易行。該密碼曾被認為是三百年內破譯不了
的密碼,因而這種密碼在今天仍被使用著。
古典密碼的發展已有悠久的歷史了。盡管這些密碼大都比較簡單,但它在今天仍有
其參考價值。世界上最早的一種密碼產生於公元前兩世紀。是由一位希臘人提出的,人們稱之為
棋盤密碼,原因為該密碼將26個字母放在5×5的方格里,i,j放在一個格子里,具體情
況如下表所示
1 2 3 4 5
1 a b c 搜索d e
2 f g h i,j k
3 l m n o p
4 q r s t u
5 v w x y z
這樣,每個字母就對應了由兩個數構成的字元αβ,α是該字母所在行的標號,β是列
標號。如c對應13,s對應43等。如果接收到密文為
43 15 13 45 42 15 32 15 43 43 11 22 15
則對應的明文即為secure message。
另一種具有代表性的密碼是凱撒密碼。它是將英文字母向前推移k位。如k=5,則密
文字母與明文與如下對應關系
a b c d e f g h i j k l m n o p q r s t u v w x y z
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
於是對應於明文secure message,可得密文為XJHZWJRJXXFLJ。此時,k就是密鑰。為了
傳送方便,可以將26個字母一一對應於從0到25的26個整數。如a對1,b對2,……,y對
25,z對0。這樣凱撒加密變換實際就是一個同餘式
c≡m+k mod 26
其中m是明文字母對應的數,c是與明文對應的密文的數。
隨後,為了提高凱撒密碼的安全性,人們對凱撒密碼進行了改進。選取k,b作為兩
個參數,其中要求k與26互素,明文與密文的對應規則為
c≡km+b mod 26
可以看出,k=1就是前面提到的凱撒密碼。於是這種加密變換是凱撒野加密變換的
推廣,並且其保密程度也比凱撒密碼高。
以上介紹的密碼體制都屬於單表置換。意思是一個明文字母對應的密文字母是確定
的。根據這個特點,利用頻率分析可以對這樣的密碼體制進行有效的攻擊。方法是在大
量的書籍、報刊和文章中,統計各個字母出現的頻率。例如,e出現的次數最多,其次
是t,a,o,I等等。破譯者通過對密文中各字母出現頻率的分析,結合自然語言的字母頻
率特徵,就可以將該密碼體制破譯。
鑒於單表置換密碼體制具有這樣的攻擊弱點,人們自然就會想辦法對其進行改進,
來彌補這個弱點,增加抗攻擊能力。法國密碼學家維吉尼亞於1586年提出一個種多表式
密碼,即一個明文字母可以表示成多個密文字母。其原理是這樣的:給出密鑰
K=k[1]k[2]…k[n],若明文為M=m[1]m[2]…m[n],則對應的密文為C=c[1]c[2]…c[n]。
其中C[i]=(m[i]+k[i]) mod 26。例如,若明文M為data security,密鑰k=best,將明
文分解為長為4的序列data security,對每4個字母,用k=best加密後得密文為
C=EELT TIUN SMLR
從中可以看出,當K為一個字母時,就是凱撒密碼。而且容易看出,K越長,保密程
度就越高。顯然這樣的密碼體制比單表置換密碼體制具有更強的抗攻擊能力,而且其加
密、解密均可用所謂的維吉尼亞方陣來進行,從而在操作上簡單易行。該密碼可用所謂
的維吉尼亞方陣來進行,從而在操作上簡單易行。該密碼曾被認為是三百年內破譯不了
的密碼,因而這種密碼在今天仍被使用著。
古典密碼的發展已有悠久的歷史了。盡管這些密碼大都比較簡單,但它在今天仍有
其參考價值。
I. 關於棋盤密碼(一種古典密碼) 怎麼解密,加密
棋盤密碼的加密方法,其實方法十分簡單,在密碼學並不發達的古代,也夠用了。棋盤密碼的解題思路是這樣
這種密碼的原理是:通信雙方各掌握一個m*n列的矩陣,比如A列第一行寫上「我」,A列第2行寫上「的」……以此類推,構成:
所以,「我的名字叫XXX」的密文即:A1A2A3A4B1B2。這樣,一份密文就出來了。
使用這種密碼表的加密也叫作 ADFGX 密碼(密文中只有 A D F G X)
明文:HELLO 密文:DD XF AG AG DF
對於解密,對密文每兩個字元一組,分別進行解密
由於密文僅包含5個字元,所以其密鑰(也就是密碼表)只有5!種可能
寫腳本暴力攻擊(brute-force)即可
棋盤密碼的由來:
公元前2世紀前後希臘人提出了棋盤密碼,在當時得到了廣泛的運用。同時,它也是密碼史上第一個密碼。棋盤密碼通過將26個字母設法變成十位數來達到加密的目的。棋盤密碼的密鑰是一個5×5的棋盤,將26個英文字母放置在裡面。其中 i 和 j 共用一個密碼。