C++ 如何向其他用户隐藏秘密?

C++ 如何向其他用户隐藏秘密?,c++,security,encryption,passwords,C++,Security,Encryption,Passwords,我想存储一个用户密钥(必须以明文形式保存才能发送到服务器),以便同一台机器的其他用户即使可以访问该程序也无法访问该密钥。实现这一点的最佳方法是什么(平台独立是最好的,第二个是一个小的平台依赖部分(例如,一些函数getCurrentUserSecret()),最后一个是完全依赖于平台的解决方案,如Windows Data Protection API)。既然必须以明文形式传输,为什么不直接以明文形式存储呢,在只有相关用户具有文件读取权限的位置。我不认为有任何方法可以以管理员/root无法绕过的方式

我想存储一个用户密钥(必须以明文形式保存才能发送到服务器),以便同一台机器的其他用户即使可以访问该程序也无法访问该密钥。实现这一点的最佳方法是什么(平台独立是最好的,第二个是一个小的平台依赖部分(例如,一些函数
getCurrentUserSecret()
),最后一个是完全依赖于平台的解决方案,如Windows Data Protection API)。

既然必须以明文形式传输,为什么不直接以明文形式存储呢,在只有相关用户具有文件读取权限的位置。我不认为有任何方法可以以管理员/root无法绕过的方式解决您的问题,即使使用加密(例如,除非您让用户输入另一个密码来解密存储的明文密码)


编辑以供评论:我不知道有任何操作系统会在登录时计算备用“哈希”密码值,并将其存储在内存中。即使是这样,root仍然可以访问该内存以获取散列值,操作系统必须特别注意确保任何此类块的内存永远无法进行交换。

加密内存有什么问题?请用户提供一个?它用于根据用户当前登录的系统自动登录功能。让用户输入密码将无法达到该功能的目的。以明文形式发送密码可以消除在本地加密密码带来的任何潜在安全收益。同一网络上的任何人都可以阅读它,这可能会向比当前机器用户更广泛的受众公开“秘密”。@jpaugh它不是以明文形式发送的。它通过SSL/HTTPS发送(但明文密码对服务器可见);有一种方法可以做到这一点,即使root用户也无法访问。原因是您假定root用户可以访问所有信息。不与root共享的关键信息是用户密码的明文。如果操作系统要使用MD5(或某些其他哈希,其结果未存储在磁盘上),这将生成一个足够的对称密钥,以对每个用户的数据进行加密/解密。@chacham15那么用户可以在下次输入操作系统密码吗?是的,在登录时输入(此功能消除了“登录两次”的冗余)。我想要的只是访问此“用户特定哈希”以用作对称密钥的方法。对于编辑:这就是Windows DPAPI的工作方式。我不知道是否有*nix等价物(这就是问题所在)。此外,当您说“root用户仍可以访问该内存”时,这将要求用户实际登录(这至少是它不具备的一些保护,在windows上是一个可靠的赌注,因为没有与root等效的功能)。@chacham15:在windows上,Administrators组的任何成员都完全不受限制(超级用户)访问系统,就像Unix和Linux系统上的
root
一样。访问可能不是直接的,但是有权加载新内核驱动程序的用户可以做任何事情。您是对的,即使管理员也必须等待用户登录,才能访问使用用户密码加密的数据,但这并不是很重要让我放心。