
一、研究对象与安全目标是否明确
研究区块链安全,首先要说明保护什么、攻击者能做什么,以及哪些条件被视为可信。账本历史的一致性、合约执行的正确性和管理账户的权限安全属于不同问题,验证其中一项,不能直接得出整个系统安全的结论。
比特币开发者文档介绍了交易验证、工作量证明和分叉选择;以太坊智能合约安全文档讨论了访问控制、程序检查及独立审查。前者关注账本如何形成共同记录,后者关注应用如何避免错误执行,两者需要分层理解。

二、难以篡改是否意味着没有攻击风险
比特币通过区块间的哈希关联和工作量证明,提高修改历史记录的成本;节点还会验证交易是否符合规则,防止同一交易输出在有效链中被重复花费。出现竞争分支时,节点依据有效链的累计工作量选择链。

常见误区是把这些机制理解成绝对不可逆。相关研究需要写明算力与网络条件,并区分历史重组和应用漏洞:账本能够忠实记录一笔符合协议规则的交易,并不代表这笔交易符合应用设计者的意图。
三、权限分配是否留下单点风险
合约安全研究经常涉及敏感操作由谁批准。单一管理账户便于管理,但其密钥失守可能影响受控功能。角色控制能够分配职责,多签机制则可让操作需要多个参与方同意。
评估时应进一步追问:谁能授予或撤销角色,谁能修改多签规则,以及多个账户是否实际上由同一主体控制。账户数量增加本身,不能证明控制权已经有效分散。
四、异常检查是否对应明确的安全属性
合约可以利用条件检查拒绝无效输入、阻止未授权调用,并检查执行过程中应持续成立的不变量。问题在于,检查是否完整取决于设计者是否准确描述了规则。
例如,研究余额相关逻辑时,既要检查单次操作的输入,也要考虑操作前后状态是否满足约束。异常回退能够撤销失败执行造成的状态变化,却无法自动识别一个条件齐全、业务含义却错误的操作。
五、测试和形式化验证能证明到什么程度
单元测试通常覆盖预先编写的场景;静态分析检查代码结构与可能路径;模糊测试通过大量变化的输入寻找异常。不同方法覆盖的问题不同,因此需要围绕明确的安全属性组合使用。
形式化验证的结论受规格、模型和假设限制。即使证明程序满足某项规格,也仍需确认规格是否准确表达业务目标,以及外部交互是否在模型覆盖范围内,不能将局部证明扩展为没有任何漏洞的保证。
六、审计结论是否具有适用边界
独立审查有助于发现开发与测试遗漏的问题,但无法保证发现所有缺陷。理解审计结论时,应核对审查对象、代码版本、覆盖范围与尚未解决的问题。
研究成果也应清楚列出适用条件:针对某个合约版本成立的结论,不能自动延伸到修改后的代码或不同权限配置。把结论与具体对象、假设和验证范围绑定,才能让安全评估具有可复核性。