【问题标题】:How to correctly interpret recursive pseudo code for a hashing scheme如何正确解释散列方案的递归伪代码
【发布时间】:2015-09-25 14:04:25
【问题描述】:

我尝试关注this paper(Murdoch 的 Hardened Stateless Session Cookies)来实现加盐机制。下面的伪代码描述了代码:

a[0](salt, password ) = H(salt||password )  
a[x](salt, password ) = H(a[x−1](salt, password )||password )  

H:加密安全散列函数
x:哈希迭代次数
a: 身份验证器
salt:每个帐户,大约 128 位的加密安全伪随机数
密码:明文用户密码

我想知道php实现是否应该如下:

$a0 = hash('sha256', $salt | $password);
$auth = recursiveHash($a0, $password, 256)

function recursiveHash($salt, $password, $counter) {
    if ($counter === 0) {
        return hash('sha256', $salt | $password);
    } else {
        $counter--;
        return $this->recursiveHash(hash('sha256', $salt | $password), $password, $counter);
    }
}

总的来说:我确实对准确的句法解释感到困惑。 $varOne, $varTwo 是什么意思?是上次函数调用的结果吗?是一个||按位或运算符?为什么不是一个|?以下是什么意思:

c = a[n](salt, password )

是否与以下相同(当 n == x 时):

a[x](salt, password ) = H(a[x−1](salt, password )||password )

如果有人能帮助我解释本文的语义和句法,我将非常高兴。

【问题讨论】:

  • 所以基本上你正在尝试创建一个加盐哈希。为此,您只需将从表单中获得的密码与安全随机生成的盐连接起来。背后的主要思想是为相同的密码设置不同的哈希值。如果您是这类东西的初学者,请小心,因为很容易出错:youtube.com/watch?v=8ZtInClXe1Q
  • 我想我一般都知道密码存储问题。我的问题是,如果这种特殊情况下的加盐是通过按位或运算或经典附加来添加的。更一般地说,如何准确阅读论文的伪代码。
  • 我在您的问题中没有看到任何$varOne, $varTwo?那些定义在哪里? a[n] 来自哪里?

标签: php hash syntax cryptography


【解决方案1】:

所以你有:

a[0](salt, password) = H(salt || password )  
a[x](salt, password) = H(a[x−1](salt, password) || password)

首先请注意,|| 在这种情况下表示串联。位操作数在这里没有意义,因为您不想删除密码的位。

那么让我们看看如果n 的值为2 会发生什么:

a[0](salt, password) = H(salt || password )
a[1](salt, password) = H(a[1−1](salt, password) || password) = H(a[0](salt, password) || password) = H(H(salt || password) || password)
a[2](salt, password) = H(a[1](salt, password) || password) = H(H(H(salt || password) || password) || password)

如您所见,您可以简单地重用以前的哈希值,将密码字节添加到它们,然后再次哈希。

通常您不应该为此使用递归方法。您不需要回溯,并且迭代计数n 通常非常高。这意味着递归函数需要很高的内存,而不必保留中间值。

最后,在您的代码中,您使用salt 变量作为中间哈希值的输入。这是不正确的,只有一个salt,这就是你开始的那个。此外,您应该确保在密码上应用特定的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2012-07-20
    • 2013-07-22
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多