listdescriptors如何安全审计? 图 1
listdescriptors如何安全审计? · 图 1

listdescriptors 能盘点钱包全部描述符及活动、范围和派生状态。本文说明 private 参数风险、找零识别、next_index复核和最小暴露审计格式。

listdescriptors 适合回答钱包由哪些描述符管理、哪些仍在活动以及派生游标走到哪里。常规盘点不需要打开 private;即使只有 xpub,完整描述符也可能暴露地址关联和钱包结构,因此报告必须脱敏。

默认输出已足够完成哪些审计

常规审计的目标是确认描述符集合、活动用途和派生游标,不是收集私钥。private 参数默认 false;设为 true 会请求显示私有描述符,扩大密钥材料暴露面。 所以第一轮始终使用默认 private=false

bitcoin-cli -rpcwallet="<WALLET>" listdescriptors false

输出进入隔离临时文件,生成指纹与差异后销毁原文;工单只保留最小必要摘要。

描述符对象的条件字段地图

listdescriptors 列出钱包中的全部描述符,结果按描述符字符串排序。

条件字段出现条件审计问题
desc / timestamp描述符及导入时间线索按字符串排序不等于使用先后
active / internal活动状态与找零用途internal仅对活动描述符定义
range范围描述符的有效派生区间非范围描述符不应强求该字段
next / next_index下一派生位置相关状态需要和地址生成流程共同核对

描述符对象包含 desc、timestamp、active,并可包含 internal、range、next 与 next_index。 internal 只对活动描述符定义,用于区分找零与收款;range 和 next_index 仅在范围描述符上出现。 缺少 range 或 next_index 不一定是数据损坏,先判断描述符是否为范围类型;internal 也只在活动描述符语境中解释。

internal与active如何联合解释

威胁模型分三档:

  • 完整私有描述符:可直接扩大资金控制风险;
  • xpub 与完整派生结构:会泄露地址关联和钱包拓扑;
  • 指纹、用途与差异:适合作为长期审计记录。

审计系统只长期保存第三档。第二档需要受控访问,第一档不得进入普通日志。

next和next_index怎样防止地址冲突

  1. 固定钱包名称、网络和节点版本。
  2. 使用 private=false 导出审计基线。
  3. 对描述符做指纹化并隐藏完整扩展密钥。
  4. 按 active、internal、range 和游标分组。
  5. 与最近地址派生记录及备份版本交叉核对。

一个旧收款描述符 active=false,却仍关联历史地址和余额,它不能因为“非活动”而从审计中删除。另一个活动找零描述符若 next_index 比业务记录更靠前,可能出现地址复用风险;若更靠后,则需要查是否有未登记派生。

next_index 与业务派生记录不一致时冻结新地址生成,先确认离线设备、外部钱包或未登记调用是否推进了游标。

私有描述符的泄露路径

  • 为求完整把 private 直接设为 true。
  • 把排序位置误当描述符创建顺序。
  • 对非活动描述符忽略历史余额。
  • 只存 next_index 不保存对应 range 和指纹。

private=true 只应出现在另行授权的离线流程,并带有查看人、目的、销毁时间和审计轨迹;“排障方便”不是充分理由。

脱敏盘点模板和规范入口

准备一个含收款、找零和旧描述符的测试钱包,生成脱敏盘点。第二位审计者只凭指纹和条件字段判断用途、活动性与游标风险;报告若出现完整 xpub、xprv 或可直接派生的原文,即使判断正确也判失败。

公开扩展密钥和描述符依然属于敏感运营数据。审计系统应保存哈希、用途、差异和最小必要字段,不在日志、工单或文章附件中复制完整密钥材料。

描述符差异报告可按“新增、删除、状态改变、游标移动”四类输出。新增或删除需要变更单;active 或 internal 改变需要业务负责人确认;游标只前进时也要找到对应地址生成记录。把完整 desc 替换成稳定指纹后,审计者仍能跨版本比较,而不必接触扩展密钥原文。

剩余未知:不同钱包的描述符数量和派生区间由创建、导入与备份策略决定,文章不提供统一数量阈值。

描述符基础 getdescriptorinfo检查描述符地址派生HD密钥审计