首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何存储和验证从PIN/密码中随机选择的数字

如何存储和验证从PIN/密码中随机选择的数字
EN

Stack Overflow用户
提问于 2010-08-02 13:49:37
回答 6查看 1.8K关注 0票数 4

如果我有一个用户6位PIN (或n字符字符串),并且希望验证从PIN (或x字符)中随机选择的3位数字,作为“登录”过程的一部分,我将如何将PIN存储在数据库或某个加密/散列版本的PIN中,以便能够验证用户身份?

思想:

6

  • 以可逆(对称或不对称)加密方式存储PIN,解密以进行数字检查。

  • 存储针对某些ID的PIN的一系列散列排列,该ID链接到所选的“随机数字”,例如:
  • ID: 123 = Hash of位数1,2,3
  • ID: 416 = Hash of位数4,1,
    • ID:416=Hash of位数4,1,

问题:

'high-volume'.

  • Creating密钥安全性:假设密钥是“受保护的”,并且该应用程序既不是财务上的,也不是高度关键的,但是是一个数目众多的散列排列是令人望而却步的高存储(16字节x几个排列),而且耗时可能会过度消耗。

还有其他选择、问题或改进吗?

是的:我知道以可逆的方式存储密码/PIN是“有争议的”,理想情况下不应该这么做。

更新

请澄清: 1.随机数字是我正在考虑的一个方案,以避免密钥记录器。2.不可能尝试超过有限数目的重审。3.其他要素有助于确保访问的安全和认证。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-05 03:17:32

关键是'protected'

  • The应用程序不是财务上的,也不是高度关键的,应用程序是'high-volume'.

  • Creating,大量的散列排列都是令人望而却步的高存储(16字节x几个排列),而耗时的overkill

  • Random数字可能是我正在考虑的一种方案,为了避免key-loggers.

  • It,不可能尝试超过一定数量的retries.

  • Other元素来帮助保护和验证访问。

你似乎在争论要把密码储存在透明的地方。我说去吧。您基本上是在描述一种挑战响应身份验证方法,而服务器端的明文存储对于该用例来说是常见的。

与此类似的是一个一次性键盘,或一个秘密密钥矩阵。不同之处在于,用户必须保留/带便携垫才能访问。好处是,只要您获得足够安全的密钥分发,您就可以非常安全地不受键盘记录器的影响。

如果你想这样做,这样暴露的矩阵/垫不会单独造成妥协,让用户使用一个简短(3-4个数字)的PIN与垫,并保持您的敏感锁定机制。

矩阵的例子:

代码语言:javascript
复制
  1  2  3  4  5  6  7  8
A ;  k  j  l  k  a  s  g
B f  q  3  n  0  8  u  0
C 1  2  8  e  g  u  8  -

一个挑战可能是:“输入您的PIN,然后从矩阵中输入来自正方形B3的字符。”

答案可能是: 98763

票数 0
EN

Stack Overflow用户

发布于 2010-08-05 03:35:55

由于用于存储密码/密码短语的任何加密方案都会非常昂贵,或者容易破解,所以我只是简单地将其存储在纯文本中,并确保数据库和服务器的安全性达到了标准。

您可以考虑一些轻量级加密方案,以将密码隐藏在数据库的临时浏览器中,但是,您必须承认,任何方案都有两个基本的漏洞。一个--你的程序需要一个密码或密钥,这个密码或密钥必须存储在某个地方,并且几乎和普通文本中的实际密码一样容易被窥探,而第二个--如果你有合理数量的用户,那么访问加密密码的黑客就有很多“线索”来帮助他的暴力攻击,如果你的网站向公众开放,他可以将任何数量的“已知文本”插入到你的数据库中。

票数 2
EN

Stack Overflow用户

发布于 2010-08-02 14:00:50

由于6C3是20,10C3是120,我将得到一个假阳性(被认证)在我的猜测的1/6。

无论您如何存储令牌,此方案仅略好于根本不进行身份验证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3388379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档