java - 如何确保该文件是我创建的?

标签 java digital-signature

有时我的 Java 程序需要将 .dll 或 .so 文件从客户端计算机发送到远程计算机。是否有可能确保这个 .dll (.so) 文件确实是我创建的,而不是某个黑客创建的?首先,我认为数字签名(java.security包)将是我的第一选择,但我无法在远程计算机中验证签名,因为Java在那里可能不可用。还有其他选择吗?

最佳答案

您想要实现的目标是 non repudiation 。即:

  • A service that provides proof of the integrity (nobody has modified your file) and origin of data (you are the genuine creator of the file).
  • An authentication that can be asserted to be genuine with high assurance.

这与 Java 或 C# 或语言本身无关,它是一个不依赖于您所使用的编程语言的概念。 每种语言都有自己的类、库、机制......用于处理这些问题,其中一些比其他语言更好或更容易。

具体是Java,你可以开始看一下here 。您需要的步骤:

  • 生成一对 key (仅执行一次)。
  • 签署您在客户端创建的每个文档(确保没有人可以更改它、没有人可以取得它的所有权、没有人可以拒绝文件的所有权)。
  • 发送文档及其签名。
  • 在服务器端,根据所提供的文档验证签名的有效性。

如果您只想检查文件是否未被修改,您可以使用简单的 digest mecanism无需签名,只需创建哈希(不需要创建证书,验证签名...)并稍后验证即可工作,但请注意,仅使用哈希,您无法检查谁是文件的作者,只能该文件自创建哈希以来尚未被修改。

关于java - 如何确保该文件是我创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43271068/

相关文章:

java - 无法使用 WebCrypto 验证 ECDSA 签名

c++ - 加载 key 时 BER 解码错误

java - 无法使用 Gson 将对象(使用 Room DB)序列化为 json 字符串

java - 蓝牙设备(主)启动与 Android 的蓝牙连接

java - 使用安卓发送电子邮件

java - 堆栈/堆上的整数和整数数组存储

java - 找不到 R.layout - 应用名称。只有安卓布局

java - Java中从XMLSignature获取证书

c++ - 使用 ECDSA 或 DSA 对预先计算的哈希进行签名

oauth - 谷歌 OAuthGetRequestToken 返回 "signature_invalid"