这可能是一个常见的问题,以多种形式被问过,但我没有看到过这样的提问方式,我想听听如何处理。
我正在开发一个应用程序,需要在设备上存储第三方网络服务的凭据。我希望这些凭据被加密,但我也不希望将种子存储在代码/设备上,以防止可能的劫持。该应用程序还支持使用Google云备份功能进行备份,进一步需要加密。
我的想法是,如果我能找到一个唯一的标识符,那么它可以用作种子。有一些奇怪的要求使这很困难。
1. ID必须是唯一的,并且在所有情况下都相同,对于给定的硬件/用户组合。 2. 它不能简单地绑定到设备或用户,它必须是两者的组合。 3. 它必须在任何情况下都可用; Wifi和蓝牙MAC地址不可行,因为它们在关闭时在某些设备上不可用。 4. 根据我所读到的,TelephonyManager IDs(SIM等)并非在所有设备上都可用。 5. 根据我所读到的,ANDROID_ID在所有情况下都不会出现。 6. 应用程序将发布在多个市场(例如Amazon Appstore),因此Google帐户不一定存在。 7. 进行出厂重置不应影响用于生成此ID的任何内容(这样用户可以备份,擦除和恢复而不会中断)。 8. 进行OTA升级不应影响用于生成此ID的任何内容(请参见上述原因)。 9. 如果他们在卸载/重新安装后需要重新验证,则可以。
我知道其他应用程序显然也可以检索此值,这就是为什么我打算哈希它,进一步由应用程序UID种子化以及<您的建议>。
如果有人觉得要求不切实际,我也想听听。
尤其是考虑到最近的黑客马拉松,我希望至少能够说“如果有人能够破解这个,你手机上的任何东西都不安全”。
我正在开发一个应用程序,需要在设备上存储第三方网络服务的凭据。我希望这些凭据被加密,但我也不希望将种子存储在代码/设备上,以防止可能的劫持。该应用程序还支持使用Google云备份功能进行备份,进一步需要加密。
我的想法是,如果我能找到一个唯一的标识符,那么它可以用作种子。有一些奇怪的要求使这很困难。
1. ID必须是唯一的,并且在所有情况下都相同,对于给定的硬件/用户组合。 2. 它不能简单地绑定到设备或用户,它必须是两者的组合。 3. 它必须在任何情况下都可用; Wifi和蓝牙MAC地址不可行,因为它们在关闭时在某些设备上不可用。 4. 根据我所读到的,TelephonyManager IDs(SIM等)并非在所有设备上都可用。 5. 根据我所读到的,ANDROID_ID在所有情况下都不会出现。 6. 应用程序将发布在多个市场(例如Amazon Appstore),因此Google帐户不一定存在。 7. 进行出厂重置不应影响用于生成此ID的任何内容(这样用户可以备份,擦除和恢复而不会中断)。 8. 进行OTA升级不应影响用于生成此ID的任何内容(请参见上述原因)。 9. 如果他们在卸载/重新安装后需要重新验证,则可以。
我知道其他应用程序显然也可以检索此值,这就是为什么我打算哈希它,进一步由应用程序UID种子化以及<您的建议>。
如果有人觉得要求不切实际,我也想听听。
尤其是考虑到最近的黑客马拉松,我希望至少能够说“如果有人能够破解这个,你手机上的任何东西都不安全”。