Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文
随着区块链钱包的发展和分层确定性(HD)钱包技术的普及,越来越多的用户开始熟悉了一个叫“助记词”的概念,很多人都已经习惯了从一开始使用一个钱包的时候,就先抄好单词认真保管,并且他们对于助记词的重要性也有了很深刻的理解。- M  p& [9 ?/ H, n$ A- \
说到助记词,有人可能会问了,为什么有些钱包是 12 个单词(比如比特派钱包),另一些则是 24 个单词的助记词呢?是不是单词越多就越安全呢?6 }6 O4 H9 g; j5 E3 c$ s+ d
其实,与大部分人的直觉相反,从密码学的角度上讲, 12 单词的安全强度和 24 个单词是一样的, 12 个单词已经足够安全,增加单词数并不能提高安全级别。( Q. h" ?9 c6 e9 O, q) ~
虽然按照比特币 BIP32/44/39 规范,从 2048个单词词库中选择 24 个助记词的概率空间 > 2^256,而选择 12 个助记词的概率空间 > 2^128,从概率空间上看起来 24 个助记词的安全强度好像是要高很多,但本文将从密码学的角度给你澄清这一事实,即“12个助记词和24个助记词的密码学安全强度是一样的”。
, I3 a) u6 V( K. Y首先我们需要理解一个很著名的数学理论,叫“生日悖论”(Birthday Paradox)。
) o% v0 b+ p2 R# z, v' P/ C2 x9 L# j. s( |' H7 n& T
问大家一个问题,假设一个班级里有 23 个人,问这个班里有两个生日相同的人的概率有多大?直觉上,大家可能会觉得概率很低,几乎不可能,一年有 365 天呢,两个人同一天生的概率得是多小啊。但数学往往就是反直觉的,其真实概率要大于 50%,如果是 30 个人的班级,概率则会大于 70%, 60 个人则大于 99% ,也就是几乎肯定有两个人生日相同,你敢信不?& E% `1 }; s7 R  r$ V5 ^
这就是著名的“生日悖论”。$ j( Q# c2 v, J+ c0 G+ ?( _
生日悖论这一简单的概率理论对于密码学的影响是巨大的,因为基于这一理论产生了一种名为“生日攻击”的密码学攻击手段,基于这一攻击手段,所有的哈希函数(Hash)的密码学安全强度都会降低到其概率空间位数的 1/2,即 2^n 概率空间的密码学安全强度为 2^(n/2),如果是 2^256,则其安全强度为 2^128。
" o5 {. ~! N% [; _: w. v5 D: I好了,在进一步讲述生日攻击之前,我们还需做点儿科普,学习几个密码学基本概念:
+ m8 Y8 Y. P* H- N9 M
  • 原像攻击:我们都知道哈希函数是不可逆的,y=hash(x),知道 y,我们是无法得到 x 的。如果有一种攻击方式能使得您得到 x,那这种攻击方式就叫做原像攻击;
  • 次原像攻击:如果有一种攻击方式能让你找到另一个 x’,使得 hash(x’) 也等于 y,即 y=hash(x)=hash(x’),这种找到了另一个 x’ 的攻击方式叫做次原像攻击;
  • 碰撞攻击:碰撞攻击的意思是,虽然我们找不到原像,也找不到次原像,但通过一定范围内的计算,能够找到一对儿碰撞 hash(z)=hash(z’),就像虽然一年有365天,但每23个人就有50%的概率出现一次生日的碰撞,这使得我们不需要遍历365次,而只需随机抽取23个数就有50%的可能性找到一对儿碰撞,这就是碰撞攻击。! O- ?/ q1 M* ^" z, b
    ; T$ z, |& ^- \: M* s6 \1 O6 l
    对原像攻击、次原像攻击和碰撞攻击有了基本的理解了之后,您就应该能明白,原像或次原像攻击都很难,因为几乎要遍历整个概率空间,如果算法没有漏洞的话,对于 2^256 的概率空间,您就需要遍历几乎 2^256 次才有希望找到一个原像或者次原像。而对于碰撞攻击来说,您只需要遍历 2^128 次,就能找到一对儿碰撞。
    8 F: Z3 ?" N0 Q* [  i( L- i那对于密码学签名的碰撞攻击又该如何进行呢?
    7 v: L. G( p; X% W0 V% j$ M我们假设你要对一个消息 m 做密码学签名,攻击者知道 m 是正确的消息,并且准备了一份伪造的消息 m’,毫无疑问,hash(m)hash(m’),拿着 m’ 是骗不了你的。
    - P" V6 p& H$ H, l2 v现在,攻击者准备了大量的稍做修改的 m,又准备了大量的稍做修改的 m’,这里所提到的“稍作修改”并不影响 m 的正确性和 m’ 的伪造性。
    . ^2 w8 n& c- A/ V, d6 f+ l$ L5 b然后,攻击者再从大量的 m 和大量的 m’ 中找到一对儿 hash(m)=hash(m’),其难度是 2^(n/2),也就是说,对于 2^256 的概率空间,攻击者需要准备 2^128 份正确消息 m和 2^128 份伪造消息 m’,从中就能找到一对儿碰撞 hash(m)=hash(m’)。
    ' G! e1 ?5 r9 t7 ~0 r4 w& m; `最后,攻击者拿碰撞到的 m 让你做密码学签名,并将 m 替换为 m’,攻击成功。- O' I+ L6 I# J; o
    好了,现在大家应该基本上理解了生日悖论和生日攻击的基本原理了,对于密码学货币来说,2^256 的概率空间其密码学安全强度为 2^128,12个单词的助记词的概率空间也是 2^128,其实是足够了的哈,增加助记词的概率空间并不能提高密码学安全强度,对于钱包助记词来说,12个单词和24个单词一样安全的。
    5 T( m$ r2 `2 G1 G; b1 k附:维基百科上关于生日悖论和生日攻击的说明
    / ?9 X5 G, t5 H! B0 v$ shttps://en.wikipedia.org/wiki/Birthday_problem/ [8 v* ~2 H4 t; u( `$ `
    https://en.wikipedia.org/wiki/Birthday_attack
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

    惊心幻 初中生
    • 粉丝

      0

    • 关注

      0

    • 主题

      11