【发布时间】:2020-09-29 23:30:03
【问题描述】:
我想用我自己的公钥将我的应用程序发送给我的客户。当我的客户需要从我的应用程序中导出 IP 数据以进行调试时,将使用此密钥。这些数据只能由我自己读取。假设客户无法读取我的代码,也无法访问我的应用程序的内存,但能够识别应用程序内的我的公钥,并可能将其替换为他们的公钥,从而使他们可以读取导出。在开始导出之前,我有哪些选项可以确保我的公钥实际上是我自己的私钥的一对?
【问题讨论】:
-
将公钥存储在代码中。如果他们无法读取代码或访问进程内存,他们将如何更换密钥?如果可以,他们甚至可以在加密之前访问您的出口。
-
出于各种原因,我想避免烘烤它。我假设用户无法读取/写入代码,从而绕过安全检查或无法直接从内存中读取数据,以使事情变得更简单(或者可能更简单)。我想他们总是可以在我的代码上运行字符串,当然我可以通过在我的代码中进行更多的修改来尝试击败,但我想保留这个作为最后的选择。
-
如果公钥不在代码中(例如在文件或URL中),则用另一个私钥对公钥签名,存储公钥为那个在代码中,并在使用前验证公钥上的签名。这就是 PKI 信任树的工作方式。您甚至可以为此重新使用 X509 证书机制。
-
你的约束是矛盾的。如果他们无法读取您的代码,则他们无法读取您应用中的公钥,如果他们无法编写您的代码,则他们无法替换密钥。但是,正如@Seva 指出的那样,在代码中硬编码一些公钥就是它的完成方式。如果每个浏览器、操作系统和计算环境都可以承受这种限制,那么您也可以做到。
-
@SevaAlekseyev:我的真正意思是,无论你提供什么答案,OP 都会说它不够好。
标签: encryption public-key-encryption public-key pki