Encryption 时间戳哈希是如何工作的?
假设您有一个现有的hashEncryption 时间戳哈希是如何工作的?,encryption,hash,cryptography,public-key-encryption,sha256,Encryption,Hash,Cryptography,Public Key Encryption,Sha256,假设您有一个现有的hashg84t5tw73y487tb38wo4bq8o34q384o7nfw3q434hqa,它是从原始字符串创建的,不要否决我的愚蠢问题 现在我给这个散列加上如下时间戳(在JS/伪代码中): 如果要验证原始字符串,可以执行以下操作: var verified = goodHash('dont downvote my stupid question',hash); // true 如果我想验证时间戳版本,我可以执行以下操作: var original_hash = 'g84
g84t5tw73y487tb38wo4bq8o34q384o7nfw3q434hqa
,它是从原始字符串创建的,不要否决我的愚蠢问题
现在我给这个散列加上如下时间戳(在JS/伪代码中):
如果要验证原始字符串,可以执行以下操作:
var verified = goodHash('dont downvote my stupid question',hash); // true
如果我想验证时间戳版本,我可以执行以下操作:
var original_hash = 'g84t5tw73y487tb38wo4bq8o34q384o7nfw3q434hqa';
var today = '2017-10-19';
var verified = goodHash(original_hash+today, timestamped_hash); // true
但是,如果我试图根据时间戳验证原始字符串,我无法:
var today = '2017-10-19';
var verified = goodHash('dont downvote my stupid question'+today, timestamped_hash); // FALSE
现在假设这个原始字符串经过哈希处理,并在n
迭代中反复加上时间戳
如果我有n-1th
散列,我将只能验证n-1th
时间戳
但是如果我有原始字符串不要否决我愚蠢的问题
,并想验证任何带有时间戳的,其中0
,该怎么办
基本上,我想验证一个只有我应该知道的字符串是否已经用给定的日期加了时间戳,而不管它加了多少次时间戳,并且没有增加字符串的长度(太多-尽管随着n
的增长,长度的任何增加都会接近无穷大)
这可能吗?散列甚至可以包含所有这些信息吗 让我们看看这里涉及的数学:
首先,您有一个输入字符串s
和一个时间戳序列t
。我将使用t[I]
来表示第I个时间戳。重复哈希是一种递归关系:
f(i) = hash(f(t[i-1]) + t[i])
其中,+
表示字符串串联。现在我们想确定是否存在一个封闭公式F(x)
,它将以比计算递归关系F(i)
更少的时间复杂度来计算ith
散列
实现这一点的一种方法是找到一个与f(t[i-1])+t[i]
具有相同散列的字符串x(i)
。对于一个好的散列算法来说,这些冲突非常罕见。我的直觉告诉我,找到这样一个字符串(除了f(t[i-1])+t[i]
本身)比直接从递归关系计算要困难得多。我的直觉告诉我,你必须知道原始字符串和所有时间戳(直到第i个)生成第i个哈希。这是对OP提出的问题的回答。OP询问,给定t[n]
和s
(其他时间戳t[i],其中0
未知),他能验证第n个散列吗
f(i) = hash(f(t[i-1]) + t[i])