首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么使散列算法“安全”?

什么使散列算法“安全”?
EN

Software Engineering用户
提问于 2012-04-26 18:12:45
回答 5查看 4.6K关注 0票数 19

在阅读了有趣的问题后,我觉得自己对需要使用哪种不安全的散列算法有了很好的了解,但不知道为什么我会使用安全算法。

那么区别是什么呢?输出不只是一个表示散列的随机数吗?什么使一些哈希算法安全?

EN

回答 5

Software Engineering用户

回答已采纳

发布于 2012-04-26 20:34:00

每个加密哈希函数H都需要三个属性:

  • 图像前电阻:给定h,很难用h = H(x)找到任何值x
  • 第二,图像前电阻:给定x1,很难用H(x1) = H(x2)找到x2 != x1
  • 抗撞性:在x1 != x2H(x1) = H(x2)中很难找到两个值。

对于(字符串)哈希表的常用编程语言中使用的散列函数,通常不给出任何哈希函数,它们只提供:

  • 弱碰撞阻力:对于随机(或“典型”)区域的选定值,碰撞的几率很小。这并没有说明攻击者故意试图创建冲突,或试图查找预图像。

以上三个属性是每个加密散列函数的设计目标之一。对于某些函数(如MD4、SHA-0、MD5),已知此操作失败(至少部分失败)。假定当前生成(SHA-2)是安全的,下一代(“安全哈希算法3")目前是在标准化的过程中,仅次于一场比赛

对于某些用途(例如密码哈希和密码的密钥派生),实际使用的值x的域非常小,因此强制使用普通(快速)安全哈希函数时这个空间变得可行,这也是我们希望:

  • 慢速执行:给定x,计算值H(x)所需的资源最少(最好是可配置的)。

但对于大多数其他用途,这是不需要的,一个人想要的是:

  • 快速执行:给定x,计算H(x)的值是尽可能快的(尽管仍然是安全的)。

有一些构造(如PBKDF2和scrypt)可以通过经常迭代来从快速的哈希函数中创建一个缓慢的散列函数。

有关更多细节,请查看姐妹站点密码堆栈交换上的散列标签

票数 34
EN

Software Engineering用户

发布于 2012-04-26 18:19:37

安全意味着有人想通过使用冲突(即两个源被散列为相同的值)来引导您陷入错误将有困难。

一些特点:

  • 知道哈希,构建一个哈希值的文件是困难的(变体,新文件的一部分,以及所需的哈希)
  • 构建两个不同的文件,其中哈希值相同是困难的(变量,文件的一部分给出)
票数 3
EN

Software Engineering用户

发布于 2012-04-26 19:07:52

阅读这个http://www.codinghorror.com/blog/2012/04/speed-hashing.html,它将解释所有的事情,比我能解释的要好得多。以下是本文中直接针对您的问题的两个最重要的标题:

  • 安全散列被设计为防篡改的。
    • 通过对输入数据进行微小的单比特更改,从根本上改变其输出。

  • 安全散列被设计为缓慢。

他的TL;DR在结尾部分:

如果您是用户:请确保您的所有密码都是12个字符或更多字符,最好是更多。我建议采用密码短语,这些短语不仅比密码更容易记住(如果不是输入),而且非常安全,不受蛮横的强迫,这完全是因为密码的长度所致。如果您是一名开发人员:只使用bcrypt或PBKDF2来散列任何您需要安全的东西。这些新哈希被专门设计成很难在GPU上实现。不要使用任何其他形式的散列。几乎所有其他流行的散列方案都很容易受到商品GPU阵列的野蛮强迫,而GPU每年只会变得更快、更并行、更容易编程。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/146140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档