我们是一家在客户场所内运行服务器的小型初创公司,某些文件需要在该服务器上保持加密。我们希望只有在插入特定 USB 驱动器(其中包含私钥)时才能进行解密。有没有免费的实现?我尝试使用 GPG,但它不允许临时存储私钥(与 SSH 不同)。
使用存储在 USB 驱动器上的密钥对文件进行基于密钥的加密?
信息安全
加密
密钥管理
智能卡
pkcs11
2021-08-13 17:12:37
2个回答
我不会使用这种方法。当您安装 USB 驱动器、从中读取文件等时,该数据的各种副本可能最终会存储在操作系统内存、日志等中。您将进行一场艰苦的战斗以确保其安全,尤其是如果攻击者拥有能够获取服务器的内存转储,或在服务器上植入恶意软件。
更好的方法是使用某种 USB 硬件加密模块,这样服务器本身就不需要接触私钥。这个想法是加密密钥存在于加密设备上并且永远不会离开它,您将要加密/解密的数据发送到设备,它会为您执行加密操作并返回结果。
使用这种方法,您可以保证服务器上不存在私钥缓存,因为服务器从一开始就没有接触过它,如果您拔出 USB 设备,服务器将失去执行加密操作的能力,我认为是你想要的。
您可以查找的一些技术/搜索词包括:
- USB智能卡
- 加密令牌
- PKCS#11 令牌
- TPM(可信平台模块)
- HSM(硬件安全模块)
您可能想要研究基于硬件的解决方案,例如 USB 智能卡、TPM 或轻量级 HSM,其中加密是在设备上完成的,这样服务器就不会真正接触到密钥。
一种可能性是使用 luks/cryptsetup 使用加密的分区或容器文件。您可以将解密密钥存储在拇指驱动器上的文件中,并将位置配置为/etc/crypttab
. 这样,加密分区只能在 USB 驱动器可用时挂载,但在您手动卸载它之前它将保持可读,即使您拔下 USB 驱动器也是如此。
当然,密钥可以很容易地从驱动器中复制出来,但是您必须忍受这一点,因为您在上面说过您不想使用任何智能卡。
其它你可能感兴趣的问题