2017-01-30 68 views
0

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

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

我本质上需要的是鲍勃有ID的一些证明他不能共享(或至少是很难被别人复制,因为鲍勃拥有的所有信息)。

编辑(如果这是有用的):我正在使用iOS应用程序(Bob)和Python web服务器(服务)。

+0

有些像RSA令牌,或者必须插入一个加密的USB钥匙或卡片? –

+0

@RonMaupin对于USB钥匙或卡 - 鲍勃可以把它交给任何人。重新RSA令牌,你能解释这一点吗? – Dotl

+0

鲍勃可以放弃它,但是鲍勃不会拥有它。这个问题可能更好的问[security.se]。 –

回答

1

备选方案:

  • 硬件令牌用户必须如USB令牌或智能卡加密

  • 生物识别不能共享在认证期间呈现。例如指纹/声音/耳朵/虹膜识别。在某些情况下,您需要阅读器(注意指纹生物特征数据在移动设备中不可用),您必须使用置信度范围和大型数据库进行比较。一个ID从来不是100%可靠的。

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

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

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

关于iOS的钥匙串,它允许标记键作为非萃取。见Apple Documentation

重要

如果不设置CSSM_KEYATTR_EXTRACTABLE位,则不能提取从钥匙扣进口关键以任何形式,包括包装形式。

看看也Store and retrieve private key from Mac keychain programatically

+0

感谢您的回答,这非常有用。 在使用公共密钥系统的情况下,Bob不能仅仅将别人的公钥(我们称他为Imp)发送给服务器?这样,Imp可以使用他自己的公钥/私钥对将所有消息(使用他自己的私钥进行签名)发送到服务器。当服务器实际上是Imp时,服务器认为它正在与Bob通信。当然,这意味着Bob自己将无法与服务器通信(因为Imp无法将他的私钥分享给Bob),但让我们假设他不在意。 – Dotl

+0

为了保护您免受这种情况的侵害,有必要在公钥注册期间,Bob使用私钥发送挑战的数字签名。然后,只有私人所有者可以注册公钥 – pedrofb

相关问题