Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 生成某些数据的防篡改签名?_C#_.net - Fatal编程技术网

C# 生成某些数据的防篡改签名?

C# 生成某些数据的防篡改签名?,c#,.net,C#,.net,我有一份数据。目前,它是一个XML文件,但体系结构可能会改变。现在让我们假设这是一个C类 当我将数据存储在磁盘或数据库中时,我需要添加某种签名、指纹、校验和或其他东西,以确保没有人可以修改数据。警告:即使是拥有所有源代码访问权限的管理员或开发人员也不能修改它 我假设,由于具有完全代码访问权限的人可以轻松创建新签名(签名需要通过编程完成,因此无需手动输入密码),因此签名需要包含一些额外的数据。理想情况下,我应该能够从签名中提取这些数据,例如签名日期和一些字符串 我的一般方法是使用对称加密。我从所有

我有一份数据。目前,它是一个XML文件,但体系结构可能会改变。现在让我们假设这是一个C类

当我将数据存储在磁盘或数据库中时,我需要添加某种签名、指纹、校验和或其他东西,以确保没有人可以修改数据。警告:即使是拥有所有源代码访问权限的管理员或开发人员也不能修改它

我假设,由于具有完全代码访问权限的人可以轻松创建新签名(签名需要通过编程完成,因此无需手动输入密码),因此签名需要包含一些额外的数据。理想情况下,我应该能够从签名中提取这些数据,例如签名日期和一些字符串

我的一般方法是使用对称加密。我从所有字段生成一个散列,即SHA-512,然后使用该散列作为密码对该散列和我的附加数据进行加密,以获得我的签名。要解密,我的函数将从文件中的实际数据生成哈希,并尝试解密签名。但这不是防篡改的,因为在签名日期和附加信息仍然完整的情况下,生成签名很容易

由于我不是该领域的专家,我相信我正在尝试重新发明轮子,而且它不是一个很好的轮子。我只是想知道是否有一些标准的方法?我相信我的部分请求是不可能的(毕竟,如果有人控制了整个环境,那么这个人也控制了系统时间),但我仍然想知道这通常是如何解决的?

您想要一个使用非对称加密的系统


这似乎有一些很好的例子和解释。

这基本上是什么,但在您的情况下,实际上并不是代码被签名。您必须安排购买证书或设置自己的证书服务器

您需要a和a。受信任的时间戳会让第三方参与验证消息。那么,任何攻击者都无法“完全控制”整个系统。

我觉得你想要a和a的组合

简言之,在对数据进行签名后,您可以调用第三方web服务来提供正式的时间戳和他们自己的数字签名,将该时间戳链接到您的签名值,从而提供原始签名(以及原始数据)是在该日期或之前创建的证据。使用此方案,即使原始签名密钥后来被泄露、撤销或以其他方式失效,由于时间戳的存在,在失效之前所做的任何签名仍然有效

防篡改硬件签名设备可能会有所帮助。如果目标硬件是相当新的,它可能已经在主板上以a的形式获得了一些支持,但是有很多供应商愿意为他们自己收取一个arm和一个leg的费用,或者为a收取更少的费用

仅靠技术可能无法实现足够的安全性。您可能需要对系统进行独立验证。您可能需要远程CCTV监控和记录机器的位置或其他物理安全措施,以检测或停止篡改。您可能需要第三方代码托管、审查和签名,以确保机器上加载的代码是预期的,并阻止和/或检测后门逻辑插入代码


底线是,您需要在这方面花费多少金钱、时间和精力,这在很大程度上取决于如果记录被伪造,您将损失什么。

您可能希望通过使用(GnuPG变得容易)一个库来利用PGP,该库旨在使应用程序更容易访问GnuPG

杰弗里·汉廷的回答是我认为你能做到的最好的。但这并不完美:

1) 这并不能阻止你的黑帽子做一个完全虚假的交易


2) 它并没有完全停止对交易的篡改。是的,新事务将有不同的时间戳,但是如果他们清理相关数据,您如何证明时间戳被弄乱了?即使你给他们一些防篡改的收据(对上面的数据进行哈希和签名),在摊牌时,你如何证明谁的记录是伪造的?

只是想确认管理员和开发人员对源代码有完全访问权,但如果你使用非对称密钥,他们是否也可以访问密钥的私有部分?