
防篡改:保护记录的完整性
NIST《区块链技术概述》将区块链描述为以分布式方式实现、能够显现篡改痕迹并抵抗篡改的数字账本;在网络正常运行的条件下,已发布的交易记录不能被随意更改。理解这一描述时,需要保留其运行条件。
“防篡改”关注记录是否被改动,“数据真实”关注记录的内容是否符合事实。两者是不同问题:即使一条错误信息被完整保存,也不会因此变成真实信息。分布式保存同样不意味着所有管理权限都已分散。
访问控制:限定敏感操作的权限
以太坊智能合约安全文档介绍了所有者模式、基于角色的访问控制和多重签名。它们分别通过指定管理地址、分配职责、要求多个签名来约束敏感操作。
角色划分适用于不同职责需要不同权限的情形;多重签名适用于敏感操作需要共同批准的情形。判断权限是否有效分散,要看实际控制关系:多个地址若由同一方掌握,仍可能保留集中的控制风险。函数可以被公开调用,也不代表调用者应当拥有执行所有操作的权限。
不变量与回退:约束执行结果
不变量是合约在规定执行范围内应持续满足的逻辑条件。输入检查用于判断一次调用是否符合要求,回退则使失败调用范围内的状态变更不被保留。
这些机制适用于能够明确表达的规则。其效果取决于规则是否写对、检查是否完整。遗漏的权限检查不会由回退机制自动补齐;回退也不等于撤销此前已经完成的其他交易。
审计与形式化验证:理解证据范围
以太坊安全文档还讨论了测试、形式化验证和独立审计。测试检查执行表现,形式化验证围绕明确规格证明性质,审计通过独立检查寻找问题。
常见疑问是“通过验证或审计是否就绝对安全”。评估时需要看覆盖的代码版本、假设与性质:证明某项性质成立,不能直接推出全部业务逻辑正确;审计未发现问题,也不能证明漏洞不存在。
如何把术语用于风险理解
阅读安全说明时,可以依次确认它保护什么、依赖什么条件、覆盖哪些故障。账本机制主要涉及记录完整性,访问控制涉及操作权限,代码检查涉及程序行为。将这些层次分别理解,才能避免把单项安全措施误认为整个系统的安全保证。