android - 智能手机唯一标识符作为密码/登录凭据?
问题描述
我的意图
- 应用程序只允许每部智能手机使用一个帐户(例如 Telegram/Whatsapp)
- 智能手机唯一标识符一起充当密码/登录凭据并确保第 1 点。
- 基于令牌的登录返回一个 48 小时有效令牌,因此登录过程不会占用太多服务器端资源
研究至今
SO上关于android唯一标识符的热门帖子已经建议使用什么标识符。
搜索“无密码登录”会导致结果,但它们与我想要创建帐户的方式无关。我发现的“使用智能手机作为登录凭据”的唯一主题只是写了关于好处以及可能的应用方式/领域。就像使用 NFC 获得进入建筑物的授权一样。
到目前为止的解决方案
- 将 4 个唯一标识符build-serial、android_ID、SIM-serial和IMEI作为加盐哈希存储在数据库中。登录时,智能手机会发送其标识符,并将它们与数据库中的标识符进行匹配。
恢复选项:电子邮件地址
+-----------------+------------+------------+-- ------------+------------+--------------+---------- --+----------+ | INT 无符号 AI | 二进制(16) | 字符(255) | 字符(255) | 字符(20) | 字符(20) | 字符(20) | 字符(20) | +-----------------+------------+------------+-- ------------+------------+--------------+---------- --+----------+ | player_id | uuid | 球员姓名 | 恢复电子邮件 | android_id | build_serial | sim_serial | 咪咪 | +-----------------+------------+------------+-- ------------+------------+--------------+---------- --+----------+
+------------+-------------------------- -+------------+-----------------+----------------- -----------------+-------------------------------- --+------------------------------------------------+------------ ----------------------+ | player_id | uuid | 球员姓名 | 恢复电子邮件 | android_id | build_serial | sim_serial | 咪咪 | +------------+-------------------------- -+------------+-----------------+----------------- -----------------+-------------------------------- --+------------------------------------------------+------------ ----------------------+ | 1 | 6ccd780c-baba-1026-9564-0040f4311e29 | 播放器1 | 测试@本地主机 | dac9630aec642a428cd73f4be0a03569 | 7f40fb99caa4c44238514f645827448d | d41d8cd98f00b204e9800998ecf8427e | e4d909c290d0fb1ca068ffaddf22cbd0 | | 2 | 865234ad-6a92-11e7-8846-b05adad3f0ae | 测试仪 | test2@localhost | e4d909c290d0fb1ca068ffaddf22cbd0 | d41d8cd98f00b204e9800998ecf8427e | 79054025255fb1a26e4bc422aef54eb4 | dac9630aec642a428cd73f4be0a03569 | +------------+-------------------------- -+------------+-----------------+----------------- -----------------+-------------------------------- --+------------------------------------------------+------------ ----------------------+
问题
如果有人对应用程序进行反汇编/逆向工程,使用提取的客户端证书(应用程序中的 PKCS#12 文件)构建桌面应用程序模拟器,因为服务器需要有效的客户端证书,他可以通过制作智能手机唯一标识符数据来注册帐户。
问题
- 由于将已经唯一的标识符保存在明文中不是一种选择,因为它是敏感的用户数据,因此散列它们不会增加散列冲突的危险吗?尽管 4 个唯一值一起创建了一个新的唯一值,即使有时其中的一两个值与其他记录中的值相同。所以对此的担忧可以忽略不计吗?
- 这个问题阻止了我每部智能手机只有 1 个帐户的意图。因此,我是否别无选择,将帐户绑定到电话号码并要求通过短信验证?
- 其他方法?(比如只从 4 个唯一标识符生成唯一密码?)
- 还在寻找被认为是破碎的咸味 MD5 哈希函数吗?如果 20 个字符就足够了,因为 4 个唯一值不再存在,还是我应该使用完整的 32 个字符?
- 这种方法可以与基于令牌的登录一起使用吗?
- 我忽略了什么吗?任何进一步的安全方面?
解决方案
推荐阅读
- filter - 使用 tableau 中两列中常见的一个值进行过滤
- python - 用 Python 提取文件名的一部分
- json - 使用 MediaInfo 命令行和 jq 从文件目录构建有效的 JSON 播放列表
- javascript - Laravel:尝试使用图表生成 pdf,但生成的 pdf 图表未显示
- xamarin - 有没有办法在 Xamarin 应用程序中使用 Olive 框架?
- php - 带有mysql连接的多个foreach循环
- html - 用于交替嵌套元素背景颜色的循环 css 规则
- javascript - 如何随机化(随机播放)Javascript 集
- csv - 使用 jersey restful webservice 生成 .csv 文件
- c# - 从 Loan Balanced API 启动时的 EF Core 迁移