织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 比特币 > 比特币资讯

他山之石丨价值百万美元的比特币密钥追回记 (2)

时间:2021-01-07 12:50来源:未知 作者:admin 点击:
之前,所以我打印了几十页汇编代码贴在墙上,用红色蜡笔在上面画满了我的注记。当我终于把它的模式找出来的时候高兴极了。当时微软只允许输出 4

之前,所以我打印了几十页汇编代码贴在墙上,用红色蜡笔在上面画满了我的注记。当我终于把它的模式找出来的时候高兴极了。当时微软只允许输出 40 位比特的密码算法,所以他们在允许的范围内做了很多事情:他们会用「盐」(salt,随机选取存储在文件中的字节)反复对密码进行 MD5 哈希,得到 40 位的输出,然后在此基础上加盐,再反复哈希。在当时的电脑上运行这个过程测试一个密码大概需要半秒钟的时间,我们不得不采用字典攻击的方式,因为直接破解它几乎是不可能的,我们最终也确实为大公司和机构写了一个破解器,利用 Intel Pentium 处理器上那些花哨的 MMX 指令集,强行破解了 40 位哈希值的组合。我听说过有人花了九个月才破解了这个软件。

另一个非常有趣的是 zip 档案。PKZIP 的开发者 Phil Katz 做出了一个决定:将他的档案格式记录下来,并将其包含在他的软件中,这在当时是很不常见的,这也因此使其成为了开发者的最爱。Roger Schlafly 设计了用于加密压缩档案的流密码,zip 标准也很快就成为 Windows 上最流行的压缩格式,许多其他格式如 Java 的 jar 档案和 OpenOffice 的文档格式,其实都是内部有特定目录结构的 zip 文件。而 InfoZIP 是一个开源版本的软件,它 zip 的实作方式几乎被作为其他所有知名压缩软件的基础,比如 WinZip。在我当时试图破解它的时候,WinZip 占据了 95% 的市场。

Eli Biham 和 Paul Kocher 曾发表过对其密码算法的已知明文攻击,但已知明文通常就是压缩明文中的一部分,要想透过一个 zip 加密压缩文件获得压缩明文,你基本会上需要整个文件,所以这种攻击对执法机构来说几乎是无用的。

zip 的加密算法有 96 位比特的内部状态,分成三个 32 位的小块,分别称为 key0、key1 和 key2。而 key0 和 key2 是两组线性反馈移位寄存器 CRC32 算法的内部状态,如果要用一个新的数据字节更新状态,你要将所有的字节向下移动一个字节(舍弃低字节),然后与查找表中的一个常数进行 xor 操作,这个常数在查找表中的索引是被舍弃低字节与该数据字节 xor 后的结果。key1 是截断线性同余方法(linear congruential generator)的内部状态,要更新它的内部状态,输入一个数据字节,乘以一个我称之为 c 的常数,然后加 1。而这个加密算法的工作原理是这样的:你向第一个 CRC32 输入一个数据字节,然后取其舍弃的低字节并将其输入 TLCG,然后取其产生的高字节并将其输入第二个 CRC32,然后取其状态并(粗略地)平方,然后输出结果的第二个字节作为流字节。最一开始的 96 位状态是已知的,接着加密密码,然后加密十个字节长的盐(salt)。

PKZIP 通过直接分配未经初始化的内存来获得它的 salt 字节,所以它可能实际上包含了你运行的其他程序上的一些内容,也可能是图像或文档等等。这在 Windows 上工作得很好,没遇到什么问题,但在许多 Unix 系统上,当内存被分配时它会自动初始化。InfoZIP 通过使用 C 语言的 rand 函数来选择盐字节,它将通过 xor 时间戳和进程 ID 来初始化随机数生成器的状态,然后为每个文件生成 10 个字节。如果他们只有这样做的话,那么知道时间戳和进程 ID 后就足以恢复部分信息,接着就能够发动 Biham 和 Kocher 的已知名文攻击。看来 InfoZIP 的作者知道这种攻击,因为他们更进一步,用密码对头文件加密了一次。这样一来,攻击者就只有双重加密的明文,他们的攻击就无法得逞了。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容