研究人员宣布了首例 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");