sha1collisiondetection - SHA-1 碰撞检测


MIT
Linux
C/C++

软件简介

研究人员宣布了首例 SHA-1 碰撞。所谓碰撞是指两个内容不同的对象产生了相同的 SHA-1 哈希值。

在 Git 版本控制系统中,每个对象都以内容的 SHA-1 哈希值命名,如果试图向 Git 库里推送与现有对象 SHA-1
哈希相同的碰撞对象,接收者可以很容易通过对比源代码区分真假,所以对 Git 进行SHA-1 碰撞攻击的方法被认为是首先创造出一对 SHA-1
哈希值相同的对象,然后让其中一个看似合法的对象获得合法签名,然后对外散播包含另一个恶意对象的版本,这个恶意版本的签名仍然与原始版本相同。

为了阻止此类的碰撞攻击,源代码托管平台 GitHub 宣布 引入了 SHA-1 碰撞检测,检测 SHA-1 碰撞的攻击
sha1collisiondetection 已经开源。

示例代码:

#include <sha1dc/sha1.h>

SHA1_CTX ctx;
unsigned char hash[20];
SHA1DCInit(&ctx);

/** disable safe-hash mode (safe-hash mode is enabled by default) **/
// SHA1DCSetSafeHash(&ctx, 0);
/** disable use of unavoidable attack conditions to speed up detection (enabled by default) **/
// SHA1DCSetUseUBC(&ctx, 0);

SHA1DCUpdate(&ctx, buffer, (unsigned)(size));

int iscoll = SHA1DCFinal(hash,&ctx);
if (iscoll)
    printf("collision detected");
else
    printf("no collision detected");