路印生成二层(Layer-2)账户密钥的新方法

一种在客户端生成和管理账户密钥的新方法

在本文中,我们简单介绍路印交易所如何在浏览器中生成和管理Layer-2账户密钥以及其背后的原理。

路印交易所的每个账户都需要一个对零知识证明友好的EdDSA私钥(账户密钥)来对链下请求,也就是Layer-2请求,进行签名。我们的前端之前是根据用户的密码来生成这些账户密钥。正如StarkWare和其他朋友在推特上提到的那样,这种基于记忆密码的解决方案是不够安全的。

我们采用了一种在客户端生成和管理账户密钥的新方法,以实现以下目标:

  • 网页应用程序允许用户更改相同以太坊地址的账户密钥,以便他们可以将其密钥导出并分享给第三方(例如做市商),随后可以撤消账户密钥。这意味着以太坊地址和账户密钥之间的映射是一对多的,而不是一对一的。
  • 用于生成账户密钥的种子包含来自相应以太坊地址的有效ECDSA签名。
  • 当交易所在浏览器中打开时,我们将允许用户刷新/重新加载网页,而无需重新登录或重新签名任何消息。
  • 如果用户关闭应用程序页面,则会话结束,用户需要再次登录。
  • 如果用户明确注销,则应清除所有与账户密钥有关的会话和本地数据。
  • 不可以将任何敏感数据发送给路印的后台系统。

我们的新方法

有些人在推特上推荐了新的解决方案,我们最终采纳了Vitalik ButerinMatter 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>

根据他们的宝贵意见,我们实施了以下新的客户端账户密钥方案:

  1. 对于每个以太坊地址,中继统计自注册以来更新账户密钥的次数,我们将这个值称为密钥计数 n。每次成功更新账户密钥后,它会增加1。
  2. 交易所网页端将n附加到常量字符串的末尾 :"Sign this message to access Loopring Exchange: 0x944644Ea989Ec64c2Ab9eF341D383cEf586A5777 with key nonce: "。 其中包括交易所的合约地址。我们将新字符串表示为M。很遗憾,我们目前需要使用英文,但后续会在智能钱包App中,根据用户语言来选择文字。
  3. 交易所网页端请求用户使用其以太坊ECDSA私钥对 M进行签名,从而得到S,然后根据用户的以太坊地址 AS进行验证。
  4. 交易所网页端使用s = sha256(S)作为密钥种子生成EdDSA账户私钥K
  5. 交易所网页端把 K以纯文本格式保存在浏览器的会话存储(session storage)中。一旦会话过期或用户注销,它就会被删除。
  6. 当用户登录时,交易所网页端将从中继查询密钥计数,以构建M供用户进行签名。

新方法的一些特性

  • 没有密码。密钥计数概念对用户来说也是透明的。
  • 即使是同一账户,所有可能的账户密钥都是不相同的。
  • 与路印的智能钱包移动app完全兼容 — EIP -1271将用于验证来自智能钱包地址的签名。
  • 与路印协议分离。专业用户仍然可以通过直接与交易所合约进行交互来使用自己的算法 ,以导出/管理账户密钥。

我们欢迎大家的反馈

我们相信这种新方法在安全性和可用性之间找到了平衡点。就可用性而言,上面描述的大多数要点对用户都是透明的。

我们希望收到您的建设性反馈,以进一步改进我们的前端密钥管理解决方案。我们希望其他团队也可以参考,就像我们从其他团队中学习到一样。融合最佳实践解决方案对于以太坊零知识证明领域将是一大福音。

上线时间

我们已经完成所有的编码工作,并已上线所有相关的UI改动。

请再次重置您的账户密钥

自从问题发现以来,一些用户已经重置了他们的账户密钥,我们上线上述改动后,所有用户都需要再次重置密钥(请注意,即使您现在或以前没有重置密钥,您在路印交易所的资产仍然是安全的,但无法进行交易)

对于5月底之前进行的每次必要的重置账户密钥操作,我们将奖励价值2.5美金的LRC。我们会在6月的第一周发放LRC奖励。


关于路印协议:路印协议采用零知识证明(zkRollup)技术,允许开发者在以太坊上搭建高吞吐量、低成本、非托管、基于订单本的去中心化交易平台。路印交易所在不牺牲安全性的前提下,提供媲美中心化交易所的交易体验。

获取路印协议更多最新的动态,请访问我们的社区帐号:

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
路印协议
路印协议
路印DEX,全球第一个基于基于零知识证明的高性能非托管交易所。 今年2月上线https://looprinng.io 路印协议一直专注在高性能的去中心化交易(DEX)协议。路印协议的目标是想实现以太坊上基于订单撮合的去中心化的交易协议。是一种大胆的设计和尝试,通过零知识证明技术(ZKP),兼顾去中心化和交易性能。