创建一个简单的不可否认/防欺诈系统

Syd*_*Syd 5 c# database-design system-design

如果我想创建一个简单的欺诈证明和不可否认系统,我应该考虑哪些关键功能?对于这个问题,我主要关注数据库行的完整性。这不是安全权限问题。

以足球数据库为例,我要实现的一些关键功能是:

  1. 防止DBA使用传统SQL修改行数据。例如,如果数据库行已经存储了 2:1 作为结果,如果 DBA 将结果更改为 2:3,我们应该能够检测到修改。所有更改都应通过主应用程序完成。

  2. 防止使用后端更改将一行数据复制到另一行。我们应该能够检测到欺诈行为的变化。

我还应该考虑任何其他问题或功能来使我的系统更加防欺诈吗?我应该注意哪些最佳实践?任何指示将不胜感激。

提前谢谢了。

Jon*_*eet 4

创建一列作为其他列的加密签名。只要 ID 包含在签名计算中,您就无法复制行,因为 ID 会发生变化。如果不重新计算哈希值,则无法执行任何修改,因此 DBA 的更改也可以被检测到。

请注意,这并不能解决 DBA删除行的问题- 它只是验证每个单独的行是否都经过了适当的业务逻辑。您可能会包含整个表的签名,但这开始变得相当沉重!

当然,在某些时候您需要一个秘密——签名密钥的私有部分。您的代码将需要访问该...并且无论谁编写该代码都可能包含一个后门,以便通过电子邮件向自己发送私钥等。我怀疑,迟早您必须信任某人。(当然,您可以应用来自不同团队的多个签名 - 因此这些团队必须串通才能伪造任何东西。)