文章目录
常见的8种加密方式
我们该采用什么方式来保护用户的密码呢?以下几种方式是常见的密码保存方式:
算法 | 特点 | 有效激活成功教程方式 | 激活成功教程难度 | 其它 |
---|---|---|---|---|
明文保存 | 实现简单 | 无需激活成功教程 | 简单 | |
对称加密 | 可以解密出明文 | 获取密钥 | 中 | 需要确保密钥不泄露 |
单向HASH | 不可解密 | 碰撞、彩虹表 | 中 | |
特殊HASH | 不可解密 | 碰撞、彩虹表 | 中 | 需要确保“盐”不泄露 |
Pbkdf2 | 不可解密 | 无 | 难 | 需要设定合理的参数 |
BCrypt | 不可解密 | 无 | 难 | 需要设定合理的参数 |
SCrypt | 不可解密 | 无 | 难 | 需要设定合理的参数 |
Argon2 | 不可解密 | 无 | 难+ |
①直接明文保存
使用情况: ☆☆☆☆☆
早期很多这样的做法,比如用户设置的密码是“123”,直接就将“123”保存到数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。
②使用对称加密算法来保存
使用情况: ★★☆☆☆
比如3DES、AES等算法,使用这种方式加密是可以通过解密来还原出原始密码的,当然前提条件是需要获取到密钥。不过既然大量的用户信息已经泄露了,密钥很可能也会泄露,当然可以将一般数据和密钥分开存储、分开管理,但要完全保护好密钥也是一件非常复杂的事情,所以这种方式并不是很好的方式。
③使用MD5、SHA1等单向HASH算法保护密码
使用情况: ★★★☆☆
使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表激活成功教程,目前这种方式已经很不安全了。
④特殊的单向HASH算法
使用情况: ★★★☆☆
由于单向HASH算法在保护密码方面不再安全,于是有些公司在单向HASH算法基础上进行了加盐、多次HASH等扩展,这些方式可以在一定程度上增加激活成功教程难度,对于加了“固定盐”的HASH算法,需要保护“盐”不能泄露,这就会遇到“保护对称密钥”一样的问题,一旦“盐”泄露,根据“盐”重新建立彩虹表可以进行激活成功教程,对于多次HASH,也只是增加了激活成功教程的时间,并没有本质上的提升。
⑤PBKDF2
使用情况: ★★★★☆
该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和激活成功教程的难度都大幅增加。使用PBKDF2算法时,HASH算法一般选用sha1或者sha256,随机盐的长度一般不能少于8字节,HASH次数至少也要1000次,这样安全性才足够高。一次密码验证过程进行1000次HASH运算,对服务器来说可能只需要1ms,但对于激活成功教程者来说计算成本增加了1000倍,而至少8字节随机盐,更是把建表难度提升了N个数量级,使得大批量的激活成功教程密码几乎不可行,该算法也是美国国家标准与技术研究院推荐使用的算法。
PBKDF2 已经存在很长时间了,像之前文章讨论的一样,它有点过时了:轻松的在多核系统(GPU)上实现并行,这对于定制系统(FPGA/ASIC)来说微不足道。
⑥BCrypt
使用情况: ★★★★☆
BCrypt 在1999年就产生了,并且在对抗 GPU/ASIC 方面要优于 PBKDF2,但是我还是不建议你在新系统中使用它,因为它在离线激活成功教程的威胁模型分析中表现并不突出。 尽管有一些数字加密货币依赖于它(即:NUD),但它并没有因此获得较大的普及,因此,FPGA/ASIC 社区也并没有足够的兴趣来构建它的硬件实现。 话虽如此,Solar Designer(OpenWall)、Malvoni 和 Knezovic(萨格勒布大学)在 2014 年撰写了一篇论文,这篇文章描述了一种混合使用 ARM/FPGA 的单片系统来攻击该算法。
⑦SCrypt
使用情况: ★★★★☆
SCrypt 在如今是一个更好的选择:比 BCrypt设计得更好(尤其是关于内存方面)并且已经在该领域工作了 10 年。另一方面,它也被用于许多加密货币,并且我们有一些硬件(包括 FPGA 和 ASIC)能实现它。 尽管它们专门用于采矿,也可以将其重新用于激活成功教程。
⑧Argon2
使用情况: ★★★★★
Argon2 基于 AES 实现,现代的 x64 和 ARM 处理器已经在指令集扩展中实现了它,从而大大缩小了普通系统和攻击者系统之间的性能差距,
Argon2 有三个主要的版本:
- Argon2i 是对抗侧信道攻击的最安全选择,Argon2i 使用与数据无关的内存访问,这是密码哈希的首选方法,Argon2i 对内存进行了更多的传递,以防止权衡攻击的发生。
- Argon2d 是抵抗 GPU 激活成功教程攻击的最安全选择,并且Argon2 在 2015 年 7 月赢得了密码哈希竞赛。Argon2d 使用依赖数据的内存访问,这使得它很适合用于加密数字货币和工作量证明的应用程序,而不会受到侧信道定时攻击的威胁。
- Argon2id 在内存第一次迭代的前半部分充当 Argon2i,其余部分则充当 Argon2d。因此,基于时间、 空间的平衡,它既提供了侧信道攻击保护也节约了暴力开销。
如果你担心侧信道攻击(例如:恶意数据缓存加载/幽灵漏洞,它允许通过基于缓存的侧信道读取同一硬件上其他正在运行的进程的私有内存数据),你应该使用 Argon2i,否则使用 Argon2d。 如果你不确定或你对混合方法感到满意,你可以使用 Argon2id 来获得两个方面的优势。
源代码可以在 Github 上获得,使用兼容 C89 的 C 语言编写,并在知识共享许可协议下获取许可,并且可以在大多数 ARM、x86 和 x64 架构的硬件上编译。
…
温馨提醒:
在2019 年之后,就有相关专家提出建议尽量不要使用 PBKDF2 或 BCrypt,并强烈建议将 Argon2(最好是 Argon2id)用于最新系统。而Scrypt 是当 Argon2 不可用时的不二选择,但要记住,它在侧侧信道泄露方面也存在相同的问题。
今天的文章 密码的常见加密方式,你都了解多少?分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/83749.html