原创
sharks的'69'式密码
2007-12-1 18:22
4683
7
7
分类:
软件与OS
http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=2777596
再来陪你玩个好玩的冬冬 |
sharks 发表于 2007-12-1 15:55 侃单片机 ←返回版面 举报该贴 |
偶来陪Hot大叔玩69。
各位!不要误会!我说的确是数字69 (六十九, 陆拾玖!)。
把2个69中间加个0,就变成69069。(不要砸我) 找一个整数,8位的不要,32位的也不要,只要16位的 把这个数乘以69069,取16位余数,再加1,看看得到什么? 没看出来? 把结果再乘以69069,取16位余数,再加1,看看? 还没看出来?把结果再乘以69069,取16位余数,再加1,看看? 真没看出来?上一步for()一个10000遍,printf看看... .... 没看出来我就放心了。这是一个高性能的伪随机数序列。(Quake3源代码里找来的算法)
知道我要干啥了吧? 这个序列既然是随机数,说明序列前后任意N个数无关联。从后面的数无法预测前面的数。依次类推,第一个数无法推知。 第一个数有自己定,记好了当密码,产生一串串随机数。把信息安字节和随机数序列异或。出来还是一个随机数串,原始信息被淹没了。必须按照原始的序列顺序重新产生随机数,再把随机字串异或回去,才能得到原始信息
和本贴无太大联系,看看有什么其他启发而已。
|
|
这个"算法"名字不雅~~~ |
hotpower 发表于 2007-12-1 16:50 侃单片机 ←返回版面 举报该贴 |
这个"算法"名字不雅~~~而且65536次攻击即可破解
俺对此算法的理解:
1.找1个16位的数进行你的'69'式运算,10000遍实际和1次一样,无非是加大破解时间.因为取余后已不能可逆. 只要加密算法不可逆,就只能逼迫解密者穷举.
2.这实际是个16位的"长密钥",只要知道此算法,那么就应该有65536个这样的运算结果---65536组"长密钥"随机"密钥串".
3.用其中1组"长密钥"随机"密钥串"对明文加密(异或),得到对应的"密文".
所以此算法和菜农的CRC密码中的CRC8属于同级(17位比‘69’密码多1位)~~~
不同之处在于10000遍的折腾~~~
实际上采用CRC多次加密技术,折腾绝不低于这'69'式~~~
|
|
俺研究CRC密码就是要增大实际真的密钥长度 |
hotpower 发表于 2007-12-1 17:41 侃单片机 ←返回版面 举报该贴 |
不要被'69'密码吓到,它说穿了实际真的密钥长度就是16位.
在最简单的CRC8密码中,因为有初值(8位),权(8位)和移动方向(1位)
对第1个明文字节加密时,需要初值,权和方向这3个密钥来对明文字节进行非典的CRC8运算,
而非固定权(如经典的CRC8为X8+X5+X4+1的权为0x18,PEC为X8+X2+X1+1的权为0x03)及固定方向(右移CRC8,左移PEC).
而且基本的CRC密码和CRC运算是一样的,本次的初值就是上次CRC结果.
这样就时密钥减少了1位.
即CRC8权右移用0x18和0x19是一样的,PEC权左移用0x03和0x83是一样的.
故实际密钥位初值(8位)权(7位)方向(1位)
所以,要想让CRC密码再增大1位,就不能采用"本次的初值就是上次CRC结果"
而且它的权始终没变,这样即可通过任意2个连续的密文字节攻击256次即可破解.
故必须利用明文流数据使算法可逆但不可倒推出初值和权及方向.
所以应该采用: 本次的初值就是上次CRC的权,本次的权就是上次的明文. 或本次的初值就是上次CRC的明文,本次的权就是上次的初值.
如果再精细点,可以: 本次的初值就是上次CRC的权,本次的权就是上次的明文异或上次的初值. 或....
这样就得到了真正的17位密钥.
太多了...这就是我称之为"群魔乱舞的CRC密码"加密解密体系.
由于它太复杂了,俺多年来一直无法对其"定位"~~~
这就是俺酷爱和一直研究的HotCRC~~~
如果再加上菜农的三角密码体系和CRC密码体系融合一体,估计一般的小偷是很难攻破的~~~
我喜爱CRC密码因为它的运算量和占用资源很小,而且特别适用于MCU等.
三角密码虽然也行,但是开方乘方再小MCU上是个问题.所以我喜欢CRC密码~~~
|
|
文章评论(0条评论)
登录后参与讨论