密码必须至少为6个字符_作为一名程序员是如何处理密码的?压箱底的密码要来了~...

ad50ff2017a3d311b0f3c3e05efa2068.png

数据大爆炸时代,信息泄露事件屡见不鲜。作为程序员,从自身做起,有什么加固信息保护的方法吗?事实上,复杂且好记的密码就是必备手段之一。

如今,密码仍然是主要的身份验证方式——以某种熟悉的形式。人类很懒惰,经常设置保密程度很低的密码或重用密码。

人们在保护密码方面进行了很多研究和思考。我们所用的密码就是挑战-应答式(Challenge-Response)认证方案中最简单的形式。

因为挑战问题“您的密码是什么?”会被反复询问,应答也会反复使用,因此为重放攻击(replay attack)敞开了大门。

选择正确的哈希算法

Argon2是一个密钥派生函数,它是最好的密码哈希算法,因此新项目应该考虑使用该算法。如果你无法使用Argon2,则可以考虑Scrypt。其他密钥派生函数都不应考虑在内。

Argon2i可以抵御旁路攻击(side-channel attack),而Argon2d则可以抵御时空平衡攻击(time-memory tradeoff attack)。Argon2id是两者的结合,可以同时抵抗两种攻击,并且适用于大多数情况。

因此,我们都应该使用Argon2id。

正确地给哈希“加盐”

“盐”与Nonce(只使用一次的随机数)密切相关,然而,Nonce只能用于通信协议,无法用于哈希。Nonce可以防止重放攻击,而“盐”可以防止预先计算好的哈希(又名彩虹表)。区分二者很重要,因为它们预防的攻击是不同的。

“盐”唯一的要求是它应该对于每个哈希是唯一的,而且是公开的,但为了防止加盐后的哈希被预先计算,“盐”的产生应当是不可预测的。

我们可以认为,密码学安全伪随机数生成器产生的32字节输出是不可预测的唯一值。

正确地给哈希“加胡椒”

如果你曾研究过互联网的“盐”,那么你可能也听说过“胡椒”。“胡椒”是一种密钥,用于哈希函数,“胡椒”不可预测且对每个应用程序来说都是唯一的。

等等,听起来很像是密钥散列消息认证码,对吗?没错,它就是。你必须非常小心地实现“胡椒”,因为它可能引发长度扩展攻击和Bcrypt的棘手问题。

Argon2的官方规范中实现了一个secret value,可以充当“胡椒”的可选参数。如果你使用的实现不支持secret value,那么请对哈希进行加密。如果你不使用Argon2,那么请对哈希进行加密。

不要在实现“胡椒”和加密哈希上浪费时间,你不会得到任何的实际好处,而且你应该将密钥存储在硬件安全模块中。

库与服务

你不应该在生产中使用自己编写的身份验证系统,而是应该使用现成的库和服务。但是你应该学习如何实现身份验证系统及其工作原理。

使用合理的密码政策

✈最大长度不少于128个字符。

✈写文章最小长度为12或16个字符。

✈支持所有(至少支持绝大部分)的Unicode和空白。

✈通过HIBP API拒绝已知密码。

✈拒绝与标识符一致的密码,例如电子邮件、用户名。

✈不要强制使用特殊字符、大写、小写、符号等。

✈不要以任何方式截取、清理或格式化密码!

✈不要阻止将密码复制并粘贴到密码字段中。

✈不要限制密码字段中可以输入或不能输入的字符。

✈不要频繁要求更改密码。

最重要的是密码本身的长度和信息量。请抑制你内心的渴望,不要强制执行上述任何密码策略,与其这样还不如实施因素身份验证,可以更好地保护用户的账号。

如果强制执行某个密码策略,那么用户可能会被迫写下密码,他们会忘记密码,会感到不厌其烦或选择保护度过弱的密码。如果你强制用户更改密码,他们也会将密码写下来。

正如@nylen指出的那样,密码和标识符之间应该保持莱文斯坦距离(Levenshtein距离),如果跨入危险距离内则拒绝密码。当然你应该设定合理的最小距离。

鼓励用户使用良好的做法

鼓励用户使用diceware、passphrases、密码管理器(如BitWarden)和多因素身份验证(FIDO和TOTP协议)。

不鼓励用户使用姓名、日期、生日等个人信息作为密码,还要建议用户尽可能不要与他人共享密码。

我是一名从事了10年开发在退休边缘垂死挣扎的高龄程序员,最近我花了一些时间整理了一个完整的学习C语言、C++的路线,项目源码和工具。对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者这里推荐一个C语言/C++编程爱好者的聚集地→ef="https://jq.qq.com/?_wv=1027&k=5W3SgJs">C/C++编程项目开发学习,项目源码,素材笔记等!欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以一起学习!”

关注我,带你遨游代码世界!

下面这些是C/C++能做的 :

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值