【发布时间】:2014-12-04 16:48:36
【问题描述】:
我正在寻找一种对共享库进行数字签名的方法,以便验证该库的真实性。我提出的解决方案是对库进行哈希处理并将其存储在加载和调用库的 Java 文件中,但问题是如果将来更新库,这将失败(除非所有使用该库的应用程序也更新)。
我在想也许可以改为将已用私钥签名的库的哈希插入到 .so 文件的末尾,以便可以信任此签名的哈希并且不需要存储在调用应用程序中以供验证。 Android API 中是否对此提供任何支持,并且以这种方式将数据插入到库中可能会导致库加载器出现问题?
【问题讨论】:
-
在对象中嵌入签名效果不佳,因为它会更改对象,从而更改验证期间计算的哈希值。通常,它将与验证者一起分发、添加到容器中或以验证者知道忽略的方式附加。您想要在应用程序中构建的是验证签名所需的公钥。但请注意 - 根据您分发库的方式 - 将未经批准的库获取到系统上的攻击向量也可能是可以修补您的验证逻辑的攻击向量。
标签: java android java-native-interface shared-libraries digital-signature