Skip to content

Daily Study

更新: 6/17/2025 字数: 0 字 时长: 0 分钟

Daily Plan

#todo

常见Hash算法

加密Hash函数

主要用途:数据完整性校验、数字签名、密码存储、区块链等。

这类函数的主要设计目的是安全性,除了基本的hash外,还需要满足以下条件:

  • 抗碰撞性 (Collision Resistance):极难找到两个不同的输入 AB,使得 hash(A) = hash(B)
  • 抗原像攻击 (Pre-image Resistance):从一个哈希值 H,极难反向推导出原始输入 A
  • 抗第二原像攻击 (Second Pre-image Resistance):给定一个输入 A,极难找到另一个不同的输入 B,使得 hash(A) = hash(B)

主流算法:

算法家族状态与特点
SHA-2 家族当前行业标准。由美国国家安全局(NSA)设计,NIST发布。• SHA-256: 最常用的版本,广泛用于TLS/SSL证书、软件签名和比特币等加密货币。• SHA-512: 64位版本,在64位处理器上性能更佳,提供了更高的安全强度。
SHA-3 家族下一代标准。在公开竞赛中从一个名为 Keccak 的算法中选出。其内部结构与SHA-2完全不同,可以作为SHA-2的备选方案,以防SHA-2未来被发现存在漏洞。• SHA3-256, SHA3-512: 对应不同输出长度的版本。
BLAKE 家族现代、高性能。在SHA-3竞赛中表现优异。• BLAKE2: 性能通常优于SHA-2和SHA-3,被许多新项目采用。• BLAKE3: BLAKE2的升级版,速度极快,能充分利用现代CPU的多核和并行指令集。
MD5已完全破解,绝对禁止用于任何安全用途。可以轻易地人为制造哈希碰撞。如今仅用于非安全性的文件完整性校验(例如,下载文件后检查是否损坏)。
SHA-1已被攻破,不安全。Google在2017年成功演示了碰撞攻击。所有主流浏览器和操作系统已停止信任使用SHA-1的证书。新项目中严禁使用

非加密Hash函数

这类函数的核心设计目标是速度良好的数据分布性。它们不要求具备加密哈希的抗攻击特性,但要求能快速计算,并让哈希结果尽可能均匀地分布,以减少哈希碰撞的概率。

主要用途:数据结构(如哈希表/字典)、数据校验(Checksums)、缓存、分布式系统(一致性哈希)等。

算法家族特点和用途
MurmurHash应用极其广泛。尤其是 MurmurHash3,在速度和分布性之间取得了极佳的平衡。被大量数据库和应用使用,例如 Redis, Cassandra, Hadoop 等。
xxHash速度极快。在现代CPU上,其性能通常超过MurmurHash,接近内存带宽的极限。是目前追求极致性能时的首选之一。有xxH32, xxH64, xxH3等多个版本。
SipHash安全键控哈希。这是一个特殊的存在,它在速度和安全性之间做了一个权衡。它需要一个随机生成的“密钥”才能工作,这使得它能有效抵御哈希洪水攻击 (Hash-flooding DoS attacks)。因此,它被许多现代编程语言(如 Python, Ruby, Rust, Go)用作其内置哈希表的默认实现。
CityHash / FarmHash由Google开发,用于其内部海量数据处理。CityHash较早,FarmHash是其继任者,在不同长度的输入上都表现出色。

文件Hash(Hash算法 + 文件内容)

传统文件哈希缺陷:文件中任何一个字节的改变都会导致哈希值天翻地覆。这在做精确文件校验时非常有用,但在安全分析中却是一个巨大的弱点。攻击者只需对恶意软件做一点微小的改动(如加壳、修改字符串、改变编译选项),其SHA-256值就完全不同了,传统的黑名单就会失效。

KHash

参考链接:科恩自研二进制相似性哈希算法“KHash”上线BinaryAI,助力更全面的文件安全分析场景 | BinaryAI Documents KHash利用语义嵌入向量化算法,将文件转换成一种紧凑的表示方式,可以快速计算二进制文件之间的相似度,从而提供给用户更快速、准确的相似文件搜索能力。

KHash优势:

  • 在文件哈希技术领域,现有方案主要分为两类:一类是基于二进制文件元数据(如SSDeep、TLSH、VHash),另一类是基于二进制文件反编译/反汇编(如BinDiff、DeepBinDiff、PSSO)。然而,这些方案往往无法兼顾丰富的语义特征与合适的时间性能开销,导致在大规模二进制分析场景之上性能表现差或无法使用。
  • 为了解决这一问题,KHash作为一种创新型的基于函数语义向量特征的快速哈希方法,通过提取函数语义特征,将任意有效二进制文件哈希到固定长度特征表示之上,从而实现大规模二进制数据集下的快速二进制文件相似性分析,具有高准确性与鲁棒性。
  • 与SSDeep、TLSH等传统相似度哈希算法相比,KHash最大的优势在于其保持语义一致性的能力。无论是跨操作系统、CPU架构还是编译器选项,KHash都能准确地计算二进制文件的相似度。

应用场景:

  • 威胁情报场景:KHash可以用于威胁情报中的恶意样本分析场景,例如通过计算目标文件与已知恶意软件的相似度,判断目标文件是否为恶意软件,以及自动化恶意样本基因分析,家族同源分析等。
  • 开发安全场景:KHash可以在无源码的情况下,识别是否存在抄袭。通过计算目标文件和已知软件的相似度,有效检测是否存在抄袭行为。

基于二进制文件相似度的哈希 (模糊哈希)

这类技术不关心文件的内部逻辑结构,而是专注于文件内容的字节序列模式。它的核心思想是:即使文件被修改,大部分内容块的哈希值应该保持不变。

  • 核心思想:上下文触发分片哈希(Context-Triggered Piecewise Hashing, CTPH)。它将文件分割成许多小的数据块,然后对这些块进行哈希,最后将这些小哈希值组合成一个最终的、可比较的“模糊哈希值”。
  • 分析粒度:字节流(Byte Stream)。
  • 解决的问题:能识别出那些仅有少量增、删、改操作的文件。例如,一个恶意Word文档中修改了部分文本,或者一个程序中修改了某个字符串。
  • 打个比方:它不问“这两本书是不是一模一样?”,而是问“这两本书有多少个段落是相同的?”。

典型工具:

  • SSDeep:最经典的模糊哈希工具。它生成一个基于分块哈希的字符串,并提供一个0-100的相似度评分。在数字取证领域应用广泛。
  • TLSH (Trend Micro Locality Sensitive Hash):由趋势科技公司开发。相比SSDeep,它考虑了更多的文件特征(如文件大小),通常被认为在准确性和鲁棒性上更胜一筹,同样会给出一个相似度分数。
  • VHash:一个更有趣的变种,它有时与“视觉哈希”相关联。通过将二进制文件可视化成一张图片,然后对图片进行哈希或比较。恶意软件家族在可视化后往往呈现出相似的纹理和结构。

基于代码结构与语义的哈希 (深度同源分析)

这类技术深入到文件的内部,通过反汇编或反编译来理解其代码逻辑和程序结构。它比较的不是字节,而是程序的“行为模式”。

  • 核心思想:提取程序的控制流图(CFG)、函数调用图(Call Graph)、指令序列、函数特征等,然后对这些结构化信息进行比较。
  • 分析粒度:汇编指令、函数、控制流。
  • 解决的问题:能够识别那些经过编译优化、不同编译器编译、代码重排等深度修改的同源程序。
  • 打个比方:它不比较书中的句子,而是比较两本书的“章节结构”、“故事大纲”和“人物关系”。

典型工具:

  • BinDiff:由Google(原Zynamics)开发的经典二进制文件比对工具。它通过匹配两个可执行文件中的相似函数来工作,是进行补丁分析(比较软件更新前后变化)的利器。
  • DeepBinDiff:这是BinDiff思想的现代化演进。它利用深度学习(特别是图神经网络GNN)将函数的控制流图转换成一个数学向量(Embedding)。通过比较向量间的距离,可以更高效、更鲁棒地判断函数间的相似性。
  • PSSO (Prototype-based Sparse and Skew-aware Online learning):这是一个更偏学术研究的方案,通常用于在线学习场景,通过学习和识别二进制代码中的“原型”特征来进行分类和聚类。

菜就多练

本站访客数 人次 本站总访问量