gpt4 book ai didi

.net - 部署后,如何在我的 .NET 代码中使用 "protect"我的公钥?

转载 作者:行者123 更新时间:2023-12-04 18:04:15 25 4
gpt4 key购买 nike

我正在设计我的应用程序的许可部分。它将使用类似 JWT 的东西从我的许可服务器发出声明,声称我在工作站上运行的代码将用于启用功能。

服务器将使用其私钥对声明进行签名,客户端将使用公钥来验证签名。按照目前的情况,这将在 .NET 中使用 C# 完成。

如果攻击者可以用他们自己的公钥替换我服务器的公钥,他们就可以设置一个假服务器来发布许可声明并启用他们无权使用的功能。

我可以采取哪些步骤来使攻击者难以在 C# 中找到和替换公钥?

具体来说,我应该使用和信任一个健壮的混淆库吗?

我承认没有任何保护是绝对的。如果我允许我的代码在我无法控制的机器上运行,那么只要有足够的技能、动力和资源,攻击者就能够恢复数据。我会满足于让拥有个人或小公司资源的中等技能个人变得足够困难。

我计划调查的开源混淆器之一是 ConfuserEx .

编辑:

一些响应者认为我以错误的方式解决了这个问题。我恭敬地不同意。这个问题有点类似于攻击者将他们自己的证书添加到浏览器的证书分数中,并设置他们自己的流氓银行网站来欺骗浏览器。

然而,类比在这里失败了。问题不是PKI的经典问题,“最终用户的(受信任的)客户端如何验证对服务器的信任”,而更多的是在半敌对环境中的DRM。所考虑的风险不是用户的 secret 性或完整性丢失,而是核心应用程序在何处、何时以及如何运行的控制权。

到目前为止,我还没有考虑过 DRM,但我认为这是最好的描述,我承认这不太适合我。 DRM 通常会对用户产生负面影响,需要开发人员/提供商付出巨大努力,但最终还是会被破坏,有时甚至是微不足道的。

尽管如此,我觉得最初的问题仍然存在,因为我想采取合理的措施来保护我的工作。

最佳答案

您可以调查使用 Authenticode 对您的 PE 进行签名。这是一种被 Windows 识别的签名类型,与 .Net 强名称完全不同。您将使用 SignTool 使用以下内容对您的程序集进行签名:

signtool.exe sign /f mycert.pfx /p pfxpassword /t "http://timestamp.verisign.com/scripts/timstamp.dll" /d "my app" /du "http://mywebsite.com" "C:\path\to\assembly.dll"

然后您可以提取 Authenticode public key在运行时并对此进行验证。

这里的优点是您正在利用当前的 PKI 来保护您的应用程序 - 有人需要购买 Verisign 证书并分发整个证书(包括私钥),导致 Verisign 可能撤销他们的证书并导致“ key 生成器”停止处理下一个 CRL 更新。

显然,有人仍然可以将您的应用程序反编译为 MSIL 并完全删除检查 - 混淆不会阻止这一点,学习 MSIL 对于任何可以应用自己的人来说都是微不足道的。你根本无法在软件层面阻止盗版,你只能阻止它。我不会费心隐藏公钥,因为您当前的系统具有极好的威慑力。

如果您想惹恼客户并阻止 cookies ,您可以调查 hardware key.

关于.net - 部署后,如何在我的 .NET 代码中使用 "protect"我的公钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34593892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com