btcdage on Nostr: 关于高级脑疑问的相关思考 ...
关于高级脑疑问的相关思考
问题一:“哈希算法能够提高抗碰撞性吗?”
首先我们需要做下定义:
抗碰撞性:
指在可行的时间和资源内,难以找到两个不同的输入,使得它们经过哈希函数处理后产生相同的输出哈希值。
散列性:
指能将任意长度的输入数据映射到一个固定长度的输出哈希值上,且输入数据的微小变化都会导致输出哈希值的显著不同(雪崩效应)。
抗暴力破解:
指通过设计复杂度高的计算过程或数据结构,使得尝试通过穷举所有可能的解来破解密码、密钥或加密数据变得在实际操作中非常耗时和计算上不可行。
默认定义:
为了方便讨论,除非特别指出,下文所有的“哈希算法”这个词,我们套用具体的sha256 算法来讨论。(文中 sha256 就是哈希算法,哈希算法就是 sha256)
“sha256 算法具有足够高的抗碰撞性”应该是共识,比特币世界所有的一切都建立于这个必要条件。因此,哈希算法并不是能不能“提高抗碰撞性”的问题,它本身就具有抗碰撞性。
高级脑的“算法规则”这一维度,假设 sha256 的抗碰撞性为a。任何多次的套娃和加盐并不能使最终结果的抗碰撞性 b>a。但是需要注意的是,b 也不<a。 因为 b=a。
给大家一个感性认识:
字符串 A=“1”
字符串 B=“Kxik7YNwCwXDLar3XwCwXDLar3XKLP4KoHNzszXsLjtHvofMUWQc367qEZzV7FGK1KyP2Dyjw8tcjRPnaxTEJvTLpq3wUiqcYE1sfrvqTpNiLkXNwCwXDLar3XKLP4KoHNzsLjtHvofMUWQc367qEZzV7FGK1KyP2Dyjw8tcjRPnaxTEJvTLpq3wUiqcYE1sfrvqTpNiLkptamW8X1L19VhtEvsQYgs43Jerq5ScqvdbRaVFuUgjYWNwCwXDLar3XKLP4KoHNzsLjtHvofMUWQc367qEZzV7FGK1KyP2Dyjw8tcjRPnaxTEJvTLpq3wUiqcYE1sfrvqTpNiLkBknTXmtStgYNMzbj1L3jMyuRTJjw4KcZA5KFyBCwJjr7D1X9r6eHCGbFEebBxTtwbNgd7”
Hash(A)的抗碰撞性统计学上等同于 Hash(B)
理性认知:
因为 SHA256 的核心安全属性,散列性和抗碰撞性,主要取决于算法本身的数学和计算特性,而不是依赖于输入明文的复杂度。这意味着无论输入数据的复杂度如何,SHA256 都提供一致的安全性水平。
那么,既然我们知道 Hash(A).安全性(散列性、抗碰撞性)= Hash(B).安全性(散列性、抗碰撞性)。
为什么我们觉得 hash(“1”)不安全,而 hash(B)安全呢?因为我们关注的不仅仅是哈希的安全性。在实践中,我们跳出哈希这个维度(就像三维生物离开了纸面)关注安全性时,破解 hash(A)的明文 A。只需要使用字典或者穷举来破解。而抗暴力破解的唯一方式就是“增加明文的长度(防穷举)、复杂度(防字典)和随机性(防字典)”。而哈希的散列性正好满足生成足够长、具有足够复杂度和随机性的字符串——作为抵抗破解的明文。
高级脑的核心“隐藏算法规则”根本不是为了提高私钥的“抗碰撞性”,因为经过哈希之后的抗碰撞性与种子本身的熵无关。高级脑只需要解决种子的“抗暴力破解”性,而,隐藏的“算法规则”(设计复杂度高的计算过程或数据结构)确保了最后生成私钥之前的那个“明文”的复杂程度,成就了高级脑的“抗暴力破解”性质。
问题二、高级脑是否提高了记忆负担?
1、假设我将选用下面其中之一作为种子明文:
A:
202cb962ac59075b964b07152d234b70
B:
d09afe71664f2385fa8ef0a63c227bdd6942dcbb6fffdfd87e5d001b2a434396
请问上面两个选项哪个对记忆力负担更重?
答案肯定是 B。虽然使用 B 做 hash 种子的防暴力破解性肯定高于 A。
2、再做一次选择题:
A:
202cb962ac59075b964b07152d234b70
B:
对“达哥”进行 sha256,一共套娃 10 次,每次结果都加上“达哥”。
请问上面两个选项哪个对记忆力负担更重?
我的答案这次是 A。使用 B 做 hash 种子的防暴力破解性仍然高于 A。
两个 B 其实是同一个东西,这次显然很好记忆,因为他只有 3 个需要记忆的元素:
(1) 种子“达哥” (2)做 sha256 10 次 (3)每次结果后面种子原文
而 A 实际是 123 的 md5 哈希值,MD5 是一个已经公认不再安全(抗碰撞性较弱)的哈希算法,用 A 做明文,抗碰撞性和抗暴力破解性(因为长度更短)都较弱。
这个例子证明了,明文的安全性和记忆负担并不成正比。
3、再来一次选择题:
A:
please coffee bind dog carry solid album simple gun leave become illness
B:
对“达哥”进行 sha256,一共 10 次,每次结果都加上“达哥”。
请问上面两个选项哪个对记忆力负担更重?
我的答案仍然是 A。我不觉得去记忆 12 个随机的无意义的助记词的记忆负担会低于 B。
结论:
1、 隐藏算法不提高抗碰撞性(也不降低),它提高的是抗暴力破解性,抗碰撞性不
需要提高,经过了任意一次 sha256 的散列后就已经满足了,碰撞性与明文复杂度无关。
2、 隐藏算法是提高抗暴力破解性,而算法的复杂性是可以无损压缩(参见上面的选择题的例子)而不增加记忆负担的。比如上面的后两个例子中,B 的算法规则只有 3 个元素。而且是有逻辑意义方便记忆的。
12 个助记词则是 12 个无关元素,记忆负担高于选项 B。
算法规则必须隐藏,否则就失去了“防暴力破解”性,任何人可以通过重现你的算法规则来制作穷举或者字典攻击。
3、 从安全性的角度来看,一个加密的流程一定要隐藏一些元素,无非是你选择隐藏种子明文的规则性还是隐藏算法的规则性:
Bip 选择的是公开算法,隐藏种子明文的规则性,这就必然使种子明文具有巨大的随机性(熵)。而熵才是记忆力负担,只是它固化了这个负担的值,12 个单词就要记忆 12 个元素(加上密语就再加一个元素),24 个就增加一倍记忆负担。
高级脑则是选择隐藏算法的规则性,降低种子明文的随机性,使种子更好记忆。再上面的例子中,种子这个元素可以是“达哥”两个字,也可以是沁园春雪全文。加上设计精巧的“复杂而又好记”的隐藏算法,从而满足了在方便记忆的同时兼顾了防暴力破解性。
4、 最后需要强调的是,如果你 认同 sha256 的散列性,就不需要再就 防碰撞性 再做讨论,因为“碰撞性与明文复杂度无关”。
问题一:“哈希算法能够提高抗碰撞性吗?”
首先我们需要做下定义:
抗碰撞性:
指在可行的时间和资源内,难以找到两个不同的输入,使得它们经过哈希函数处理后产生相同的输出哈希值。
散列性:
指能将任意长度的输入数据映射到一个固定长度的输出哈希值上,且输入数据的微小变化都会导致输出哈希值的显著不同(雪崩效应)。
抗暴力破解:
指通过设计复杂度高的计算过程或数据结构,使得尝试通过穷举所有可能的解来破解密码、密钥或加密数据变得在实际操作中非常耗时和计算上不可行。
默认定义:
为了方便讨论,除非特别指出,下文所有的“哈希算法”这个词,我们套用具体的sha256 算法来讨论。(文中 sha256 就是哈希算法,哈希算法就是 sha256)
“sha256 算法具有足够高的抗碰撞性”应该是共识,比特币世界所有的一切都建立于这个必要条件。因此,哈希算法并不是能不能“提高抗碰撞性”的问题,它本身就具有抗碰撞性。
高级脑的“算法规则”这一维度,假设 sha256 的抗碰撞性为a。任何多次的套娃和加盐并不能使最终结果的抗碰撞性 b>a。但是需要注意的是,b 也不<a。 因为 b=a。
给大家一个感性认识:
字符串 A=“1”
字符串 B=“Kxik7YNwCwXDLar3XwCwXDLar3XKLP4KoHNzszXsLjtHvofMUWQc367qEZzV7FGK1KyP2Dyjw8tcjRPnaxTEJvTLpq3wUiqcYE1sfrvqTpNiLkXNwCwXDLar3XKLP4KoHNzsLjtHvofMUWQc367qEZzV7FGK1KyP2Dyjw8tcjRPnaxTEJvTLpq3wUiqcYE1sfrvqTpNiLkptamW8X1L19VhtEvsQYgs43Jerq5ScqvdbRaVFuUgjYWNwCwXDLar3XKLP4KoHNzsLjtHvofMUWQc367qEZzV7FGK1KyP2Dyjw8tcjRPnaxTEJvTLpq3wUiqcYE1sfrvqTpNiLkBknTXmtStgYNMzbj1L3jMyuRTJjw4KcZA5KFyBCwJjr7D1X9r6eHCGbFEebBxTtwbNgd7”
Hash(A)的抗碰撞性统计学上等同于 Hash(B)
理性认知:
因为 SHA256 的核心安全属性,散列性和抗碰撞性,主要取决于算法本身的数学和计算特性,而不是依赖于输入明文的复杂度。这意味着无论输入数据的复杂度如何,SHA256 都提供一致的安全性水平。
那么,既然我们知道 Hash(A).安全性(散列性、抗碰撞性)= Hash(B).安全性(散列性、抗碰撞性)。
为什么我们觉得 hash(“1”)不安全,而 hash(B)安全呢?因为我们关注的不仅仅是哈希的安全性。在实践中,我们跳出哈希这个维度(就像三维生物离开了纸面)关注安全性时,破解 hash(A)的明文 A。只需要使用字典或者穷举来破解。而抗暴力破解的唯一方式就是“增加明文的长度(防穷举)、复杂度(防字典)和随机性(防字典)”。而哈希的散列性正好满足生成足够长、具有足够复杂度和随机性的字符串——作为抵抗破解的明文。
高级脑的核心“隐藏算法规则”根本不是为了提高私钥的“抗碰撞性”,因为经过哈希之后的抗碰撞性与种子本身的熵无关。高级脑只需要解决种子的“抗暴力破解”性,而,隐藏的“算法规则”(设计复杂度高的计算过程或数据结构)确保了最后生成私钥之前的那个“明文”的复杂程度,成就了高级脑的“抗暴力破解”性质。
问题二、高级脑是否提高了记忆负担?
1、假设我将选用下面其中之一作为种子明文:
A:
202cb962ac59075b964b07152d234b70
B:
d09afe71664f2385fa8ef0a63c227bdd6942dcbb6fffdfd87e5d001b2a434396
请问上面两个选项哪个对记忆力负担更重?
答案肯定是 B。虽然使用 B 做 hash 种子的防暴力破解性肯定高于 A。
2、再做一次选择题:
A:
202cb962ac59075b964b07152d234b70
B:
对“达哥”进行 sha256,一共套娃 10 次,每次结果都加上“达哥”。
请问上面两个选项哪个对记忆力负担更重?
我的答案这次是 A。使用 B 做 hash 种子的防暴力破解性仍然高于 A。
两个 B 其实是同一个东西,这次显然很好记忆,因为他只有 3 个需要记忆的元素:
(1) 种子“达哥” (2)做 sha256 10 次 (3)每次结果后面种子原文
而 A 实际是 123 的 md5 哈希值,MD5 是一个已经公认不再安全(抗碰撞性较弱)的哈希算法,用 A 做明文,抗碰撞性和抗暴力破解性(因为长度更短)都较弱。
这个例子证明了,明文的安全性和记忆负担并不成正比。
3、再来一次选择题:
A:
please coffee bind dog carry solid album simple gun leave become illness
B:
对“达哥”进行 sha256,一共 10 次,每次结果都加上“达哥”。
请问上面两个选项哪个对记忆力负担更重?
我的答案仍然是 A。我不觉得去记忆 12 个随机的无意义的助记词的记忆负担会低于 B。
结论:
1、 隐藏算法不提高抗碰撞性(也不降低),它提高的是抗暴力破解性,抗碰撞性不
需要提高,经过了任意一次 sha256 的散列后就已经满足了,碰撞性与明文复杂度无关。
2、 隐藏算法是提高抗暴力破解性,而算法的复杂性是可以无损压缩(参见上面的选择题的例子)而不增加记忆负担的。比如上面的后两个例子中,B 的算法规则只有 3 个元素。而且是有逻辑意义方便记忆的。
12 个助记词则是 12 个无关元素,记忆负担高于选项 B。
算法规则必须隐藏,否则就失去了“防暴力破解”性,任何人可以通过重现你的算法规则来制作穷举或者字典攻击。
3、 从安全性的角度来看,一个加密的流程一定要隐藏一些元素,无非是你选择隐藏种子明文的规则性还是隐藏算法的规则性:
Bip 选择的是公开算法,隐藏种子明文的规则性,这就必然使种子明文具有巨大的随机性(熵)。而熵才是记忆力负担,只是它固化了这个负担的值,12 个单词就要记忆 12 个元素(加上密语就再加一个元素),24 个就增加一倍记忆负担。
高级脑则是选择隐藏算法的规则性,降低种子明文的随机性,使种子更好记忆。再上面的例子中,种子这个元素可以是“达哥”两个字,也可以是沁园春雪全文。加上设计精巧的“复杂而又好记”的隐藏算法,从而满足了在方便记忆的同时兼顾了防暴力破解性。
4、 最后需要强调的是,如果你 认同 sha256 的散列性,就不需要再就 防碰撞性 再做讨论,因为“碰撞性与明文复杂度无关”。