标题几乎说明了一切。我正在使用Ubuntu,我非常担心我的git存储库被篡改,所以我想确保我是唯一一个可以提交的人。我知道你可以在本地签署你的提交,但如果你的电脑上有恶意软件,它可以很容易地获得你的私钥(我认为(。所以我想让每一个本地提交都需要2FA。有什么办法可以做到这一点吗?或者,除了本地签名,还有其他更安全的选择吗?
Git在本地机器上不提供2FA,因为用户被隐式信任可以在自己的存储库中创建提交。但是,如果将commit.gpgsign
设置为true
,则可以使用数字OpenPGP签名对所有提交进行签名。
您可以使用设备上的OpenPGP密钥,例如YubiKey,该密钥在签名之前需要交互。YubiCo的网站记录了如何做到这一点。
然而话虽如此,如果你不信任自己的电脑,你在电脑上做任何事情都会很困难,因为你所做的一切都必须在另一台值得信赖的机器上进行验证,因为你自己机器上的恶意软件可能会欺骗你,让你看到事情与原来不同。因此,如果这是您的问题,在尝试添加提交签名之前,您需要先解决它。如果需要的话,你可以启动一个可信的live CD或live USB映像(例如,Debian live CD(来完成某些工作。
我相信你想要的东西被命名为"代码签名";。2FA无法实现,因为2FA仅用于身份验证。想象一下:
- 对于要提交的整个代码库,您生成了所有文件的SHA256摘要
- 你拿着钥匙在摘要上签名
- 您将其存储在另一个文件中并添加到提交中
- 稍后,您可以验证代码库是否符合您的预期
这不会阻止";回复攻击";,但我认为这应该符合你的要求。
我不知道有什么工具可以帮助你实现这一点,但如果你也不需要与他人共享密钥来验证完整性,你可以使用对称密钥的简单HMAC。
为了练习:您可以查看(并签署?(来自可信设备的提交
- 将您的提交推送到共享服务器(GitHub?(
- 从另一个受信任的设备:获取并查看它们
- 采取措施将已审核的提交标记为可信:
- 将它们推送到受损害的计算机无法写入的repo
- 或使用确认提交内容的签名标记对其进行标记(您需要防止在受损计算机上使用的帐户篡改这些标记,以避免删除它们或将它们变成无效签名(