如果我的输入是相当低的熵,有什么理由在PBKDF2中使用比SHA-1更强的东西吗?也就是说,如果被散列的密码只有大约30位的熵。
我现在找不到,但是有人说,如果你想保持高熵输入的熵,那么使用PBKDF2和更高的SHA。所以,我想知道,如果你的输入是低熵,那么使用SHA-512就没有真正的收益。
我见过一个案例提到,使用SHA-512会增加攻击者的内存需求。在某些情况下,我知道增加内存需求会降低GPU哈希的效率。不确定这种情况是否属实。https://cryptosense.com/blog/parameter-choice-for-pbkdf2/
发布于 2019-11-08 22:01:56
我见过一个案例提到,使用SHA-512会增加攻击者的内存需求。在某些情况下,我知道增加内存需求会降低GPU哈希的效率。不确定这种情况是否属实。
如果您要使用PBKDF2 (而不是Argon2),并且可以选择使用SHA-512,那么您肯定应该选择它,因为计算需要更多的内存,这对基于GPU的密码破解器是不利的。以下是来自一个任意选择的Hashcat基准的报道:
Hashtype: SHA1
Speed.Dev.#1.: 8538.1 MH/s (96.95ms)
Speed.Dev.#2.: 8511.0 MH/s (97.22ms)
Speed.Dev.#3.: 8625.6 MH/s (97.79ms)
Speed.Dev.#4.: 8599.6 MH/s (96.85ms)
Speed.Dev.#5.: 8617.4 MH/s (97.89ms)
Speed.Dev.#6.: 8560.9 MH/s (97.30ms)
Speed.Dev.#7.: 8640.8 MH/s (97.61ms)
Speed.Dev.#8.: 8677.5 MH/s (97.22ms)
Speed.Dev.#*.: 68771.0 MH/s
Hashtype: SHA256
Speed.Dev.#1.: 2865.2 MH/s (96.18ms)
Speed.Dev.#2.: 2839.8 MH/s (96.65ms)
Speed.Dev.#3.: 2879.5 MH/s (97.14ms)
Speed.Dev.#4.: 2870.6 MH/s (96.32ms)
Speed.Dev.#5.: 2894.2 MH/s (96.64ms)
Speed.Dev.#6.: 2857.7 MH/s (96.78ms)
Speed.Dev.#7.: 2899.3 MH/s (96.46ms)
Speed.Dev.#8.: 2905.7 MH/s (96.26ms)
Speed.Dev.#*.: 23012.1 MH/s
Hashtype: SHA512
Speed.Dev.#1.: 1071.1 MH/s (96.43ms)
Speed.Dev.#2.: 1063.9 MH/s (96.40ms)
Speed.Dev.#3.: 1084.2 MH/s (96.25ms)
Speed.Dev.#4.: 1076.9 MH/s (96.03ms)
Speed.Dev.#5.: 1080.2 MH/s (96.64ms)
Speed.Dev.#6.: 1074.1 MH/s (96.16ms)
Speed.Dev.#7.: 1086.3 MH/s (96.01ms)
Speed.Dev.#8.: 1088.1 MH/s (95.91ms)
Speed.Dev.#*.: 8624.7 MH/s这个GPU只能计算SHA-512,大约是SHA-1的13%,和SHA-256的37%。64位CPU可以比SHA-256更快地计算SHA-512,所以这是一个更大的胜利。
注意,这些结果是针对原始SHA-*的,当使用PBKDF2时,迭代会进一步减慢攻击者的速度,例如(从同一页面):
Hashtype: PBKDF2-HMAC-SHA1
Speed.Dev.#1.: 3233.9 kH/s (67.40ms)
Speed.Dev.#2.: 3198.7 kH/s (68.17ms)
Speed.Dev.#3.: 3286.2 kH/s (67.40ms)
Speed.Dev.#4.: 3275.8 kH/s (67.07ms)
Speed.Dev.#5.: 3305.3 kH/s (66.98ms)
Speed.Dev.#6.: 3239.7 kH/s (67.85ms)
Speed.Dev.#7.: 3302.3 kH/s (66.97ms)
Speed.Dev.#8.: 3314.4 kH/s (66.78ms)
Speed.Dev.#*.: 26156.2 kH/s
Hashtype: PBKDF2-HMAC-SHA256
Speed.Dev.#1.: 1173.1 kH/s (81.39ms)
Speed.Dev.#2.: 1171.6 kH/s (85.26ms)
Speed.Dev.#3.: 1194.3 kH/s (77.60ms)
Speed.Dev.#4.: 1182.9 kH/s (80.93ms)
Speed.Dev.#5.: 1182.3 kH/s (86.08ms)
Speed.Dev.#6.: 1174.8 kH/s (81.28ms)
Speed.Dev.#7.: 1191.0 kH/s (77.58ms)
Speed.Dev.#8.: 1203.1 kH/s (80.72ms)
Speed.Dev.#*.: 9473.2 kH/s
Hashtype: PBKDF2-HMAC-SHA512
Speed.Dev.#1.: 431.4 kH/s (88.54ms)
Speed.Dev.#2.: 425.8 kH/s (89.24ms)
Speed.Dev.#3.: 432.5 kH/s (89.37ms)
Speed.Dev.#4.: 433.5 kH/s (89.18ms)
Speed.Dev.#5.: 433.4 kH/s (90.16ms)
Speed.Dev.#6.: 427.2 kH/s (85.02ms)
Speed.Dev.#7.: 432.7 kH/s (88.89ms)
Speed.Dev.#8.: 433.7 kH/s (88.67ms)
Speed.Dev.#*.: 3450.1 kH/s我现在找不到,但是有人说,如果你想保持高熵输入的熵,那么使用PBKDF2和更高的SHA。所以,我想知道,如果你的输入是低熵,那么使用SHA-512就没有真正的收益。
“熵”这个词非常技术性,容易使人感到困惑。在这种情况下考虑它的一个有用的实际方法是,密码的熵是一种估计攻击者猜测它需要多少次尝试的方法。如果你这样看的话,应该清楚的是,降低攻击者尝试猜测的速度是很好的,只要它不会给防守者带来不合理的代价。在我的电脑上运行openssl benchmark sha1 sha256 sha512我得到:
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
sha1 111320.78k 284724.68k 566193.99k 754458.21k 867765.68k 884538.07k
sha256 67121.90k 161239.47k 297468.75k 357967.84k 383634.68k 404701.29k
sha512 46691.15k 181327.42k 330951.90k 501714.45k 523881.21k 582528.17k因此,使用16和64字节数,在我的64位CPU上,SHA-512的速度是SHA-1的40-60%。但正如我们在上面看到的,在GPU基准测试中,SHA-512的速度仅为SHA-1的12.5%。因此,对于CPU时间的适度成本,您将在GPU时间中增加更大的成本。这就是你想要看到的!
发布于 2019-11-08 18:20:09
使用SHA-1或SHA-256与PBKDF2散列密码没有太大的区别:它们使用的内存数量几乎相同(状态为20字节,而状态为32字节,加上8字节的消息长度和64字节的输入缓冲区),而SHA-512只使用SHA-256使用的两倍(64字节状态,16字节长度,128字节缓冲区)。
如果可以的话,忘记PBKDF2,考虑使用Argon2id,这样如果您有(比方说) 128 MB的免费密码散列--也许还有几个额外的CPU核--您可以使用它来提高对手的成本。
https://crypto.stackexchange.com/questions/75607
复制相似问题