krizal 发表于 2009-4-16 11:47:11

DES密碼系統演算法(一)-回合金鑰的產生 重點整理By Krizal Chen

DES密碼系統演算法(一)-回合金鑰的產生 重點整理
前言:
昨天晚上我弟突然拿出一份像電路圖和密碼表的東西給我,
問我會不會,我跟他說這是幹什麼用的,他說是期中考要用的,
看了下不就是鼎鼎大名的密碼演算法之一的DES,
想不到電機的也要懂DES,那讀資工、資管的情何以堪,
DES原本是有想看下,但是個人不常用,所以就一直擱著,
我就跟我弟說 我對DES沒什麼研究,但給我30分~1小時,
我給你答案。

開始看了下,感覺密密麻麻的亂碼,但是hack玩習慣了,
這些都是小事,花了些時間看了下原理,感覺上還是蠻easy的。

本文:
DES屬於近代密碼系統,
設計原理為Shannon所提出的加密系統(Product Cipher)
DES主要分三部分:
1.回合金鑰 Key(do 16 times)
2.加密(do 16 times)
3.解密(do 16 times)

回合金鑰產生:
(1.)每7bit加入 odd parity check,
把56 bit的key擴展到64bit。
(2.)將64 bit的key依照KP(Key Permutation)重新分配,
重新分配後減縮為原本的56bit,切割56bit各半為28bit
(Kl & Kr = 28bit)。
(3.)分別對Kl 和 Kr做 左循環位移(LS)。
(4.)將移位後之Kl和Kr依照
CP(Compression Permutation)重新分配,
即產生key1。
(5.)重複step 3. 和 step 4.直到16組key都產生即可
(key1、key2、key3...key16)。

Permutation table ex:
http://i241.photobucket.com/albums/ff103/shin_ken/permutation1.png
Permutation operation ex:
http://i241.photobucket.com/albums/ff103/shin_ken/permutation2.png

結語:
盡量寫的簡單扼要,重要的步驟大概都列出來了,
關於實例要寫一大堆code table,有興趣的再提出。

Krizal Chen
2009 04 16 Thur


原帖:
http://tw.myblog.yahoo.com/dsght-krizal/article?mid=2000&prev=-1&next=1999
http://dsght-master-krizal.spaces.live.com/default.aspx

[ 本帖最后由 krizal 于 2009-4-16 12:26 编辑 ]

krizal 发表于 2009-4-16 11:50:35

emu618、emumax和宇宙各放一帖,
讓想多學點東西的人看,
對實例產生有興趣的,自行跟我連絡。

而關於lz77 和 lz78 family的加密,
有興趣的也可以去看看,應該比DES簡單點。

krizal 发表于 2009-4-16 11:57:53

個人是很客觀的,
如果不需要這種帖,
也可以提出,以後就不再放出。

慵懒悠悠 发表于 2009-4-16 12:12:29

嘛,现在在信息安全课上有上密码学

DES的话,是典型的分组密码算法
整个算法流程而言并不算复杂,16轮的迭代加密,最后逆IP置换
算法流程:
IP(X)
   FOR i=1 to 16
            L(i)=R(i-1)
            L(i)=R(i-1)⊕f(R(i-1),k(i))
   NEXT i
IP^-1(x)

krizal 发表于 2009-4-16 12:25:17

原帖由 慵懒悠悠 于 2009-4-16 12:12 发表 http://bbs.emu618.com/forum/images/common/back.gif
嘛,现在在信息安全课上有上密码学

DES的话,是典型的分组密码算法
整个算法流程而言并不算复杂,16轮的迭代加密,最后逆IP置换
算法流程:
IP(X)
   FOR i=1 to 16
            L(i)=R(i-1)
            ...
是阿,麻煩的是要建table花時間。:loveliness:

krizal 发表于 2009-4-16 12:44:01

void DES::SubstitutionBoxes()
{
        int s1={
                14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
                0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
                4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
                15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13
          };

        int s2={
                15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,
                3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
                0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
                13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9
           };

        int s3={
                10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
                13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
                13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
                1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12
           };

        int s4={
                7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
                13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
                10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
                3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14
           };

        int s5={
                2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
                14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
                4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
                11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3
           };

        int s6={
                12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
                10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
                9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
                4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13
           };

        int s7={
                4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
                13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
                1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
                6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12
           };

        int s8={
                13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
                1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
                7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
                2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11
           };
}

[ 本帖最后由 krizal 于 2009-4-16 12:46 编辑 ]

慵懒悠悠 发表于 2009-4-16 12:53:10

这也就是我不怎么喜欢DES的原因所在,算法简单,但实现的时候数据的结构要另外考虑

MD5这样的单向杂凑多好...

krizal 发表于 2009-4-16 15:23:08

原帖由 慵懒悠悠 于 2009-4-16 12:53 发表 http://bbs.emu618.com/forum/images/common/back.gif
这也就是我不怎么喜欢DES的原因所在,算法简单,但实现的时候数据的结构要另外考虑

MD5这样的单向杂凑多好...

哈 各種演算法各有優缺點,
DES 演算法簡單,單純用XOR執行快速,
就是需要再建立PERMUTATION TABLE.

MD5 不可逆HASH演算,破解較困難,
但是只能單向驗證。

疾风之狼 发表于 2009-4-16 23:41:01

支持一下,我对密码没什么研究。:loveliness:
页: [1]
查看完整版本: DES密碼系統演算法(一)-回合金鑰的產生 重點整理By Krizal Chen