操作系统如何存储加密数据的密钥

How do OSes store keys for encrypted data

我想知道操作系统如何存储用于加密网站密码等内容的密钥。在网上搜索后我只找到了两个答案,但他们只提到服务提供商应该如何存储密码(他们应该存储哈希和盐),或者应用程序应该如何存储它们(他们应该使用提供加密的系统 API)。

但我想知道的是系统本身是如何保护加密密钥的。我知道有些设备有特殊的硬件来存储一些重要的密钥(比如 Apple 芯片中的 Secure Enclave)。但我想知道在普通计算机上如何完成。

我的意思是他们可能将其存储在磁盘上的某个位置,但他们是如何安全地存储它的,所以您不能只读取它?

几乎每个“安全凭证存储”的方式都是使用 随机 密钥加密磁盘上的凭证存储文件,并进一步用密码加密。没有密码,您将无法访问解密内容所需的密钥。您还可以将密钥存储在加密设备(例如 NFC 智能卡或 USB 加密狗)中,这些设备将受到自己的质询系统(密码、指纹等)的保护。

密码短语是通过 OS 元素直接从用户那里获得的,因此欺骗它(例如通过网站)会更难,而且没有应用程序需要直接访问凭据存储 –一旦用户解锁存储,应用程序就可以获得它最初存储的凭据,而且只有这些凭据。有多种机制可用,但一个常见的机制是使用发出查询的可执行文件的应用程序 ID——进一步限制可执行文件必须 运行 仅签名二进制元素(无库注入等),并且不受调试(OS 完全意识到这一点)。

至于OSes如何防止明文material在内存中的泄漏?哈。这完全是另一回事,有多种方法——防止数据溢出到交换、使用加密交换、仅解密立即需要的凭据并在不需要时立即丢弃它们、让内核参与管理在线在系统 运行ning 时存储(在 RAM 中),并使用内核 运行 所有需要访问的加密操作,例如非对称密码私钥。内核可以进一步将其委托给硬件设备,而 OS 提供统一的 API 无论私钥存储在哪里。这样的 API 存在于 OS X 和 Windows 上,当然也存在于 Linux 上。

由于 TPM 或 USB 设备(如加密读卡器)可以安全地存储私钥,因此使用个人证书而不是密码进行身份验证非常有用。然后,具有私钥的设备可以签署来自远程服务器(例如支持证书的网站)的质询,远程系统根据您的 public 检查质询的签名,因此不是敏感证书。旁白:我希望金融机构和日常网站支持个人证书而不是密码。它更安全,完全无忧,适用于所有平台——甚至是移动平台!