sha1collisiondetection, 在文件库和 命令行 工具中检测 SHA 1冲突

分享于 

7分钟阅读

GitHub

  繁體 雙語
Library and command line tool to detect SHA-1 collision in a file
  • 源代码名称:sha1collisiondetection
  • 源代码网址:http://www.github.com/cr-marcstevens/sha1collisiondetection
  • sha1collisiondetection源代码文档
  • sha1collisiondetection源代码下载
  • Git URL:
    git://www.github.com/cr-marcstevens/sha1collisiondetection.git
    Git Clone代码到本地:
    git clone http://www.github.com/cr-marcstevens/sha1collisiondetection
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/cr-marcstevens/sha1collisiondetection
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    sha1collisiondetection

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

    版权所有 2017 Stevens marc@marc-stevens.nl

    在MIT软件许可证下发布。

    参见附带的文件 LICENSE.txt 或者在 https://opensource.org/licenses/MIT 复制。

    插件开发人员

    这个库和 命令行 工具是为常见 SHA-1 库和的替换而设计的近降。 他们将计算任何给定文件的SHA-1 哈希,另外还将检测每个文件中存在 SHA-1的cryptanalytic冲突攻击。 它速度非常快,比普通SHA-1所花的时间还要短两倍。

    更具体地说,他们将使用概率 1的最高 32 SHA-1 扰动向量检测到任何对 SHA-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,可以忽略 false 正位的可能性。

    库既支持应用程序可以检查和操作的指示器标志,也支持在检测到冲突时返回真实的SHA-1 哈希模式,并返回不同的安全哈希。 冲突文件将具有相同的SHA-1 哈希,但会有不同的不可预测的安全哈希。 这基本上能够防止应用程序对 SHA-1 冲突的保护,并且在应用程序。比如。基于 SHA-1 冲突的数字签名伪造中自动成为。

    关于碰撞检测的理论解释,请参见计数器密码分析的获奖纸张:

    计数器密码分析,Marc Stevens,加密 2013,计算机科学课程笔记,vol。 8042.Springer。2013. 129 -146,https://marc-stevens.nl/research/papers/C13-S.pdf

    编译

    运行:

     
    make
    
    
    
     

    命令行命令行用法

    有两个程序 bin/sha1dcsumbin/sha1dcsum_partialcoll。 程序将对与cryptanalytic碰撞攻击一起生成的文件进行检测和警告,比如在 https://shattered.io/ 文件。 第二个程序 bin/sha1dcsum_partialcoll 将检测并警告文件,这些文件使用against冲突攻击来减少 SHA-1 ( 其中有几个例子到目前为止)。

    例如:

    
    bin/sha1dcsum test/sha1_reducedsha_coll.bin test/shattered-1.pdf
    
    
    bin/sha1dcsum_partialcoll test/sha1reducedsha_coll.bin test/shattered-1.pdf
    
    
    pipe_data | bin/sha1dcsum -
    
    
    
    

    库使用情况

    请参阅 lib/sha1.h 中的文档。 下面是一个简单的示例代码 Fragment:

    
    #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");
    
    
    
    

    在其他程序中的包含

    为了使在其他项目中包含这些源代码更容易,代码使用了几个预处理器 MACROS。 而不是复制/粘贴和自定义代码,首先看看设置这些代码是否可以避免修改代码。

    • SHA1DC_NO_STANDARD_INCLUDES

    跳过包括标准标题。如果你的项目出于任何原因希望做它自己的标题,请使用。

    • SHA1DC_CUSTOM_INCLUDE_SHA1_C

      在 sha1.c.的顶部包含一个自定义标题,通常这将与SHA1DC_NO_STANDARD_INCLUDES一起设置,指向包含各种标准标题的头文件。

    • SHA1DC_INIT_SAFE_HASH_DEFAULT

      在 SHA1DCInit() 中设置safe_hash的默认值。 有效值为 0和 1. 如果未设置为 1,则为默认值。

    • SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_C

      在 sha1.c. 中包含定制的预告片,对于使用 sha1.c. 中已经定义的函数的任何额外实用函数都有用

    • SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_H

      在 sha1.h. 中包含定制的预告片,用于定义SHA1DC_CUSTOM_TRAILING_INCLUDE_SHA1_C所包含函数或者代码的Prototype。

    • SHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C

      在 ubc_check.c.的顶部包含自定义标题

    • SHA1DC_CUSTOM_TRAILING_INCLUDE_UBC_CHECK_C

      在 ubc_check.c. 中包含自定义预告片

    • SHA1DC_CUSTOM_TRAILING_INCLUDE_UBC_CHECK_H

      在 ubc_check.H. 中包含自定义预告片

    这里代码将尝试基于 cpu/平台自动检测某些东西。 除非你运行一些真正晦涩的CPU或者移植到一个新平台,你不需要去调整这个。 如果你愿意,请在 https://github.com/cr-marcstevens/sha1collisiondetection 打开一个问题。

    • sha1dc_force_littleendian/sha1dc_force_bigendian

      忽略对处理器endianenss的检查,并强制小尾数或者大尾数。

    • SHA1DC_FORCE_UNALIGNED_ACCESS

      允许未对齐的访问这将在 比如 SPARC处理器上失败,因这里只允许在处理器白名单上使用。 如果你的CPU没有检测到允许,并且允许未对齐的访问,那么设置这可能会提高性能。


    COM  文件  tool  COL  COMM  Comma  
    相关文章