用户密码存储方式的发展史

ops/2024/11/30 7:54:19/

文章目录

  • 一、裸奔时代——纯文本存储
  • 二、远古时代:加密存储
  • 三、近代:单向哈希算法
  • 四、哈希加盐:穿上迷彩服
    • 两种加盐做法
      • 1. 随机生成盐并保存
      • 2. 固定算法生成盐并且不保存
  • 五、21世纪:自适应单项函数
  • 未来趋势

一、裸奔时代——纯文本存储

在互联网的石器时代,密码存储就像是原始人一样简单粗暴。为了方便,开发者们直接把用户的密码明文存储在数据库里,就像把金条放在透明玻璃柜里展示一样。如果黑客入侵了系统,他们可以直接看到所有用户的密码,就像走进了一家无人看管的糖果店。

安全性问题:想象一下,如果你的银行账户密码是“123456”,而黑客只需要打开一个文件就能看到它,你会不会觉得有点尴尬?在那个时代,如果存储介质被泄露,攻击者可以直接获取所有用户的密码。

风险:SQL注入、文件访问权限等都可能导致密码泄露。

二、远古时代:加密存储

随着安全意识的提高,开发者开始使用对称加密算法(如DES, AES)来保护密码。这就像给密码穿上了一件衣服,虽然比裸奔好一些,但还是有很多漏洞。如果加密密钥被泄露,那就好比你的钥匙被偷了,家里的一切都暴露无遗。

安全性问题:一旦密钥丢失或被破解,所有密码都会像脱掉衣服一样暴露出来。因此,那时候的密钥管理比较困难。

风险:密钥管理困难,一旦密钥泄露,所有密码都会暴露。

三、近代:单向哈希算法

为了进一步提高安全性,单向哈希函数(如MD5, SHA-1, SHA-256)应运而生。这些哈希函数将密码转换为固定长度的字符串,这个过程是不可逆的。这就像是给密码换上了一件防弹衣,即使被子弹打中,也很难穿透。

安全性问题:尽管哈希后的密码不能直接反推原始密码,但是聪明的黑客们发明了彩虹表——一种预先计算好的哈希值表。对于常见的弱密码,通过彩虹表可以迅速找到匹配项,这就像是用一把万能钥匙打开了防弹衣的锁。

风险:对于常见的弱密码,通过彩虹表可以迅速找到匹配项。

四、哈希加盐:穿上迷彩服

为了让密码更加安全,开发者们开始在哈希处理前为每个密码添加一个随机生成的“盐”值,然后一起进行哈希运算。这就像是给密码穿上了一件迷彩服,即使两个用户使用相同的密码,由于盐值不同,最终的哈希结果也会不同,从而有效防止了彩虹表攻击。

两种加盐做法

1. 随机生成盐并保存

用户注册时,后台先生成指定长度的随机字符串作为盐,然后把盐和用户密码拼接后计算整个串的哈希值,然后把上述盐和哈希值同时存入用户表中。下次验证时,重新取出盐和用户输入密码拼接,然后计算哈希值并比较结果是否与库中保存的哈希值一致。

2. 固定算法生成盐并且不保存

以用户特有属性值作参数,以某种算法生成盐,然后重复密码加盐加密逻辑即可。例如:以用户ID作哈希运算并取哈希值前五位作为盐。

安全性提升:现在,即使黑客有彩虹表,也很难找到匹配项,因为每件迷彩服都是独一无二的。

风险:如果盐值不够随机或长度过短,仍有可能被暴力破解。

五、21世纪:自适应单项函数

为了应对越来越强大的硬件和计算能力,自适应单项函数(如bcrypt, scrypt, Argon2)诞生了。这些算法设计上考虑到了硬件加速带来的挑战,通过增加计算复杂度来减缓攻击者的尝试速度。这就像是给密码穿上了一套铁甲,不仅防弹,还能抵御各种高科技武器。

特点:

  • 可调整的成本因子:允许根据硬件性能调整计算难度,就像可以根据敌人的火力调整自己的防御等级。
  • 内存消耗:一些算法(如scrypt, Argon2)还增加了内存占用,使得针对GPU或ASIC的并行攻击变得不那么有效,这就像是给铁甲加上了能量护盾。

未来趋势

  • 量子计算的影响:随着量子计算机的发展,传统的哈希算法可能面临新的挑战。研究者们正在探索后量子密码学解决方案,以应对潜在的安全威胁。这就像是在准备对抗外星人入侵一样,我们需要更先进的武器。
  • 多因素认证:除了密码本身,越来越多的应用程序开始采用多因素认证(MFA)来增强账户安全性,例如结合生物识别技术、一次性密码(OTP)、硬件令牌等。这就像是给密码加上了多重保险,即使敌人突破了一层防护,还有其他几层等着他们。

总之,密码存储技术的发展反映了网络安全领域不断进化的本质。从最初的裸奔到现在的全副武装,我们一直在努力保护用户的数据安全。随着新的攻击技术和计算能力的出现,安全专家们也在持续改进和创新密码保护机制,确保我们的数字世界更加安全


http://www.ppmy.cn/ops/137870.html

相关文章

Docker for Everyone Plus——Unbreakable!

修改一下telnet的端口配置,访问第二小问,sudo -l命令允许提权执行的命令: 发现多了这两个限制--security-optno-new-privileges,表明docker run命令必须带上--security-optno-new-privileges参数,这可以防止通过suid机…

154. tweenjs相机运动动画

下面给大家讲解如何通过tweenjs实现threejs相机动画,具体说就是使用tweenjs改变相机的位置camera.position和视线方向。 相机飞行动画(从一个点飞到另一个点) 引入tweenjs,并在requestAnimationFrame动画中执行TWEEN.update();更新。 import TWEEN fr…

CSS 属性计算过程

CSS 属性计算过程 你是否了解 CSS 的属性计算过程呢? 有的同学可能会讲,CSS属性我倒是知道,例如: p{color : red; }上面的 CSS 代码中,p 是元素选择器,color 就是其中的一个 CSS 属性。 但是要说 CSS 属…

【Docker】部署nginx

docker部署nginx docker部署nginx镜像加速器1、拉取nginx镜像2、创建nginx容器3、浏览器访问 docker部署nginx 镜像加速器 备注:阿里云镜像加速地址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors可用的镜像源: https://https://reg…

使用PyTorch在AMD GPU上进行INT8量化实现精简化的LLM推理

Leaner LLM Inference with INT8 Quantization on AMD GPUs using PyTorch — ROCm Blogs 随着大型语言模型(LLMs)规模达到数千亿参数,我们在这些庞大模型中表示数据的方式极大地影响了训练所需的资源(例如,用于推理的…

二阶信息在机器学习中的优化;GPTQ算法利用近似二阶信息;为什么要求近似二阶(运算量大,ReLu0点不可微)

目录 二阶信息在机器学习中的优化 GPTQ算法利用近似二阶信息来找到合适的量化权重 详细解释 举例说明 近似二阶信息 定义与解释 举例说明 总结 为什么要求近似二阶(运算量大,ReLu0点不可微) 计算复杂性 精度需求 实际应用场景中的权衡 二阶信息在机器学习中的优…

利用爬虫爬取网页小说

需求分析 安装requests包 pip install requests目录采集地址: h t t p s : / / w w w . 3 b q g . c c / b o o k / 60417 / https://www.3bqg.cc/book/60417/ https://www.3bqg.cc/book/60417/ 章节采集地址: h t t p s : / / w w w . 3 b q g . c …

【代码随想录day44】【C++复健】1143.最长公共子序列;1035.不相交的线;53. 最大子序和;392. 判断子序列

1143.最长公共子序列 本题一开始以为是和前面那个一维递增子序列一样,dp数组的[i][j]表示的是以i,j为结尾的最长公共子序列,然后用两个for循环去前面找前缀对应的最大值,这样写出来的代码算上遍历总共要4次for循环,结…