【问题标题】:Creating a simple Non repudiation/fraud proof system创建一个简单的不可否认/欺诈证明系统
【发布时间】:2011-03-11 13:58:30
【问题描述】:

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

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

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

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

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

非常感谢。

【问题讨论】:

    标签: c# database-design system-design


    【解决方案1】:

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

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

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

    【讨论】:

    • 考虑到过去的时间,我没有找到比乔恩更好的答案。我很高兴接受乔恩的。创建所有整个列(而不仅仅是一些特殊字段)的哈希签名将阻止 DBA 复制另一行或复制特定列。要完成这项工作,每一行都必须有一个附加的时间戳要求。
    【解决方案2】:

    坦率地说:你在浪费时间。

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

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

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

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

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

    【讨论】:

    • 即使我们使用足球比赛作为最简单的例子,如果结果可以提高一个人在打赏比赛中的分数,你可能会感到惊讶,有人可能希望改变结果,尤其是在分配实际点数之前完成更改时。我不同意您的第一点,即 DBA 具有 root 访问权限,他可以更改任何内容。但是,我认为您需要审计跟踪 (+1)。对于一个简单的系统,我不必实施审计跟踪,但我会在设计更复杂的系统时添加这一考虑。
    • 我想知道你为什么离开了 meta-stackoverflow?我只是在那里阅读您的一个问题,并对其进行了投票并提供了赏金
    • @Johannes.. 已经 2 天但只有两个答案。我相信以前还有其他人处理过这个问题。让他们分享他们的经验以做出更好的设计真是太好了。我还要再等3天。如果没有更好的答案,我会做标记(目前 Jon 领先)。
    猜你喜欢
    • 2010-10-25
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2012-08-02
    • 2014-03-26
    • 2019-10-24
    相关资源
    最近更新 更多