如果你接触过数字货币或者相关内容,你肯定接触或使用过助记词,那么我们这篇文章的目的就是要从技术角度搞明白这个助记词是如何产生的,以及助记词是如何变成私钥的。
在一般数字货币中是使用 256 位的随机整数作为私钥的,但是这个记忆起来比较困难,所以为了解决记忆和易用性的问题 BIP39 规范提出了一种通过助记词来推算种子的算法,来帮助我们的降低使用门槛。
助记词的几种形式
现在已经规范化的助记词词典有简体中文、繁体中文、英文、日文、法语、意大利语、韩语、西班牙语上述语言的助记词都可以生成,但大部分主流钱包做法还是只使用英文。
一般钱包的助记词个数是 12 或 24 个,但是这个标准也还可以生成 15、18、21 个数的助记词,甚至是低于 12 个词也可以。如果开发钱包时为了安全性考虑一般采用 24 个词,为了兼容其他主流钱包或易用性一般采用 12 个词。低于 12 个词的话碰撞几率太大、风险太高不建议使用。
助记词的生成
-
生成一个 128-256 Bit 的随机数,但是这个随机数的位数必须是 32 的倍数。
-
将随机数进行 SHA256 然后取前 X 位当做校验位。具体几位需要看产生随机数的位数。( X = 随机数位数 / 32 )。
-
将效验位添加到随机数后面。
-
将添加效验位的随机数按位分成每 11 位为一组,分成若干组。
-
那么每 11 位都可以得到值范围是 0~2047 的数,根据这些数去查助记词词典,就可以得到助记词了。