我有一个数据。目前,它是一个 XML 文件,但架构可能会发生变化。因此,我们暂时假设它是一个 C# 类。
当我将数据存储在磁盘或数据库中时,我需要添加某种签名或指纹或校验和或其他任何内容,以确保没有人可以修改数据。警告:即使是有权访问所有源代码的管理员或开发人员也不应该能够修改它。
我认为,由于具有完整代码访问权限的人可以轻松创建新签名(签名需要以编程方式完成,因此不需要手动输入密码),因此签名在某种程度上需要包含一些附加数据。理想情况下,我应该能够从签名中提取这些数据,例如签名日期和一些字符串。
我的一般方法是使用对称加密。我从所有字段生成一个哈希值,即 SHA-512,然后使用该哈希值作为密码对该哈希值和附加数据进行加密以获得我的签名。为了解密,我的函数将从文件中的实际数据生成哈希,并尝试解密签名。但这并不能防篡改,因为很容易生成签名,其中签名日期和附加信息仍然完好无损。
由于我不是该领域的专家,我相信我正在尝试重新发明轮子,而且这不是一个很好的轮子。我只是想知道是否有一些标准方法?我相信我的部分请求是不可能的(毕竟,如果有人控制整个环境,那么那个人也控制系统时间),但我仍然想知道这通常是如何解决的?
在我看来,你想要一个组合电子签名 with a 安全数字时间戳.
简而言之,在签署数据后,您调用第三方网络服务来提供官方时间戳和他们自己的数字签名,将该时间戳链接到您的签名值,从而提供原始签名(以及原始数据)是在或在该日期之前。使用此方案,即使原始签名密钥后来被泄露、撤销或以其他方式失效,由于时间戳,在失效之前进行的任何签名仍然有效。
防篡改硬件签名设备可能会有所帮助。如果目标硬件相当新,则主板上可能已经有一些支持TPM,但是有很多供应商愿意为自己的产品收取高价硬件安全模块,或者稍微少一些智能卡.
仅靠技术可能无法实现足够的安全性。您可能需要对系统进行独立验证。您可能需要远程闭路电视监控和记录机器的位置或其他物理安全措施来检测或阻止篡改。您可能需要第三方代码托管、审查和签名,以确保机器上加载的代码符合预期,并阻止和/或检测后门逻辑插入到代码中。
最重要的是,您需要为此花费多少金钱、时间和精力,很大程度上取决于如果记录被伪造,您将面临什么损失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)