8 个稳定版本
1.0.7 | 2023年6月15日 |
---|---|
1.0.6 | 2023年3月7日 |
1.0.5 | 2022年12月14日 |
1.0.4 | 2022年11月30日 |
#198 在 密码学 分类中
每月 36 次下载
125KB
2.5K SLoC
铁甲保护层
用于轻松对用户和组加密和解密文件的工具。类似于 GPG,但可大规模使用。
阅读我们的博客文章:Hacker Noon。
安装
Cargo
cargo install ironhide
Nix
Shell
nix run 'https://github.com/IronCoreLabs/ironhide.git'
源代码
需要在您的系统上设置 rust
。
cargo b --release
cp ./target/release/ironhide /usr/local/bin
示例用法
以下示例演示了如何创建一个新的铁甲保护层组,将该组中的文件加密,然后添加其他用户作为组的成员,使他们能够解密文件。
ironhide group create engineering
ironhide file encrypt -g engineering secrets.json
ironhide group add-member -u [email protected],[email protected],[email protected] engineering
此时,您将拥有一个 secrets.json.iron
文件,可以发送给您添加到组中的用户。要解密文件并显示其解密内容,他们需要运行
ironhide file decrypt secrets.json.iron -o -
假设在某个稍后的时间点,您不再希望 john@example.com
能够解密文件。您可以通过将其从组中移除来撤销他的解密权限。
ironhide group remove-member -u [email protected] engineering
此时,他将无法再解密 secrets.json.iron
文件。您无需对文件进行任何修改即可撤销 John 的访问权限。真是太棒了!
支持的平台
Linux x64 glibc | ✓ |
Linux x64 musl-libc | ✓ |
OSX x64 | ✓ |
OSX arm64 | ✓ |
Windows x64 | ✓ |
概述
铁甲保护层是一个命令行界面 (CLI) 工具,它允许对敏感文件进行可扩展和受控的管理。我们所说的“可扩展和受控”意味着什么?让我们逐一分析每个好处。
可扩展性
如果您曾经使用GPG来管理团队中敏感文件的访问权限,您会立即理解所遇到的可扩展性问题。通过GPG将文件加密给团队需要获取团队中每个用户的公钥。当您以后想要将新用户添加到该列表中(例如,当您聘请新团队成员时),您必须将加密文件取出,对其进行解密,然后重新加密给原始列表中的每个人以及新用户,最后将新加密的文件分发给所有人。撤销的流程甚至更糟糕。如果有人离开您的团队,您想要确保他们不再有访问权限,您必须取出加密文件,对其进行解密,然后重新加密给团队中除要删除的用户之外的每个人。然而,如果该用户仍然可以访问原始加密文件,什么也阻止不了他们解密——真是混乱。
Ironhide使用一种名为代理重新加密或变换加密的不同形式的密码学。使用变换加密,您能够创建密码组。组有自己的公钥-私钥对,文件加密到组而不是加密到单个用户。更好的是,组成员的管理可以独立于加密任何文件到组。新添加到组中的成员可以立即解密已经加密到组的任何文件。不再需要下载和解密文件来添加新成员。此外,撤销用户的访问权限就像从组中移除他们的成员资格一样简单。同样,原始加密文件无需修改。一旦成员从组中删除,他们将无法解密加密到组的任何文件,即使他们实际上可以检索加密文件。
受控
传统工具(如GPG)的另一个缺点是支持用户拥有的需要访问敏感文件的设备的泛滥。今天的用户有台式机、笔记本电脑、移动电话、平板电脑和其他设备,他们想用来访问敏感数据。使用像GPG这样的工具,您需要将您的私钥从设备复制到设备,以便它能够工作。如果其中一台设备丢失或被盗,这就会成为一个真正的问题。一旦有人获得了您的GPG私钥,游戏就结束了,因为他们可以解密您所有的加密文件。您的唯一选择是撤销该密钥,在此之后,您将无法解密之前可以访问的任何文件,或者生成新密钥,让某人解密所有敏感文件并将其重新加密到您的新公钥,这可能是不可行的。
Ironhide通过为需要解密访问权限的每个设备创建一个单独的公钥-私钥对来解决这个问题。所有文件都仅由这些设备密钥解密。您的主私钥只需要在每个设备上存在足够长的时间来生成这些设备密钥。生成之后,您的主私钥将从设备中删除。设备密钥可以通过Ironhide进行管理。如果您丢失了设备,您只需从任何其他授权设备中删除该设备的设备密钥即可。如果攻击者获得了该设备,他们仍然会有设备密钥对,但密钥将无法解密您任何数据。
设置和身份验证
设置Ironhide的第一步是进行身份验证以访问该工具。此身份验证流程会生成一套新的非对称密钥,并将其与您用于身份验证的互联网账户的电子邮件绑定。这允许其他用户使用您的电子邮件地址作为唯一标识符来授予您对文件的访问权限或邀请您加入组。
当您运行 ironhide login
时,我们将在您的机器上打开一个浏览器窗口,您可以通过 Auth0 进行身份验证。身份验证成功后,我们将生成一个与您的电子邮件地址关联的主公钥和私钥对。公钥将上传到 IronCore 密钥服务器,任何人都可以通过您的电子邮件找到它。然后我们将要求您提供一个密码,该密码用于加密和保护您的私钥。一旦您的私钥得到保护,我们将将其加密上传到 IronCore 密钥服务器进行保管存储。除了您之外,没有人能够访问 IronCore 密钥服务器上的您的加密私钥。您的私钥主密钥仅用于批准您想要使用 ironhide 的设备。任何您想要重新身份验证 ironhide 或在另一台机器上设置 ironhide 的时候,您都需要输入这个密码来解密您的私钥主密钥。
在创建账户时提供的密码用于授权您的账户设备。请勿忘记您的密码!如果您忘记了密码,将没有恢复选项!
一旦主公钥和私钥设置并保管好,我们将在您的计算机上生成一个单独的公钥和私钥对(您的设备密钥)。这个设备密钥对永远不会离开您的机器,并存储在您的家目录或系统密钥链中的 .iron
目录中。在您的设备密钥成功生成并存储后,您将能够运行 ironhide 提供的各种命令。
文件操作
可以使用 ironhide 的各种文件命令来管理文件。使用 ironhide file -h
查看可用的文件命令列表,包括描述和示例。当您加密文件时,它将自动加密到您的账户的公钥,以便您可以解密它。在执行 file encrypt
命令时,您还可以授予任意数量的用户和组解密权限。您还可以使用 file grant
命令在文件加密后授予其他用户和组的访问权限。
ironhide 只负责管理加密访问控制;也就是说,加密、解密和管理组和成员。您负责将加密文件分发到其他人可以访问的地方,这是在文件加密之后进行的。这可以通过现有的云文件托管解决方案(如 Google Drive、Box 或 Dropbox)或您现有的敏感文件管理方式来完成。
组
组是 ironhide 的特点。组是一组用户,他们应该对所有加密文件拥有相同的访问权限。管理组的成员资格是独立于将文件加密到组中进行的。这意味着当您将新成员添加到组中时,他们可以立即解密所有已加密到组的文件。这正是使 ironhide 比代码 gpg
具有无限可扩展性的原因。如果您有几个应该由相同一组人访问的文件,我们建议创建一个用户组,这样您就可以轻松地管理随时间变化的访问更改。
组有两种不同类型的用户:管理员和成员。管理员是控制组的用户。他们可以管理组的成员资格,更改组名,并删除组。管理员除非也是成员,否则没有权限解密加密到组的文件。成员是能够解密加密到组的文件的用户。将用户从组成员中删除会阻止该用户解密任何加密到组的文件。
当你创建一个新的群组时,它会为群组生成一对公钥和私钥,并自动将创建者添加为管理员和群组成员。如果你是群组管理员,当你向群组添加成员时,Ironhide会检索并解密群组私钥,并使用它生成一个“转换密钥”,允许对群组加密的密文转换为对群组成员加密的密文。这是通过一种称为转换加密的代理重加密类型实现的,并由免费的IronCore服务提供支持。IronCore服务无法授予访问权限,并且永远不会处于解密数据(或查看文件密文)的位置。所有访问授权都是可验证的安全的,并且受你控制。详细信息请参阅https://docs.ironcorelabs.com。
使用ironhide group -h
查看可用的群组命令列表,包括描述和示例。
用户和设备
Ironhide将你的设备集合(如笔记本电脑或台式机)管理得像它们是代表你的用户的群组成员一样,允许它们代表你使用本地生成的私钥进行加密和解密。如果设备丢失或被盗,可以撤销该设备上的密钥,使其无法解密用户数据。无需网络或其他对设备的访问。值得注意的是:如果文件被加密到群组中,那么该文件只能由该组成员的授权设备解密。中间私钥,如群组私钥,不能直接解密数据。这些密钥只能用于委派访问。有关更多信息,请参阅IronCore的文档:https://docs.ironcorelabs.com。
用户命令有两个目的:1)管理自己的授权设备;2)通过电子邮件地址查找系统中的其他用户。使用ironhide user -h
查看可用的用户和设备命令列表,包括描述和示例。
技术
Ironhide使用IronCore Labs Rust SDK构建。如果您想了解驱动Ironhide的底层技术,请访问我们的文档站点或联系我们了解更多信息。
注意
使用yansi
为终端输出着色,attohttpc
进行请求,clap
用于终端参数,以及promptly
用于非参数用户输入。
许可证
Ironhide受GNU Affero通用公共许可证许可。我们还提供商业许可证 - 发送邮件获取更多信息。
版权(c)2022 IronCore Labs,Inc。保留所有权利。
依赖关系
~33–50MB
~1M SLoC