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

Security 如何在不需要键盘输入的情况下创建加密安全的身份验证?,security,authentication,cryptography,Security,Authentication,Cryptography,我正在开发一个系统,要求用户使用他们在网站上创建的帐户登录设备。身份验证将通过HTTPS进行,因此这不是问题。在设备上运行的应用程序将允许使用与其帐户链接的信用卡进行应用内购买,因此登录凭据必须足够安全,以便难以使用暴力进行攻击。唯一的问题是,用户将使用的设备的用户输入能力有限(基本上是箭头键和选择按钮) 在这种情况下,输入一个典型的用户名/密码可能太麻烦,还需要开发一个屏幕键盘,可以通过箭头键导航。用户最终可能会创建容易破解的简单密码。但是,一旦登录,用户将在后台使用访问令牌,因此他们可能不需

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

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

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

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

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

  • 由于输入文本密码可能太难,只要设备已注册,在确认应用程序内购买时可能会使用4位密码。这可能会很好地防止设备的其他用户在未经您允许的情况下使用您的帐户。然而,如果他们看到你输入你的密码,那么这就不再是一件好事了

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


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

我一直在处理用户输入能力有限的情况。您能描述一下您的应用程序运行的平台吗?它有助于根据平台安全模型来匹配解决方案

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

  • 链接用户帐户、序列号和随机密钥(设备在开始时发送的密钥)
  • 生成令牌
  • 通过基于密码的密钥派生算法(PBKDF2),使用pin码和随机密钥作为salt生成密钥
  • 使用在步骤3中派生的密钥加密令牌
  • 使用密码令牌更新数据库用户行
    用户可以通过设备选择按钮同步密码令牌。要解锁应用程序,用户必须通过简单的数字屏幕输入pin码。该应用程序使用pin码和随机密钥(在开始时保留),并生成PBKDF2密钥并解密令牌。PBKDF2可以帮助我们稍微降低暴力的速度,但也可以强制执行基于时间或基于尝试的锁定。例如,经过一些跟踪后,应用程序可以删除用户凭据并强制用户从头开始进行配置

    我喜欢在Steam和Xbox Live上购物的方式。在这两种情况下,我都不必使用键盘。如果我是你,我会去看看。自动取款机也是一个需要检查的东西,它们比你的设备更有限。通过让用户选择图片来验证用户身份是让黑客窃取用户帐户的可靠方法。我不需要做任何事情,只需要翻过某人的肩膀去发现他们的象形密码,作为图片,我可以从更远的地方去做,而不是用简单的字符。@Renan谢谢,我不熟悉Steam或Xbox Live验证流。您能描述一下流程吗?这个问题属于Stack Exchange网络中的另一个站点:security.stackexchange.com请输入另一个