Corda 数据篡改问题

Corda Data Tampering Issue

背景: 我们了解到 corda 不是防篡改的,而是防篡改的。因此,如果其中一个节点直接在数据库中操作一个状态,如果该状态在后续交易中被使用,其他节点将能够检测并标记它。然而,我们的测试结果并不符合我们的预期。 Corda 没有标记被篡改的状态,事实上它在所有参与者节点中记录了带有篡改数据的新状态。

先决条件注释掉合约验证:我们注释了合约代码以检查是否在 Corda 中检测到数据篡改,而没有在命令级别明确进行检查。

复制步骤:

  1. 启动义务 Cordapp。
  2. 在甲乙双方之间建立3项义务(100泰铢、256泰铢和100泰铢)

  3. 编辑乙方数据库中的VAULT_STATEStable,查看十六进制之间的差异。 左边是金额不同的债务,右边是金额相同的两个债务。从编辑器来看,当它们的数量相同时,有 2 个差异(可能与线性 ID 和时间戳相关),当它们的数量不同时,第三个差异显示在左侧。

  4. 用较低的金额覆盖特定部分,在乙方库上使用SQL更新库:

  1. 本次更新后,查看乙方的金库,3笔债务的金额均改为100泰铢。

  2. 但由于甲方保险库中的数据未被篡改,甲方保险库中会显示原始金额(100、256、100)。

  3. 将乙方的所有义务转移给丙方

  4. 转让义务结果:乙方无更多义务

  5. 转移义务结果:丙方将获得乙方的所有义务(一共100泰铢,即篡改数据被传递给新方)

  6. 转移义务结果:甲方的保险库也将被篡改数据更新。它无法识别或标记被篡改的数据。

如何让Corda参与节点检测篡改状态?我在设置节点时错过了一些配置吗?

恐怕这个讨论可能需要一段时间,因为我们大多数人从今天下午开始放假。

我们将尝试复制您在这里所做的事情。但是我不清楚这是一个错误。

你说你注释掉了合同验证逻辑。听起来可能发生的事情是这样的:

  1. 编辑状态 table 以保持损坏的状态。
  2. 使用 INPUT=指向先前正确状态的指针构建事务。 OUTPUT=(损坏的状态)+编辑以保留新的所有者字段。
  3. 此交易现已签署并转让。

此交易在尝试转移到丙方时被视为无效并被拒绝,因为这将是非法的状态转换:数字不平衡。但是你注释掉了检查它的代码!所以任何地方都没有说你不能在任何时候随意更改义务的大小......如果你注释掉包含此知识的代码,Corda 不会隐含地知道这一点。因此,从 IOU 应用程序的角度来看,在传输时更改大小现在是完全合法的事情。

问题来了 - 如果您不去管应用程序并且不修改其源代码,是否会检测到篡改?如果答案仍然是 "no",那么我们还有更多调查要做。