Android 中是否可以进行无 OTP 身份验证?

Sac*_*rma 7 security authentication android cryptography

问题陈述:用户 X 想要登录或注册应用程序 A 和应用程序 B。

\n

考虑到:-

\n
    \n
  • 操作系统环境:Android
  • \n
  • 用户X、设备D、应用程序A和应用程序B(应用程序A和应用程序B是两个不同的组织)
  • \n
  • 应用程序 A 和应用程序 B 位于同一设备 D 上
  • \n
  • 应用A和应用B使用认证SDK\xe2\x80\x9cSDK1\xe2\x80\x9d。
  • \n
\n

方法 1: \n用户 X 使用 OTP 通过手机号码验证在应用程序 A 上验证自己。\n用户 X 使用 OTP 通过手机号码验证在应用程序 B 上验证自己。

\n

方法 2: \n用户 X 使用 OTP 通过手机号码验证在应用程序 A 上对自己进行身份验证。\n用户 X 使用应用程序 A 上的身份验证信息在应用程序 B 上对自己进行身份验证。

\n

我有兴趣探索方法 2,并想了解它\xe2\x80\x99 的可行性和安全影响。

\n

让我们深入探讨方法 2 -

\n
    \n
  1. 用户 X 通过使用 OTP 的手机号码验证在应用程序 A(使用 SDK1)上对自己进行身份验证。
  2. \n
  3. SDK1将SIM-ID的信息和唯一的Id存储在设备上的文件F中(所有应用程序都可以访问的共享空间中),并将这些信息发送到服务器。\n注:此文件\xe2\x80 \x9cF\xe2\x80\x9d 使用对称算法(例如 AES)加密;密钥仅远程存储在服务器上。
  4. \n
  5. 用户X尝试登录应用程序B(使用SDK1),SDK将加密文件F发送到服务器,服务器使用步骤2中生成的密钥解密该文件并验证SIM ID和设备ID(保留SIM ID)如果我想确保 SIM 卡仅存在于设备中)。如果文件数据与服务器上存储的数据匹配,则服务器认为无需再次对应用程序 B 进行用户身份验证,因为在对应用程序 A 进行身份验证时已经完成了该操作。
  6. \n
\n

我在这种方法中看到的问题:-

\n
    \n
  1. 如果文件 F 被盗,那么其他人就可以冒充用户 X,这可能会导致身份盗窃(即使文件已加密,也可能发生)和安全漏洞。
  2. \n
  3. 所有应用程序都可以访问该文件,因此任何人都可以删除它。
  4. \n
  5. 设备 ID 的最佳选项应该是什么?广告 ID、会话 ID 还是其他?
  6. \n
\n

PS:我不想\xe2\x80\x99 想要提示用户额外的权限。

\n

问题- 我上面列出的问题有哪些解决方案?在Android环境中实现这种方法是否存在其他安全/可行性问题?

\n