Corda数据篡改问题

时间:2017-12-21 04:43:39

标签: corda

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

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

复制步骤:

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

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

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

  5. h2 Update

    1. 此更新后,检查乙方的保险库,所有3项义务的金额将更改为100泰铢。 edited balance

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

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

    4. 转让义务结果:乙方不再承担义务 Party B Obligations

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

  1. 编辑州表以保持已损坏的状态。
  2. 使用INPUT =指向先前正确状态的指针构建事务。 OUTPUT =(损坏的状态)+编辑以保存新的所有者字段。
  3. 此交易现已签署并转让。
  4. 此交易视为无效并在尝试转移到丙方时被拒绝,因为它是非法的状态转换:数字不平衡。但是你注释掉了检查它的代码!所以没有任何地方可以说你不能随时改变义务的大小......如果你注释掉包含这些知识的代码,Corda并不知道这一点。因此,从IOU应用程序的角度来看,在转移时改变大小现在是完全合法的事情。

    问题在于 - 如果您单独离开应用并且不修改其源代码,是否检测到篡改?如果答案仍然是'#34;否"然后我们会做更多的调查。