下面是初始置換**。
如何操作的呢?在ip中我們先把原資料的第一位放在第58位上,第二位放到第50位上。。。把64位的輸入全部按照**置換。置換完畢後我們就可以進入到後面的round演算法中去了,在輸出的時候我們要通過ip-1將原資料還原。可以看到在ip-1中,我們將在第58位的位元組重新放回到第一位中,將第50位上的放回到第2位上。。。
ip表和ip-1表可以自己diy,但是必須要對應。
key的初始位元組是56 bits 的,然後通過圖中的round key生成演算法,根據初始key生成k1-k16的subkeys.
56 bits key首先進行置換,置換後分為c0和c1兩部分,之後進行cyclic shift。
cyclic shift是什麼?位元組移位,比如每個位元組向右移動兩位或者向左移動1位。
01011–>向右移動兩位–>11010
將c0和d0 cyclic shift之後得到c1和d1,將兩者combine之後經過p2置換,得到48位的round key k1。將k1輸出後,c1和d1將再進行cyclic shift,同理得到c2,d2之後得到k2。
k3-k16同理得到。
要注意的是所有的round key 都是基於初始key生成的,這個演算法有且只有乙個輸入那就是初始56位的key,輸出k1-16 這16個subkeys.。
64位的原資料輸入在經過ip置換後進入round 1,首先分位兩部分l0和r0。
r0直接賦值給l1,之後r0進行expansion,將32位擴充套件到48位(計算操作如上圖),之後與在round key演算法中生成的48位的k1進行xor運算。運算後的結果進入到s-box進行操作。
s-box是固定的8個box,48位的資料進入到8個box中每個box處理6位,處理後每個box輸出4位。8個4位資料結合後得到32位的結果。des的s-box如下:
具體如何操作的呢?
我們以s-box1為例子。
假設輸入的6位是011001
那麼他的第一位和最後一位01將作為行數,01換成十進位制是1。第一行是0,第二行1,第三行2,第四行3,所以我們選擇第二行。
中間4位1100作為列數,1100的十進位制是12,同樣注意第一列是0,所以我們要找第13列。
第二行第13列是多少?
99–>1001
所以輸出的4位是1001
同理s-box2-8做著同樣的工作。
得到32位後進行第二次置換,操作如下。
置換後與l0進行xor運算得到r1.
之後用l1和r1進入到下一輪。
要注意最後一輪不需要進行交換
進行完16輪後,進行ip-1置換,從而得到密文。
解密步驟和加密步驟相同,唯一的區別就是第一輪使用的key是k16,換言之,加密時最後一輪用的round key 在解密時第一輪用,加密時第一輪用的round key 在解密時最後一輪用。
有乙個我模仿des結構製作的實踐程式可以加深理解。
wenbo mao, modern cryptography, prentice-hall, 2003.
jonathan katz and yehuda lindell, introduction to modern cryptography, 2nd edition, crc press, 2015.
w stallings, cryptography and network security, fourth (or later) edition, prentice hall, 2006.
j. pieprzyk, t, hardjono and j. seberry, cryptography: an introduction to computer security,
springer verlag, 2003.
guo, f., susilo, w., mu, y. introduction to security reduction, springer, 2018.
現代密碼學(一
0x01.分組密碼 0x02.分組密碼基本設計原則 安全原則 1.混亂 代替密碼 2.發散 移位密碼 實現原則 0x03.分組密碼設計方法 1.乘積密碼 例項 2.迭代密碼 通過簡單的密碼函式或者簡單的密碼,多次迭代,轉換為更複雜的密碼。迭代密碼常見的模型有s p模型 代替 置換網路 feistel...
現代密碼學之橢圓曲線ECC
橢圓曲線乘法 橢圓曲線結合 elgamal cryptosystem計算例子展示 手算帶步驟 判斷乙個橢圓曲線上有幾個點 reference ecc是由victor miller and neal koblitz1985引入的。對於dsa,rsa,我們需要很大的金鑰長度,而ecc只需要特別餓小的金鑰...
現代密碼學之零知識證明
reference 什麼是零知識證明?涉及驗證者和驗證者的一種協議,使驗證者能夠使驗證者相信某個語句是真的,而不透露任何其他資訊。換句話說,零知識證明就是向你證明我知道某件事的同時,不會向你暴漏這個事情的任何資訊。舉乙個經典的例子 finding wally 這個人是 wally 我們要在下面這張圖...