【问题标题】:How to create a cryptographically secure authentication without requiring keyboard input?如何在不需要键盘输入的情况下创建加密安全身份验证?
【发布时间】:2013-08-14 20:09:43
【问题描述】:

我正在开发一个系统,该系统要求用户使用他们在网站上创建的帐户登录设备。身份验证将通过 HTTPS 进行,因此这不是问题。设备上运行的应用程序将允许使用与其帐户相关联的信用卡进行应用内购买,因此登录凭据必须足够安全,以使其难以使用暴力攻击进行攻击。唯一的问题是用户将使用的设备将具有有限的用户输入功能(主要是箭头键和选择按钮)。

在这种情况下,典型的用户名/密码可能输入起来过于繁琐,还需要开发可通过箭头键导航的屏幕键盘。用户最终可能会创建容易破解的简单密码。但是,一旦登录,用户将在后台使用访问令牌,因此他们可能不需要多次输入密码。

第一步是用户需要输入他们的用户名或 ID 号。使用数字可能更容易输入,但也更容易猜测。我也愿意接受这方面的建议。

接下来是输入“密码”的过程。所以这里有一些我的想法,但我不是密码学专家,所以我不知道如何衡量安全级别。

  • 用户必须先注册设备。无论如何,这可能是我需要的一个步骤,以提高安全性。该设备将生成一个密钥,该密钥将发送到服务器并与帐户一起存储。执行未来的身份验证请求时将需要该密钥。用户需要登录网站才能批准该设备。该设备不会有任何类型的标识符,因此除非您很快登录,否则您不会知道它是您的设备还是其他人试图欺骗您。如果能够创建某种附加标识符,可能会显示一个短代码、短语或图像,这样您就可以知道它与您刚刚尝试注册的设备相同。

  • 由于输入文本密码可能太难了,所以只要注册了设备,在确认应用内购买时也许可以使用 4 位密码。无论如何,这可能会很好地防止设备的其他用户在未经您许可的情况下使用您的帐户。但是,如果他们正在监视您输入密码,那么就不再适合这个目的了。

  • 如果不需要注册设备,而不是使用文本密码登录,用户可能会看到图像或短语作为选项,他们必须选择与其帐户匹配的正确图像/短语组合。

到目前为止,这就是我所拥有的。你都有些什么想法呢?当涉及应用内购买时,如何创建一个简单但安全的登录?

【问题讨论】:

  • 我喜欢在 Steam 和 Xbox Live 中购物的方式。在这两种情况下,我都不必使用键盘。如果我是你,我会检查这些。 ATM 也是需要检查的东西,它们比您的设备更受限制。通过让用户选择图片来验证用户身份也是让黑客窃取用户帐户的可靠方法。我不需要做任何事情,只要回头看看某人的肩膀就能发现他们的象形密码,而作为图片,我可以在比简单字符更远的地方做到这一点。
  • @Renan 谢谢,我不熟悉 Steam 或 Xbox Live 身份验证流程。你能描述一下这个过程吗?
  • 此问题属于 Stack Exchange 网络中的另一个站点:security.stackexchange.com 请在“此问题属于 Stack Exchange 网络中的另一个站点”中将进入另一个 stackexchange 站点设置为选项。这让我发疯了。
  • @owlstead 在 cmets no one can hear you scream.
  • @DuncanJones 只是在发泄。这些更高级别的方案/协议被认为是关于加密的题外话......

标签: security authentication cryptography


【解决方案1】:

我一直在处理有限的用户输入能力场景。您能描述一下您的应用在哪个平台上运行吗?这有助于根据平台安全模型拟合解决方案。

更新:我希望您没有考虑每台设备多用户的情况。所以,我假设每台设备有一个用户。第二个假设是设备可能有一个唯一的序列号,可以通过一些 API 访问,并且序列号是预先在服务器上注册的。 在初始阶段,用户通过设备选择按钮生成一个随机密钥,应用程序确认密钥生成成功可能会显示序列号(用户可能需要注册序列号以进行后期配置)。在后台,应用程序将带有序列号的新密钥发送到服务器。服务器使用数据库条目中的随机密钥更新其序列号。该设备可以阻止进一步的密钥生成,或者可以允许直到它最终配置有专用用户。设备还将带有随机密钥的序列号保存在本地数据库/文件中。然后,用户通过 Web 界面登录到他们的帐户以配置设备。对于登录用户,服务器会显示可用设备列表,用户可以选择属于她/他的特定设备并设置四位密码。服务器执行以下操作:

  1. 关联用户帐号、序列号、随机密钥(设备一开始发送的那个)。
  2. 生成令牌
  3. 通过基于密码的密钥派生算法 (PBKDF2) 使用 pin 码和随机密钥作为盐生成密钥
  4. 使用在步骤 3 中派生的密钥加密令牌
  5. 使用密码令牌更新数据库用户行。

用户可以通过设备选择按钮同步密码令牌。要解锁应用程序,用户必须通过简单的数字屏幕输入密码。该应用程序使用 PIN 码和随机密钥(在开头保留)并生成 PBKDF2 密钥并解密令牌。 PBKDF2 帮助我们稍微减慢暴力破解的速度,但也可以强制执行基于时间或基于尝试的锁定。例如,经过一些跟踪后,应用程序可以删除用户凭据并强制用户从头开始配置。

【讨论】:

  • 这将是一个带有自定义输入硬件的嵌入式设备。它将在 linux 上运行,应用程序将使用 Ruby 编写。
  • 关于您对多用户的评论,计划是会有一个通常始终登录的主要用户。主要用户可以进行应用内购买,但是,最终我会喜欢允许访客用户登录,但无法访问应用内购买。不确定我将如何处理来宾用户身份验证。也许通过创建临时(可撤销)令牌进行 2 因素身份验证,并发送电子邮件/短信以供批准,这样密码就不会以纯文本形式显示给其他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
相关资源
最近更新 更多