我要求允许用户在单个设备上使用 4+ 数字 pin 样式的密码。显然,这是一个直接用于保护其服务器端帐户的错误密码,因此我想将此 PIN 码“锁定”到特定设备,以便某人必须同时拥有 PIN 码和设备才能登录,以及在哪里可以访问设备无法访问 PIN。此外,他们已经有一个更传统的用户名/密码登录,并且通过在设备上注册,他们正在向这个现有帐户添加一组新的登录凭据。所以这是我目前的计划:
- 在本地设备注册过程中,本地生成强密码。
- 将此生成的强密码作为服务器端设备特定帐户密码发送到服务器。
- 使用他们提供的 4+ 位密码对生成的强密码进行本地对称加密。
- 将此加密的强密码存储在本地设备上。
- 在该设备上的后续登录过程中,用户提供相同的 4+ 位密码,用于解密先前存储的强密码,并将强密码发送到服务器进行登录。
所以我相信这可以达到强大的服务器端密码要求。但是,在注册过程之后,我还需要尽我所能保护客户端设备免受入侵(在注册过程之前/期间被入侵的设备是一个失败的原因)。显然,使用 4 位加密密钥,只有 10,000 种可能的组合,因此攻击者很容易能够非常快速地尝试对本地加密的强密码的每种组合。我想知道的是我是否必须选择特定的对称加密方案和/或生成的密码格式,以便攻击者无法仅从本地数据中判断出 10k 次解密尝试中哪一个是正确的?即,他仍然必须在服务器端登录时尝试每一个 10k 密码。
此外,这种方法有什么明显的错误,或者是实现这些要求的更标准的方法吗?如果有标准方法,是否有适用于这种方法的标准 .NET 库?