首页 > 其他分享 >加密方案

加密方案

时间:2022-10-06 23:55:27浏览次数:50  
标签:方案 加密 rainbow 密码 哈希 table bcrypt

加密方案

入门方案

将明文密码做单向哈希后存储。

单向哈希算法有一个特性,无法通过哈希后的摘要(digest)恢复原始数据,这也是“单向”二字的来源,这一点和所有的加密算法都不同。常用的单向哈希算法包括SHA-256,SHA-1,MD5等。例如,对密码“passwordhunter”进行SHA-256哈希后的摘要(digest)如下:

“bbed833d2c7805c4bf039b140bec7e7452125a04efa9e0b296395a9b95c2d44c”

echo -n  "passwordhunter" | sha256sum

通过建立彩虹表(rainbow table),可以匹配所有的密码数据库,易暴库。

进阶方案

将明文密码混入“随机因素”,然后进行单向哈希后存储,也就是所谓的“Salted Hash”。

这个方式相比上面的方案,最大的好处是针对每一个数据库中的密码,都需要建立一个完整的rainbow table进行匹配。 因为两个同样使用“passwordhunter”作为密码的账户,在数据库中存储的摘要完全不同。

10多年以前,因为计算和内存大小的限制,这个方案还是足够安全的,因为攻击者没有足够的资源建立这么多的rainbow table。 但是,在今日,因为显卡的恐怖的并行计算能力,这种攻击已经完全可行。

专家方案

故意增加密码计算所需耗费的资源和时间,使得任何人都不可获得足够的资源建立所需的rainbow table。

这类方案有一个特点,算法中都有个因子,用于指明计算密码摘要所需要的资源和时间,也就是计算强度。计算强度越大,攻击者建立rainbow table越困难,以至于不可继续。

这类方案的常用算法有三种:

1)PBKDF2(Password-Based Key Derivation Function)

  PBKDF2简单而言就是将salted hash进行多次重复计算,这个次数是可选择的。如果计算一次所需要的时间是1微秒,那么计算1百万次就需要1秒钟。假如攻击一个密码所需的rainbow table有1千万条,建立所对应的rainbow table所需要的时间就是115天。这个代价足以让大部分的攻击者忘而生畏。

  美国政府机构已经将这个方法标准化,并且用于一些政府和军方的系统。 这个方案最大的优点是标准化,实现容易同时采用了久经考验的SHA算法。

2) bcrypt

  bcrypt是专门为密码存储而设计的算法,基于Blowfish加密算法变形而来,由Niels Provos和David Mazières发表于1999年的USENIX。

  bcrypt最大的好处是有一个参数(work factor),可用于调整计算强度,而且work factor是包括在输出的摘要中的。随着攻击者计算能力的提高,使用者可以逐步增大work factor,而且不会影响已有用户的登陆。

  bcrypt经过了很多安全专家的仔细分析,使用在以安全著称的OpenBSD中,一般认为它比PBKDF2更能承受随着计算能力加强而带来的风险。bcrypt也有广泛的函数库支持,因此我们建议使用这种方式存储密码。

  1. scrypt

  scrypt是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的。

  和上述两种方案不同,scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,scrypt在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。

标签:方案,加密,rainbow,密码,哈希,table,bcrypt
From: https://www.cnblogs.com/embedded-linux/p/16758874.html

相关文章

  • 自建API接口管理平台的产品脑图和解决方案
    API接口管理平台如果需要自建API接口管理平台,首先要定位和明确需要给谁(开发者是谁)、以什么方式(免费/付费)、提供什么接口(内部接口,数据接口还是上游供应商的API接口)。站在产品......
  • 分布式场景中确保线程安全的解决方案,redis实现分布式锁
     1.死锁问题场景:当用redis做分布式锁时,当A用户竞争锁成功,A用户所在的主机挂了,这时候还没有来得及释放锁,那么其他用户去用setnx指令去竞争锁时发现redis有......
  • Redis实现分布式锁的7种方案,及正确使用姿势!
    Redis实现分布式锁的7种方案,及正确使用姿势!种方案前言日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个......
  • JSbase64加密解密方法
    base64加密解密constBase64={//加密encode(str){returnbtoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,functiontoSolidBytes(match,p1){returnString.......
  • 恶意代码分析实战 恶意代码的网络特征 lab14-1 14-2 14-3 都是http c2,并用到了自定义
       先反编译看看:函数在做base64加密:   验证下想法,果然:后面的功能,就是在下载执行了:   我们分析下细节: 问题1:使用wireshark进行监控网络特征,运......
  • JAVA中的高并发,解决高并发的方案
     java高并发,如何解决,什么方式解决一、什么是高并发二、高并发的解决方法有两种三、追加 一、什么是高并发1.1高并发(HighConcurrency)是互联网......
  • 你的方案逻辑自洽吗?
    国庆前最后一个周末,和Thoughtworks资深质量专家刘冉老师、itest测试平台创始人老牛老师,以及星球的两位合伙人CC、CKL一起做了一期直播分享,聊了关于业内前沿质量大会能为测......
  • 云平台和产品:建设方案与实施计划
            春去秋来,岁月如梭,光阴似箭,不曾察觉从事计算机编程已有12个年头,我想可以自称为一名程序员老鸟。作为一只老鸟,感触颇多,因为没有留下什么值得怀念的......
  • 恶意代码分析实战 数据加密 lab 13-1 13-2 13-3
    Lab13-1整体功能:向远程主机发送本机gethostname信息,该信息通过base64加密,远程请求的主机域名也被xor加密。看下代码反编译的情况:下面函数是从资源文件里提取加密的:ww......
  • JS调用MD5加密
    为了系统的安全,前端一般需要对密码进行MD5加密,然后传输给后台处理。MD5的英文是MessageDigestAlgorithm(信息摘要算法),是不可逆的算法,只能通过暴力破解,所以较为安全。需要......