當前位置:首頁 » 密碼管理 » 如何用密碼學的方法確認發送對象
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何用密碼學的方法確認發送對象

發布時間: 2023-02-05 08:55:41

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. 密碼學的技術應用

Commitment schemes
Secure multiparty computations
電子投票
認證
數位簽名
Cryptographic engineering
Crypto systems
1. 數位簽章(Digital Signature):
這是以密碼學的方法,根據EDI訊息的內容和發信有該把私鑰,任何人都無法產生該簽名,因此比手寫式的簽名安全許多。收信人則以發信人的公鑰進行數位簽章的驗證。
2. 數位信封(Digital Envelope):
這是以密碼學的方法,用收信人的公鑰對某些機密資料進行加密,收信人收到後再用自己的私鑰解密而讀取機密資料。除了擁有該私鑰的人之外, 任何人即使拿到該加密過的訊息都無法解密,就好像那些資料是用一個牢固的信封裝好,除了收信人之外,沒有人能拆開該信封。
3. 安全回條:
收信人依據訊息內容計算所得到的回覆資料,再以收信人的私鑰進行數位簽章後送回發信人,一方面確保收信人收到的訊息內容正確無誤, 另一方面也使收信人不能否認已經收到原訊息。
4. 安全認證:
每個人在產生自己的公鑰之後,向某一公信的安全認證中心申請注冊,由認證中心負責簽發憑證(Certificate),以保證個人身份與公鑰的對應性與正確性。

C. 密碼學的東西:A發出的信息確認只有B收到,B收到的信息確認是A發出的,怎麼實現的

A發出的信息確認只有B收到:如果「只有B收到」,估計得學物理的給你解答。如果「只有B看懂」,那就直接用公鑰加密技術,或者對稱加密技術。
B收到的信息確認是A發出的:消息源認證技術。有三種方法:MAC碼,數字簽名,對稱加密。

又是0懸賞分……

D. 密碼學怎麼學 感覺很難學

需要找本好書看,數學基礎當然不能少

推薦《密碼學引論》by 馮登國,裴定一
如果是英文教材先看《Handbook of Applied Cryptography》by A. Menezes, P. van Oorschot, and S. Vanstone, CRC Press, 1996.

都是好書,入門很好!

E. 密碼演算法的密碼學

(1) 發送者和接收者
假設發送者想發送消息給接收者,且想安全地發送信息:她想確信偷聽者不能閱讀發送的消息。
(2) 消息和加密
消息被稱為明文。用某種方法偽裝消息以隱藏它的內容的過程稱為加密,加了密的消息稱為密文,而把密文轉變為明文的過程稱為解密。
明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、點陣圖、數字化的語音流或數字化的視頻圖像)。至於涉及到計算機,P是簡單的二進制數據。明文可被傳送或存儲,無論在哪種情況,M指待加密的消息。
密文用C表示,它也是二進制數據,有時和M一樣大,有時稍大(通過壓縮和加密的結合,C有可能比P小些。然而,單單加密通常達不到這一點)。加密函數E作用於M得到密文C,用數學表示為:
E(M)=C.
相反地,解密函數D作用於C產生M
D(C)=M.
先加密後再解密消息,原始的明文將恢復出來,下面的等式必須成立:
D(E(M))=M
(3) 鑒別、完整性和抗抵賴
除了提供機密性外,密碼學通常有其它的作用:.
(a) 鑒別
消息的接收者應該能夠確認消息的來源;入侵者不可能偽裝成他人。
(b) 完整性檢驗
消息的接收者應該能夠驗證在傳送過程中消息沒有被修改;入侵者不可能用假消息代替合法消息。
(c) 抗抵賴
發送者事後不可能虛假地否認他發送的消息。
(4) 演算法和密鑰
密碼演算法也叫密碼,是用於加密和解密的數學函數。(通常情況下,有兩個相關的函數:一個用作加密,另一個用作解密)
如果演算法的保密性是基於保持演算法的秘密,這種演算法稱為受限制的演算法。受限制的演算法具有歷史意義,但按現在的標准,它們的保密性已遠遠不夠。大的或經常變換的用戶組織不能使用它們,因為每有一個用戶離開這個組織,其它的用戶就必須改換另外不同的演算法。如果有人無意暴露了這個秘密,所有人都必須改變他們的演算法。
但是,受限制的密碼演算法不可能進行質量控制或標准化。每個用戶組織必須有他們自己的唯一演算法。這樣的組織不可能採用流行的硬體或軟體產品。但竊聽者卻可以買到這些流行產品並學習演算法,於是用戶不得不自己編寫演算法並予以實現,如果這個組織中沒有好的密碼學家,那麼他們就無法知道他們是否擁有安全的演算法。
盡管有這些主要缺陷,受限制的演算法對低密級的應用來說還是很流行的,用戶或者沒有認識到或者不在乎他們系統中內在的問題。
現代密碼學用密鑰解決了這個問題,密鑰用K表示。K可以是很多數值里的任意值。密鑰K的可能值的范圍叫做密鑰空間。加密和解密運算都使用這個密鑰(即運算都依賴於密鑰,並用K作為下標表示),這樣,加/解密函數現在變成:
EK(M)=C
DK(C)=M.
這些函數具有下面的特性:
DK(EK(M))=M.
有些演算法使用不同的加密密鑰和解密密鑰,也就是說加密密鑰K1與相應的解密密鑰K2不同,在這種情況下:
EK1(M)=C
DK2(C)=M
DK2 (EK1(M))=M
所有這些演算法的安全性都基於密鑰的安全性;而不是基於演算法的細節的安全性。這就意味著演算法可以公開,也可以被分析,可以大量生產使用演算法的產品,即使偷聽者知道你的演算法也沒有關系;如果他不知道你使用的具體密鑰,他就不可能閱讀你的消息。
密碼系統由演算法、以及所有可能的明文、密文和密鑰組成的。
基於密鑰的演算法通常有兩類:對稱演算法和公開密鑰演算法。下面將分別介紹: 對稱演算法有時又叫傳統密碼演算法,就是加密密鑰能夠從解密密鑰中推算出來,反過來也成立。在大多數對稱演算法中,加/解密密鑰是相同的。這些演算法也叫秘密密鑰演算法或單密鑰演算法,它要求發送者和接收者在安全通信之前,商定一個密鑰。對稱演算法的安全性依賴於密鑰,泄漏密鑰就意味著任何人都能對消息進行加/解密。只要通信需要保密,密鑰就必須保密。
對稱演算法的加密和解密表示為:
EK(M)=C
DK(C)=M
對稱演算法可分為兩類。一次只對明文中的單個比特(有時對位元組)運算的演算法稱為序列演算法或序列密碼。另一類演算法是對明文的一組比特亞行運算,這些比特組稱為分組,相應的演算法稱為分組演算法或分組密碼。現代計算機密碼演算法的典型分組長度為64比特——這個長度大到足以防止分析破譯,但又小到足以方便使用(在計算機出現前,演算法普遍地每次只對明文的一個字元運算,可認為是序列密碼對字元序列的運算)。 公開密鑰演算法(也叫非對稱演算法)是這樣設計的:用作加密的密鑰不同於用作解密的密鑰,而且解密密鑰不能根據加密密鑰計算出來(至少在合理假定的長時間內)。之所以叫做公開密鑰演算法,是因為加密密鑰能夠公開,即陌生者能用加密密鑰加密信息,但只有用相應的解密密鑰才能解密信息。在這些系統中,加密密鑰叫做公開密鑰(簡稱公鑰),解密密鑰叫做私人密鑰(簡稱私鑰)。私人密鑰有時也叫秘密密鑰。為了避免與對稱演算法混淆,此處不用秘密密鑰這個名字。
用公開密鑰K加密表示為
EK(M)=C.
雖然公開密鑰和私人密鑰是不同的,但用相應的私人密鑰解密可表示為:
DK(C)=M
有時消息用私人密鑰加密而用公開密鑰解密,這用於數字簽名(後面將詳細介紹),盡管可能產生混淆,但這些運算可分別表示為:
EK(M)=C
DK(C)=M
當前的公開密碼演算法的速度,比起對稱密碼演算法,要慢的多,這使得公開密碼演算法在大數據量的加密中應用有限。 單向散列函數 H(M) 作用於一個任意長度的消息 M,它返回一個固定長度的散列值 h,其中 h 的長度為 m 。
輸入為任意長度且輸出為固定長度的函數有很多種,但單向散列函數還有使其單向的其它特性:
(1) 給定 M ,很容易計算 h ;
(2) 給定 h ,根據 H(M) = h 計算 M 很難 ;
(3) 給定 M ,要找到另一個消息 M『 並滿足 H(M) = H(M』) 很難。
在許多應用中,僅有單向性是不夠的,還需要稱之為「抗碰撞」的條件:
要找出兩個隨機的消息 M 和 M『,使 H(M) = H(M』) 滿足很難。
由於散列函數的這些特性,由於公開密碼演算法的計算速度往往很慢,所以,在一些密碼協議中,它可以作為一個消息 M 的摘要,代替原始消息 M,讓發送者為 H(M) 簽名而不是對 M 簽名 。
如 SHA 散列演算法用於數字簽名協議 DSA中。 提到數字簽名就離不開公開密碼系統和散列技術。
有幾種公鑰演算法能用作數字簽名。在一些演算法中,例如RSA,公鑰或者私鑰都可用作加密。用你的私鑰加密文件,你就擁有安全的數字簽名。在其它情況下,如DSA,演算法便區分開來了??數字簽名演算法不能用於加密。這種思想首先由Diffie和Hellman提出 。
基本協議是簡單的 :
(1) A 用她的私鑰對文件加密,從而對文件簽名。
(2) A 將簽名的文件傳給B。
(3) B用A的公鑰解密文件,從而驗證簽名。
這個協議中,只需要證明A的公鑰的確是她的。如果B不能完成第(3)步,那麼他知道簽名是無效的。
這個協議也滿足以下特徵:
(1) 簽名是可信的。當B用A的公鑰驗證信息時,他知道是由A簽名的。
(2) 簽名是不可偽造的。只有A知道她的私鑰。
(3) 簽名是不可重用的。簽名是文件的函數,並且不可能轉換成另外的文件。
(4) 被簽名的文件是不可改變的。如果文件有任何改變,文件就不可能用A的公鑰驗證。
(5) 簽名是不可抵賴的。B不用A的幫助就能驗證A的簽名。 加密技術是對信息進行編碼和解碼的技術,編碼是把原來可讀信息(又稱明文)譯成代碼形式(又稱密文),其逆過程就是解碼(解密)。加密技術的要點是加密演算法,加密演算法可以分為對稱加密、不對稱加密和不可逆加密三類演算法。
對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。此外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量成幾何級數增長,密鑰管理成為用戶的負擔。對稱加密演算法在分布式網路系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。在計算機專網系統中廣泛使用的對稱加密演算法有DES和IDEA等。美國國家標准局倡導的AES即將作為新標准取代DES。
不對稱加密演算法 不對稱加密演算法使用兩把完全不同但又是完全匹配的一對鑰匙—公鑰和私鑰。在使用不對稱加密演算法加密文件時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。加密明文時採用公鑰加密,解密密文時使用私鑰才能完成,而且發信方(加密者)知道收信方的公鑰,只有收信方(解密者)才是唯一知道自己私鑰的人。不對稱加密演算法的基本原理是,如果發信方想發送只有收信方才能解讀的加密信息,發信方必須首先知道收信方的公鑰,然後利用收信方的公鑰來加密原文;收信方收到加密密文後,使用自己的私鑰才能解密密文。顯然,採用不對稱加密演算法,收發信雙方在通信之前,收信方必須將自己早已隨機生成的公鑰送給發信方,而自己保留私鑰。由於不對稱演算法擁有兩個密鑰,因而特別適用於分布式系統中的數據加密。廣泛應用的不對稱加密演算法有RSA演算法和美國國家標准局提出的DSA。以不對稱加密演算法為基礎的加密技術應用非常廣泛。
不可逆加密演算法 的特徵是加密過程中不需要使用密鑰,輸入明文後由系統直接經過加密演算法處理成密文,這種加密後的數據是無法被解密的,只有重新輸入明文,並再次經過同樣不可逆的加密演算法處理,得到相同的加密密文並被系統重新識別後,才能真正解密。顯然,在這類加密過程中,加密是自己,解密還得是自己,而所謂解密,實際上就是重新加一次密,所應用的「密碼」也就是輸入的明文。不可逆加密演算法不存在密鑰保管和分發問題,非常適合在分布式網路系統上使用,但因加密計算復雜,工作量相當繁重,通常只在數據量有限的情形下使用,如廣泛應用在計算機系統中的口令加密,利用的就是不可逆加密演算法。近年來,隨著計算機系統性能的不斷提高,不可逆加密的應用領域正在逐漸增大。在計算機網路中應用較多不可逆加密演算法的有RSA公司發明的MD5演算法和由美國國家標准局建議的不可逆加密標准SHS(Secure Hash Standard:安全雜亂信息標准)等。

F. 密碼技術(十一)之密鑰

  ——秘密的精華

 在使用對稱密碼、公鑰密碼、消息認證碼、數字簽名等密碼技術使用,都需要一個稱為 密鑰 的巨大數字。然而,數字本身的大小並不重要,重要的是 密鑰空間的大小 ,也就是可能出現的密鑰的總數量,因為密鑰空間越大,進行暴力破解就越困難。密鑰空間的大小是由 密鑰長度 決定的。

 對稱密碼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)。

該系列的主要內容來自《圖解密碼技術第三版》
我只是知識的搬運工
文章中的插圖來源於原著

G. 老師把作業發送給學生,如何用密碼學方法,讓同學們相信作業是老師發的結合大數據知識回答

兩個做法,一個是你自己做數字證書,然後給文件簽名,那麼學生看到就知道是你做的。
開會,當面把你的工鑰發給每個人就是了。

二一個就是收集學生的工鑰,可以每人一個,也可以大家都用一個。然後你給作業加密,學生自己可以解密。

也可以都做,就是簽名和加密一起。

證書呢,看自己機器,看資源管理器,看高級,加密……就可以生成數字證書了。

可以簽名的軟體,word可以,pdf也可以,

H. 密碼學筆記

別人用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 握手協議 疊加而成。

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

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

負責 傳遞 變更密碼的信號

發生錯誤時 通知對方

傳輸數據

I. 一篇文章搞定密碼學基礎

密碼技術是網路安全的基礎,也是核心。現在對隱私保護、敏感信息尤其重視,所以不論是系統開發還是App開發,只要有網路通信,很多信息都需要進行加密,以防止被截取篡改,雖然很多人每天都在用密碼學的知識,但並不是人人都知道,謹以此篇科普一下~~~

PS:2016.7.10 補充 散列函數與消息摘要

明文M:原始數據,待加密的數據
密文C:對明文進行某種偽裝或變換後的輸出
密鑰K:加密或解密中所使用的專門工具
加密E:用某種方法將明文變成密文的過程
解密D:將密文恢復成明文的過程

一個密碼系統由五元組(M、C、K、E、D)組成,如圖所示

對稱密碼體制 :對信息進行明/密文變換時,加解和解密使用相同密鑰的密碼體制

非對稱密碼體制 :對信息進行明/密文變換時,加密和解密密鑰不相同的密碼體制
在非對稱密碼體制中,每個用戶都具有一對密鑰,一個用於加密,一個用於解密,其中加密密鑰可以公開,稱之為公鑰,解密密鑰屬於秘密,稱之為私鑰,只有用戶一人知道。

混合加密體制 :同時使用對稱密碼和非對稱密碼的體制
對稱加密的一個很大問題就是通信雙方如何將密鑰傳輸給對方,為了安全,一般採取帶外傳輸,也就是說如果加密通信是在網路,那麼密鑰的傳輸需要通過其他途徑,如簡訊,即使如此,也很難保證密鑰傳輸的安全性。非對稱加密加解最大的優點是事先不需要傳輸密鑰,但速度慢,因此實際應用中,經常採取混合密碼體制。假設A與B要實現保密通信,工作過程如下:

Hash函數也稱為 散列函數 ,它能夠對不同長度的輸入信息,產生固定長度的輸出。這種固定長度的輸出稱之為原消息的散列或者 消息摘要 ,消息摘要長度固定且比原始信息小得多,一般情況下,消息摘要是不可逆的,即從消息摘要無法還原原文,為什麼說一般情況下呢,中國出了個牛人王小雲,感興趣的自行Google~~~

散列演算法:散列演算法就是產生信息散列值的演算法,它有一個特性,就是在輸入信息中如果發生細微的改變,比如給變了二進制的一位,都可以改變散列值中每個比特的特性,導致最後的輸出結果大相徑庭,所以它對於檢測消息或者密鑰等信息對象中的任何微小的變化非常有用。

一個安全的散列演算法H需要滿足:

數字簽名是指發送方以電子形式簽名一個消息或文件,簽名後的消息或文件能在網路中傳輸,並表示簽名人對該消息或文件的內容負有責任。數字簽名綜合使用了消息摘要和非對稱加密技術,可以保證接受者能夠核實發送者對報文的簽名,發送者事後不抵賴報文的簽名,接受者不能篡改報文內容和偽造對報文的簽名。

數字簽名需要做到兩點:

數字簽名的過程與示意圖:

數字證書是一種權威的電子文檔,由權威公正的第三方認證機構(CA)簽發,廣泛用於涉及需要身份認證和數據安全的領域。

數字證書種類:

數字證書功能:
1、信息保密
2、身份確認
3、不可否認性
4、數據完整性

數字證書的格式:
最簡單的可以是:公鑰、名稱和證書授權中心的數字簽名,目前 X.509 是一種通用的證書格式,它的第三個版本目前使用廣泛,證書內容包括:版本、序列號、簽名演算法標識、簽發者、有效期、主體、主體公開密鑰、CA的數字簽名、可選型等等

J. 關於密碼學。假定用戶A想把一個秘密信息發送給其他5個用戶.

這要看你這個加密是做什麼用的了,如果是給自己簽名就可以,而如果是加密消息傳輸的話就不行。你要知道每個人只能有對方的公鑰和自己的私鑰。