Encryption 时间戳哈希是如何工作的?

Encryption 时间戳哈希是如何工作的?,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

假设您有一个现有的hash
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])