是否可以签署档案?


15

我玩过openssl来制作pub / prv密钥,并创建文件的签名并对其进行了验证。我玩弄了Cryptophane(Windows gnupg前端),并听说了密钥服务器+玩了签名文本。

但是,我从未签署过文件存档。如果我要发布档案(7z,rar或zip,没关系),并且我希望我的用户或软件能够检查该档案是否已签名,我该怎么做?显然,公钥需要公开。但是,将签名添加到存档中使我感到困扰。是否有任何软件+存档允许我签名和验证压缩的存档文件?


为什么要签名?您可以只创建一个SHA1哈希,并使该哈希可供您的客户/用户检查。这足以确认文件未被篡改。尽管您的用户确实需要具有验证哈希的功能,但是比验证签名更困难。
BJ292

@ BJ292:您如何验证哈希没有被篡改?
user1686

@grawity-不确定我是否遵循-篡改哈希值有什么意义?我向您发送了一个文件和哈希值-您从该文件重新创建了哈希值并确认它匹配-这确认该文件未更改。在大多数情况下,这是大多数人想要的-确认文件从A到B保持不变。当然,这就是OP所追求的。
BJ292

3
@ BJ292:您假设OP仅与意外数据损坏有关。这个问题尚未说明(或否认),但是OP正在询问数字签名,因此我假设需要防止故意(可能是恶意的)数据修改。
user1686

1
@ BJ292:文件将镜像到其他ppls站点。我想对它们进行签名,以便所有镜子都

Answers:


10

一种常见的方法是在文件中创建分离的签名.sig(通常gpg -b很少使用– X.509 进行PGP签名),并在相同位置提供两个文件。例如:

ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2
ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2.sig

可以与任何类型的文件一起使用,但是用户必须使用手动验证签名gpg --verify


不幸的是,在目前使用的那些格式中没有一个档案格式(我知道)支持使用PGP或X.509的内置签名。(这不包括CAB,CAB在Windows内部使用,但实际上在其他地方都没有使用,并且签名非常复杂)。WinRAR 4能够使用专有格式添加“真实性验证”记录,但它使用WinRAR许可证作为签名密钥,该密钥已被反复破解。(更新:由于不安全,此功能已从 WinRAR 5 中删除。)


在Windows(以及后来的Mac OS X)上,可以创建“自解压档案”(一种数字签名的可执行文件,从其内部提取档案),例如,这就是Windows上的软件安装程序的工作方式。但是,SFX仅限于单个操作系统,因此它们仅适合分发程序,而不适合分发文档或图片。(Java程序可以签名并且可以跨平台,但是很少有系统仍然具有Java运行时。)


2

使用Java jar工具构建的jar归档实际上是zip归档,并且有一个工具jarsigner对其进行签名。

以下是一些有用的链接:

首先看起来有点复杂(“我需要keeytool做什么?还有什么?”),但是很容易按照简单的方式执行解决问题的步骤。有用。然后,您可以更深入地研究问题。


的确是这样(XPI归档文件也以非常相似的方式 ZIP进行签名),但是AFAIK仅Java Runtime实际验证了 JAR签名,并且需要进行手动验证使其不如GnuPG实用。
user1686 2012年

你是什​​么意思manual verification?有什么选择?一个自动弹出窗口,每10分钟会进行一次验证?操作系统是否应在启动时自动验证存档?收到存档时-是从CD,电子邮件附件,下载中...吗?它应该是您的病毒扫描程序中的插件吗?
用户未知

我的意思是在提取之前/期间由归档提取工具执行验证,或者在程序执行期间通过OS /运行时进行验证。例如,在安装软件包之前,.deb必须先验证软件包签名dpkg而无需用户采取任何其他措施。
user1686 2012年

@grawity:签名的applet,压缩在一个jar中,在执行之前已经过验证。要生成最小的shell脚本,将验证(jarsigner)与提取(jar)相结合将是微不足道的。
用户未知

第三个链接“签名jar文件上的Wiki”已损坏
Jason S

0

当然,每次安装签名软件时,都在验证签名档案。要创建一个,您应该使用开发人员使用的相同打包工具。有一些权衡,易用性与跨平台兼容性。我想不出一种制作跨平台签名的自解压存档的方法。

对于Windows,创建IExpress程序工具一个自解压压缩文件,然后使用signtool.exe签署,描述在这里。当您的用户双击文件时,他们将拥有熟悉的窗口,确认对话框将您标识为档案的发布者。


-1

您可以通过以下两个命令使用jarsigner对文件进行签名:

keytool -genkeypair -alias <key-alias> -keyalg RSA -keystore <keystore> -validity 180

jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore <keystore> <file-to-sign> <key-alias>

您需要在您的PC中安装Java JDK。

-第一个命令在当前目录中创建密钥存储(假设它不存在)。它使用算法SHA-256生成公用/专用密钥对。

-第二个文件使用相同的算法,密钥库和第一个文件生成的别名对文件签名。

要验证使用密钥库签名的文件,可以运行以下命令:

jarsigner -keystore <keystore> -verify -verbose -certs <file-signed>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.