Security 一个散列在公开场合能被认为安全多久?

Security 一个散列在公开场合能被认为安全多久?,security,hash,sha,Security,Hash,Sha,如果我在我的网站上留下一个SHA2家庭的散列,多长时间会被认为是安全的?我需要多长时间才能确定有人会为它找到冲突并知道散列了什么 我知道时间的长短取决于试图打破它的人的计算能力。这也取决于字符串长度,但我很好奇散列有多安全 因为我们中的许多人都在运行web服务器,所以我们必须时刻准备着有一天有人可能会访问存储用户哈希的数据库。那么,把服务器的安全性移开,然后你有什么 对于我与之交谈过的许多人来说,这是一个稍微有点理论性的领域,因此我希望能够获得更多关于破解平均预期的信息 hash('sha256

如果我在我的网站上留下一个SHA2家庭的散列,多长时间会被认为是安全的?我需要多长时间才能确定有人会为它找到冲突并知道散列了什么

我知道时间的长短取决于试图打破它的人的计算能力。这也取决于字符串长度,但我很好奇散列有多安全

因为我们中的许多人都在运行web服务器,所以我们必须时刻准备着有一天有人可能会访问存储用户哈希的数据库。那么,把服务器的安全性移开,然后你有什么

对于我与之交谈过的许多人来说,这是一个稍微有点理论性的领域,因此我希望能够获得更多关于破解平均预期的信息

hash('sha256', 'mytext');
hash('sha256', 'thisismytext');
hash('sha256', 'xx$1sw@the4e');
hash('sha256', 'thisismyslightlylongertext');

db695168e73ae294e9c4ea90ff593e211aa1b5693f49303a426148433400d23f
b62c6ac579abf8a29e71d98aeba1447c66c69002cfd847b148584f886fd297ef
501f1b26abbc75594d06f0935c8bc502d7bcccf5015227bd6ac95041770acb24
3debc12761bbeb5b4460978ac2be5b104163de02ea799f0705399d0e5b706334

您假设没有针对您的设置可用,这不是给定的。IMNSHO,考虑它泄露的那一刻。即使是这样,您也无法确定在哈希公开之前已经做了多少工作。

首先,您不是在谈论冲突。冲突是指有人发现两条散列为相同值的不同消息。在这里,您并不担心有人找到另一个输入,它会散列到您发布的值中;事实上,你害怕有人找到你的意见。正确的术语是前映像攻击。有时,我们说攻击者试图“反转”哈希函数(查找与给定输出匹配的输入)

有两种方法可以尝试找到给定哈希值的前映像:利用哈希函数的弱点,或者通过尝试候选值来猜测输入

SHA-2在抗原像方面没有已知的弱点。说到这一点,MD5甚至MD4都没有已知的弱点,尽管从密码学的角度来说,这两个函数被认为是彻底破坏的。因此,除非对哈希函数的科学研究取得巨大进展,否则很可能无法通过哈希函数的加密弱点找到哈希值

根据攻击者对输入的了解程度,可能尝试候选项,也可能不尝试。这很难精确地建模。例如,假设输入是一个包含七个字母的单词。有267=803181076这样的词。使用SHA-256尝试所有这些方法,并将每次都与您的哈希值进行比较,在最近的PC上使用简单的实现需要几分钟的时间

在更一般的基础上,探索可能的输入集被称为字典攻击,因为它通常用于恢复用户密码的问题:用户令人沮丧地缺乏想象力,经常从有限的一组单词中选择密码,而将这组单词称为“字典”似乎是合乎逻辑的。我们也称之为“暴力”或“彻底搜查”

假设字典足够小,攻击者可以实际试用它的所有单词,那么不仅哈希值最终会被反转(如果攻击者有足够的动机),但这也为成本分担开辟了道路:攻击者可能会尝试在几种类似的攻击情况下(即,使用相同的哈希函数反转多个哈希值——同样,还有一种常见的密码相关攻击模型)共享其计算成果。一种基本的成本分摊方法是制作一个预计算表:攻击者一次计算字典的所有哈希值;然后,只要在表中查找哈希值,就可以攻击所有后续哈希值。查找速度非常快(攻击者按递增顺序对哈希进行排序)。是一种预计算表,以一种智能的方式允许紧凑的表示:它们使攻击者可以“保留”一个大的预计算表,而不需要一卡车的硬盘。尽管如此,无论是否为rainbow,表中的所有值(对于rainbow表,压缩前的值)必须由攻击者在某个地方至少计算一次,即有人能够进行完整字典攻击。这有两个成本:CPU成本(用于计算所有哈希)和存储成本(用于存储哈希值)。彩虹表使存储更便宜,但在CPU方面并没有改善

击败预计算表(包括彩虹表)。它使小词典更容易接受。也就是说,如果我们假设反转一个散列值是可行的,那么salt确保,至少,攻击者每次都必须支付字典攻击的全部CPU成本,并且他将无法在多个攻击中或与其他攻击者共享他的成本。密码需要使用salt,因为一般来说,要让普通用户从足够大的一组可能密码中选择并记住密码是不可能的

如果您的输入来自一个足够大的字典,可以击败单一的暴力强迫行为,则效果会更好。重要的是输入字符串可能采用的值集的大小;必须根据攻击者对受攻击数据的了解来估计该集合。例如,如果攻击者试图找到用户密码,那么他知道输入字符串很短(用户没有耐心),并且只包含可以在键盘上(盲目地)输入的字符;而且他也知道序列是可以记忆的,这使得像“%f*(.ds/~\d09j@)”这样的事情很不可能发生。输入大小本身没有限制;我们说彩虹表限制在“15个字符左右”因为接受键入超过15个字符的用户也会从太大的密码集中选择密码,以允许表构造所需的单一暴力工作。请注意,尝试所有15个字符的序列已经太多了(即使是所有字符)