导言
今天互联网上的数据量证明了数字空间中用户活动的指数增长。我们有更多的用户和更多的设备来帮助他们创建和使用数字数据。然而,我们的数据和我们维护/保护它一样好。数据安全一直是一个永恒的话题,一直处于任何应用的前沿。数据安全是不可或缺的,武汉大数据,不可避免的,而且(在某种程度上)无处不在。我们不打算讨论这个冗长的话题的长度和广度,网站自助建站系统,而是将我们自己限制在一种特定的数据安全方法上。
通过保密实现的数据安全
通过保密实现的数据安全是一种神奇的药丸,在大多数情况下都达到了目的。通过保密提供安全性的两个成功范例是:
加密是数据保护的另一个秘密方面,但我们将离题到散列。如前所述,哈希是从原始数据生成模糊(受保护)数据的单向过程。因为它是单向的,所以存在从模糊数据中恢复原始数据的最小概率,至少这是它的本意。散列并不是一个陌生的术语。我们可能会与一些可能以自己的方式使用哈希的情况进行交互。在本文中,我们将重点讨论如何使用哈希来增强敏感数据的模糊性,或者如何使其加密安全。
一个简单的哈希函数h可能非常像:
h(x)=x%5
这个哈希函数取一个数字x,当其除以5时返回余数。它可能是一个可管理的哈希函数,但却是一个糟糕得可笑的加密哈希函数(CHF)。让我们来理解CHF背后的道理。
加密哈希函数(CHF)
简而言之,加密哈希函数执行常规哈希函数执行的所有操作,但不是相反。一个普通的散列函数需要遵守一定的规则才能保证加密安全:
现在,让我们应用上面的散列函数来检查它是否满足CHF。
CHF服务于它们的真正目的
一些非常普遍的流行散列族:
MD*和SHA族是很好的CHF,它们被设计用于为大量数据创建摘要。问题是它们的速度也很快。由于它们在创建摘要时速度很快,因此很容易(可能)反转过程并获取原始消息,因为它们没有向摘要添加足够的熵。这样的chf非常适合创建文件摘要这样的情况。但如果我们的要求是散列密码,那么我认为这样的瑞士法郎不符合法案。散列密码需要谨慎地维护其安全性。对密码进行哈希运算会给摘要增加相当大的随机性,因此猜测或导出原始消息的可能性非常小。使用快速散列的散列函数可以让技术更快地恢复散列。基于PBKDF的哈希算法,尽管在摘要生成中表现出积极的惰性,但在前进的过程中,我们会遇到一些高级漏洞。
破坏Benjamin
尽管我们使哈希摘要具有预映像抵抗能力,但仍存在一些可能被破坏的可能性。成功的技术已经被用来打破散列的单向性特征,并得到最初的信息:
城里的旧玩具
到目前为止,某些(无用的)方法被许多人用来增加散列过程的熵。为什么徒劳?这是因为从60000英尺的视角看,它看起来很整洁,但从内部看,它却尽可能的凌乱。这些方法可以列出:
这归结为我们确实需要较慢的散列函数。散列消息的速度越慢,大数据怎么样,反转进程所需的时间就越长(如果可能的话)。此外,我们还需要对硬件加速刚刚起步的chf。
通过复杂性实现数据安全
破坏散列的工作量被称为与散列相关的功因子。功因子越高,打破散列越困难,但同时首先计算起来却非常繁重。
$2a$06$qWo8bf7STORVWWjBt7Wd7uMg3l.CkGYHH8LuiiZihmxaI1qzP8/wq
散列可以分解如下:
功因子随时间的变化可能类似:
数据提供:约瑟夫
一些投bcrypt票的大人物:
我们已经实现了bcrypt,淘客模板,并将其作为OpenBSD操作系统的一部分进行了部署。自从OpenBSD2.1
EDIT::Bcrypt的内存需求很低,约为4KB以来,Bcrypt一直是默认的密码方案。由于FGPA被设计为在并行模式下运行,因此如果采用相当大的FPGA可以非常有效地破译Bcrypt。为了解决这一特殊问题,提出了一种解决方案。Scrypt–它是另一个PBKDF,它超越了PBKDF2这样的前辈,因为它对内存的要求过高,从而使它对FPGA攻击和部分GPU攻击免疫。Scrypt虽然是一种与Bcrypt非常相似的算法,但它比Bcrypt具有更高的计算复杂度和内存需求。但这里需要注意的是,Scrypt是相对较新的,没有得到很大程度的证实。我个人使用bcrypt散列和存储用户密码。基于与算法相关联的工作因子,该算法确保了摘要中相当大的熵,整个过程非常耗时。例如,在节点.js在64位Windows系统(相当可观的硬件配置)上,使用12的工作系数散列9个字符的密码需要花费0.6秒的时间。一方面,bcrypt是安全的,但另一方面,0.6s对于登录检查来说是相当大的。因此,最后,根据个人要求并尊重STO原则进行仲裁是个人的要求。
结论