【问题标题】:How to prove user identity when the user WANTS others to impersonate them?当用户希望他人冒充自己时,如何证明用户身份?
【发布时间】:2017-01-30 13:24:36
【问题描述】:

我有一个有趣的问题。假设我们有一个用户 Bob,他登录到某个服务。假设 Bob 积极希望其他人尝试冒充他,该服务如何证明 Bob 的身份?即,我们如何确定登录的用户确实是 Bob?

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

我本质上需要的是 Bob 有一些他不能分享的身份证明(或者至少其他人很难复制,因为 Bob 拥有的所有信息)。

编辑(如果有用的话):我正在使用 iOS 应用 (Bob) 和 Python Web 服务器(服务)。

【问题讨论】:

  • 诸如 RSA 令牌之类的东西,或者必须插入的加密 USB 密钥或卡?
  • @RonMaupin 对于 USB 密钥或卡 - Bob 可以将其赠送给任何人。关于 RSA 令牌,您能再解释一下吗?
  • Bob 可以把它送出去,但 Bob 不会得到它。在Information Security 上问这个问题可能会更好。
  • 公钥系统(例如使用 RSA 进行签名)无法正常工作,因为 Bob 可以与任何人共享他的私钥是不正确的。您可以使用@RonMaupin 所述的加密令牌或管理不可提取密钥的加密软件系统。例如用于 Web 浏览器或 AndroidKeyStore 或 iOS KeyChain 的 WebCryptographApi。取决于你的执行环境
  • @pedrofb 感谢您提供此信息。我假设共享私钥在技术上是可行的,但实际上软件使这不可行?此外,为了清楚了解我正在使用的平台,我更新了我的问题。

标签: ios security authentication encryption cryptography


【解决方案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

【讨论】:

  • 感谢您的回答,这非常有用。在使用公钥系统的情况下,Bob 不能直接将别人的公钥(我们称他为 Imp)发送到服务器吗?这样,Imp 可以使用他自己单独的公钥/私钥对将所有消息(使用他自己的私钥签名)发送到服务器。服务器认为它正在与 Bob 通信,而实际上它是 Imp。当然,这意味着 Bob 自己将无法与服务器通信(因为 Imp 无法将他的私钥分享给 Bob),但我们假设他不在乎。
  • 为了保护您免受这种情况的影响,在注册公钥期间,Bob 必须使用私钥发送挑战的数字签名。然后,只有私钥的所有者才能注册公钥
猜你喜欢
  • 2011-01-17
  • 1970-01-01
  • 2023-03-17
  • 2020-12-05
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
相关资源
最近更新 更多