Raspberry Pi Zero 与 ARC 构建随身携带的加密管理器

在过去的几天里,我一直在研究一个新的项目,这个项目是为了非常特殊的需求和理由而开发的。

  • 我需要安全地(加密)储存我的密码,敏感文件,笔记等。
  • 我需要从任何地方使用各种可能的设备(桌面,手机,终端)访问它们。
  • 我需要这些对象同步所有设备。
  • 我不想用“云”。
  • 我不想为服务器付钱。
  • 我不想启用端口转发,并使用 DynDNS 或其他类似软件自己托管它。

所以我写了 ARC:

当然,已经有很多解决方案,主要涉及使用 passsshgit 和各种同步方式,但是:

  • 要么你会在 GitHub(“云”)上托管这些东西,要么你需要一个服务器。
  • 你将需要一个终端来访问这些数据或复杂的程序……祝你好运,当你匆忙,只有你的手机。
  • 您可以存储和访问的数据类型,以及与之交互的数据非常有限。

我决定尝试的方法是不同的。

Arc 是 arcd 的秘密管理器,这是一个用 Go 编写的 RESTful API 服务器,用于在 sqlite 数据库文件中公开加密记录的读写原语。

并且 arc,客户端应用程序在 html5 和 javascript 中实现,它在每个能运行 html5 的浏览器中运行,并由 arcd 自身提供服务。

只有客户端才能生成记录( Arc 依靠 CryptoJS 进行 AES 加密和 PRNG),并提供了一个直观的管理系统,该系统配备了 UI 部件,包括:

  • 简单的文本输入。
  • 简单的文本区域。
  • 自定义文件附件(在作为二进制记录上载之前,文件在客户端加密)。
  • 带预览和全屏模式的 markdown 编辑器。
  • 包含密码强度估算的密码字段和随机密码生成器

可以创建元素(带有可选的过期日期),使用弧进行排列和编辑,并安全地存储在 arcd 上。

这个想法是使用 Ar 作为您的密码,加密笔记,文件和所有秘密事物的单个管理器,同时托管在一些像 Raspberry Pi 这样的备用硬件上,并通过现代浏览器访问每个设备的弧线 ,所以我们来看看如何在 Raspberry Pi Zero 上进行配置,以便为您的秘密提供安全便携的设置!:d

硬件设置

注意:下面的说明是 Raspberry Pi Zero 上的具体说明,但是相同的程序可以在任何类似的硬件上工作(比如另一个 RPi 或者 USB Armory),RPi Zero 就是我发现的更方便,更便宜的。

首先,格式化一个 Micro SD 卡,像往常一样安装 Raspbian(下载 ISO,验证,DD,安装),接下来我们需要进行一些调整,以便通过其 USB 端口实现以太网连接。

加载 RPi 的 boot 分区后,编辑 /path/to/pi/boot/config.txt 并追加:

dtoverlay=dwc2

然后编辑 /path/to/pi/boot/cmdline.txt 并在 rootwaitquiet 参数之间插入:

modules-load=dwc2,g_ether

最终你的 cmdline.txt 文件将如下所示:

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=abcdefab-01 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether 

最后,我们需要让 Raspbian 在启动时启用 SSH,以便我们可以在需要时连接到它,为此只需创建一个 /path/to/pi/boot/ssh 空文件。

卸下 MicroSD,插入到 RPi Zero,并使用 USB 数据端口(不收费的,我们不需要它)插入到计算机;)。

如果一切正常,你的计算机现在应该检测到一个新的网络接口,为了连接它只是给它分配任何静态 IP 地址(在 Ubuntu 和类似的,设置连接类型为仅链接本地 Link-Local Only ),重新启动接口和 RPi Zero 应该可达:

ping raspberrypi.local

让我们完成开发板的设置,通过 SSH 连接到它:

ssh pi@raspberrypi.local

像往常一样扩展文件系统,更改默认的 SSH 密码,只启用私钥 SSH 认证,复制您的证书,等等...至于硬件部分,我们准备好了:)

软件设置

现在最简单的方法就是直接在 Raspberry Pi 上构建 arcd 服务器,以便生成一个 ARMv6 二进制文件,一旦你在 RPi 上安装了 Go(不一定是你要用作秘密存储的那个),只需按照在 GitHub 上的说明编译服务器。

编译完成后,编辑配置文件:

cd /path/to/arc/repo/arcd
cp sample_config.json config.json
vim config.json

并更改 address ,以便我们能够连接到 Arc 网页界面:

{
    "address": "",
    "port": 8080,
    "username": "PUT_YOUR_USERNAME_HERE",
    "password": "PUT_YOUR_PASSWORD_HERE",
    "database": "~/arc.db",
    "token_duration": 60,
    "scheduler": {
        "enabled": true,
        "period": 10
    },
    "tls": {
        "enabled": false,
        "pem": "/some/file.pem",
        "key": "/some/file.key"
    }
}

现在只需将 arc 文件夹,新的 config.json 文件和 ARM 编译的 arcd 服务器复制到 RPi Zero 上:

scp -r arc arcd_arm config.json pi@raspberrypi.local:/home/pi/

SSH 到开发板,并确保一切正常工作:

ssh pi@raspberrypi.local
mv arcd_arm arcd
./arcd -config config.json -app arc

打开浏览器并转到 http://raspberrypi.local:8080/ ,只要将 RPi Zero 插入 USB 端口,您现在应该可以登录并使用 ARC 了 :)

(确保在启动时通过编辑 /etc/rc.local 或其他来启动 arcd

安全考虑

  • 这应该是显而易见的,但在专用硬件上的物理隔离数据更安全。
  • 所有的数据都是加密的客户端,这意味着物理上存储在 RPi Zero 上的所有数据都使用 AES 进行加密,确保使用强大的加密密钥,密钥越强,数据在丢失硬件的情况下越安全。
  • 为了获得更高的安全性,您可以将 arc.db 服务器数据库存储在 LUKS 卷上,您需要在启动时手动解锁。
  • 您应该生成自己的自签名证书,并在 Arctls 配置中使用它,以便使用 https 而不是 http
  • 不要启用从您的电脑到 RPi Zero 的任何类型的连接共享,我们不希望外部世界的任何东西到达我们的安全存储,理想情况下,如果使用 W 型号,也应该禁用无线接口。
  • 访问 API 本身需要用户名和密码,但是他们不会解密记录,这也是为什么要求加密密钥的原因。您可以使用相同的API 凭证登录,但具有不同的加密密钥,您将使用新密钥创建记录,并且无法解密使用其他 AES 密钥创建的其他记录。
  • 元素可以配置过期日期,使用它是一个很好的方法来记住一个给定的密码是多少年,当有时间来改变它(或只是加密提醒^ _ ^)有某种提醒。

结论

这个项目像往常一样在我的 GitHub 上可用,在第一次稳定发布之前还有一些工作要做,但我很接近:)

保持安全,玩得开心...

原文链接:https://www.evilsocket.net/2017/12/07/DIY-Portable-Secrets-Manager-with-a-RPI-Zero-and-the-ARC-Project/