考虑我有这个示例密钥
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转换,我会得到相同的结果吗?谢谢!