我想知道操作系统如何存储用于加密网站密码之类的密钥。在网上搜索后,我仅找到两个答案,但它们仅涉及服务提供商应如何存储密码(应存储哈希和盐)或应用程序应如何存储密码(应使用提供加密的系统API)。
但是我想知道的是系统本身如何保护加密密钥。我知道有些设备具有特殊的硬件来存储一些重要的密钥(例如Apple芯片中的Secure Enclave)。但我想知道如何在普通计算机上完成该操作。
我的意思是他们可能将其存储在磁盘上的某个位置,但是他们如何安全地执行操作以使您不能只读取它呢?
答案 0 :(得分:1)
几乎所有“安全凭证存储”的处理方式都是使用 random 密钥对磁盘上的凭证存储文件进行加密,并进一步使用密码短语对其进行加密。没有密码,您将无法访问解密内容所需的密钥。您还可以将密钥存储在加密设备(例如NFC智能卡或USB加密狗)中,这些密钥将受到其自身的质询系统(密码,指纹等)的保护。
密码是通过OS元素直接从用户获得的,因此欺骗(例如,通过网站)将变得更加困难,并且因此,一旦用户解锁存储,则没有应用程序需要直接访问凭证存储,应用程序可以获取最初存储的凭据,并且仅获取那些凭据。有多种可用的机制,但是一种常见的机制是使用发出查询的可执行文件的应用程序ID –进一步限制该可执行文件必须仅运行带符号的二进制元素(无库注入等),并且不受该限制。调试(操作系统对此完全了解)。
至于OS如何防止明文材料保留在内存中而泄漏?哈哈这完全是另外一回事了,有多种方法–防止数据溢出到交换中,使用加密交换,仅解密立即需要的凭据,并在不需要时立即丢弃它们,包括内核管理在线在系统运行时存储(在RAM中),并使用内核来运行所有需要访问的加密操作,例如非对称密码私钥。内核可以将其进一步委托给硬件设备,而OS则提供了统一的API,无论私钥存储在哪里。这样的API在OS X和Windows上都存在,当然在Linux上也存在。
由于TPM或加密卡读卡器之类的USB设备可以安全地存储私钥,因此使用个人证书而不是密码进行身份验证确实很有用。然后,具有私钥的设备可以从远程服务器(例如,支持证书的网站)对质询进行签名,然后远程系统会根据您的公开而不是敏感的证书检查质询的签名。此处的旁注:我希望金融机构和日常网站都支持个人证书而不是密码。它更安全,完全没有麻烦,并且可以在所有平台上使用,甚至可以在移动平台上使用!