在阅读了这有趣的问题后,我觉得自己对需要使用哪种不安全的散列算法有了很好的了解,但不知道为什么我会使用安全算法。
那么区别是什么呢?输出不只是一个表示散列的随机数吗?什么使一些哈希算法安全?
发布于 2012-04-26 20:34:00
每个加密哈希函数H都需要三个属性:
h,很难用h = H(x)找到任何值x。x1,很难用H(x1) = H(x2)找到x2 != x1。x1 != x2和H(x1) = H(x2)中很难找到两个值。对于(字符串)哈希表的常用编程语言中使用的散列函数,通常不给出任何哈希函数,它们只提供:
以上三个属性是每个加密散列函数的设计目标之一。对于某些函数(如MD4、SHA-0、MD5),已知此操作失败(至少部分失败)。假定当前生成(SHA-2)是安全的,下一代(“安全哈希算法3")目前是在标准化的过程中,仅次于一场比赛。
对于某些用途(例如密码哈希和密码的密钥派生),实际使用的值x的域非常小,因此强制使用普通(快速)安全哈希函数时这个空间变得可行,这也是我们希望:
x,计算值H(x)所需的资源最少(最好是可配置的)。但对于大多数其他用途,这是不需要的,一个人想要的是:
x,计算H(x)的值是尽可能快的(尽管仍然是安全的)。有一些构造(如PBKDF2和scrypt)可以通过经常迭代来从快速的哈希函数中创建一个缓慢的散列函数。
有关更多细节,请查看姐妹站点密码堆栈交换上的散列标签。
发布于 2012-04-26 18:19:37
安全意味着有人想通过使用冲突(即两个源被散列为相同的值)来引导您陷入错误将有困难。
一些特点:
发布于 2012-04-26 19:07:52
阅读这个http://www.codinghorror.com/blog/2012/04/speed-hashing.html,它将解释所有的事情,比我能解释的要好得多。以下是本文中直接针对您的问题的两个最重要的标题:
他的TL;DR在结尾部分:
如果您是用户:请确保您的所有密码都是12个字符或更多字符,最好是更多。我建议采用密码短语,这些短语不仅比密码更容易记住(如果不是输入),而且非常安全,不受蛮横的强迫,这完全是因为密码的长度所致。如果您是一名开发人员:只使用bcrypt或PBKDF2来散列任何您需要安全的东西。这些新哈希被专门设计成很难在GPU上实现。不要使用任何其他形式的散列。几乎所有其他流行的散列方案都很容易受到商品GPU阵列的野蛮强迫,而GPU每年只会变得更快、更并行、更容易编程。
https://softwareengineering.stackexchange.com/questions/146140
复制相似问题