Flutter开发中MetaMask Secret Recovery Phrase 12词助记词登录实现问题求助
12词助记词登录实现方案
核心实现步骤
- 助记词合法性校验:首先对用户输入的12个词做三层校验,第一校验词数是否为12,第二校验每个词汇均属于BIP-39官方标准词库,第三校验助记词自带的校验和是否正确,避免用户输入错误。以JavaScript生态为例,校验可以直接调用方法
bip39.validateMnemonic(mnemonicStr)实现。 - 派生应用专属身份凭证:通过校验后的助记词,按照BIP-44标准派生你应用专属的密钥对,派生路径建议设置为独有的标识,避免和其他应用的密钥冲突,示例路径
m/44'/你的应用专属数值'/0'/0/0。派生得到的公钥可作为用户在你系统内的唯一身份ID,私钥仅用于本地签名,全程不对外传输。 - 挑战签名登录流程:
- 用户输入助记词后,前端本地完成助记词校验和密钥派生,助记词和派生的私钥全程不传到后端
- 后端生成随机挑战字符串返回给前端
- 前端用派生的私钥对挑战字符串做签名,将签名结果和对应公钥一同传给后端
- 后端用收到的公钥验证签名合法性,验证通过即下发登录凭证,完成登录流程
安全注意事项
- 助记词、派生的私钥禁止明文存储在本地存储、后端数据库中,用户输入的助记词完成签名流程后立即从内存中清除,需要长期保持登录状态仅存储后端下发的token即可
- 助记词输入页面建议添加防截屏、安全键盘等防护,避免用户助记词被恶意程序窃取
- 若你的应用支持生成新的助记词,生成时必须调用系统级的安全随机数源,禁止使用普通伪随机数生成助记词熵值
内容的提问来源于stack exchange,提问作者Bob Lee
相关产品推荐
相关产品推荐

