65.9K
CodeProject 正在变化。 阅读更多。
Home

KeePass 密码管理器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (754投票s)

2003年11月21日

GPL3

12分钟阅读

viewsIcon

1604991

downloadIcon

33292

KeePass是一款免费、开源、轻量级且易于使用的密码管理器。

注意:如果您喜欢这个项目,请不要忘记投票支持它!

Main Window

目录

引言

如今,您需要记住很多密码。您需要密码才能登录Windows网络、访问电子邮件帐户、FTP密码、在线密码(如CodeProject会员帐户)等等。这个列表无穷无尽。此外,您应该为每个帐户使用不同的密码,因为如果您处处使用相同的密码,一旦有人获取了这个密码,您就会遇到麻烦……严重的麻烦。他将能够访问您的电子邮件帐户、网站等。这是无法想象的。

但是,谁能记住所有这些密码呢?没有人能,但KeePass可以。KeePass是一款免费、开源、轻量级且易于使用的密码管理器。有了这个工具,您只需要记住一个强大的主密码和/或随身携带一个密钥文件(更多信息稍后介绍)。

该程序将密码存储在一个高度加密的数据库中。该数据库仅包含一个文件,因此可以轻松地在计算机之间传输,并且易于创建备份。

KeePass支持分组,您可以将条目分拣到其中。组的示例包括“Windows”、“网络”、“Internet”和“网上银行”,但您可以自由添加和删除组。

KeePass 1.x是一款Windows应用程序。它使用Microsoft Visual C++和MFC类进行开发。不需要.NET Framework,也不需要任何其他特殊DLL。因此,它应该可以在所有Windows操作系统上运行,而无需安装任何额外的库。

KeePass根据GNU通用公共许可证v2分发。有关详细信息,请参阅可下载的ZIP包中的License.txt文件。

主密码和密钥文件

KeePass将您的密码安全地存储在加密的数据库中。该数据库使用主密码和/或密钥文件进行加密。

Entering the Master Key

如果您使用主密码,您只需要记住这一个密码(为了提供良好的安全性,该密码应该足够长且复杂)。

KeePass还可以从密钥文件中获取(部分)主密钥(不要与数据库文件混淆)。密钥文件可以是任何文件,但建议使用包含至少256位熵的文件。KeePass可以为您生成这样的文件。密钥文件应单独存储,例如存储在USB闪存驱动器上。如果它与数据库文件一起存储,则无法提供任何保护(攻击者将同时获得两个文件)。

为了获得最佳安全性,您可以结合使用这两种方法:您可以同时使用主密码和密钥文件,即两者都需要解密数据库文件。这提供了双因素安全性:主密码是您*知道*的东西,而密钥文件是您*拥有*的东西。

如果您忘记了主密码或丢失了密钥文件,则无法解密数据库,其中存储的所有数据都将丢失。数据库使用非常安全的算法(AES和Twofish)进行加密,并且没有后门,也没有万能密钥可以打开您的数据库。

入门

现在我将引导您完成KeePass的使用步骤。如果您有经验并且不需要这个,只需跳过本节。

下载二进制ZIP文件并解压缩。KeePass无需安装;只需解压缩ZIP文件即可使用。

因此,让我们启动KeePass.exe文件。您将看到两个灰色列表、一个预览区域、一个菜单栏和一个状态栏。

KeePass默认使用英语。如果您需要其他语言,请访问KeePass网站并下载那里提供的翻译(有40多种语言可供选择)。将翻译包解压缩到KeePass应用程序目录中的Languages文件夹中,启动KeePass,选择“View”(视图)→“Change Language...”(更改语言...)并选择您的语言。

让我们创建一个新数据库:选择“File”(文件)→“New”(新建)。您将看到一个对话框,您可以在其中输入此数据库的主密码(请参阅上面的截图)。如果您想使用密钥文件,请指定其位置(如果您选择现有文件,KeePass会询问您是否要重用或覆盖它)。

创建新数据库后,您将看到一个几乎为空的屏幕。在左侧的树状视图中,您会看到一些系统自动为您创建的标准组:“General”(通用)、“Windows”(Windows)、“Network”(网络)、“Internet”(Internet)、“eMail”(电子邮件)和“Homebanking”(网上银行)。如果愿意,您可以删除这些默认组并自由创建自己的组。在以下截图中,我创建了一些示例组和条目

Main Window

右侧的列表视图目前在您的情况下是空的(您不会看到像上面截图中的示例条目)。那是条目列表。每个密码都会得到自己的条目。支持各种字段,例如标题、用户名、URL、密码、注释、到期时间、文件附件、图标等。

正如您在截图中看到的,您可以添加、编辑/查看、移动和删除条目。您可以搜索整个数据库或仅搜索当前选定的组中的条目。上下文菜单还允许您将用户名或密码复制到剪贴板(完成后会自动清除,几秒钟后),或访问条目的URL。

您的第一步是添加一个条目。在右侧的条目列表中右键单击并选择“Add Entry”(添加条目)。将打开以下对话框

Adding an Entry

我认为这很自明。当您单击“●●●”按钮时,密码将显示为纯文本,即不被“●”符号隐藏。

当您决定使用KeePass时,我建议让KeePass使用内置密码生成器为您生成密码。生成的密码比人类“生成”的密码偏差小。密码生成对话框也非常自明,您应该能够轻松理解各种选项的作用。

Built-In Password Generator

功能

到目前为止,您应该能够使用KeePass的基本功能了。现在我将介绍KeePass的一些更高级的功能。

传输密码

有多种方法可以将KeePass中存储的密码传输到其他窗口。第一种也是最简单的方法是将其复制到剪贴板。为此,只需在主条目列表中的特定字段上双击即可。例如:如果您想复制条目的密码,请将鼠标光标移到主条目列表中该条目的密码字段上并双击;然后密码将被复制到剪贴板。KeePass有一个选项可以在一段时间后自动清除剪贴板;这可以防止敏感数据留在剪贴板中。

第二种方法是拖放。与第一种方法一样,将鼠标光标移到要使用的字段上,按住鼠标左键,然后将数据拖到目标窗口。

第三种也是最强大的方法是自动输入。自动输入会为您输入用户名、密码和其他数据到其他窗口。默认的自动输入序列是{USERNAME}{TAB}{PASSWORD}{ENTER},即先输入用户名,然后按Tab键,再输入密码,最后按Enter键。但是,此序列可为每个条目自定义。这使得自动输入功能适用于您将看到的任何窗口和Web表单。有两种方法可以调用自动输入:

  • 显式调用。选择要自动输入的条目,右键单击它,然后单击“Perform Auto-Type”(执行自动输入)。KeePass会将前一个窗口带到前台并在该窗口中自动输入。
  • 全局热键。这是最强大的方法。您让KeePass在后台运行。当您访问需要登录的网站时,只需按下热键(默认为Ctrl+Alt+A)。根据目标窗口的标题,KeePass会找到正确的条目并将其自动输入到目标窗口。

导出、导入、打印、插件

KeePass可以将数据库导出为TXT、HTML、XML和CSV文件。它可以导入各种格式(如CSV、CodeWallet TXT、PwSafe v2 TXT和Personal Vault TXT)。

当然,您也可以打印数据库内容。打印前,您可以定义要显示的字段(标题、用户名等)。

KeePass具有插件架构。您可以从KeePass网站获取许多插件。这些插件提供了与其他文件格式的附加导入/导出功能、集成功能、自动数据库备份功能等等。

开源和其他平台

最棒的是:它完全免费,并且您可以完全访问其源代码!有各种KeePass的跨平台移植版本;请访问KeePass网站查看移植列表。

安全性

所有数据库都使用高级加密标准(AES/Rijndael,一个使用256位密钥的128位分组密码)或Twofish算法(另一个使用256位密钥的128位分组密码)进行加密。我选择了CBC分组密码模式。每次保存数据库时,都会随机生成一个128位的初始化向量(IV)。

为了生成AES/Twofish的256位密钥,主密钥组件(主密码和/或密钥文件的内容)与随机盐(每次保存数据库时随机生成并保存在其中;这可以防止预计算密钥)一起,使用加密安全的哈希算法SHA-256进行哈希,然后使用密钥派生函数(见下文)对哈希进行转换。

我们需要生成几个加密安全的随机字节(用于加密IV、主密钥盐等)。为此,KeePass首先从多个源收集熵:当前滴答计数、性能计数器、系统日期/时间、鼠标光标位置、内存状态(可用虚拟内存等)、活动窗口、剪贴板所有者、各种进程和线程ID、各种窗口焦点句柄(活动窗口、桌面等)、窗口消息堆栈、进程堆状态、进程启动信息以及几个系统信息结构。此熵被收集到一个池中。为了生成随机字节,该池与一个计数器一起使用SHA-256进行哈希,形成随机字节。然后增加计数器;这样我们就可以生成所需的任意数量的安全随机字节。

每次启动KeePass时,它都会执行快速自检,其中加密算法会与其正确的测试向量进行比较测试。

防止字典和猜测攻击

KeePass提供了一些防止猜测和字典攻击的保护措施。您无法完全阻止字典和猜测攻击;没有什么可以阻止攻击者仅仅尝试可能的密钥并查看数据库是否能解密。然而,我们可以做的是(KeePass也这样做了)让它更困难:使用基于AES的密钥派生函数进行N轮密钥转换,为每个密钥增加一个恒定的时间因子,这样攻击者就需要花费更多的时间。

默认情况下,KeePass使用N = 60000。有了这个数字,就可以在处理器较慢的系统(如手机等)上以可接受的时间打开数据库;PC通常可以执行更多的轮次。如果您仅在快速设备上使用KeePass,则可以增加轮次数量(您可以在数据库设置对话框中进行设置)。

进程内存保护

在KeePass运行时,进程内存中的敏感数据使用Windows数据保护API(DPAPI)CryptProtectMemory函数进行加密。有关详细信息(包括功能的确切工作方式、限制等),请参阅进程内存保护

锁定工作区

当您锁定KeePass工作区时会发生什么?为什么有时会提示您先保存数据库?很简单:锁定KeePass工作区会完全关闭数据库,但会记住上次的视图设置(即您选择的组和条目、列表位置等)。这提供了最大的安全性(解锁工作区与正常打开数据库一样困难)并防止数据丢失(工作区锁定期间,计算机崩溃不成问题)。

内部结构

有一个名为CPwManager的密码管理器类,它处理所有与数据库相关的操作。它提供了编辑组和条目、移动它们等的函数。这个核心类是可移植的;它不依赖任何Windows系统特定的函数。

CPwExport类处理所有导出功能。它可以导出整个数据库或仅导出一个组。

CNewRandom类实现了上面描述的加密安全伪随机数生成器。

文件MemUtil.*包含一些与内存相关的函数,例如用于安全擦除缓冲区的函数。在StrUtil.*中,可以找到与字符串相关的函数(例如用于擦除CString对象的函数)。与应用程序、进程和文件系统相关的杂项功能在AppUtil.*中(例如用于安全删除文件的函数)。

常见问题解答(FAQ)

这是一个简化的FAQ版本。您可以在此处找到完整的FAQ:技术FAQ

我该如何提供帮助?

捐赠,进行翻译,测试新版本并提交错误报告,以及传播KeePass。

电子邮件字段?

简而言之:我不会实现它,因为它会降低可用性。您可以在此处找到完整答案:技术FAQ

什么是“安全编辑控件”?

安全编辑控件是特殊的密码编辑控件,可以抵抗窗口监视器和内存转储器的检测。有关更多信息,请参见:安全编辑控件

KeePass 1.x 和 2.x 之间有什么区别?

请参阅版本比较开发状态FAQ

鸣谢

在此,我想感谢一些人为他们的支持、想法和源代码贡献(排名不分先后)

  • Szymon Stefanek - 他实现了Rijndael密码的C++版本。
  • Brian Gladman - 他实现了SHA-2(256/384/512)哈希算法的C版本。
  • Alvaro Mendez - 用于验证编辑控件的MFC类(CAMSEdit)。
  • Brent Corkum - 他的XP风格菜单(BCMenu)。
  • Davide Calabro - 他的CButtonST类。
  • Zorglab, Chris Maunder, Alexander Bischofberger, James White, Descartes Systems Sciences Inc. - 颜色选择器的MFC类(CColourPickerXP)。
  • Peter Mares - 他的侧边栏窗口类(CKCSideBannerWnd)。
  • Chris Maunder - 他的CSystemTray类。
  • Hans Dietrich, Chris Maunder - XHyperLink类。
  • Lallous - CSendKeys引擎。
  • PJ Naughter - 单例检查类。
  • Bill Rubin - 命令行C++类。
  • Boost Developers - Boost C++ 库。
  • 所有翻译人员
  • Paul Tannard, Wellread1, Michael Scheer - 提出功能建议、报告错误并在论坛中帮助他人。
  • Daniel Turini - 建议“KeePass”作为项目名称。
  • Christopher Bolin, Victor Andreyenkov - KeePass主程序的精美图标。
  • David Vignoni - 精美的图标主题“Nuvola”(根据LGPL许可证免费使用)。

历史

您可以在KeePass网站上找到最新消息和版本历史记录。

最后的话

我将在此CodeProject上发布KeePass 1.x最重要的主要版本。有关KeePass 2.x和最新的不稳定版本,请访问KeePass网站。

就是这样。我希望这个工具能让您的生活变得轻松一些 :-)

© . All rights reserved.