Apple 的协同设计实用程序与文件内容哈希

问题描述 投票:0回答:0

一方面,我编写了一个小命令行实用程序,它递归地计算目录中每个文件的

md5
校验和,然后将收集到的
md5
校验和相互比较,以有效报告该子目录中的哪些文件(几乎可以肯定)每个字节都是相同的。这个功能很好用。

另一方面,我有 Apple 的

codesign
实用程序,它使用我的 Apple 开发者 ID 对文件(通常是可执行文件或共享库)进行签名,以便未来的封闭应用程序(和 Gatekeeper)的下载者可以验证文件来自我,自从我对其进行代码签名以来,没有任何不法分子偷偷地修改过该文件。

问题是,后者打破了前者。

特别是,如果我有一个文件夹,其中包含各种未签名的

Blah.app
子文件夹,每个子文件夹中都有相关的共享库,我的 md5-hasher 实用程序将准确地告诉我哪个字节- for-byte 相同的共享库文件存在于多个应用程序中。
但是,如果我随后 

Contents/Frameworks

文件夹中的库和可执行文件(使它们可用而不惊吓 Gatekeeper),我发现之前相同的经过代码签名的文件不再相同;也就是说,在代码签名之后,它们的 md5 哈希值现在彼此不同,因为即使原始输入文件相同,附加的代码签名数据也不同。

我的工作假设是 

codesign

将“当前”时间戳(从受信任的时间戳服务器收集的)嵌入到它签名的每个文件中,并且由于

codesign
在不同的时间在不同的文件上调用,这意味着大多数(或所有)代码签名文件中嵌入了不同的时间戳,这解释了为什么之前相同的文件之后具有不同的 md5 校验和。
我的问题是,

codesign

产生不同的输出文件(尽管输入相同)的唯一原因,还是还有其他每次都会不同的事情?

如果时间戳是唯一的原因,那么有什么方法可以指定所有 

codesign

调用应用的单个时间戳,这样即使在

codesign
之后,我以前相同的文件仍然是逐字节相同的已签署两者/全部?
    

macos timestamp md5 codesign
© www.soinside.com 2019 - 2024. All rights reserved.