2

我有一个应用程序,它定期记录制造过程中的数据(各种采样率,最少 1 秒,通常最多 10 分钟或更多)。客户想知道数据是否已更改(原地更改、添加记录或删除记录)。

数据被记录为二进制记录。可以有多个数据流,每个流到自己的文件,每个都有自己的数据格式。数据是一次写入一条记录,如果监控PC或进程出现故障,制造不一定停止,所以我不能保证归档进程会一直保持下去。显然,我只能验证我实际录制的内容,但录制可能会开始和停止。

可以使用哪些方法来验证该数据?我更喜欢使用单独的“日志记录”文件来验证数据以保持向后兼容性,但我不确定这是否可能。除非直接回答,是否有关于搜索词的建议以找到一些建议?

谢谢!

4

2 回答 2

1

我认为您不一定需要数字签名,安全哈希(例如 SHA-256)就足够了。

在写入每条记录时,计算它的安全散列,并将散列值存储在日志文件中。如果有某种记录 ID,也将其存储起来。您需要一些方法来匹配哈希与相应的记录。

现在,只要没有人篡改日志文件,就可以检测到对记录的任何更改。要使篡改变得困难,请定期对您的日志文件进行哈希处理,并将该哈希值和日志文件中的记录数发送到安全的地方。理想情况下,将其发送到多个地方,每个地方都由不同的人控制。

稍微复杂一点的方法是使用 Merkle 树,本质上是散列的二叉树,而不仅仅是日志文件的单个散列。然后存储整个树(不是很大)并将“根”哈希发送到各个地方。根哈希允许您验证树的完整性,而树允许您验证日志文件的完整性——如果完整性检查失败,它还使您能够确定哪些记录被修改。

于 2009-10-22T04:43:50.057 回答
0

您可以改为查看数字时间戳。GuardTime拥有支持大规模可扩展 1 秒精度时间戳的技术,可确保信息完整性。

于 2009-11-30T09:49:23.767 回答