关于密码存储这件事儿 关于密码的说法正确的是
wxin55 2024-12-25 16:09 7 浏览 0 评论
在当今数字化时代,密码的安全性至关重要。不正确的密码存储方法可能导致用户数据泄露、账户被盗或系统遭受恶意攻击。因此,采用最佳实践和安全的技术方案来存储密码是至关重要的。
01 存储方式
明文存储
毫无疑问这是最糟糕的密码存储方式,无论你是普通用户,还是密码的管理者,如果是明文存储,是不可取的。尤其是对于密码的管理者,如果还在存储明文密码,那么最好立刻改掉这种做法,否则后果可能极其严重。
首要的就是存在严重安全风险,一旦存储密码的数据库密码泄漏,攻击者就可以直接获取账号密码。这样可能会给企业、个人带来严重的损失嗯3,包括经济、信誉等。
其次合规性风险,许多国家和地区的法律法规,明文存储密码可能违反数据保护和隐私法规;很多场景中也有明确的安全合规性要求,明文存储可能引发法律风险。
简单md5/hash存储
md5或者hash方法是不可逆的,即不能直接直接有加密值解密出原始密码。这种方法的验证逻辑是将用户输入的密码计算出md5值或者hash值,然后与系统存储的加密值是否匹配,匹配则认为密码争取。
这种方法比较简单,而且计算速度很快;但是安全性较低,攻击者一般通过彩虹表等预先计算出来的哈希值进行对比,找出密码。
所谓彩虹表是一种预先计算出的哈希值和对应明文密码的对应表。攻击者可以使用彩虹表来查找与特定哈希值匹配的明文密码,从而绕过直接破解哈希值的过程。
解决这个问题的方法一般是采用加盐(salt)和使用更强大的哈希算法来提高破解难度。
加盐(salt)哈希
加盐是配合其他方法一起使用的,加盐(salt)是指在密码哈希过程中引入一个随机的额外值。这个额外值与密码合并后再进行哈希计算,生成最终的哈希值。
加盐一般有两种,一种是设置一个全局的较长的随机字符串,一般16位以上,另一种是针对每个对象(用户、服务器等)生成不一样的随机字符串作为盐。
第一种方案相对来讲简单一点,不过安全性上远不如第二种。固定的盐值一般都会存在于代码或者配置中,也是比较容易暴露的,因此一般也不推荐。
第二种加盐方式则会大大提高密码的安全性。通过为每个对象生成不同的盐值,即使两个对象使用相同的密码,最终生成的哈希值也会不同。这样可以防止攻击者使用彩虹表等预先计算的哈希值来破解密码。
存储用户密码和盐值的时候最安全的做法是通过将盐值和密码分开存储到不同的数据库,这样即使攻击者获得了存储密码的数据库,仍然无法直接获取用户的密码。
brypt/scrypt
bcrypt和scrypt都是密码哈希函数,用于存储密码时增加安全性。它们通过引入盐值和多次迭代的计算来增加破解密码的难度,提高密码的安全性。
bcrypt是一种基于Blowfish密码算法的哈希函数。它的主要特点是慢速且可调节的哈希计算速度,以及内部集成的盐值和密钥扩展机制。
scrypt是一种基于PBKDF(Password-Based Key Derivation Function)的哈希函数。使得攻击者需要更多的计算资源和时间来破解密码。
02 解密
一般存储密码时通常是通过哈希函数进行加密存储的,而哈希函数是不可逆的,无法直接解密,如第一节中提到的各种哈希加密方法。但是在很多场景下我们还是需要对存储密码进行解密,在这种情况下,密码的双向解密可以通过使用正确的密钥来还原明文密码。
密码存储一般使用对称加密,它使用相同的密钥进行加密和解密。在密码存储中,用户的密码会使用密钥进行加密,并在需要验证用户身份时使用相同的密钥进行解密。这种方法简单且高效,适用于密码存储的场景。
非对称加密也可以用于密码存储,但相对较少使用。非对称加密使用一对密钥,包括公钥和私钥,在密码存储中,用户的密码可以使用公钥进行加密,但解密需要使用私钥。这种方法相对复杂,适用于特定的安全需求,例如在分布式系统中进行密码存储。
需要注意的是,密钥管理非常重要,密钥的安全性直接影响到密码的保密性,因此,密钥的生成、存储和传输都需要采取适当的安全措施。
算法
DES(Data Encryption Standard):DES是一种较早的对称加密算法,使用56位密钥。由于DES的密钥长度较短,已经不再被广泛使用,而被AES所取代。
3DES(Triple Data Encryption Standard):3DES是对DES算法的改进,通过多次应用DES算法来增加安全性。它使用两个或三个56位密钥进行加密。
AES(Advanced Encryption Standard):AES是一种广泛使用的对称加密算法,被认为是目前最安全的对称加密算法之一。它支持不同的密钥长度,包括128位、192位和256位。
RSA:一种非对称加密算法,其中加密密钥是公开的,而解密密钥是保密的。在RSA算法中,通过使用公钥加密的数据只能使用相应的私钥进行解密,而无法通过已知的公钥推导出私钥。这种特性使得RSA算法在保护数据安全和实现数字签名等领域具有广泛应用
03 主流做法
如果正在考虑如何去设计密码的管理,让我们来看看一般密码管理工具都是如何去进行密码存储管理的。如1Password、 keeppass、vault等等,综合这几种密码管理方法,其密码存储原理大致相似。基本都是后端存储加密的密码数据、客户端通过密钥解密,这分离的做法有力提升了密码的安全性。
核心原理基本为:
主密码: 用户设置的主密码是整个系统的核心,这个主密码用于加密和解密用户的密码和敏感数据。
加密密钥: 使用动态密钥生成机制来生成用于加密和解密数据的临时密钥。每次需要加密或解密数据时,生成一个新的临时密钥,或者使用该主密钥生成一个确定的加密密钥,并使用该密钥对数据进行加密或解密操作。
加密存储:用户的密码和敏感数据在存储之前,会使用加密密钥进行加密。这样,即使数据被盗或泄露,未经授权的人也无法直接访问和解密其中的数据。
04 总结
如果本文主要结束讲述密码后端存储的一般方法和比较,并概括了主流密码管理工具的一般做法,希望对你有所帮助。
后续我们将在CMDB中加入对密码的存储支持,欢迎大家持续关注我们。
开源地址: https://github.com/veops/cmdb 大家觉得有帮助,麻烦点个??以示鼓励
相关推荐
- 黑客工具sqlmap,带你了解什么师sql注入
-
1、sqlmap介绍sqlmap是一款支持MySQL,Oracle,PostgreSQL,MicrosoftSQLServer,MicrosoftAccess,IBMDB2,SQL...
- Web网络安全漏洞分析,SQL注入原理详解
-
本文主要为大家介绍了Web网络安全漏洞分析SQL注入的原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪一、SQL注入的基础1.1介绍SQL注入SQL注入就是指We...
- sql注入、文件上传、文件包含(sql注入数据提交的类型)
-
在owasp年度top10安全问题中,注入高居榜首。SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要...
- 比较常见类型漏洞讲解(三):SQL注入(一)
-
比较常见类型漏洞讲解(一)比较常见类型漏洞讲解(二):文件上传这里继续介绍比较容易找到的不同类型的漏洞。演示准备目标主机:Metasploitable2攻击目标:目标主机的dvwa系统攻击机:Kali...
- 警惕SQL注入:检测与防御的实战指南
-
在当今数字化的时代,软件系统的安全性至关重要。SQL注入作为一种常见且危害巨大的安全漏洞,给企业和用户带来了潜在的风险。对于测试人员来说,掌握发现和解决SQL注入漏洞的方法是保障软件质量和安全的...
- SQL注入的原理和危害(sql注入的原理及危害)
-
什么是SQL注入SQL注入是发生在web端的安全漏洞,实现非法操作,欺骗服务器执行非法查询,他的危害有会恶意获取,甚至篡改数据库信息,绕过登录验证,原理是针对程序员编写时的疏忽,通过执行SQL语句,实...
- 科普基础 | 最全的SQL注入总结(sql注入是干嘛的)
-
0x01SQL注入原理当客户端提交的数据未作处理或转义直接带入数据库,就造成了sql注入。攻击者通过构造不同的sql语句来实现对数据库的任意操作。0x02SQL注入的分类按变量类型分:数字型和字符...
- 产品经理必备IT技术知识之“什么是SQL注入攻击?
-
不少优秀的产品经理都会写一些简单的SQL语句进行数据查询的操作,但是会写SQL语句不代表能写好SQL语句。SQL语句写得不好,就会引发SQL注入攻击。SQL注入攻击是Web开发中最常见的一种安全问题,...
- 通过sql注入获取用户名和密码(联通光猫超级用户名超级密码获取)
-
1.啥是sql注入sql注入是一种通过操作输入来修改后台sql语句以达到利用代码进行攻击目的的技术2.生成sql注入漏洞的原因总结一句话:对前台传过来的参数没有进行有效的过滤,太相信前端传过来的参数...
- 什么是SQL注入攻击(SQL Injection)
-
1,定义:在构建数据库SQL语句时,攻击者在参数请求中注入恶意的SQL代码,并在在数据库中执行,操控数据库执行意图之外的操作。2,目的:窃取数据、修改数据、删除数据、绕过身份验证、权限提升,执...
- 浅谈SQL注入(sql注入的理解)
-
在关于SQL注入,百度的解释是这样的:SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知...
- sql注入(sql注入攻击是什么意思)
-
SQL注入分类1.数字型注入当输入的参数为整型时,则有可能存在数字型注入漏洞。假设存在一条URL为:HTTP://www.aaa.com/test.php?id=1可以对后台的SQL语句猜...
- SQL注入详解(sql注入总结)
-
现在大多数系统都使用B/S架构,出于安全考虑需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往会出现安全隐患,为了更好的保护数据...
- 什么是sql注入,这些坑得避开(什么是sql注入,编程时如何避免)
-
1、sql注入是什么sql注入就是用户通过输入的参数,拼接到原先的sql中,成为sql的一部分,从而影响sql的功能和执行结果2、sql注入破坏力-小兵破坏力比如原先sql如下s...
- 金母鸡量化教学场:pandas—数据挖掘的Python库
-
如果你想充分发挥Python的强大作用,如果你想成为一名好的Python量化师,你应该先学好Pandas。今天就来了解什么是Pandas。与numpy易于处理同种类型数据不同,pandas更加的适合...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- hive行转列函数 (63)
- sourcemap文件是什么 (54)
- display none 隐藏后怎么显示 (56)
- 共享锁和排他锁的区别 (51)
- httpservletrequest 获取参数 (64)
- jstl包 (64)
- qsharedmemory (50)
- watch computed (53)
- java中switch (68)
- date.now (55)
- git-bash (56)
- 盒子垂直居中 (68)
- npm是什么命令 (62)
- python中+=代表什么 (70)
- fsimage (51)
- nginx break (61)
- mysql分区表的优缺点 (53)
- centos7切换到图形界面 (55)
- 前端深拷贝 (62)
- kmp模式匹配算法 (57)
- jsjson字符串转json对象 (53)
- jdbc connection (61)
- javascript字符串转换为数字 (54)
- mybatis 使用 (73)
- 安装mysql数据库 (55)