安比完成路印协议3.0安全审计报告

Daniel Wang
路印协议
Published in
6 min readNov 20, 2019

经过了三个多月的代码审查和分析,安比实验室完成了对路印协议3.0 beta3版本的安全审计工作。我们很高兴与社区分享这个报告,并希望就其反馈的一些问题做进一步说明。

您可以通过下面的链接下载PDF版的安全审计报告:

安比的审计结论

审计结果

风险评估

安比发现协议代码中存在以下可优化之处。我们相信这些风险相对都非常低,即使不做任何处理也并不会影响协议的安全性。

路印对协议的改进和说明

安比在审计过程中与路印进行了比较实时的沟通,因此上述发现的问题多数在审计结束前就已经被解决。

  • 4.3.1 “getLRCFeeStats() 接口定义与实现不一致。” ⟶ 该问题已经通过重构得到解决
  • 4.3.2 “SignatureBasedAddressWhiteList中 assembly code无法实现功能。”⟶ 在最新代码中已经fix这个bug并增加了测试用例。
  • 4.3.3 “讨论 Operator 对 maker/taker 订单选择的影响力。” ⟶ 我们已经就此进行了讨论。其实协议设计时可以赋能中继决定哪个订单是Maker,哪个是Taker。
  • 4.3.4 “多处使用 transferTokens() 未检验返回值。” ⟶ 这个方法是自检查的,因此调用者可以不去检查返回值。
  • 4.3.5 “transferDeposit()函数实现意图不明确。”⟶ 该private方法实际完成具体的充值转账功能。其中将source作为参数传入而不是直接试用msg.sender是因为想在将来支持类似Gas Station的机制。
  • 4.3.6 “Block中timestamp数据类型需要考虑溢出问题。” ⟶ 目前时间戳类型是uint32,可以支持2106年前的时间。我们觉得这个问题不大,在2106年前路印一定会使用新技术对协议进行不断升级。
  • 4.3.7 “TransformRingSettlementDataGadget 电路代码存在优化空间。” ⟶目前对链上数据可用性OCDA的压缩逻辑是被禁用的,因此不会对实际电路的效果有任何影响,因此目前没有考虑和优化相关逻辑,而是保持这部分电路更容易理解和更改。我们相信电路中的数据压缩在将来是有用处的,只是在电路复杂度和合约复杂度之间要做个平衡。
  • 4.3.8 “TakerMakerMatchingGadget 中电路注释错误。” ⟶ 已经在多个电路优化代码中得到解决。
  • 4.3.9 “电路中 generateKeyPair() 调用逻辑不符合实际。” ⟶ 也已经在多个电路优化代码中得到解决,并且generateKeyPair() 仅仅在测试代码中试用;在产品环境中证明钥和验证钥都是在可信计算的基础上预生产好的。
  • 4.3.10 “电路中 OffchainWithdrawalBlock 类存在冗余字段。” ⟶ 这个问题也已解决
  • 4.4.1 “需考虑极端情况下的异常处理”⟶ 我们已经考虑以太坊极度拥堵(交易需要等待一个星期)和中继数据全部丢失这两种极端情况,并对协议参数做了调整

我们相信安比反馈的问题都已被讨论和解决,最新的代码中没有非更改不可之处。

电路分析

路印协议的电路部分比较难理解。我们从审计报告中截图分享安比对电路的理解,希望其他计划和正在使用零知识证明的团队有启发或参考。

充值电路

充值电路都是链上行为,除了用来完成充值功能,它还用来帮助用户开户,重置交易秘钥,和取消所有历史订单。

链上提现电路

链上提现电路保障中继在一定时间段内必须对提现进行处理,优点是有最坏情况下的时间保障;缺点是需要用户付费。

链外提现电路

链外提现的优点是提现申请零手续费;缺点是中继可以选择不处理特定的提现申请 — 比如提现金额非常小,在这种情况下用户依然可以坚持使用链上提现的方式迫使中继处理任意额度的提现请求。中继可以选择完全不支持链外提现请求。

环路交易电路

该电路是交易的核心,并且被高度优化以降低区块链上calldata的大小。

链上撤单电路

该电路保障用户的订单一定会在一定时间内取消,但这种请求需要区块链上的交易费用。我们建议用户使用链外取消订单的方式取消订单,就和使用中心化交易所一样。如果担心有安全风险,可以为订单设定过期时间;或定期通过充值电路更改交易密码,这样可以一次性取消过去所有的订单。

致谢

安比实验室是国内首屈一指的区块链和智能合约安全审计机构。这是路印与安比的第二次合作。第一次合作时安比帮助路印完成了协议2.0的安全审计和合约的形式化证明(Formal Verification);这次再度合作,一是因为第一次审计的结果非常专业,另一方面是安比实验室的创始人和团队对零知识证明与多方计算有学术研究经验。我们在此感谢安比实验室的审计工作。

如果您对审计报告有疑问或建议,请电邮联系我们安比实验室

⭑ 安比实验室官网:https://secbit.io
⭑ 安比的电邮:info@secbit.io
⭑ 安比的Twitter账号:@secbit_io

获取路印协议更多最新的动态,请访问我们的社区帐号:
⭑ Twitter:twitter.com/loopringorg
⭑ Reddit:reddit.com/r/loopringorg
⭑ 电报:t.me/loopringfans (中文)
⭑ 微博:https://weibo.com/loopringfoundation
⭑ 路印微信公众号:路印 Loopring

--

--