密码是信息技术中最古老的身份验证方法,至今仍广泛使用。 las,如果所有互联网资源的密码都是不同且复杂的,那么根本不可能将其保存在内存中!在这里,密码管理器可以挽救一个人,自己承担这个任务:一个人只记住一个主密码,该密码可以访问其余所有密码。
我不喜欢现有的密码管理器:在不同的设备和操作系统之间同步密码数据库很不方便;而且,经常对管理器程序公开保护不力。一旦我阅读了有关密码学的文章,便想到了:为什么不创建一个密码管理器,而不是存储密码,而是将其计算出来?
想到的这个想法的第一个实现是加密哈希函数。乍一看,一切都很棒:我们选择了一个持久函数(例如224位版本的SHA-3),为其提供主密码qwerty和帐户类型vk,并立即从集合0123456789abcdef中获得56个字符。我立即发现了两个类似的项目:被黑客入侵和可能被黑客入侵。...这种方法存在一个很大的问题:密码哈希函数的设计除其他外,目的是对资源的需求如此之快和不需要,因此可以使用截获的密码针对CPU(相对较慢),GPU上的一个站点安排主密码的字典或完全蛮力攻击,FPGA(更快),ASIC(非常快)。为了在不使用赋值的情况下对流行的散列算法进行此类攻击,还可以使用彩虹表,这大大加快了CPU的骇客进程。
幸运的是,还有另一个实现选项-获取密钥的功能。简而言之,它们执行散列操作,但是速度相对较慢(例如,在常规处理器上为一秒),并且具有相对较大的资源消耗(例如,16 MB的RAM),从而使蛮力和蛮力攻击尽可能地困难。在我所了解的PBKDF2的现代功能中,bcrypt和scrypt看起来非常好:scrypt是基于前两个的经验而创建的,成功地反对了GPU和微电路(FPGA和ASIC)上的计算,并为任何任务的定制灵活性设计。我考虑过该项目的实施,但由于某种原因将其推后推。并且徒劳。
密码学家Nadim Kobeissi在JavaScript中制作了这样的密码管理器npwd(通过Node.JS作为桌面应用程序使用)。我将该实用程序安装在Linux和Windows计算机以及Linux笔记本电脑上,开始使用它,我真的很喜欢它。您在应用程序中输入唯一的主密码和帐户类型(例如“ twitter”),几秒钟后,剪贴板中已经包含一个专门为此帐户计算的复杂密码,此外,通过以下方式破解您的主密码(阅读:所有密码)一个帐户的密码将非常非常困难。
但是也有一个问题。 Windows版本确实在几秒钟后发出了密码,但是在Linux下(包括在同一台计算机上!)花了15秒进行计算,这很烦人。起初,我只是减少了一个常数,使主密码的安全性降低了,但是后来我想到了-为什么不用C重写应用程序,因为它可能会更快地工作!想到我为这个项目制定了很长时间的计划,我感到特别鼓舞,但是我进展缓慢,有人在我之前实施了它。
经过几天的休闲工作,我制作了自己的密码管理器cpwd与原版完全兼容。好玩!经过一些优化后,我设法达到了所需的高速。我没有尝试在Windows下移植cpwd,但这应该很容易。在该项目的GitHub页面上,我收集了指向学术界及其他类似项目的链接的集合-事实证明,这个想法实际上已经很久了。
当然不是灵丹妙药,但对我有用。在使用过程中,我遇到了一个问题:有些站点对密码有有趣的要求,例如“不超过20个字符”,“必须有大写字母,小写字母,数字和特殊字符”,结果,生成的npwd / cpwd密码有时需要手动操作才能输入。 ...幸运的是,这样的站点并不多。
原文发表在我的博客(7.05.8.15)上。 5年过去了,我仍然使用此实用程序。