Corda数据篡改问题

Ric*_*y13 5 corda

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

先决条件: 注释合同验证:我们评估了合同代码,以检查在Corda中是否检测到数据篡改,而无需在命令级别明确执行检查.

复制步骤:

  1. 启动Cordapp的义务.
  2. 在甲方和乙方之间设立3项义务(100泰铢,256泰铢和100泰铢) 义务

  3. 通过查看十六进制之间的差异来编辑Party B数据库中的VAULT_STATES表. Vault State Hexs 左边有不同金额的义务,右边有两个相同金额的义务.当编辑器处于相同数量时,存在2个差异(可能是线性id和时间戳相关),当它们处于不同数量时,左边显示第3个差异.

  4. 使用较低的金额覆盖特定部分,使用Party B的保险库上的SQL更新保管库:

h2更新

  1. 在此更新后,检查乙方的保险库,所有3个义务的金额将更改为100泰铢. 编辑余额

  2. 但是,甲方的保险库将显示原始金额(100,256,100),因为数据未在甲方保险库中被篡改. 甲方平衡

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

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

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

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

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

Mik*_*arn 5

我担心这个讨论可能需要一段时间,因为我们大多数人都是从今天下午休假.

我们将复制你在这里所做的事情.然而,我不清楚这是一个错误.

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

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

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

这是一个问题 - 如果您单独离开应用程序并且不修改其源代码,是否检测到篡改?如果答案仍然是"不",那么我们还有一些调查要做.

  • 每个节点将状态存储在两个位置 - 在其库中独立存储,并作为在其事务存储中生成它们的事务的一部分.构建事务时,不直接包含输入.相反,您包括输入状态引用(请参阅https://docs.corda.net/key-concepts-transactions.html#transaction-chains).当您将交易发送给交易对手时,他们将请求与每个输入状态参考相对应的交易,并以原始的,未损坏的形式从那里提取状态.这就是为什么交易对手仍然看到未受损害的状态. (3认同)