字符串比较计时攻击

主要观点:字符串相似度越高比较时间越长,可能导致计时攻击,但实际中字符串常不是逐字节比较且时间差异小,计时攻击不一定可行;不同编程语言的字符串比较方式及对计时攻击的影响不同。
关键信息:

  • C 语言:glibc 的 strcmp 先比较字节至字边界再比较字,现代 CPU 有 AVX2 和 EVEX 指令集变体可一次比较 32 字节;strncmp 比较有可变时间可用于计时攻击,但时间按 8 字节块变化且差异小于纳秒;memcmp 只比较字节数,比较更多字节时间增加可忽略。
  • C#:字符串比较可考虑当前文化,“智能”比较可通过指定StringComparison.Ordinal禁用,计时攻击仅在文化敏感比较时可能且时间差异小于纳秒。
  • Python:测试的 40 字节字符串比较时间差异小到难以检测,计时图近似直线。
    重要细节:
  • C 语言中 glibc 的 strcmp 实现细节及与其他函数的比较。
  • C#中“智能”比较与StringComparison.Ordinal的关系。
  • Python 测试的具体情况及结果。

结论:字符串比较的计时攻击有时可能发生,但不是所有strcmp==使用都易受攻击,一些实现一次比较多字节,单个字符时间差异常小于纳秒难以远程检测。

阅读 9
0 条评论