我正在使用这个库:
https://github.com/scottyab/safetynethelper
我已经阅读了Android Deveoloper站点和存储库中的文档。
一切都很好,但我不清楚。
表明从服务器获取nonce比在自己的应用程序上创建nonce更安全。为什么将SafetyNet API的响应传递给服务器更好?
答案 0 :(得分:6)
最常见的SafetyNet Attestation API用于决定您是否信任与您的服务器通信的设备和应用程序。
因此,您并不想在Android应用中检查JWS响应,否则攻击者只需修改您的应用即可删除您已放置的任何验证逻辑。这就是为什么最好将响应传递给服务器,并在那里做出任何决定(您信任您的服务器)。
在您的服务器上,您可以verify the response,如果一切正常,请允许您尝试保护的任何操作 - 可能允许登录或下载某些数据。
为什么服务器提供的nonce更安全?您的应用程序中生成的随机数(即基本上随机且您不知道)可以由攻击者自由更改。如果你控制现时更好!这样,当您在服务器上验证JWS响应时,可以检查nonce是否正确。
在服务器上生成随机数的一种好方法可能是散列会话ID,或者用户ID和时间戳的组合。