Serpent Sbox转型

时间:2014-10-21 15:59:22

标签: cryptography

考虑我有这个示例密钥

15FC0D48 D7F8199C BE399183 4D96F327 10000000 00000000  00000000  00000000
w-8         w-7      w-6       w-5     w-4       w-3       w-2       w-1

创建第一个K0密钥计划对

(k0,k1,k2,k3)=S3(w0,w1,w2,w3)=K0

将此公式用于Serpent Key Schdule

wi=(wi-8 xor wi-5 xor wi-3 xor wi-1 xor phi xor i)<<<11

1)i = 0

w0=w-8 xor w-5 xor w-3 xor w-1 xor 9e3779b9 xor 0<<<11=15FC0D48 xor 4D96F327 xor 00000000 xor 00000000 xor 9e3779b9 xor 0 <<<11=EC3EB632

2)i = 1

w1=w-7 xor w-4 xor w-2 xor w0 xor 9e3779b9 xor 1<<<11=D7F8199C xor 10000000 xor  00000000 xor EC3EB632 xor 9e3779b9 xor  1<<<11=8EB0B5AF

3)i = 2

w2=w-6 xor w-3 xor w-1 xor w1 xor 9e3779b9 xor 2<<<11=BE399183 xor 00000000 xor 00000000 xor 8EB0B5AF xor 9e3779b9 xor  2<<<11=F2ECBD75

4)i = 3

w3=w-5 xor w-2 xor w0 xor w2 xor 9e3779b9 xor 3<<<11=4D96F327 xor 00000000  xor EC3EB632 xor F2ECBD75 xor 9e3779b9 xor 3<<<11=9C0ED66B

因为k0将由Sbox3

创建
S3(w0,w1,w2,w3)
EC3EB632
binary form:
0  1  2  3  4  5  6  7  8  9  10  11 12 13 14 15
11|10|11|00|00|11|11|10|10|11|01|10|00|11|00|10|
after Sbox3
11101010001111001110110001101100
EA3CEC6C


8EB0B5AF
binary form:
0  1  2  3  4  5  6  7  8  9  10  11 12 13 14 15
10|00|11|10|10|11|00|00|10|11|01|01|10|10|11|11
after Sbox3
10110110101100101000111001001111
B6B28E4F

F2ECBD75
binary form:
0  1  2  3  4  5  6  7  8  9  10  11 12 13 14 15
11|11|00|10|11|10|11|00|10|11|11|01|01|11|01|01
after Sbox3
11010110011111101111001111001001
D67EF3C9

9C0ED66B
binary form:
0  1  2  3  4  5  6  7  8  9  10  11 12 13 14 15
10|01|11|00|00|00|11|10|11|01|01|10|01|10|10|11
after Sbox3
10111011010111001001110001100010
BB5C9C62

k0={EA3CEC6C B6B28E4F D67EF3C9 BB5C9C62}

我在C#中使用我的解决方案进行SBOX转换:

String key="10011100000011101101011001101011";
prek="";
Uint32 k;
for (int i = sboxpos; i < sboxpos + 1; i++)
{
for (int i2 = 0; i2 < 16; i2++)
{
prek += key.Substring(sbox[i, i2] * 2, 2); //Multiplying on 2 to move byte on appropriate position, as in my example above I transform hex to binary it have 32bits, but Sbox'es moves only bytes. So e.g. the 15's byte is 15*2=30's position plus 2 characters
}
}
k = Convert.ToUInt32(prek, 2);

我的问题是我正在做Serpent的关键时间表,就像在其他实现中他们在Sbox'es中使用&amp;,操作数一样。通过在上面的代码中应用Sbox转换,我会得到相同的结果吗?谢谢!

0 个答案:

没有答案