问题描述
我正在实现一个程序,该程序涉及在证书存储区中保存和读取证书。
通过以下两个API完成证书的打开和读取:
CertOpenStore()
CertFindCertificateInStore()
例如,证书(A)由程序存储在证书存储中,并且我希望用户无法与存储证书的存储进行交互(手动添加,删除证书...)。证书的删除或添加仅由程序实现。 那我该怎么办呢?
谢谢。
解决方法
基本上,您无法完全使用它,因为它类似于DRM问题。用户始终可以对应用程序进行逆向工程并创建自己的运行时。
您可以尝试在存储上执行MAC,并将密钥保留在您的应用程序中。但是,如果用户找到了密钥,则可以更改您的商店并可以创建新的身份验证标签。
最后,您需要为应用程序提供一个受信任的执行环境(TEE)或某种访问权限(即,在可以更改文件的特定用户下运行,而普通用户只能读取该文件)。