【问题标题】:Constant-Time comparison [closed]恒定时间比较
【发布时间】:2015-10-06 03:10:57
【问题描述】:

一个比较简单的问题:

看来 C# 没有内置固定时间比较方法或扩展,为什么不呢?当然这是一个简单的算法,但它看起来很基础,应该包含在内。

通常不建议编写任何您自己的加密代码,但是似乎没有任何用于这种目的的库,我是否遗漏了一些?

查看类似这样的算法:http://codahale.com/a-lesson-in-timing-attacks/

【问题讨论】:

  • 对于较小的值,您可以将 2 个值相互异或,并检查异或的输出是否为 0。对于较大的值或更大的灵活性,散列输入值并将其与散列进行异或期望值并检查是否为 0。这很简单,而且是常数时间。我不知道为什么它不是标准库的一部分。我同意应该是。 CryptoSecureEquals 或类似的东西。
  • 问为什么 .Net 标准库以某种方式设计是题外话,因为这是高度自以为是的。您能否编辑您的问题以使其成为主题和可回答的问题,以便@WDS 可以发布正确的答案?
  • @WDS 对于长值,您可以简单地对单个字节进行二进制或异或运算。这就是我在加密库中所做的。
  • @ArtjomB:“我应该根据需要扩展它们,还是我错过了提供此类东西的第三方库?”,它就在那里,非常负责任。关于标准库的问题提供了上下文。

标签: .net algorithm cryptography


【解决方案1】:

由于它已被删除为题外话,我将我的答案移到这里:https://blog.roushtech.net/2017/05/25/constant-time-comparisons-net/

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2014-03-20
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多