当用户想要其他人冒充他们时,如何证明用户身份?

时间:2017-01-30 13:24:36

标签: ios security authentication encryption cryptography

我有一个有趣的问题。假设我们有一个用户Bob,他登录某些服务。假设Bob主动想要其他人尝试冒充他,那该服务如何证明Bob的身份呢?即,我们如何确定登录的用户确实是Bob?

  • 使用Bob的MAC / IP地址不起作用,因为这些很容易被欺骗。
  • 作为身份验证方式的用户名/密码不起作用,因为Bob可以将这些凭据提供给任何人。
  • 公钥系统(例如使用RSA进行签名)不起作用,因为Bob可以与任何人分享他的私钥。

我基本上需要的是Bob有一些身份证明证明他无法分享(或者至少很难让其他人复制,因为Bob提供了所有信息)。

编辑(如果这很有用):我正在使用iOS应用(Bob)和Python网络服务器(该服务)。

1 个答案:

答案 0 :(得分:1)

备选方案:

    用户在身份验证期间必须提供的
  • 硬件令牌,如usb令牌或加密智能卡

  • 生物识别无法共享。例如指纹/语音/耳朵/虹膜识别。在某些情况下,您需要一个阅读器(注意指纹生物识别数据在移动设备中不可用),您必须使用置信区间和大型数据库进行比较。 ID永远不会100%可靠。

  • 管理不可提取密钥的公钥加密系统。用户端的加密提供程序允许生成或导入可以标记为不可提取的密钥,并且不能导出到外部。例如WebCryptographyApi,AndroidKeyStore,iOS KeyChain或Window Keystore。在用户注册期间,生成加密密钥对,公共和私有。公共发送到与用户帐户关联的服务器,并且私有存储。使用私钥通过数字签名完成身份验证。

参见FIDO UAF(通用认证框架)和FIDO U2F(通用第二因素)

https://fidoalliance.org/about/what-is-fido/

关于iOS KeyChain,它允许将密钥标记为不可提取。见Apple Documentation

  

重要

     

如果未设置CSSM_KEYATTR_EXTRACTABLE位,则无法以任何形式从钥匙串中提取导入的密钥,包括以包装形式。

另请参阅Store and retrieve private key from Mac keychain programatically