方案:我需要将客户接受的文档存储在数据库中。客户需要确保我不会随着时间的流逝对其进行修改,并且我需要有可能证明存储的文档已被客户接受。 您是否知道经过验证的方法可以毫无疑问地实现这一目标?
我认为我可以从存储的数据中为客户创建校验和,但是我需要确保该校验和不能被客户修改。有什么想法吗?
PS。如果您有更好的主意如何为这个问题加上标题,请告诉我。
PS。如果您有更好的论坛问这个问题,请告诉我。
答案 0 :(得分:1)
我们在密码学中称为data integrity。
为确保数据不会被您或其他人更改,您的客户可以使用cryptographic hash functions计算文件的哈希值,该哈希值设计为具有抗冲突性。即
Hash(Original) != Hash(Modified) // equality almost impossible
简而言之,当您进行修改时,预期新修改的文档具有相同的哈希值是不可能的(用密码学术语,可以忽略不计)。
请勿使用具有shattered的SHA-1。
如果您想走得更远,您的客户可以使用HMAC,这是基于密钥的哈希函数,可提供数据完整性和数据authentication。
对于第二部分,我们可以通过digital signatures来解决。您的客户在消息上签名
Sign(hash(message))
并给您
( Sign(hash(message)), message ) )
和他的公钥。
您可以使用客户的公共密钥来验证签名,以查看客户是否更改了数据。数字签名给我们Non-Repudation。
这部分实际上解决了您的两个问题。甚至第三方也可以检查数据是否未被修改并且来自签名者(您的客户)。
注意:请勿使用校验和,该校验和不是加密安全的,并且多数情况下很容易以具有相同校验和的方式修改文档。