如何确保不可修改的文件校验和?

时间:2018-12-26 18:50:00

标签: encryption cryptography

方案:我需要将客户接受的文档存储在数据库中。客户需要确保我不会随着时间的流逝对其进行修改,并且我需要有可能证明存储的文档已被客户接受。 您是否知道经过验证的方法可以毫无疑问地实现这一目标?

我认为我可以从存储的数据中为客户创建校验和,但是我需要确保该校验和不能被客户修改。有什么想法吗?

PS。如果您有更好的主意如何为这个问题加上标题,请告诉我。

PS。如果您有更好的论坛问这个问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

我们在密码学中称为data integrity

为确保数据不会被您或其他人更改,您的客户可以使用cryptographic hash functions计算文件的哈希值,该哈希值设计为具有抗冲突性。即

 Hash(Original) != Hash(Modified) // equality almost impossible

简而言之,当您进行修改时,预期新修改的文​​档具有相同的哈希值是不可能的(用密码学术语,可以忽略不计)。

您的客户可以使用SHA-3标准化的NIST哈希函数。

请勿使用具有shattered的SHA-1。

如果您想走得更远,您的客户可以使用HMAC,这是基于密钥的哈希函数,可提供数据完整性和数据authentication


对于第二部分,我们可以通过digital signatures来解决。您的客户在消息上签名

 Sign(hash(message))

并给您

 ( Sign(hash(message)), message ) )

和他的公钥。

您可以使用客户的公共密钥来验证签名,以查看客户是否更改了数据。数字签名给我们Non-Repudation

这部分实际上解决了您的两个问题。甚至第三方也可以检查数据是否未被修改并且来自签名者(您的客户)。


注意:请勿使用校验和,该校验和不是加密安全的,并且多数情况下很容易以具有相同校验和的方式修改文档。