#sha-1 #碰撞检测 #碰撞 #哈希 #命令行工具 #缓解

无 std 程序+库 sha1collisiondetection

带有碰撞检测和缓解的 SHA-1 哈希函数

14 个版本

0.3.4 2024 年 3 月 18 日
0.3.2 2023 年 11 月 3 日
0.2.7 2023 年 5 月 5 日
0.2.6 2022 年 8 月 28 日
0.2.0 2020 年 11 月 27 日

#108 in 密码学

Download history 3044/week @ 2024-04-03 3204/week @ 2024-04-10 3139/week @ 2024-04-17 2784/week @ 2024-04-24 2725/week @ 2024-05-01 2563/week @ 2024-05-08 3205/week @ 2024-05-15 3005/week @ 2024-05-22 3609/week @ 2024-05-29 3111/week @ 2024-06-05 3198/week @ 2024-06-12 3802/week @ 2024-06-19 2974/week @ 2024-06-26 2917/week @ 2024-07-03 3827/week @ 2024-07-10 4183/week @ 2024-07-17

14,518 每月下载量
71 个 crate (3 直接) 中使用

MIT 许可证

800KB
6K SLoC

sha1collisiondetection

用于检测文件中 SHA-1 冲突的库和命令行工具

这是将 Marc Stevens 的 sha1collisiondetection 算法移植到 Rust 的版本。代码使用 c2rust 从 C 语言翻译而来。

为了提高翻译质量,首先对代码进行了转换,将宏替换为内联函数。使用 make check 运行测试套件以测试转换的正确性。

与 C 语言实现一样,此 crate 在 MIT 软件许可证下分发。

命令行工具的安装

命令行工具是 coreutils 的 sha1sum 工具的替代品。可以使用 cargo 安装,例如:

$ cargo install sha1collisiondetection
[...]
$ sha1cdsum --help
sha1cdsum 0.2.3
Print or check SHA1 (160-bit) checksums with collision detection.

USAGE:
    sha1cdsum [FLAGS] [files]...
[...]
$ sha1cdsum test/*1.*
4f3d9be4a472c4dae83c6314aa6c36a064c1fd14 *coll* test/sha-mbles-1.bin
16e96b70000dd1e7c85b8368ee197754400e58ec *coll* test/shattered-1.pdf

关于

此库和命令行工具被设计为常见的 SHA-1 库和 sha1sum 的近似替代品。它们将计算任何给定文件的 SHA-1 哈希,并且还会检测每个文件中存在的针对 SHA-1 的密码分析碰撞攻击。它非常快,所需时间不到常规 SHA-1 的两倍。

具体来说,它们将使用前 32 个 SHA-1 干扰向量中的任何一个检测到针对 SHA-1 的任何密码分析碰撞攻击,概率为 1。

    I(43,0), I(44,0), I(45,0), I(46,0), I(47,0), I(48,0), I(49,0), I(50,0), I(51,0), I(52,0),
    I(46,2), I(47,2), I(48,2), I(49,2), I(50,2), I(51,2),
    II(45,0), II(46,0), II(47,0), II(48,0), II(49,0), II(50,0), II(51,0), II(52,0), II(53,0), II(54,0), II(55,0), II(56,0),
    II(46,2), II(49,2), II(50,2), II(51,2)

由于概率小于 2^-90,因此可以忽略假阳性的可能性。

库支持应用程序可以检查和执行的指示标志,以及一个特殊的 safe-hash 模式,在没有检测到碰撞时返回真实的 SHA-1 哈希,在检测到碰撞时返回不同的 safe 哈希。碰撞文件将具有相同的 SHA-1 哈希,但将具有不同的不可预测的 safe-hashes。这基本上使得应用无需进一步更改即可保护自身免受 SHA-1 冲突的影响,例如,基于 SHA-1 冲突的数字签名自动失效。

有关碰撞检测的理论解释,请参阅获奖论文《反密码分析

反密码分析,Marc Stevens,CRYPTO 2013,计算机科学讲义,第 8042 卷,Springer,2013,第 129-146 页,https://marc-stevens.nl/research/papers/C13-S.pdf

开发者

碰撞检测算法的C语言实现由以下人员完成

C语言实现的维护在这里:https://github.com/cr-marcstevens/sha1collisiondetection.

请在此处报告Rust移植的问题:https://gitlab.com/sequoia-pgp/sha1collisiondetection.

使用方法

use hex_literal::hex;
use sha1collisiondetection::{Sha1CD, Digest};

// create a Sha1CD object
let mut hasher = Sha1CD::new();

// process input message
hasher.update(b"hello world");

// acquire hash digest in the form of GenericArray,
// which in this case is equivalent to [u8; 20]
let result = hasher.finalize();
assert_eq!(result[..], hex!("2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"));

功能标志

此crate使用功能来启用或禁用可选功能。您可以在Cargo.toml文件中调整功能,如下所示

sha1collisiondetection = { version = "*", default-features = false, features = [...] }

功能 'std'

如果启用,此crate需要标准库。默认启用。

功能 'digest-trait'

如果启用,此crate实现了来自digest crate 的 trait Digest。默认启用。

依赖关系

~0.2–9MB
~86K SLoC