一次一密,DES
提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件
加密
前言
個人學習整理筆記,希望能對後來者有所幫助。
提示:以下是本篇文章正文內容,下面案例可供參考
一、一次一密(One-time password)
一個序列密碼稱為一次一密必須滿足以下條件:
- 通過真隨機數生成器得到金鑰序列s0,s1,s2,…
- 只有合法的通訊方才知道金鑰序列;
- 每個金鑰序列位si僅適用一次。這意味著每個明文位都需要一個金鑰位,因此,一次一密的金鑰長度必須和明文長度一樣
一次一密是無條件安全的。
例項:假設傳送方要傳送“short"這個單詞給接收方。
傳送方:
-
使用ASCII編碼來轉換 “short”這個詞,轉換後會得到下面這一串二進位制資訊:
0111001101101000011011110111001001110100 -
接下來你需要一個和上面二進位制串長度完全一致的金鑰,如:
0110010101101010001110010010011101100100 -
我們將這兩組字串進行XOR 運算,得到:
0001011000000010010101100101010100010000
傳送方將這串資料傳送給接收方
接收方:
接收方得到資料後將其與金鑰進行XOR運算,得到傳送方的資料,再利用ascii編碼即可得到正確的資訊。
二、分組密碼(Block cipher)
1.DES
DES(Data Encryption Standard,資料加密標準)是一種使用56位金鑰對64位長分組進行加密的密碼。它是一種對稱密碼,即加密過程和解密過程使用相同的金鑰。DES對明文中的每個分組的加密過程都包含16輪,且每輪操作完全相同,每輪採用的子金鑰不同,並且所有子金鑰ki都是從主金鑰k中推到出來的。
DES加密過程:
- 64位金鑰經過子金鑰產生演算法產生出16個子金鑰:K1,K2,…,K16,分別供第一次,第二次,…,第十六次加密使用。
以下為子金鑰產生流程圖:
子金鑰產生需經過置換選擇1、迴圈左移、置換選擇2等變換,產生出16個48位長的子金鑰。
(1)置換選擇1
64位的金鑰為8個位元組,每個位元組的前七位是真正的金鑰位,第8位為奇偶校驗位,因此DES真正金鑰位56位。
上圖表示置換選擇1結束後,C0、D0的值是由原金鑰中的哪幾位構成。
(2)置換選擇2
將Ci和Di合併成一個56位的中間資料,置換選擇2從中選擇一個48位的子金鑰Ki。
2.16輪迭代
(1)初始置換IP
初始置換的作用是將64位明文打亂重排,並分成左右兩部分L0和R0,每部分32位。
(2)加密部分
上一輪的Ri將作為下一輪的Li+1,而Li則通過加密運算成為下一輪的Ri+1。
加密函式f:
-
首先將輸入分成8個4位的分組
-
通過E-盒將4位的分組擴充套件成6位的分組,此時得到48位的輸入長度。
-
將得到48位與輪金鑰Ki進行XOR操作,並將8個6位長的分組送入8個S-盒中,得到8個4位長的分組,即得到了32位的輸出。
-(S-盒可以將6位的輸入對映為4位的輸出,按照6位中首尾兩位組成的二進位制位行,中間四位組成的二進位制位列,從S盒中進行查詢,得到4位輸出)
例:100101,首尾兩位為11,則表示數字3,則第4行,中間四位0010,則表示數字2,則為第3列(行列均從0開始計數) -
32位的輸出進行P置換
最後得到的32位輸出則為下一輪的Ri+1
注意:最後一輪得到的Ri和Li不進行交換
(3)逆初始置換IP-1
逆初始置換是初始置換IP的逆置換,它把十六次加密迭代的結果打亂重排,形成64位密文。
以上便是DES的加密過程。
DES解密
由於DES的運算時對合運算,所以加密和解密可用同一個運算,只是子金鑰使用順序不同。
把64位密文當做明文輸入,而且第一次解密迭代使用子金鑰K16,第二次解密迭代使用子金鑰K15,…,第十六次解密迭代使用子金鑰K1,最後輸出的就是64位明文。
解密過程可用如下數學公式表示:
總結
本文主要介紹了一次一密的概念和DES演算法。