如何在不需要键盘输入的情况下创建加密安全的身份验证?

时间:2013-08-14 20:09:44

标签: security authentication cryptography

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

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

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

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

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

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

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

这就是我到目前为止所做的一切。你的想法是什么?如果涉及应用内购买,如何创建简单但安全的登录?

1 个答案:

答案 0 :(得分:1)

我一直在处理有限的用户输入功能方案。您是否会描述您的应用运行的平台?它有助于根据平台安全模型调整解决方案。

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

  1. 链接用户帐户,序列号,随机密钥(设备在开始时发送的密钥)。
  2. 生成令牌
  3. 使用密码生成密钥,通过基于密码的密钥衍生算法(PBKDF2)将随机密钥作为盐生成
  4. 使用在步骤3中派生的密钥加密令牌
  5. 使用密码令牌更新数据库用户行。
  6. 用户可以通过设备选择按钮同步密码令牌。要解锁应用程序,用户必须通过简单的数字屏幕输入密码。该应用程序使用密码和随机密钥(在开头保持)并生成PBKDF2密钥并解密令牌。 PBKDF2可以帮助我们减慢蛮力,但也可以强制执行基于时间或基于尝试的锁定。例如,在一些跟踪之后,应用程序可以删除用户凭据并强制用户从头开始配置。