0

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

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

我的意思是他们可能将它存储在磁盘上的某个地方,但是他们如何安全地做到这一点,所以你不能只是读取它?

4

1 回答 1

1

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

密码短语是由操作系统元素直接从用户那里获得的,因此欺骗它(例如通过网站)将更加困难,并且还因此没有应用程序需要直接访问凭证存储 - 一旦用户解锁存储,应用程序可以获取它最初存储的凭据,并且只有那些。有各种可用的机制,但一个常见的机制是使用发出查询的可执行文件的应用程序 ID - 进一步的限制是可执行文件必须仅运行已签名的二进制元素(无库注入等),并且不受调试(操作系统对此有充分的认识)。

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

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

于 2019-03-10T02:56:39.427 回答