
比较前先明确系统范围
这里的普通系统指由明确运营方维护应用和数据库的业务系统;区块链部分主要讨论公共链账本及智能合约。普通系统也可以采用分布式架构,区块链应用也可能依赖集中管理的入口,两者不能简单等同于单机与多机。
比较常见问题时,可以围绕三个问题展开:谁有权修改状态,哪些规则决定操作有效,出现错误后如何恢复。不同系统对这些问题的处理方式,决定了其安全边界。
权限问题:公开调用与管理权集中
以太坊智能合约安全文档强调,敏感函数需要访问控制,并介绍了所有者、角色划分和多重签名等方式。文档也指出,测试与独立审查需要配合使用,审计不能发现所有缺陷。
对两类系统而言,能够访问功能不代表应该拥有执行敏感操作的权限。需要分别审视身份识别和操作授权;即使采用多个管理账户,也要检查单个账户是否仍能独立完成高风险操作。权限分散的效果取决于实际规则。
一致性问题:提交不等于稳定确认
比特币开发者指南说明,全节点按共识规则验证区块,账本规则限制同一输出被重复花费。网络可能短暂出现竞争分支,节点在有效链中依据累计工作量选择链,因此区块高度不能作为全局唯一标识。
这提示业务设计应区分请求提交、记录被接收和结果达到所需确认程度。普通系统与链上应用都需要明确状态转换,避免界面已经显示完成,后续流程却仍依赖尚未稳定的结果。比特币的具体机制不能直接套用于所有区块链。
代码问题:规则正确与执行一致是两回事
共识解决参与节点如何接受记录的问题,业务代码则决定操作是否符合应用要求。即使节点一致执行某段逻辑,也不能由此推断该逻辑没有权限漏洞或边界错误。
检查系统时,需要覆盖异常输入、重复操作和不满足前置条件的情况。测试通过只能说明已检查的情形符合预期;形式化验证的结论也受所定义的性质、模型和假设限制,不能扩展为整个系统绝对安全。
维护问题与适用条件
普通业务系统通常由运营方协调修复和数据更正,但仍需处理关联记录与操作审计。智能合约则需要在部署前明确可否升级、谁能升级及异常处置方式,不能默认发现缺陷后可以直接覆盖代码。
如果业务需要多个参与方依据共同规则验证记录,区块链具有可讨论的适用基础;如果需求主要是单一机构内部的数据管理,则应先明确引入共同账本要解决什么问题。无论采用哪种架构,权限边界、规则正确性和故障恢复责任都需要单独设计。