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

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

复制步骤:

  • 启动义务Cordapp。
  • 在甲方和乙方之间创建3项义务(100泰铢,256泰铢和100泰铢)
    Corda数据篡改问题-LMLPHP
  • 通过查看十六进制之间的差异,在乙方数据库中编辑VAULT_STATES表。
    Corda数据篡改问题-LMLPHP
    金额不同的债务在左边,金额相同的两个债务在右边。在编辑器中,当它们的数量相同时,存在2个差异(可能与linear-id和时间戳有关),而当它们的数量不同时,则在左侧显示第三个差异。
  • 用较低的值覆盖特定部分,使用SQL在乙方的保管库中更新保管库:

  • Corda数据篡改问题-LMLPHP
  • 更新后,请检查乙方的保险库,并将这三项义务的金额更改为100泰铢。
    Corda数据篡改问题-LMLPHP
  • 但是,甲方的保管库将显示原始金额(100、256、100),因为甲方的保管库中的数据未被篡改。
    Corda数据篡改问题-LMLPHP
  • 将所有义务从乙方转移到丙方
  • 转移义务结果:乙方没有更多义务
    Corda数据篡改问题-LMLPHP
  • 转移义务结果:丙方将获得乙方的所有义务(共100泰铢,即被篡改的数据已转移到新的乙方)
    Corda数据篡改问题-LMLPHP
  • 转移义务结果:甲方的保管库也将被篡改的数据更新。它无法识别或标记被篡改的数据。
    Corda数据篡改问题-LMLPHP

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

    最佳答案

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

    我们将复制您在这里所做的工作。但是我不清楚这是一个错误。

    您说您已注释掉契约(Contract)验证逻辑。听起来可能是这样的:

  • 编辑状态表以保留损坏的状态。
  • 使用INPUT =指向先前正确状态的指针构建事务。 OUTPUT =(损坏状态)+编辑以保存新的所有者字段。
  • 此交易现在已签名并转移。

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

    这是一个问题-如果您不理会该应用程序并且不修改其源代码,是否检测到篡改?如果答案仍然是“否”,那么我们还有更多调查要做。

    10-07 18:47