加密哈希函数的时间复杂度是多少?

时间:2017-10-08 21:07:51

标签: security time-complexity big-o cryptographic-hash-function

让我们说MD5或SHA-1?这两者的时间复杂度是多少?我试图在互联网上找到它,但它非常有限,我得到的是它们都是O(n)。任何人都可以进一步开导我吗?也许给我一个最糟糕的案例和最佳案例场景?

1 个答案:

答案 0 :(得分:2)

MD5和SHA-1算法 - 两者都不是加密安全的,不应再使用 - 基于Merkle-Damgard construction。这意味着它们是由

构建的
  1. 以块密码开头,该块密码将固定宽度的位块作为输入,并输出相同大小的固定宽度位块,
  2. 使用cryptographically secure padding scheme将输入填充到块大小的某个倍数,然后
  3. 迭代地将块密码应用于输入的一些位的组合,加上初始化值或前一个块密码的输出。
  4. 因为分组密码适用于固定大小的比特块,所以运行它的时间复杂度为O(1)。该块密码总共有Θ(n)个应用(输入被分成固定大小的块,所以这些块有Θ(n)),并且计算填充位的成本可能是O( 1)但可能是O(n)。总的来说,这意味着计算这些散列函数的运行时间是Θ(n),这是有道理的,因为每个位至少被访问一次,每位完成的工作是不变的。

    分组密码通常以一种方式实现,使得它们在任何输入的位组合上运行完全相同的时间 - 或者至少是非常接近相同时间的东西 - 来尝试制作它们抵抗timing attacks,其中计算分组密码所需的时间量用于窃取一些比特。因此,如果这些散列函数在相同大小的不同输入上花费不同的时间量,那将是非常不寻常的。因此,独立于运行时为Θ(n)的事实,您不应期望在挂钟运行时看到太多变化。