助记词怎么转换成私钥_⼀⽂读懂助记词是如何产⽣和变成私
钥的?
O3 钱包上周正式上线⽀持了 ETH 钱包,⼤家在创建钱包时涉及到了⼀些专业名词:助记词,私钥、Keystore。相信⼤家都听到这样的说法:助记词是加密后的私钥,但没有详细了解过它的产⽣过程和为什么说它是加密后的私钥。
今天我们就从技术⾓度了解⼀下助记词是如何产⽣的,以及它是如何变成私钥的。
在⼀般中使⽤的都是 256 位的随机整数作为私钥的,但记忆很困难,所以为了⽅便⼤家记忆和使⽤,BIP39 规范提出了⼀种通过助记词来推算种⼦的算法,帮助我们的降低使⽤门槛。
· 助记词的⼏种形式
⽬前已经规范化的助记词词典有简体中⽂、繁体中⽂、英⽂、⽇⽂、法语、意⼤利语、韩语、西班⽛语等,但⼤部分主流钱包还是只使⽤英⽂。
虽然我们常见的助记词个数是 12 或 24 个,但是还是可以⽣成 15、18、21 个数的助记词,甚⾄是低于 12 个。他们之间的区别是:⼀般24个词的安全性⾼,但是12个词易⽤性⾼,且可以兼容其他主流钱包;⽽低于 12 个词的碰撞⼏率太⼤、风险太⾼所以不建议使⽤。
· 助记词的⽣成过程
1、⾸先⽣成⼀个 128-256 Bit 的随机数,这个随机数的位数须是 32 的倍数;
2、然后将随机数进⾏ SHA256 ,取前 X 位当做校验位。具体⼏位需要看产⽣随机数的位数( X = 随机数位数 / 32 );
3、将效验位添加到随机数后⾯;种子哈希转换链接
4、将添加效验位的随机数按位分成每 11 位为⼀组,分成若⼲个组;
5、那么每 11 位都可以得到值范围是 0~2047 的数,根据这些数去查助记词词典,就可以得到助记词了。
助记词词典是⼀个 2048 个词的列表,具体可查看英⽂词典⽰例。
如果钱包需要⽀持相应语⾔的助记词,可以前往下载各种语⾔助记词。
随机数位数校验位位数随机数加校验位位数助记词个数128413212 160516515 192619818 224723121 256826424
· 助记词⽣成私钥的过程
1、对助记词和盐使⽤ NFKD 进⾏规范化编码( 盐是 “mnemonic” + 密码 );
2、使⽤ PBKDF2 算法获得 512 位的种⼦,PBKDF2 使⽤ HMAC-SHA512 作为哈希算法,并进⾏ 2048 次计算;
3、前 256 位就是私钥,后 256 位的作⽤⼤家暂时不⽤知道,我们使⽤ BIP32 的时候才会⽤到。
· 如何验证助记词的正确性
1、去词典查词,检查⽤户输⼊的词在不在词典⾥;
2、把所有词的索引拿出来按顺序转换成由位组成⼆进制数据然后进⾏拼接组合;
3、把⼆进制数据再拆分成随机数和校验位,然后把随机数进⾏ SHA256 ,最后对⽐校验位结果是否正确。
· 助记词的⼀些特性
1、由于使⽤了 HMAC-SHA512 的 PBKDF2 算法,所以⽆法由 512 位的种⼦反向推出助记词;
2、助记词和 128 位的随机数是可以相互转换的;
3、助记词⽣成私钥的时候是可以加⼊⾃⼰的密码来降低碰撞率以及安全性。
本⽂来源:BitTribeLab
作者:闪电⽹络北京研发⼩组 王荣强
: O3 Labs 官⽹: o3work O3 钱包下载链接: o3work/#download 官⽅电报:
t.me/O3Community 官⽅推特: twitter/O3_Labs O3 Labs 爱好者中⽂社区:添加⼩助⼿进(VX:wyfdc0919)
点击“阅读原⽂”进⼊ O3 Labs 官⽹。