【问题标题】:How to sign an application package (APK) using OpenPGP (Yubikey)?如何使用 OpenPGP (Yubikey) 对应用程序包 (APK) 进行签名?
【发布时间】:2018-06-15 11:04:20
【问题描述】:

我想使用存储在我 Yubikey 的 OpenPGP 小程序中的 OpenPGP 密钥签署 APK 文件。

我知道,有一个solution for APK signing using Yubikey's PIV applet。但是,PIV 小程序只能处理密钥长度最多为 2048 位的 RSA 密钥。

BSI TR-02102-1 Cryptographic Mechanisms Technical Guidelines(英文翻译版)声明从 2023 年开始(或用于 2023 年及以后的使用),只允许密钥长度大于或等于 3000 位的 RSA 密钥。第一个可用的 标准 密钥长度为 3072 位。我必须符合BSI TR-02102

这总结为要求,我必须使用 3072 位的密钥长度和 RSA 作为算法,我不能使用 PIV APK 唱歌方法。

有没有办法使用 Yubikey 4 的 OpenPGP 小程序使用标准程序或使用自定义程序对 APK 文件进行签名?

注意:私钥在 Yubikey 上生成,不可导出。这是由于 Yubikey 的设计和我的最低安全要求。所以导出和对话是不可能的。

【问题讨论】:

  • 由于签名发生在 USB 设备上,因此密钥大小限制很奇怪。您确定您的 Java 版本不是限制导出的旧版本(RSA 密钥大于 2048 在此类版本中受到限制)。确保使用当前不受限制的 Java 版本(例如 6u181、7u171、8u161)或安装 JCE Unlimited Strength 策略文件。
  • 这个(限制)与Java无关。 PIV 标准仅明确描述了 1024 和 2048 个 RSA 密钥,没有其他内容(不允许使用其他内容)。这个问题是关于如何通过 Yubikey OpenPGP 小程序设置 Yubikey 和 Keytool 之间的通信。
  • 恕我直言,使用 yubico-piv-tool 等过时的 apk 签名工具比用于签名的密钥更安全。过时的工具只支持已弃用的? v1 签名、apk 签名 v2 具有一些主要的安全优势,AFAIR Google 正在发布v3 signature。无论如何,您可以使用多个签名对 APK 进行签名,这可能是您的解决方案吗?
  • 听起来很有希望,反正我不能使用它,因为正在使用 Android 6 设备(仅限 v1)。
  • 签名 v2 对于旧设备是 AFAIK 透明的,因此您可以使用它。旧设备检查 v1,新设备使用 v2。到 2023 年,您的密钥将不再被使用,Android 6 设备将不再是问题。

标签: java android apk code-signing jar-signing


【解决方案1】:

使用支持 RSA 3072 4096 的 USB 令牌或 SmartCard 进行个人身份验证?甚至 Yubikey 5 也不支持 PIV / FIPS 201-2(这是一个智能卡仿真)。我已经搜索了一段时间,但似乎几乎没有任何硬件支持它(以防它甚至适用);我能找到的替代品是RSA SecurIDNitrokey Pro 2Gemalto IDBridge K50

使用 APK 签名 v2v3上传密钥 的强度可能甚至没有那么重要......它说 RSA 1024, RSA 2048, RSA 4096, RSA 8192, RSA 16384 正在支持,但它没有说哪个release key 的实际强度,这将是其中相当有趣的部分。 PKCS1 V1.5 编码格式的V3SchemeSigner 提示;但找出答案的唯一方法是通过运行ssh-keygen -lf ./rsa_key.pub(显示公钥文件的指纹,也显示密钥的强度)从 Play 商店检查包的公钥。

security.stackexchange.com 可能会提供更多线索。

【讨论】:

  • 好主意。 Windows 仅支持,他们的网站说“CRYPTOMATE64 已经结束生命周期。”...
猜你喜欢
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 2019-11-30
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
相关资源
最近更新 更多