【问题标题】:How does timestamp hashing work?时间戳散列如何工作?
【发布时间】:2018-03-31 21:07:41
【问题描述】:

假设您有一个现有的哈希 g84t5tw73y487tb38wo4bq8o34q384o7nfw3q434hqa,它是从原始字符串 dont downvote my stupid question 创建的

现在我像这样为这个哈希加时间戳(在 JS/伪代码中):

var hash = 'g84t5tw73y487tb38wo4bq8o34q384o7nfw3q434hqa';
var today= new Date(); // 2017-10-19

var timestamped = hash + today; 

var new_hash = SHA256(timestamped); 

// new_hash is 34t346tf3847tr8qrot3r8q248rtbrq4brtqti4t

如果我想验证我的原始字符串,我可以这样做:

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 时间戳。

但是如果我有原始字符串 dont downvote my stupid question 并且想要验证任何 ith 时间戳,其中 0 < i < n

基本上,我想验证一个只有我应该知道的字符串是否已在给定日期打上时间戳,无论它可能被打了多少次时间戳并且而不增加长度字符串的长度(太多 - 尽管 any 随着 n 的增长,长度的增加会接近无穷大)。

这甚至可能吗?哈希甚至可以包含所有这些信息吗?

【问题讨论】:

  • 我的直觉告诉我,你必须知道原始字符串和所有时间戳(直到第 i 个)才能生成第 i 个哈希。

标签: encryption hash cryptography public-key-encryption sha256


【解决方案1】:

让我们看看这里涉及的数学:

首先,您有一个输入字符串 s 和一个时间戳序列 t。我将使用t[i] 来表示ith 时间戳。您的重复哈希是重复关系:

f(i) = hash(f(t[i-1]) + t[i])

其中+ 表示字符串连接。现在我们要确定是否存在封闭公式F(x),它计算ith 哈希的时间复杂度低于评估递归关系f(i)

实现此目的的一种方法是找到与f(t[i-1]) + t[i] 具有相同哈希值的字符串x(i)。对于一个好的散列算法,这些冲突是极其罕见的。我的直觉是,找到这样一个字符串(f(t[i-1]) + t[i] 本身除外)比直接从递归关系中直接计算要困难。

【讨论】:

  • 如何回答 OP 提出的问题。 OP 在询问,给定 t[n]s(其他时间戳 t[i] where 0 < i < n 未知),他能否验证第 n 个哈希
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多