一种在客户端生成和管理账户密钥的新方法
在本文中,我们简单介绍路印交易所如何在浏览器中生成和管理Layer-2账户密钥以及其背后的原理。
路印交易所的每个账户都需要一个对零知识证明友好的EdDSA私钥(账户密钥)来对链下请求,也就是Layer-2请求,进行签名。我们的前端之前是根据用户的密码来生成这些账户密钥。正如StarkWare和其他朋友在推特上提到的那样,这种基于记忆密码的解决方案是不够安全的。
我们采用了一种在客户端生成和管理账户密钥的新方法,以实现以下目标:
有些人在推特上推荐了新的解决方案,我们最终采纳了Vitalik Buterin和Matter Labs团队的Alex G 的建议:
<figure class="kg-card kg-image-card" style="box-sizing: inherit; margin: 1.5em 0px 3em; padding: 0px; border: 0px; font-family: Arial, "Microsoft YaHei", 黑体, 宋体, sans-serif; font-style: normal; font-variant-caps: normal; font-weight: normal; font-stretch: inherit; line-height: inherit; font-size: 18.700000762939453px; vertical-align: baseline; caret-color: rgb(60, 72, 78); color: rgb(60, 72, 78); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;"><img src="https://blogs.loopring.org/content/images/2020/05/-----2020-05-13---7.13.24.png" class="kg-image" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-size: 18.700000762939453px; vertical-align: middle; max-width: 100%; display: block; height: auto;"/></figure>
<figure class="kg-card kg-image-card" style="box-sizing: inherit; margin: 1.5em 0px 3em; padding: 0px; border: 0px; font-family: Arial, "Microsoft YaHei", 黑体, 宋体, sans-serif; font-style: normal; font-variant-caps: normal; font-weight: normal; font-stretch: inherit; line-height: inherit; font-size: 18.700000762939453px; vertical-align: baseline; caret-color: rgb(60, 72, 78); color: rgb(60, 72, 78); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;"><img src="https://blogs.loopring.org/content/images/2020/05/-----2020-05-13---7.13.38.png" class="kg-image" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-style: inherit; font-variant-caps: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-size: 18.700000762939453px; vertical-align: middle; max-width: 100%; display: block; height: auto;"/></figure>
根据他们的宝贵意见,我们实施了以下新的客户端账户密钥方案:
n
。每次成功更新账户密钥后,它会增加1。n
附加到常量字符串的末尾 :"Sign this message to access Loopring Exchange: 0x944644Ea989Ec64c2Ab9eF341D383cEf586A5777 with key nonce: "
。 其中包括交易所的合约地址。我们将新字符串表示为M
。很遗憾,我们目前需要使用英文,但后续会在智能钱包App中,根据用户语言来选择文字。M
进行签名,从而得到S
,然后根据用户的以太坊地址 A
对S
进行验证。s = sha256(S)
作为密钥种子生成EdDSA账户私钥K
。K
以纯文本格式保存在浏览器的会话存储(session storage)中。一旦会话过期或用户注销,它就会被删除。M
供用户进行签名。我们相信这种新方法在安全性和可用性之间找到了平衡点。就可用性而言,上面描述的大多数要点对用户都是透明的。
我们希望收到您的建设性反馈,以进一步改进我们的前端密钥管理解决方案。我们希望其他团队也可以参考,就像我们从其他团队中学习到一样。融合最佳实践解决方案对于以太坊零知识证明领域将是一大福音。
我们已经完成所有的编码工作,并已上线所有相关的UI改动。
自从问题发现以来,一些用户已经重置了他们的账户密钥,我们上线上述改动后,所有用户都需要再次重置密钥(请注意,即使您现在或以前没有重置密钥,您在路印交易所的资产仍然是安全的,但无法进行交易)。
对于5月底之前进行的每次必要的重置账户密钥操作,我们将奖励价值2.5美金的LRC。我们会在6月的第一周发放LRC奖励。
关于路印协议:路印协议采用零知识证明(zkRollup)技术,允许开发者在以太坊上搭建高吞吐量、低成本、非托管、基于订单本的去中心化交易平台。路印交易所在不牺牲安全性的前提下,提供媲美中心化交易所的交易体验。
获取路印协议更多最新的动态,请访问我们的社区帐号:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!