是否有一种方法可以安全地保存敏感数据,如AES加密密钥,在Windows?我想使数据仅对我的程序可用。我知道DPAPI (CryptProtectData/CryptUnprotectData)保护我的数据从其他用户的进程访问,但它不保护从不需要的程序,一旦它是由同一用户运行。
我希望有一些API可以自动使用调用进程图像文件的信息(如图像文件的哈希值)来保护/取消保护数据,但我在MSDN中找不到这样的API。
没有。数据属于用户,而不是程序。
对于操作系统来说,在用户请求时限制特定程序的特权是有一定意义的(程序只能使用用户总能力的一部分),但是如果一个程序拥有比运行它的用户更多的特权,则会破坏安全性。
一般来说,如果一个用户要执行该用户帐户不允许的操作,则需要一些具有更大权限的服务根据用户的请求执行该操作。例如,您可以使用这种方法来代表用户的程序使用解密密钥,并且每天只为该用户解密有限数量的数据。但是你不能只在用户使用你指定的程序时才释放密钥——即使在服务/请求模型中,用户也可以使用他们选择的任何程序来发出请求。
并且服务本身不能对有足够特权的用户(计算机的所有者)隐藏数据。如果您需要,那么服务和秘密数据需要保存在您控制的服务器上。