能力值:
( LV2,RANK:10 )
|
-
-
2 楼
数据太短太少了
明显会有多解
|
能力值:
(RANK: )
|
-
-
3 楼
猜想一下, 下列原文/密文是否正确?
原文 密文(16进制数据)
你你你 94D6FC81E8FD
|
能力值:
( LV9,RANK:270 )
|
-
-
4 楼
RC4的算法虽然简单,但Ron Rivest的设计确实精巧。作为一种Stream Cipher,由本例最长的一组原文+密文很容易得到它的keystream:
原文(ANSI String): "你你你你"
原文(Hex): C4 E3 C4 E3 C4 E3 C4 E3
密文(Hex): 94 D6 FC 81 E8 FD C8 8C
Keystream(Hex): 50 35 38 62 2C 1E 0C 6F
Keystream是与原文无关的,由Key经KSA(key-scheduling algorithm)算法生成一个256字节的"State Array"(char S[256]),然后从中按PRGA(pseudo-random generation algorithm)算法挑选出特定字节构成加密/解密时的序列。
对一个特定的Key,S是确定的,PRGA产生的Keystream也就固定了。也就是说Key与S是一一对应的,从一个给定的S可以逆出Key。所以实践中要求每个Key只能使用一次,否则被认为是不安全的。
比如,就算不知道本例的Key,我们也可直接用Keystream来正确加密/解密字节数≤8的序列:
原文(ANSI String): "我我我我"
原文(Hex): CE D2 CE D2 CE D2 CE D2
密文(Hex): 9E E7 F6 B0 E2 CC C2 BD
显然这是危险的!
现在的问题在于Keystream太短,只有8字节,约束条件太少,很可能是多解。即很可能穷举出某个Key,但仅Keystream的前8个字节符合本例。
以一个RC4算法的具体实例来说明。
图中:Key="Secret",原文="Attack at dawn"。(取自 http://en.wikipedia.org/wiki/RC4页面的"Test vectors"节。)
Key对应的Keystream为:
Keystream(Hex): 04 D4 6B 05 3C A8 7B 59 41 72 30 2A EC 9B ...
现在我们只知道"State Array"中的8个值,剩下的值不确定,同时还不能确定这些值在数组中的位置(idx)。那么Key就有相当的不确定性。
或许可以假定一个或几个值的位置而推算出其它值的位置,这个“假定”就已经带来了不确定性。
|
能力值:
( LV9,RANK:270 )
|
-
-
5 楼
折腾数日,“独上高楼”,望不尽的“天涯路”。而“蓦然回首”,叹“却在灯火阑珊处”。
不是运气,也非偶然,乃缘于近在咫尺的必然。
密钥:"12345" (0x31, 0x32, 0x33, 0x34, 0x35)
|
|
|