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

2023-11-25

我有一个数据。目前,它是一个 XML 文件,但架构可能会发生变化。因此,我们暂时假设它是一个 C# 类。

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

我认为,由于具有完整代码访问权限的人可以轻松创建新签名(签名需要以编程方式完成,因此不需要手动输入密码),因此签名在某种程度上需要包含一些附加数据。理想情况下,我应该能够从签名中提取这些数据,例如签名日期和一些字符串。

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

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


在我看来,你想要一个组合电子签名 with a 安全数字时间戳.

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

防篡改硬件签名设备可能会有所帮助。如果目标硬件相当新,则主板上可能已经有一些支持TPM,但是有很多供应商愿意为自己的产品收取高价硬件安全模块,或者稍微少一些智能卡.

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

最重要的是,您需要为此花费多少金钱、时间和精力,很大程度上取决于如果记录被伪造,您将面临什么损失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成某些数据的防篡改签名? 的相关文章

随机推荐

  • RxJs 可观察分页

    第一 这是我使用 RxJs 的第一个项目 我想通过使用它我会学到最好的东西 我找到了这个答案 使用 RxJs 将分页请求转换为 Observable 流但评论里却说 您仍然超出了最大调用堆栈 返回大约 430 页 我认为递归可能不是最好的解
  • Shift + 鼠标滚轮水平滚动

    对于水平滚动 使用 Shift 滚轮相当常见 这两者都相当容易捕获 我可以使用 MouseWheel 事件以及由 KeyDown KeyUp 事件设置的标志来跟踪何时按下 Shift 键 但是 如何真正触发水平滚动呢 我知道 WM MOUS
  • GHC 7.7 中引入的自由覆盖条件破坏了 GHC 7.6 中有效的代码

    The idea 我正在写一个DSL 编译为 Haskell 该语言的用户可以定义自己的不可变数据结构和关联函数 我所说的关联函数是指属于数据结构的函数 例如 用户可以编写 用 pythonic 伪代码 data Vector a x y
  • 如何使用 gitpython 对当前提交与上次提交进行 git diff?

    我正在尝试掌握 gitpython 模块 hcommit repo head commit tdiff hcommit diff HEAD 1 but tdiff hcommit diff HEAD HEAD 不起作用 也不 HEAD HE
  • 是否可以为 UITableView 添加边框样式? (不是边框颜色/边框宽度)

    是否可以为 UITableView 添加边框样式 不仅仅是边框颜色和边框宽度 例如凹槽边框样式 嘿 您可以使用以下方式为您的视图添加边框CALayer可以在QuartzCore Framework 以下链接将帮助您了解CALayer详细 C
  • 如何使用 Eclipse 将特定于平台的本机库包含在 .JAR 文件中?

    我刚刚开始学习JNI 我一直在遵循一个简单的示例 并且创建了一个调用本机库中的 Hello World 方法的 Java 应用程序 我想以 Win32 和 Linux x86 为目标 我的库驻留在 DLL 中 当 DLL 添加到 Eclip
  • 如何阻止 Eclipse 在每次捕获的异常时崩溃?

    当我开始调试 java 项目时 Eclipse 不断地破坏第 3 方库中的随机异常 这非常烦人 知道如何阻止这个吗 我尝试单击断点视图上的 图标 我可以看到 挂起捕获的异常 和 挂起未捕获的异常 复选框都没有选中 Eclipse 仍然在异常
  • SCSS 与字符串的算术运算

    selector width 10px width width 2 output 10px but expected 5px 上面的代码是不言自明的 请纠正我 您可以使用calc功能 selector width 10px width ca
  • 为什么不能在字节变量中存储负值?

    我正在转换可以在 Java 中运行但不能在 C 中运行的代码 byte buffer new byte 64 this buffer int this count 0x3F 128 这会生成编译时错误 常量值 128 无法转换为 字节 如何
  • 如何在 MySQL 中创建时间点架构

    I read this有关为数据库构建时间点架构的文章 在我看来 这是一个优雅的解决方案 但这篇文章是在不久前 2007 年 就已经准备好的 我想知道 1 还有其他方法可以解决这个问题吗 2 这种方法和其他方法的优缺点是什么 3 是否有可供
  • Burn 中的RegistrySearch 与 util:RegistrySearch

    我在用Burn构建 WiX 引导程序 我意识到如下所示的RegistrySearch实际上并没有搜索注册表 我用了过程监控器监视注册表访问
  • Haskell:类型推断和函数组合

    这个问题的灵感来自于此answer另一个问题 表明您可以使用定义为的函数从列表中删除每个出现的元素 removeall filter 用铅笔和纸根据以下类型进行计算filter and 该函数的类型为 removeall Eq a gt a
  • 将 Ruby 对象序列化为 JSON 并返回?

    我想将一个对象序列化为 JSON 将其写入文件并读回 现在我希望在 net 中有类似的东西 你有 json net 或类似的东西 然后你会这样做 JsonSerializer Serialize obj 并完成它 您将返回 JSON 字符串
  • asp.net mvc 中的动态子域

    我对 ASP NET 相当陌生 对 IIS 也没什么经验 我想让我的应用程序的每个用户都有自己的子域 但都使用相同的控制器 然后子域将控制显示的内容 Example user1subdomain mydomain com Whatever
  • 为什么这样的递归不会出现堆栈溢出?

    我不明白为什么打电话recSetTimeOut 不会导致堆栈溢出错误 而recPromise does const recSetTimeOut gt console log in recSetTimeOut setTimeout recSe
  • 为什么要升级到 c# 4.0?

    我知道 C 4 0 中有一些不错的新功能 但我无论如何也想不出升级现有项目或切换到新项目的令人信服的理由 我看过一些帖子 人们说如果他们的托管服务不提供 Net 4 他们会寻找另一个提供商 因为 Net 4 是他们的方向的核心
  • malloc和free是如何实现的?

    我想实现我自己的动态内存管理系统 以添加有助于管理 C 内存的新功能 我使用 Windows XP 和 Linux Ubuntu 实现 malloc 和 free 等功能需要什么 我认为我必须使用最低级别的系统调用 对于 Windows 我
  • IIS 7.5 Mercurial 设置忽略 maxAllowedContentLength

    我正在尝试在 IIS 7 5 上设置 Mercurial 我有一个应用程序目录的 web config 该目录忽略了maxAllowedContentLength属性和我只是cannot让IIS接受它 我在全球 本地和各个层面尝试了一千种不
  • 使用 Scipy 计算两个矩阵的行点积的向量化方法

    我想尽快计算相同维度的两个矩阵的行点积 这就是我这样做的方式 import numpy as np a np array 1 2 3 3 4 5 b np array 1 2 3 1 2 3 result np array for row1
  • 生成某些数据的防篡改签名?

    我有一个数据 目前 它是一个 XML 文件 但架构可能会发生变化 因此 我们暂时假设它是一个 C 类 当我将数据存储在磁盘或数据库中时 我需要添加某种签名或指纹或校验和或其他任何内容 以确保没有人可以修改数据 警告 即使是有权访问所有源代码