数字签名和防止黑客攻击

时间:2010-12-12 17:09:52

标签: java

我开发了一个使用数字签名的系统

该程序以 Java

编写
  • 提供者=“BC”
  • SIGNATURE_ALGORITHM =“SHA256withRSA”

  • 客户端持有公钥
  • 服务器持有私钥

许可证生成

  • 客户端从服务器请求许可
  • 服务器决定是否应该获得许可
  • 创建签名对象并将其发送回客户端

我想知道如何简单地破解这样的系统以及我可以做些什么来阻止它。

如何阻止用户反编译代码并插入自己的代码? (我知道proguard,但听说它可以解决)。我也有点担心用户创建虚假许可服务器并以某种方式修改源代码以指向他们的服务器(因为我将向公众发布许可和服务器代码)。

2 个答案:

答案 0 :(得分:3)

在处理加密和安全问题时 - 如果它对你有任何实际意义 - 永远不要使用任何自制的东西。

始终使用合适的库。

这个领域的漏洞和错误的余地是巨大的。您的应用程序安全性值得更好。

答案 1 :(得分:1)

  • 如何阻止用户反编译代码并插入自己的代码?

简短的回答是,你不能。你可以使它更难(例如混淆),但你根本无法阻止它。大多数计算机游戏在发布后几天内被破解的事实证明了这一点。

转向你的其余问题:设计看起来很好。很难防止伪造的许可服务器,但也许它不会是一个可能的攻击。攻击者可以从客户端删除许可证检查。

正如@Yuval指出的那样,滚动你自己的加密是一个坏主意,但你似乎是通过使用BouncyCastle以正确的方式做到这一点。只要确保你总是“签署你的意思”,即签署许可证本身,而不是加密许可证并签署加密版本。

BouncyCastle的轻量级API提供了用于签署任意数据blob的工具;我建议你使用它而不是Java笨重的“提供者”界面。

您还应该注意确保私钥的物理安全性。如果它受到损害,那么你真的遇到了麻烦。可能值得考虑一种机制,用于撤销受损许可并将其替换为新许可。