假设您使用的密码管理器具有现代密码管理器的所有可能特性:使用从主密码派生的密钥加密、自动填充、云或本地存储、浏览器扩展、web和本地应用程序、随机密码生成器、密码自动更改等。
现在,假设您可以在这两个选项之间进行选择:
最后,假设派生函数(用于加密密钥和强密码)所使用的整数足够高,在大多数设备上大约需要1秒。
如何在这两者之间做出选择?
他们的利弊是什么?
在这种情况下,哪一种是最安全的(涉及密码学和可用性)?
在做出这一选择时,是否需要考虑其他参数(特性、封闭的还是开源的等等)?
发布于 2018-11-13 13:41:05
我使用确定性密码管理器(pwd散列,您称之为密码派生)已经很长时间了,我不会建议任何人使用确定性密码管理器。我还为此写了一个博客帖子,但我将在这里总结我的主要问题:
主要的“优点”是确定性密码管理器不保持状态。然而,在互联网的某个地方存储状态变得越来越容易,无论是在Dropbox中的一个文件中,还是通过某种云服务。
发布于 2018-11-14 06:34:52
使用基于派生密码函数的密钥管理器没有实际优势。
如果您不能信任保险库正确使用AES和PBKDF2来保护密码数据库,那么您也不能信任它来保护派生算法的参数。在存储主密码或派生算法(当然,假设一个设计正确的密钥管理器)方面没有任何安全差别。
不同的站点和应用程序有不同的要求,如密码长度、特殊字符要求等,因此每个站点仍然需要一些额外的信息存储。它可能不是秘密数据,但仍然需要在这两个系统中进行管理。
密码轮换策略是不同的,并且可能是一个问题(或者至少需要在每个站点上存储更多的信息)。如果您使用多个客户端(例如,膝上型计算机和手机),则仍然必须像存储密码一样同步额外的数据。
仅派生的系统无法存储指定的密码。如果您处理外部系统(如企业密码管理器),则外部管理器可能负责旋转和生成新密码。
您提到的派生函数的按键延迟没有多大意义。密码管理器使用类似于PBKDF2的算法来防止在主密钥的初始解密时猜测主密码;在此之后解密的每个密码都需要微秒。注意,可以将相同的延迟添加到传统的密码管理器中。但是,在不影响攻击者的情况下,减慢您自己的系统是没有好处的。
派生功能在人类中很受欢迎,因为它们可以被记忆:在你的脑海中,很容易计算出你的密码是Cid123!@#googlE等等。但是现代计算机也可以为每个站点生成和存储高质量的随机字符串。在移动电话中的64GB+闪存芯片和计算机中的兆字节存储的时代,成千上万的网站密码所需的十几兆字节的存储空间根本不是一个实际的问题。而在基于云的存储和无处不在的蜂窝数据覆盖下,跨多个设备共享密码也不是问题。
https://security.stackexchange.com/questions/197593
复制相似问题