kaz*_*zza 6 java android android-8.0-oreo
我见过一些 Android 应用程序使用ANDROID_ID(SSAID - 安全设置 Android ID)作为轻量级工具来计算只有该应用程序/设备/用户知道的加密密钥,以保护静态数据。虽然我看不出任何明显的弱点(假设设备没有根植,因为所有ANDROID_IDs 都可以枚举),但文档没有涉及这个主题(建议反对它的事件)。因此,我想知道是否有人知道该计划有任何问题?
——
下面是一些关于为什么它在非 root 设备上看起来是安全的动机。
——
Android 开发人员文档(针对 API > 26)说明了有关ANDROID_ID的以下内容:
在 Android 8.0(API 级别 26)和更高版本的平台上,一个 64 位数字(表示为十六进制字符串),对于应用签名密钥、用户和设备的每个组合都是唯一的。ANDROID_ID 的值受签名密钥和用户的限制。如果在设备上执行恢复出厂设置或 APK 签名密钥更改,则该值可能会更改。
博客文章中还有以下内容:
在 O 中,Android ID(Settings.Secure.ANDROID_ID 或 SSAID)对于每个应用程序和设备上的每个用户都有不同的值。需要设备范围标识符的开发人员应改用可重置的标识符,例如广告 ID,为用户提供更多控制权。广告 ID 还提供面向用户的设置以限制广告跟踪。另外在 Android O 中:
- 只要软件包名称和签名密钥相同,ANDROID_ID 值在软件包卸载/重新安装时就不会改变。应用程序可以依靠此值在重新安装时保持状态。
- 如果应用安装在运行较早版本 Android 的设备上,当设备更新到 Android O 时,Android ID 保持不变,除非卸载并重新安装该应用。
- 仅当设备恢复出厂设置或签名密钥在卸载和重新安装事件之间轮换时,Android ID 值才会更改。
- 此更改仅适用于随附 Google Play 服务和广告 ID 的设备制造商。其他设备制造商可能会提供替代的可重置 ID 或继续提供 ANDROID ID。
而且,查看了计算SSAID的SettingsProvider.java的源码,好像流程如下:
settings_ssaid.xml(ANDROID_ID从这个文件中查找未来的请求)。因此,安全性似乎完全取决于步骤 1 中生成的密钥(也存储在 中settings_ssaid.xml)的保密性。