审计人:Jean Philippe Aumasson 我们在此宣布,Ergo已顺利通过代码某些最关键部分的安全审计。此次安全审计由Jean-Philipee Aumasson(译注:Jean-Philipee Aumasson是全球顶尖密码学专家,详见“安全审计人简介”)完成。 具体报告如下所列。没有发现任何重大问题。对所发现问题的评论如下: 1. 关于钱包密码,我们将在下一版协议客户端中提供建议。不确定是否会对密码进行硬性执行,但我们会对此做更多的咨询。 2. 只有在启动新网络时修改“n”和“k”参数才有意义。修改挖矿节点中的这些参数将使生成的区块对其他节点来说无效。修改协议客户端中的这些参数意味着要进行另一次分叉(来自诚实协议参与者的区块将被拒绝)。因此,可能不需要进行额外核验,因为那些启动新网络的人会正确设置“n”和“k”参数。 3. 目前Ergo节点以及我们知道的其他区块链协议客户端和钱包还有我们正在使用的密码库均无法提供防止本地运行的侧通道攻击(如恶意软件或病毒所发起的时序攻击或内存检查)的保护。所以,请保护好正在运行你钱包的设备! 摘要 我们应Ergo的请求对其Ergo平台的几个组件进行了安全评估: l? 西格玛协议证明(Sigma Protocol Proof)的创建与验证 l? 钱包对密语的安全存储 l? 工作量证明 这份简短的报告概括了我们的评估,并说明了我们所发现的问题以及应对措施建议。 西格玛协议证明 Ergo协议依赖于ErgoScript,这是一种支持西格玛语句(sigma-statement)的脚本语言,可以通过非交互式知识证明来对其进行证明和验证。 这些证明是这样的语句,它被描述为由AND、OR和阈值条件组成的树,其树叶是离散对数问题的知识证明。 西格玛语句证明是非交互式的,这归功于 Fiat-Shamir转换。 该逻辑在《ErgoScript白皮书》中有详细说明,且详细的证明与验证流程在其附录 A中有介绍。 实现挑战则是: l? 定义安全高效证明的编码,并实现总是成功处理有效输入的序列化,以及总是无法处理无效输入的反序列化。 l? 根据规范正确地实现证明与验证功能,最重要的是确保没有无效语句能够成功通过验证。 我们对这两个方面进行了审计,根据存储库 sigmastate-interpreter中的代码和《ErgoScript白皮书》,对(附录A中的)预期行为与实际所实现的行为进行仔细比较。 我们会重点审计了来自SigSerializer、Interpreter和ProverInterpreter 特质(Trait)和对象(Object)的代码。 我们主要寻找来自以下类别中的Bug: l? 不安全处理有缺陷的输入 l? 不安全处理异常长或异常短的输入 l? 大树深度或递归级时的行为 l? 不安全使用 Scala 类型和结构 l? 不合适的变量类型 l? 整数溢出 l? 竞态条件 l? 逻辑错误 尽管进行了详尽审计,但我们并未发现任何安全问题。 协议的逻辑和内部机制是比较复杂的,我们认为最大的风险在于对证明进行分析与验证。然而,如要利用这些漏洞,攻击者必须创建一个在某种程度上会令自己受益且在不应通过验证时通过验证的语义正确脚本。 在软件安全方面,Scala消除某些类别的Bug,但是由于Scala的特定行为或未处理的错误,Scala代码可能依然会受到Bug的困扰。 钱包 Ergo的钱包功能使其用户能够在磁盘上存储并恢复密语,且在初次使用的时候,可以用一个新的种子(Seed)对钱包进行初始化。 该逻辑主要在 ErgoWalletActor中进行定义,有关密语存储的一个主要组件是JsonSecretStorage。 首次创建钱包时,InitWallet命令执行以下操作: l? 生成作为初始熵的settings.walletSettings.seedStrengthBits随机位。在默认情况下,生成160位。 l? 从生成的随机位中生成一个BIP39,这可以被视作熵位的一次编码。采用密码可选的标准BIP39逻辑。 l? 使用 BIP39 基于 PBKDF2 的推导逻辑,从助记词(Mnemonic)中推导出种子(Seed)。 l? 采用一个随机数,通过AES-GCM将种子加密到磁盘,使用拥有 128000次迭代的PBKDF2-HMAC-SHA256,并利用一个随机盐从密码中推导出一个密钥。 如要解锁一个已创建好的钱包,用户提供密码,钱包将尝试解密所存储的数据。 如要从BIP39口令恢复现有帐户,需要执行一个类似于初始化的流程,只不过钱包将从助记词中而非通过挑取随机助记词的方式获得种子。 我们在此确定的两种风险包括: l? 缺乏对密码长度的检查:由于钱包是在磁盘上存储密语,密码足以访问种子,因此,从理论来讲,密码的熵至少应当与助记词相同,而在实际上应该很难破解。因此,我们建议采用最短的密码长度,如16个字符。 l? 在钱包软件执行后,密语值(密码、种子和派生私钥)的副本可能会留在内存中,这是诸如 Scala 等垃圾收集语言的内在局限性。 共享相同内存地址空间的另一进程或用户可能会恢复这些密语,并且它们也可能出现在崩溃转储中。据我们所知,在纯 Scala中没有有效的缓解。 工作量证明的验证 在先前审计Autolykos工作量证明的安全性之后,我们进行了另一轮审计,重点审计了其最新的验证逻辑,特别是在提交eb0f85a中所做的更改。 主要的相关文件是AutolykosPowScheme,其他重要操作在诸如HeadersProcessor和ModifierValidator中实现。 经过检查,我们发现所实现的验证逻辑与Autolykos规范中所阐述的验证逻辑是一致的,且其已被妥善整合进区块头的验证逻辑中。 我们认为应解决以下两点: l? 对k和n进行更严格的验证:虽然类强制执行 k<=32(解决方案中的元素数量)和 n<31(元素总数的 log2值),但依然可以从授权参数中创建弱(weak)。因此,validate()函数可能需要进行额外的验证,确认n和k是否等于预期值。 l? 主张 k和n为正值,因为当前的负值(称作 Ints)将传递 assert 语句。 安全审计人简介 全球顶尖密码学专家Jean-Philipee Aumasson Jean-Philippe (JP) Aumasson(也叫veorq)是世界著名密码学专家、Kudelski Security的技术副总裁兼首席密码学家、Teserakt的联合创始人和Taurus Group的首席安全官。Jean-Philippe于2009年取得世界顶尖理工院校洛桑联邦理工学院(EPFL)博士学位,且在Kudelski Group从事应用密码学、安全架构和网络安全领域工作已有8年时间。Jean-Philippe撰写了广受赞誉的著作《严肃密码学》(2017),并设计了得到广泛使用的BLAKE2和SipHash等算法。他已为领先区块链和加密货币组织执行了大量安全评估。他曾在Black Hat、DEFCON、RSAC、CCC和Infiltrate等会议上发表了有关应用密码学、量子计算和平台安全性的演讲。他也是《密码技术编码标准》和密码哈希竞赛的发起人。 Ergo平台简介 Ergo平台是一个安全、适应力强、开放、无需许可、去中心化的DeFi应用底层公链平台,主要专注于提供一种高效、安全、简便的方式去实现金融合约,也是一个合约币和智能合约平台。其背后技术团队拥有10年区块链理论研究和实战开发经验,Ergo将以此为基础构建高级加密功能和全新DeFi功能。Ergo现有实例涉及众筹、预言机、去中心化交易所、稳定币、NFT拍卖等。另外,Ergo将永守PoW,支持普通人GPU挖矿。 原文链接: https://ergoplatform.org/en/blog/2020_01_12_security_audit/ 审计人简介参考链接: https://www.aumasson.jp/ https://www.blackhat.com/us-19/speakers/Jean-Philippe-Aumasson.html https://opencryptoaudit.org/people —- 编译者/作者:sky110 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
Ergo代码顺利通过全球顶尖密码学专家安全审计
2021-03-29 sky110 来源:区块链网络
LOADING...
相关阅读:
- 韩国流行的区块链平台Klaytn宣布与OpenSea NFT市场整合2021-03-29
- 矿工||比特币矿工3月份的收入已超过15亿美元2021-03-29
- Filecoin个人挖矿需要注意什么?2021-03-29
- Pi风暴即将来临测试钱包即将席卷全球尼古拉斯爆料安全圈将起到非常重2021-03-29
- NAP北美矿业全球首个一站式区块链算力云平台2021-03-29