如何使用RFID徽章和PIN码保护访问

时间:2011-10-06 15:52:10

标签: c# .net sql-server security sql-server-2008

我有一个类似于门锁的场景,需要双因素身份验证才能获得访问权限:

  • 带有GUID的RFID徽章
  • 通过键盘输入的4位PIN密码。

我需要在SQL Server 2008中安全地存储它们。我认为可以正常存储GUID,但是应该采取什么方法来保护数据库和整个系统中的PIN?

典型的哈希/盐方法是否足以支持4位数的PIN?

保护此类系统的正确方法是什么?

修改

更多信息......最终,这个系统最需要比标准的“门锁”更安全。用户将使用RFID令牌和PIN码进行身份验证。在获得对系统的访问权限之后,用户将有机会通过链接到其帐户的信用卡浏览和购买项目(使用第三方网关/保险库服务进行存储)。这会对系统产生什么影响?

编辑2

此外,案例是这不是基于网络的应用程序。用户只能从专用工作站访问系统。然后,工作站将利用Web服务与后端系统/ DB进行通信。如何将其纳入混合?

我可以使用@Remus建议的系统,其中认证/解密都是RFID卡的功能吗?然后,工作站将使用经过身份验证的用户ID与后端进行通信。有没有办法实现这样的系统?

4 个答案:

答案 0 :(得分:5)

徽章+ PIN无法通过在数据库中存储PIN来实现。 PINS实际上是用于访问徽章加密模块本身的加密密钥。徽章存储私钥,使用从PIN派生的密钥加密。身份验证者拥有公钥并使用随机数来挑战徽章。徽章加密模块本身使用私钥(使用PIN解密内部)对挑战随机数进行签名,并使用nonce签名进行响应。然后,验证者使用公钥验证签名,从而验证用户(徽章持有者)。关键点是:

  • 使用公钥/私钥对,强RSA加密法建立加密认证
  • 通过拥有私钥来证明身份,永远不会离开徽章加密模块
  • PIN仅用于解密徽章中的 私钥。 PIN是完全无用的,没有物理拥有徽章

你建议的方案,存储在数据库中的GUID和PIN,坦白说是一个笑话。

答案 1 :(得分:3)

我认为不是。如果有人偷了你的数据库,它存储了PIN的盐和哈希值,那么他计算实际的PIN是微不足道的,因为只有10000种组合。

答案 2 :(得分:1)

您只能在数据库中存储HMAC(PIN,GUID)列表。 PIN是秘密,GUID是数据。单独使用HMAC不应允许任何有权访问数据库的人获取GUID或PIN。

如果攻击者窃取了您的某个徽章和整个数据库的GUID,那么使用4位数PIN的所有可能组合计算该GUID的HMAC将很简单,并找到匹配的行。这个4位数的PIN永远是一个弱点。在每一行中添加盐会有所帮助,但不是很多。它只会增加行数所需的计算次数,这仍然会为您提供离线攻击的微不足道的数字。

答案 3 :(得分:0)

据我所知,这个系统最大的弱点是,任何攻击者都知道PIN 保证 完全 4位数,因此预制 - 计算的哈希值得。

我说你可以采取的最佳步骤是:

  • 在计算哈希值时绝对使用salt,但不要将salt存储在与哈希相同的位置。
  • 确保数据库的访问权限(包括虚拟和物理)都是可行的
  • 实施某种形式的“PIN政策”以确保定期更改 - 这样,任何成功的违规行为只会在短时间内生效。

编辑: 然后,这个系统的弱点可能是你的门的铰链,或JCBs的可访问性......