type
status
date
slug
summary
tags
category
icon
password
AI 摘要
背景
在 web 通信建立在 https 的基础上,是否还需要前端对用户密码的加密?
有人会笑话说这不是废话吗,常识如此(我最开始看到这个问题就是这么想的)
你若再问我为什么,我不假思索就会来上一句“有助于提高系统用户的安全性”
可真的能
提高
系统用户的安全性”吗??先回顾一下前后端交互的几个核心诉求
前后端交互过程中的安全性诉求
这里借用一个比喻:
Alice( 浏览器前端 )和 Bob(服务器后端)到底可以怎么幽会。这个问题又会涉及到以下这些问题:
- Alice 怎么知道 Bob 是 Bob?
- Bob 怎么知道 Alice 是 Alice?
- Alice 和 Bob 幽会中的 窃窃私语 如何不被Eve偷听到,甚至被Oscar串改呢?
前两个问题被统称归为
Authenticity(认证)
,第三个问题可以被归为 Confidentiality(保密)
和 Integrity
。对于一般人而言,以上三个问题的成熟解决方案实现现有
SSH
和 mTLS
,常用的就是是 HTTPS 即 HTTP over TLS(在 TLS 安全信道上 HTTP 通讯)关于系统用户安全性的提升
直觉上大家都会觉得前端既然加密了,那对
该网站用户认证系统
的整体安全性肯定是有所帮助的,哪怕是 m + n + 1
的帮助也是帮助,即 用户认证安全性 = m + n + 1
,(先记住这个概念,后面会再用到)- m 指后端加密
- 这里的 n 是指传统的 htttps
- 1 则是前端用户加密
实际上并非如此,因为你的这个
n
正是从 1
迭代而来的,二者并没有累加的关系,而是后浪和前浪的关系,以下是解释n 和 1 的关系
先看案例:
- 如果某一天,这个系统的数据库泄露了,黑客就直接拿到了每个用户的密码
md5 值
- 但此时,由于黑客知道密码是在前端进行哈希的,所以他不需要爆破出该 md5 对应的原文是什么,而是直接修改客户端向服务器发出的请求,把密码字段换成数据库中 MD5 就可以了
- 由于与数据库中记录一致,直接就会登录成功。这跟 直接存储
明文密码
没有任何区别!!
在这个类似中间人攻击的案例中,我们再分析 n 和 1 的实际映射对象
n
指对信息传输通道所做的操作,可以是 https 加密传输等其他任何传输方式
1
指对信息发送源头所做的操作,可以是前端对密文做的一切加密操作
再来看案例中黑客如何爆破这个系统的,他无视掉了
1
(对信息发送源头所做的操作),仅仅是干掉了 n
(即信息传输通道所做的操作)这一操作,就干掉了这个认证系统
——即此时认证系统的安全性完全取决于 n
因此,这个公式应该变成
用户认证安全性 = m + n
针对这些,现代密码学有一些“反常识”的方法,也能加强这一理解
现代密码学
1.A 可以向 B 证明自己拥有一个密码,但是如果 B 是假冒的验证者,A 不会透露关于密码的任何信息给 B。——“零知识证明”
2.A 可以和 B 比较自己持有的一个值的大小关系,而不泄露这个值给对方。——“百万富翁问题”
4.A 和 B 可以,在没有公正第三人的情况下,进行等概率胜负的博弈。——“电 子博弈 ”
5.邮件服务,如果不考虑法律风险的话,是可以做到让服务器看不到你的邮件内容的。——PGP
对用户认证系统安全性并没有帮助
以上,我们可以明确前端密码加密对用户认证系统安全性
并没有帮助
有些人会认为前端进行了加密,可以降低后台的安全性需求,这种错误的观念会造成系统的
安全漏洞
实际上,我们不能对前端做任何的假设,所有跟安全相关的技术,都必须应用在传输通道和后台上
其他意义
如果跳出系统用户安全性的这个范围,前端对密码加密还是有一定意义的
主要是防止这个网站用户密码破解后,被黑客拿去
撞库
, 去验证用户在其他平台的账号你可能又会问,这不也是加强安全性了吗?不是,这是
社会工程学
上的意义每个网站自己的
用户认证安全性
与其他网站的安全性应当是独立的,这只能防止被窃听到原文的密码被攻击者用在社会学攻击上,而不能改善该网站的安全性结论
回到一开始的问题,答案是:Web 前端密码加密没有意义,又有意义
这个意义跟多数开发者所想的并不一致,它并不能改善该网站的安全性,它体现在社会工程学上