确保我正在使用我的软件而不是冒名顶替者。Windows,Java,硬件。

3

你能想到一种机制来确保我的软件(GUI应用程序)是我当前正在运行的软件,而不是一个骗子(作为黑盒子)。

这听起来像一个疯狂的要求,但这个软件决定了生命(它是一种医疗设备),如果有人坚持做坏事,他可以创建一个类似的软件,并确保以某种方式替换真正的版本。

对我来说,任何硬件/软件选项都是有效的。我针对的是Windows和Java语言。如果需要与另一个软件/硬件补充来使其一起工作,当然可以做到。

敬礼, Oren


1
您可以加密从硬件设备发送和接收的数据。 - MadProgrammer
这是一个很好的建议。我的应用程序实际上读取纯文本文件并在屏幕上显示结果。我可以请求对文件进行加密。但我仍然会先调查更强大的机制,就像oleksii下面所建议的那样。 - Oren
会有其他攻击向量,您应该遵循已建立的威胁建模框架,如 STRIDE。数字签名和验证对于这种特定的攻击足够了,但是还有其他攻击,您应该优先考虑哪个最容易实现并对您的软件影响最大。 - oleksii
1
将应用程序作为Java WebStart托管在安全服务器上。 - ring bearer
1个回答

2
你最好按照标准程序进行操作。简而言之,你可以这样做:
在你的电脑上:
  • 将你的代码放入一个 jar 文件中
  • 用私钥对 jar 文件进行数字签名
  • 将你的公钥分发到代码运行机器上
在代码运行机器上:
  • 设置安全策略,只允许使用有效数字签名运行你的应用程序
  • 导入公钥
详情请参考this tutorial

硬件方面怎么样? - User404
问题是:“你能想到一种机制来保证我的软件(GUI应用程序)是我当前运行的软件,而不是一个冒充者(作为黑匣子)。” 这种方法可以保证。不需要硬件交互。这并不意味着OP不应该防范其他类型的攻击,其中使用安全硬件将是必要的。只是针对这种特定的攻击,数字签名和验证就足够了。 - oleksii
我同意这是保护软件方面的有效选项。但是当处理这些类型的硬件(医疗设备,可能会被许多人物理访问)时,这将不足以确保安全(即不能100%保证安全)。 - User404
谢谢,是的,硬件只是建议,因为我想不到其他的东西。如果上述解决方案足够了,那我很满意。不过我有一个问题。教程还展示了如何设置安全策略,仅使用有效数字签名运行应用程序并导入公钥(在Windows上)?我还没有看到它,但是我快速浏览了一下。 - Oren
@User404 没错。在我看来,安全性不是一个二元选择(安全或不安全)。它是一个渐变过程,应该保护自己免受最有可能和最具破坏性的攻击。随意选择防御措施是一个糟糕的选择。 - oleksii
@Oren 没错。但是类似的方法在几乎所有其他成熟的操作系统上都可以使用。这是一个已知的问题,除非操作系统具有某些非常特定的目的,否则应该将此验证和策略执行机制嵌入其中。 - oleksii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接