如何使用 Nitrokey USB 智能卡保护您的 Linux 环境

您所在的位置:网站首页 硬盘加密智能卡 如何使用 Nitrokey USB 智能卡保护您的 Linux 环境

如何使用 Nitrokey USB 智能卡保护您的 Linux 环境

2024-07-15 09:36| 来源: 网络整理| 查看: 265

如何使用 Nitrokey USB 智能卡保护您的 Linux 环境

随着在线安全风险的不断增加,简单的一步式安全措施已不再足够,人们诉诸多层安全措施来阻止对其数字资产和在线隐私日益复杂的攻击。金融部门和其他企业环境中经常采用的一种高级安全防御形式是基于硬件的保护,其中防篡改物理安全密钥(也称为安全令牌或硬件令牌)充当秘密软件密钥或登录凭据的保护层。基于硬件的安全性在各种环境中都很有用,例如实现双因素身份验证、VPN 访问控制、安全密码库等。

如果您是 DIY 类型的人,您可能会想使用现成的 USB 拇指驱动器创建自己的基于 USB 的安全密钥。然而,商用 USB 驱动器本质上很容易受到专门针对普通 USB 固件的可重新编程性质的病毒或恶意软件的攻击。就我个人而言,我不会用价值 5 美元的 USB 拇指驱动器来信任我的私钥。

最近,我偶然发现了基于 USB 的安全密钥硬件,称为 Nitrokey(以前称为“Crypto Stick”),并且非常喜欢它。 Nitrokey 并不是一款便宜的 USB 记忆棒,但其价格范围(20-50 美元)仍然可以承受,而且鉴于其多功能的安全功能,我认为它的价格并不算过高。在这篇文章中,我将具体讨论 Nitrokey Pro 模型并展示其实际用例。

什么是 Nitrokey Pro?

简而言之,Nitrokey Pro 是一款防篡改、受 PIN 保护、带有 USB 接口的安全密钥存储硬件。它具有嵌入式智能卡,可实现各种开放安全标准,例如 OpenPGP 协议、S/MIME、HOTP(基于 HMAC 的一次性密码)和 TOTP(基于时间的一次性密码)。因此,一旦您将密钥存储在 Nitrokey Pro 上,它就能够在硬件本身上进行签名、加密、解密和身份验证,因此您的密钥永远不会暴露给智能卡所连接的计算机。当您需要在不受信任(可能充满恶意软件)的第三方计算机上运行各种安全任务时,这可以让您高枕无忧。 Nitrokey Pro 生成的 OATH 一次性密码与 Gmail、Dropbox、AWS 和许多其他网站兼容。 Nitrokey Pro 还内置了一个安全的密码库,如果您不信任任何软件密码管理器,您可以将难以记住的登录凭据存储在防篡改硬件上。

除了所有这些优点之外,我最喜欢 Nitrokey 的是它的开放性。正如他们所说,专有安全并不安全,这促使 Nitrokey 的人员向开源社区开放其产品的硬件和软件,以便可以对它们进行审核和审查是否存在任何安全缺陷。您可以在其官方 Github 存储库中访问所有 Nitrokey 智能卡系列的100% 开放 PCB 硬件设计、固件和软件源代码。

在本文的其余部分中,我将向您展示如何在 Linux 计算机上设置 Nitrokey Pro,并演示如何在几个实际场景中使用它。

在 Linux 上设置 Nitrokey Pro

要在 Linux 上设置 Nitrokey Pro,首先将卡插入计算机的 USB 端口。如果您运行的是最新的 Linux 发行版,那么找到该卡所需的 USB 设备驱动程序应该没有问题。使用 lsusb 命令验证 Nitrokey Pro 在您的系统上是否可见,在这种情况下,该卡将显示为 Clay Logic。

$ lsusb

验证 USB 设备被识别后,您需要为 Nitrokey Pro USB 设备设置 udev 规则,并重新启动 udev 服务,如下所示。

$ wget https://www.nitrokey.com/sites/default/files/40-nitrokey.rules $ sudo cp 40-nitrokey.rules /etc/udev/rules.d/ $ sudo service udev restart

接下来,下载并安装 Nitrokey 应用程序。如果您想使用 Nitrokey Pro 生成一次性密码或将其用作密码管理器,则需要此专用 GUI 应用程序。然而,在大多数其他情况下,不需要 Nitrokey 应用程序来操作 Nitrokey USB 密钥。

要在 Linux 桌面上安装 Nitrokey 应用程序:

在基于 Debian 的系统上: $ sudo apt-get install gdebi-core $ sudo gdebi nitrokey-XXXXXX.deb 在基于 Red Hat 的系统上: $ sudo rpm -ivh nitrokey-XXXXXX.rpm

安装 Nitrokey 应用程序后,按如下方式启动应用程序。

$ nitrokey-app

如果应用程序成功连接到 Nitrokey USB 硬件,它将显示 Nitrokey 已连接 桌面通知。

Nitrokey Pro 智能卡受两个 PIN 保护:用户 PIN(默认:123456)和管理员 PIN(默认:12345678)。请小心使用这些 PIN,因为超过 3 次错误输入用户 PIN 将会导致您无法使用该卡(除非管理员 PIN 覆盖它),而超过 3 次错误输入管理员 PIN 将会对 USB 密钥硬件造成不可挽回的损坏。这种严格的基于 PIN 码的硬件保护至关重要,以防智能卡落入坏人之手。

一旦 Nitrokey Pro 可以在您的系统上访问,首先要做的就是更改默认用户/管理员 PIN。为此,右键单击桌面顶部的 Nitrokey 图标,然后转到配置菜单。在那里您可以更改用户和管理员 PIN 码。

请注意,PIN 管理也可以使用 gpg 命令完成,我将在稍后演示。

使用 GnuPG 管理 Nitrokey Pro

作为兼容标准的 OpenPGP 卡,Nitrokey Pro 实际上可以使用 GnuPG 进行管理。在硬件上执行的大部分安全功能(例如,生成/存储 GPG 密钥、加密/解密文件、签署消息等)都可以由 gpg 命令控制。因此,即使它连接到无桌面服务器,您也应该能够毫无问题地管理 Nitrokey Pro。

例如,键入以下 gpg 命令可查看有关已连接 USB 安全密钥的信息。

$ gpg --card-status

与在 Nitrokey 应用程序上更改用户/管理员 PIN 的方式类似,您也可以使用 gpg 命令更改 PIN:

$ gpg --change-pin

现在,为了测试其安全功能,我们首先将 GPG 密钥存储在 Nitrokey USB 硬件上。请注意,您可以将现有的 GPG 密钥移至 Nitrokey 卡。在这里,让我们从头开始创建新的 GPG 密钥。

为此,请键入命令:

$ gpg --card-edit

在 gpg/card> 提示符下,输入 admin 并按 ENTER。然后您将进入管理模式,您可以在其中执行各种管理任务,包括密钥生成。输入 help 将显示所有可用的管理命令。

要生成新的 GPG 密钥,请输入 generate 命令。这将引导您完成一系列标准步骤来生成用于签名、加密和身份验证的主密钥和子密钥。

密钥生成完成后,输入list命令查看生成的密钥。您还可以通过运行 gpg 命令查看相同的信息:

$ gpg --card-status

您将看到上面生成的三个不同的子项。签名密钥是用作主密钥的仅签名子密钥。加密密钥是用于加密的子密钥。最后,认证密钥不直接被GnuPG使用,而是用于其他认证目的,例如PAM认证和SSH登录。

生成 GPG 密钥后,建议在现有 PGP 密钥服务器上发布您的公钥,以便其他人在想要与您安全通信时可以使用您的电子邮件地址或密钥 ID 下载您的密钥。以下命令会将您的公钥上传到密钥服务器。 D7F6C175 是您的公钥的密钥 ID,可在上述密钥信息中找到。将密钥 ID 替换为您自己的。

$ gpg --keyserver keys.gnupg.net --send-keys D7F6C175

现在我们准备使用 Nitrokey Pro 上存储的 GPG 密钥。在本文的其余部分中,我将介绍如何使用 Nitrokey Pro 智能卡的几个示例。

Nitrokey Pro 用例#1:文件加密和解密

最简单的用例是使用 USB 硬件上存储的加密密钥来加密和解密文件。

有人使用您的 GPG 用户 ID(例如,[email )对文件进行加密后向您发送了一个加密文件,如下所示。

$ gpg -r [email  -e secure.txt

收到文件后,只要将存储密钥的 Nitrokey 卡插入计算机,就可以使用 -d 选项对其进行解密。

$ gpg -d secure.txt.gpg

请注意,系统会要求您输入 Nitrokey 用户 PIN(不是 GPG 密钥密码)进行解密。如果没有 Nitrokey 卡,您将遇到以下错误。

gpg: sending command `SCD PKDECRYPT' to agent failed: ec=5.99 gpg: encrypted with 2048-bit RSA key, ID E04A33F0, created 2015-12-21 "Dan Nanni " gpg: public key decryption failed: general error gpg: decryption failed: secret key not available Nitrokey Pro 用例#2:SSH 身份验证

您可以使用 Nitrokey Pro 智能卡进行 SSH 身份验证。在这种情况下,您使用 Nitrokey 卡上存储的 OpenPGP 密钥作为 SSH 密钥,并依靠 gpg-agent 从 Nitrokey 卡检索 OpenPGP 密钥以进行 SSH 登录。然而,默认情况下,OpenSSH 客户端会尝试从无法直接访问智能卡硬件的 ssh-agent 获取私钥。因此,我们需要在基于密钥的 SSH 身份验证期间将 gpg-agent 配置为 ssh-agent 的直接替代品。

为此,我们首先需要在 gpg-agent 中启用 SSH 支持。在 ~/.gnupg/gpg-agent.conf 中添加以下行。

enable-ssh-support

然后将以下行添加到 ~/.bashrc 中。

envfile="$HOME/.gnupg/gpg-agent.env" if [[ -e "$envfile" ]] && kill -0 $(grep SSH_AGENT_PID "$envfile" | cut -d= -f 2) 2>/dev/null; then eval "$(cat "$envfile")" else eval "$(gpg-agent --daemon --write-env-file "$envfile")" fi export SSH_AUTH_SOCK

还建议禁用 GNOME 密钥环(如果您正在使用它),因为它可能会干扰 gpg-agent。

现在打开一个新终端(或重新加载 ~/.bashrc),并尝试键入以下命令作为测试。

$ gpg-agent

如果 gpg-agent 设置正确,您应该会看到显示 gpg-agent: gpg-agent running and available 的输出。

接下来,使用以下命令找出加密子密钥 ID。 ECD8F07F 是您自己的 GPG 密钥 ID,可以在 gpg --card-status 命令的输出中找到。用你自己的替换它。

$ gpg --edit-key ECD8F07F

输出列出了与您的密钥 ID 关联的所有可用子密钥。标有 usage 的最后一列指示每个子密钥的作用:S 表示签名,C 表示证书,A 表示身份验证,E 表示加密。

在此示例中,用于身份验证的子密钥 ID 为 81398BBF。

使用 gpgkey2ssh 命令,从身份验证子密钥 ID 生成兼容的 authorized_key 字符串:

$ gpgkey2ssh 81398BBF > authorized_keys

验证 authorized_keys 的内容是否与以下命令的输出相同。

$ ssh-add -L

确认后,将 authorized_keys 移动到您想要通过 SSH 访问的远程主机上的 ~/.ssh/authorized_keys。确保~/.ssh/authorized_keys的权限设置为0600。

要测试基于密钥的 SSH 身份验证,您应该在远程主机的 SSH 服务器上禁用密码身份验证。

最后,检查当 Nitrokey 智能卡插入本地计算机时,您是否可以通过 SSH 连接到远程主机。如果 gpg-agent 尚未从卡中缓存您的私钥,系统会要求您输入 Nitrokey 用户 PIN。如果您尝试在没有 Nitrokey 卡的情况下进行 SSH,您将看到以下错误。

Permission denied (publickey). Nitrokey Pro 用例 #3:Dropbox 网站登录的双因素身份验证

Nitrokey Pro 智能卡的另一个用例是一次性密码 (OTP) 生成。特别是,Nitrokey Pro 能够生成基于时间的 OTP 或基于 HMAC 的 OTP,与当今许多商业网站支持的双因素身份验证兼容。一次性安全代码将由您之前安装的 Nitrokey 应用程序生成。

作为示例,我将向您展示如何在 Dropbox 网站上使用 Nitrokey Pro 设置双因素身份验证。

首先,登录您的 Dropbox 帐户,并启用两步验证。选择移动应用选项(不是短信选项)来接收安全代码。最终您将使用 Nitrokey 应用程序,而不是移动应用程序。

然后,Dropbox 网站将启用基于时间的身份验证并生成 base32 格式的密钥。

打开 Nitrokey 应用程序的配置设置,然后转到OTP和密码安全菜单。在OTP Slot Configuration选项卡下,启用TOTP模式,选择可用的TOTP插槽(例如插槽1),并将上述密钥复制到Secret Key空白处。

最后一步,Dropbox 会要求您输入身份验证器应用生成的代码。只需右键单击 Nitrokey 应用程序图标,然后选择 Passwords 菜单下的 Dropbox。

然后将生成一次性密码并自动复制到剪贴板。

现在将剪贴板中存储的 OTP 粘贴到 Dropbox 页面的安全码空白处,即可完成两步验证设置。现在,每当您需要一次性安全代码来登录 Dropbox 时,请使用 Nitrokey 应用程序获取一个。

结论

在本教程中,我介绍了一款名为 Nitrokey Pro 的基于 USB 的智能卡及其几个用例。除了我介绍的三个示例之外,Nitrokey Pro 还有许多其他用例(例如,PAM 身份验证、电子邮件加密、硬盘加密、VPN 访问、PKI 证书和密码管理器)。 Nitrokey 网站维护了有关 Linux、Windows 和 MacOS X 平台的这些用例的非常好的文档,因此如果您感兴趣,我鼓励您查看它们。

正如我在一开始提到的,USB Nitrokey 的一个强大卖点是其透明的开发过程。 100% 开放硬件和 100% 开源软件允许其产品接受社区驱动的代码审查和渗透测试的审查,这使它们更值得信赖,从而可以快速发现任何漏洞并进行安全更新,并促进与其他应用程序的集成。您觉得他们的产品怎么样?在评论部分分享你的想法。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3