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

作者 | Nathilia Pierce

译者 | 弯月,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

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

人们在保护密码方面进行了很多研究和思考。我们所用的密码就是挑战-应答式(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,那么请对哈希进行加密。

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

库与服务

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

如果你是PHP开发人员,则可以使用内置的password_hash函数,若使用Halite则更佳。请确保你使用的PHP 7.2及更高的版本。请注意,PHP的默认密码哈希算法是Bcrypt。

使用Halite进行哈希处理,然后对你的密码进行加密。该库需要一个密钥来存储密码。

PargonIE\Halite\Password::hash($_POST["password"], $encryptionKey);

可以考虑的第三方解决方案包括:

  • SimpleLogin

  • Okta

  • OpenID

使用合理的密码政策

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

  • 最小长度为12或16个字符。

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

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

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

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

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

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

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

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

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

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

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

鼓励用户使用良好的做法

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

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

补充

  • 使用TLS 1.2及更高版本(SSL协议的后续版本)保护通信。否则,敏感信息(密码)会被公开,即便采用最新的哈希也无济于事。

  • 不要通过手机短信实现多因素身份验证!SIM卡交换诈骗和诈骗电话很容易获取验证码。

原文:https://dev.to/nathilia_pierce/how-to-process-passwords-as-a-software-developer-3dkh

本文为 CSDN 翻译,转载请注明来源出处。

【End】

Python0基础到实战

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

热 文 推 荐 

☞只需三种手段,将传统的网站的性能提高 24%!

☞致 Python 初学者们!

☞微信引擎插件会对小游戏带来怎样的利好?(深度解读)

☞小米 9 年,雷军开启 AIoT 与 5G 超级互联网时代!

☞程序员正在消失?

☞5G套餐到底该不该换?看完你就明白啦!

☞他的公司1年令比特币暴跌数次,上榜福布斯捐10亿美元的跨界传奇

点击阅读原文,参加中国开发者现状调查!

你点的每个“在看”,我都认真当成了喜欢

程序员是如何处理密码的?相关推荐

  1. 程序员该如何处理人际关系

    程序员该如何处理人际关系,以下峰峰为您分享: 良好的人际关系是一个人获得幸福感的重要指标之一,如果不能维护好与家人.朋友.同事的关系,工作再出色也无法让你快乐. 很多人对程序员的印象都是内向.呆板.邋 ...

  2. 处理入参_看看优秀的程序员是如何处理NPE的

    点击上方 果汁简历 ,选择"置顶公众号" 优质文章,第一时间送达 西格玛的博客 https://urlify.cn/7j2uMz 在笔者几年的开发经验中,经常看到项目中存在到处空值 ...

  3. 优秀的程序员是如何处理技术 Bug 的?

    最近我的圈子里人们都在讨论"如何成为更优秀的程序员". 看了他们的讨论,我决定分享一下我关于"如何成为更优秀的程序员"的经验.我希望向别人介绍我认为有用的经验, ...

  4. 程序员客栈:程序员的经纪人_对于程序员:如何处理干扰和打扰

    程序员客栈:程序员的经纪人 您好亲爱的做白日梦的人,将咖啡因变成可待因! 我希望您不会因为一些破坏性通知或来自队友的推荐而来到这里,打扰您"检查他发现的这篇很棒的文章". 在接下来 ...

  5. 对于程序员:如何处理干扰和打扰

    您好亲爱的做白日梦的人,将咖啡因变成可待因! 我希望您不会因为一些破坏性通知或来自队友的推荐而来到这里,打扰您"检查他发现的这篇很棒的文章". 在接下来的几段中,我将为您提供简短扼 ...

  6. 看女程序员是如何处理男友出轨,网友回复更精彩

    阅读本文大概需要 1.4 分钟. 文章来源丨黑马程序员上海中心 你知不知道,普通女生梦见男朋友出轨会血液循环加速,造成内分泌失调,内分泌失调就心情就不好,心情不好就压抑,一压抑就打人--最后的结果都是 ...

  7. python写情书_Python程序员用文字加密的方式,给女程序员写情书,一周后牵手回家_TONOW...

    谁说程序员不浪漫,尤其是Python程序员,对文字加密后,写情书只有特定的人才能看懂. image 在某公司,有这样一位Python程序员,我们叫他小福,由于性格比较内向,一直没有女朋友,直到今年6月 ...

  8. 周鸿祎:把职业程序员进行到底

    周鸿祎:把职业程序员进行到底 <程序员>:非常谢谢您接受我们杂志的采访,在您十年的开发生涯中,曾经写了众多的软件产品,而3721中文网址系统更是拥有了广大的用户群,你一定对程序员这个职业有 ...

  9. Java输入语句怎么写?老程序员来告诉你

    你好,各位编程小伙伴们!今天我们来聊聊Java输入语句怎么写.相信大家都知道,Java是一种面向对象的编程语言,因此输入语句也是通过对象来实现的.那么,接下来我将为大家详细讲解Java输入语句的写法, ...

最新文章

  1. excel公式 某一个单元格等于另一个单元格的值_15个excel小技巧,简单易学,一看就会,收藏备用吧...
  2. python全栈开发总结_python全栈开发 * 12 知识点汇总 * 180530
  3. Windows系统顽固型文件清除方法
  4. 视频前初步认识UML
  5. Centos6.X安装smokeping
  6. Unity3D场景漫游以及碰撞防止反弹
  7. swift3.0 coreData的基本使用,简单实现增删改查
  8. carrot2_热门的错误人类天气机器人CARROT终于在Android上推出
  9. 前端:分享几个前端素材网站
  10. 半导体、芯片、集成电路、无尘车间具体释义及区别
  11. windows7 优化:readyboost总结
  12. 学习笔记-安全-MAC地址攻击
  13. 小学计算机教学笔记,信息技术在小学数学教学的运用
  14. unlink快速入门
  15. 嵌入式软件开发需要学习的知识点
  16. 网络传输介质和常见的设备
  17. ICMP重定向(ICMP redirect)实验分析
  18. 《你坏-大冰》阅读笔记
  19. 操作成功的提示信息动态添加
  20. 转载一篇RC电路分类

热门文章

  1. SlickEdit完美解析Qt4
  2. Linux用树形结构显示目录结构
  3. 几个有用的小程序(转载)
  4. 《机器学习实战》学习总结(二)决策树算法原理
  5. Spark:通过start-slaves.sh脚本启动worker报错:Permission denied
  6. 如何关闭快递收货隐私手机号 拼多多
  7. 矩池云上安装MATLAB R2020a遇到的坑
  8. 在矩池云中保存Conda环境
  9. os,shutil操作——批量修改文件名,移动文件,读取文件
  10. Centos 7安装docker实战