如今,常用的密码哈希算法的工作方式如下:对密码加盐并将其输入到KDF中。例如,使用PBKDF2-HMAC-SHA1,密码哈希处理为DK = PBKDF2(HMAC, Password, Salt, ...)
。因为HMAC是带有填充键的2轮哈希,而SHA1是一系列的排列,移位,旋转和按位运算,所以从根本上讲,整个过程是以某种方式组织的一些基本运算。从根本上说,它们的计算难度实际上并不明显。这可能就是为什么单向函数仍然是一种信念的原因,并且我们已经看到一些历史上重要的加密哈希函数变得不安全并且已被弃用。
我想知道是否有可能以全新的方式利用NP完全问题来哈希密码,以期为它提供更坚实的理论基础。关键思想是,假设P!= NP(如果P == NP则没有OWF,那么当前的方案也将失效),作为NPC问题意味着答案很容易验证但很难计算。此属性非常适合密码哈希的要求。如果我们将密码视为解决NPC问题的答案,则可以将NPC问题存储为密码的哈希值,以应对离线攻击:验证密码很容易,但很难破解。
需要注意的是,相同的密码可能会映射到NPC问题的多个实例,可能不是所有的实例都很难解决。作为这项研究的第一步,我试图将二进制字符串解释为3-SAT问题的答案,并构造一个可以解决二进制字符串的3-SAT问题的实例。以最简单的形式,二进制字符串具有3位:x_0,x_1,x_2。然后有2 ^ 3 == 8个子句:
000 ( (x_0) v (x_1) v (x_2) )
--------------------------------------
001 ( (x_0) v (x_1) v NOT(x_2) )
010 ( (x_0) v NOT(x_1) v (x_2) )
011 ( (x_0) v NOT(x_1) v NOT(x_2) )
100 ( NOT(x_0) v (x_1) v (x_2) )
101 ( NOT(x_0) v (x_1) v NOT(x_2) )
110 ( NOT(x_0) v NOT(x_1) v (x_2) )
111 ( NOT(x_0) v NOT(x_1) v NOT(x_2) )
假设二进制字符串为000。那么8个子句中只有1个为false(第一个)。如果我们丢弃第一个子句,而与AND其余7个子句一起丢弃,则000是所得公式的解决方案。因此,如果我们存储公式,则可以验证000。
问题是,对于一个3位的字符串,如果您在其中看到7个不同的子句,那么您会立即知道缺少哪个子句,而这将揭示这些位。
因此,后来我决定放弃其中的3个,只保留标记为001、010、100和111的4个。这有时会引入冲突,但解决问题的难度却很小。冲突并不总是发生,但是尚不清楚当输入的位数更多时,冲突是否会消失。
编辑。在通常情况下,二进制字符串可以是(000,001,...,111)中的任何一个,仍然有8个子句,其中7为true,1为false。选择4个提供真值的子句(001、010、100、111)。这反映在下面的原型实现中。
编辑。正如下面@DW所示的答案,这种选择子句的方法仍可能导致给定变量集上的子句过多,从而可能迅速缩小其值。在总共7 * C(n,3)个子句中,有其他选择子句的方法。例如:从一组给定的变量中选择不同数量的子句,然后仅对相邻变量((x_0,x_1,x_2),(x_1,x_2,x_3),(x_2,x_3,x_4),..这样做。 ),从而形成一个循环而不是集团。该方法可能无法正常工作,因为您可以直观地尝试使用归纳法来测试赋值,以测试是否可以满足所有子句。因此,为了简单说明整体结构,我们仅使用当前方法。
n位字符串的子句数为4 * C(n,3)= 4 * n *(n-1)*(n-2)/ 6 = O(n ^ 3),这意味着hash是密码大小的多项式。
有Python中的原型实现在这里。它根据用户输入的二进制字符串生成3-SAT问题实例。
经过漫长的介绍,最后我的问题是:
上述构造(在原型中实现)是否可以用作安全密码哈希,或者至少看起来很有希望,可以进行修改等?如果没有,它在哪里失败?
因为我们有7 * C(n,3)子句可供选择,是否有可能找到另一种方法来构造适合用作密码哈希的安全3-SAT实例,可能需要借助随机化?
是否有任何类似的工作试图利用NP完整性来设计经过验证的安全密码哈希方案,并且已经取得了一些成果(肯定或否定)?一些介绍和链接将非常受欢迎。
编辑。我会接受@DW的以下回答,他是第一个回答并提供了有关问题结构以及有用资源的深刻见解。这里引入的朴素的子句选择方案(在Python原型中实现)似乎没有用,因为可以快速缩小小组中的变量分配范围。但是,问题仍然存在,因为我还没有看到正式的证据表明这种减少NPC-to-PasswordHashing的方法根本行不通。即使对于这个特定的3-SAT归约问题,选择子句的方式也可能有不同的方式,在此我不想一一列举。因此,仍然非常欢迎任何更新和讨论。