5

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

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

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

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

是否有任何其他问题或功能我应该考虑以使我的系统更防欺诈?我应该注意哪些最佳实践?任何指针将不胜感激。

提前谢谢了。

4

2 回答 2

4

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

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

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

于 2010-07-04T07:21:59.283 回答
2

直截了当地说:你在浪费时间。

DBA 对您的数据库拥有与 root 用户同等的访问权限。如果没有,它们将是相当无效的。系统管理员也会出现同样的问题,基本上你能做的任何事情充其量不过是安慰剂。对于具有该级别访问权限的恶意人员,您唯一能做的就是不让他们一开始就获得访问权限。

您能做的最好的事情就是通过创建审计跟踪来让它变得更难一些。登录时用户登录、注销、他们做什么、系统响应什么事件等等。唯一真正的价值是能够(希望)在您手动决定进入并稍后查看时重建发生的事情。

至于改变足球比赛的结果,问问自己这种情况发生的可能性有多大。当然,它实际上并没有改变足球比赛的结果。它只是改变了它的记录方式。任何看到或参与的人都会知道实际结果,那么有人在系统上更改它有什么价值?

在公司中,错误和恶意由和解流程处理。股票经纪人将拥有一个团队,负责报告系统上的内容,并将其与实际完成的银行交易进行比较。任何差异都会被标记为红色。因此,您可以更改系统上的余额,但它会得到备份。

这个难题的另一部分是对 DBA 活动的限制实际上并不能解决问题。应用程序开发人员可以发布任意代码。即使经过审查,系统仍然可能在构建工程师或对生产环境具有根级别访问权限的人编译修改版本并运行该版本时出现故障。

于 2010-07-04T07:23:31.183 回答