如何通过与相同的密钥库签名APK产生相同的结果?

问题描述 投票:0回答:1
到目前为止,我的构建过程产生了一个未签名的APK文件,现在我想与密钥库签名。但是,每次我重复此过程(基本上是原始未符号APK的副本),尽管使用了相同的密钥库,但我还是得到了不同的签名APK。

1dd63064294febffc20a4611b25ad619 machine1/app-release-unsigned.apk 1dd63064294febffc20a4611b25ad619 machine2/app-release-unsigned.apk 57adfd7c2a7240dc9c3ed79a525f71be machine1/app-release-signed.apk 91e9168e5d5242059408b4fdff0e34aa machine2/app-release-signed.apk

我知道当其他人(确实可以访问
My

KeyStore)需要重现构建时,将要重现的构建问题,他们将不得不求助于诸如SymignatureCopproying.,但是,我想复制构建,我确实可以访问原始密钥库。这仍然不可能吗?如果是,为什么?如果没有,我必须对我的build.gradleandroid { ... signingConfigs { release { storeFile file('../keystore.jks') storePassword 'secret-store-password' keyAlias 'release-key' keyPassword 'secret-key-password' } } buildTypes { release { signingConfig signingConfigs.release } } }

我至少有部分答案。
一般:签名过程包括一个时间戳和/或带有随机数据的时间戳和/或填充,这会导致不同的签名,最终会导致APK文件中的不同字节,并最终到达不同的校验和。 (请参阅

Https://crypto.stackexchange.com/questions/73076/why-does-rsassa-pss-pss-produce-different-signature-signature-east-east-each-each-each-even-even-if-i if-i if-i use-same-same-same-same和类似资源)
I无法确定是否有使此签名过程可重现的程序。从理论上讲,应该通过一定的时间戳达成共识并共享RNG种子 - 安全问题。
gradle build build.gradle apk code-signing
1个回答
0
投票

$ # Mismatching checksums due to signature $ md5sum * 57adfd7c2a7240dc9c3ed79a525f71be app-release-signed-machine1.apk 91e9168e5d5242059408b4fdff0e34aa app-release-signed-machine2.apk

从两个APK中删除签名非常简单:

$ cp app-release-signed-machine1.apk app-release-unsigned-machine1.apk $ zip -d app-release-unsigned-machine1.apk META-INF/CERT.SF META-INF/CERT.RSA META-INF/MANIFEST.MF deleting: META-INF/CERT.SF deleting: META-INF/CERT.RSA deleting: META-INF/MANIFEST.MF $ cp app-release-signed-machine2.apk app-release-unsigned-machine2.apk $ zip -d app-release-unsigned-machine2.apk META-INF/CERT.SF META-INF/CERT.RSA META-INF/MANIFEST.MF deleting: META-INF/CERT.SF deleting: META-INF/CERT.RSA deleting: META-INF/MANIFEST.MF

由此产生的未签名的APK应匹配:

$ md5sum * 57adfd7c2a7240dc9c3ed79a525f71be app-release-signed-machine1.apk 91e9168e5d5242059408b4fdff0e34aa app-release-signed-machine2.apk 1dd63064294febffc20a4611b25ad619 app-release-unsigned-machine1.apk 1dd63064294febffc20a4611b25ad619 app-release-unsigned-machine2.apk

因此,我们已经验证了构建(通过比较未签名的APK),并且可以选择要分发的签名的APK之一。 请参阅
Https://discuss.gradle.org/t/signing-breaks-reproducible-builds/50280/3


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.