gpt4 book ai didi

c# - 防篡改表

转载 作者:行者123 更新时间:2023-11-30 13:42:41 26 4
gpt4 key购买 nike

我正在设计一个表,用于存储向客户收费的信息。
问题是数据库可能位于客户的服务器上。
我正在考虑添加包含第一个散列的第二个表,以便使用数据库的软件可以更新数据库和散列,但客户不能编辑(在我们不知道的情况下)包含收费信息的表(在他们无法生成正确哈希的基础)。

这是阻止客户篡改他们有权访问的表格的好方法吗?
我将如何创建表(可能不止一个表)中所有数据的散列?

具体来说,我需要对表中的数据进行哈希处理,而不是像数据集这样的对象(即,如果我们更改组件,我不希望所有的哈希值都发生变化)。

我正在考虑将数据写入一个文本文件并创建该文件的散列,但这会非常缓慢,因为该表可能包含多达 500,000 条记录,并且需要在每次更新时生成散列!

这个的实现可以在 delphi 或 c# 中。

最佳答案

哈希可以工作,但您还缺少另一个元素。为了生成无法重新生成的哈希值,那么您需要在哈希中包含一个 secret 值。 GUID 会起作用,但它实际上可以是您的客户不知道的任何值。当然,如果他们的计算机上有该软件,那么他们可以想象地发现算法和 secret 值,从而规避它。为每个客户使用不同的 secret 值将是一种很好的额外保护级别,以防万一被客户发现。

例子:

Hash([Table Data] + [Secret Value]) = [stored hash]

如果您只对表数据进行散列,那么他们可以简单地重新散列修改后的表数据,然后您就不会知道他们已经完成了。

就如何哈希整个表而不是每一行而言,大多数哈希都支持增量哈希。原因是如果您正在散列一个 10 GB 的文件,您可能没有足够的 RAM 将它全部加载到内存中进行处理。相反,您一次对一个 block 进行哈希处理,然后在完成后确定哈希。您可以对数据使用相同的方法。只需将每一行添加到散列中,一次一个,完成后完成散列。当然记得包括您的 key 值。

注意事项:

  1. 不要在您的应用程序中包含验证例程 - 换句话说,不要为他们提供一种方法来验证他们尝试的黑客攻击是否有效或失败。这样做会给他们即时反馈,并让他们设计出最终的解决方案。
  2. 确保您对这个系统进行了良好的测试,尤其是如果您打算在这些哈希计算失败时惩罚您的客户。
  3. 确保您的客户知道篡改这些值是被禁止的。将其与表级加密相结合以防止意外修改可能是个好主意。
  4. 您最好在场外记录费用。如果服务器连接到 Internet,则让它将信息发送到您运行的 Web 服务。为了获得更好的安全性,让 Web 服务验证消息并使用 key 进行响应。然后您可以在本地验证该 key 以确保它们没有绕过 Web 服务。这将是公钥消息签名的一个很好的应用。

还要记住,大多数人都是诚实的,如果诚实的道路太痛苦(即测试中的误报,或者价格标签太贵),许多人只会求助于规避。会偷它反正不会付钱。今天可能偷窃的其他人明天可能会付出代价。您不想与您的客户争斗并将他们视为您的敌人,因为那样你们都会失败。

关于c# - 防篡改表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2357897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com