- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个数据。目前,它是一个 XML 文件,但架构可能会改变。因此,我们暂时假设它是一个 C# 类。
当我将数据存储在磁盘或数据库中时,我需要添加某种签名或指纹或校验和或其他任何东西以确保没有人可以修改数据。警告:即使是有权访问所有源代码的管理员或开发人员也不应该修改它。
我假设由于具有完全代码访问权限的人可以轻松创建新签名(签名需要以编程方式完成,因此无需手动输入密码),签名不知何故需要包含一些额外的数据。理想情况下,我应该能够从签名中提取这些数据,例如签名日期和一些字符串。
我的一般方法是使用对称加密。我从所有字段生成一个哈希值,即 SHA-512,然后使用该哈希值作为密码加密该哈希值和我的其他数据以获取我的签名。要解密,我的函数将从文件中的实际数据生成哈希,并尝试解密签名。这不是防篡改的,因为很容易生成签名日期和附加信息仍然完好无损的签名。
由于我不是该领域的专家,我相信我正在尝试重新发明轮子,而且它不是一个很好的轮子。我只是想知道是否有一些标准方法?我认为我的部分请求是不可能的(毕竟,如果有人控制了整个环境,那么这个人也控制了系统时间),但我仍然想知道一般如何解决这个问题?
最佳答案
在我看来你想要 digital signature 的组合用secure digital timestamp .
简而言之,在签署数据后,您调用第三方网络服务提供官方时间戳和他们自己的数字签名,将时间戳链接到您的签名值,从而提供原始签名(以及原始数据)的证据是在该日期或之前创建的。使用此方案,即使原始签名 key 后来被泄露、撤销或以其他方式失效,由于时间戳的存在,在失效之前所做的任何签名仍然有效。
防篡改硬件签名设备可能会有所帮助。如果目标硬件是相当新的,它可能已经在主板上以 TPM 的形式提供了一些支持。 ,但有很多供应商愿意为自己的产品收取费用 hardware security modules , 或者对于 smart card 稍微少一点.
仅靠技术可能无法实现足够的安全性。您可能需要对系统进行独立验证。您可能需要远程闭路电视监控和机器位置记录或其他物理安全措施来检测或阻止篡改。您可能需要第三方代码托管、审查和签名,以确保机器上加载的代码符合预期,并阻止和/或检测将后门逻辑插入到代码中。
最重要的是,您需要为此花费多少金钱、时间和精力,这在很大程度上取决于如果伪造记录您将损失什么。
关于c# - 生成某些数据的防篡改签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609127/
我是Python和Golang开发人员,最近开始学习Rust。我当前的项目涉及处理数百个压缩日志文件,每个日志文件包含成千上万个JSON条目,每行一个JSON。我最初的尝试出奇的缓慢。通过调查,我注意
我在这里无法理解有关Rust闭包的概念。在我的代码中,默认值为i32。当我创建可变闭包时,它将采用文档中提到的可变引用。 当我在循环中调用inc闭包并尝试在循环内打印count的值时,我会得到可变的借
我是python的新手,并且在python中广泛使用了功能样式。 我正在尝试做的是接收一个字符串(切片)(或任何可迭代的)并使用对当前索引和下一个索引的引用进行迭代。这是我的尝试: fn main()
我通过RUST的性能购买了RUST,因此我决定将一个性能非常重要的项目从JAVA 11转换为Rust。 事实是,用JAVA性能编写的版本比单线程中的3倍要好得多,多线程中的+10倍要好得多 出于上下文
背景: 我正在编写rust的RDBMS db.catalog维护一个从table_id到table的哈希表: pub struct Catalog { table_id_table_map:
我的代码本身可以在文件中工作,但是每当我尝试运行RuSTLings quiz1.rs时,代码的测试部分都会出错。 // GOAL OF PROGRAM // Mary is buying apples
我很难理解Rust toml中的功能条目。 假设我有一个依赖项(在本例中为sqlx)说 sqlx = { version = "0.4.0-beta.1", default-features = fa
我的目标是 序列化(HashSet-> Vec) 并反序列化(&[u8]-> HashSet) uuid的哈希集。 我有以下序列化: fn serialize(set: HashSet) -> Vec
我是一名优秀的程序员,十分优秀!