【问题标题】:How to secure access with RFID Badge and PIN Number如何使用 RFID 徽章和 PIN 码确保访问安全
【发布时间】:2011-10-06 15:52:10
【问题描述】:

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

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

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

对于 4 位 PIN,典型的哈希/盐方法是否足够?

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

编辑

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

编辑 2

此外,情况是这不会是一个基于网络的应用程序。用户只能从专用工作站访问系统。然后,工作站将利用 Web 服务与后端系统/数据库进行通信。我怎样才能把这个因素考虑进去?

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

【问题讨论】:

  • 您认为 GUID 应该“以明文形式”存储的理由是什么?
  • @EricLippert 不能代表 OP,但我的理由是,如果它可以被 RFID 阅读器读取,那么让它在数据库上“更安全”就是通过默默无闻来确保安全。跨度>
  • @Widor:我明白你的意思。这是我的担忧。深度防御是关于保护系统免受许多不同的攻击。我担心的攻击是数据库——而不是其他东西——被破坏了,现在攻击者有一个有效 GUID 的完整列表。然后,攻击者可以为自己构建任意数量的克隆有效卡,然后尝试破坏与 任何张卡关联的 PIN。

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


【解决方案1】:

徽章 + PIN 不能通过将 PIN 存储在数据库中来发挥作用。 PINS 实际上是用于访问徽章加密模块本身的加密密钥。徽章存储一个私钥,使用从 PIN 派生的密钥进行加密。 Authenticators 有一个公钥,并用 nonce 挑战徽章。徽章加密模块本身使用私钥(在内部使用 PIN 解密)对质询 nonce 进行签名,并使用 nonce 签名进行响应。然后,身份验证器使用公钥验证签名,从而对用户(徽章持有者)进行身份验证。重点是:

  • 加密身份验证是使用公钥/私钥对、强 RSA 加密建立的
  • 身份通过拥有私钥来证明,该私钥永远不会离开徽章加密模块
  • PIN 仅用于解密徽章内部的私钥。如果没有实际拥有徽章,PIN 完全没有用

坦率地说,您提出的将 GUID 和 PIN 码存储在数据库中的方案是个笑话。

【讨论】:

  • 所问的问题是如何安全地实施特定的(我假设是现有的)RFID 徽章和 PIN 系统。您描述了一个更安全的系统,但它并没有真正回答问题。
  • @Remus 这听起来像是要走的路。您能否向我指出有关此类系统如何工作的更多深入信息?请参阅我上面的编辑以获取更多信息。
  • 在您提出的方案中,“RFID GUID”实际上是“用户名”,“PIN”实际上是“密码”。因此,您确实是在强制输入由 4 位数字组成的密码,正如许多人所指出的那样,这还不够。而且,为了记录,要在 SQL Server 中安全地存储 任何 信息,您将使用 TDE:msdn.microsoft.com/en-us/library/bb934049.aspx
  • @Remus 实际情况是这不是一个基于网络的应用程序。用户只能从专用工作站访问系统。然后,工作站将访问 Web 服务以与后端系统/数据库进行通信。我怎样才能把这个因素考虑进去?
【解决方案2】:

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

【讨论】:

  • 是的,但我认为加盐哈希是我们在这里能做的最好的——缺点在于知道哈希保证是 4 位 PIN...
  • ...银行业的任何人都愿意告诉我们如何存储银行 PIN 码?
  • 我很想听听银行业人士的一些想法,看看借记卡/PIN 与我的场景具有相同的性质。
  • 此信息存储在卡上。读取卡片的能力可能是一种加密方法。
  • @Ramhound 是否可以将 GUID 和 PIN 存储在 RFID 标签内并使用类似于借记卡的方法?
【解决方案3】:

您可以在数据库中仅存储 HMAC(PIN, GUID) 列表。 PIN 是秘密,GUID 是数据。仅拥有 HMAC 不应允许任何有权访问数据库的人获取 GUID 或 PIN。

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

【讨论】:

  • 接受的答案假设用户获得了带有加密模块的智能卡(如现代信用卡),但问题涉及只能存储 GUID 的 RFID 卡。因此,这个答案更合理。
【解决方案4】:

据我所知,这个系统的最大弱点是任何攻击者都知道 PIN保证准确为 4 位数字,从而使预- 值得计算的哈希值。

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

  • 在计算哈希时一定要使用盐,但不要将盐存储在与哈希相同的位置。
  • 确保尽可能限制对数据库的访问(虚拟和物理)
  • 强制执行某种形式的“PIN 政策”以确保定期更改它们 - 这样,任何成功的违规行为都只会在短时间内有效。

编辑:再说一次,这个系统的弱点可能是你的门铰链,或者 JCB 的可访问性......

【讨论】:

  • 你会把盐存放在哪里?在这种情况下,您将如何处理交易?
  • 在 JCB 的事情上迷失了我……这到底是什么意思?
  • @stephen776 对不起,可能是英国的东西。网址是here。它们是重型工程车辆的知名品牌 - 适用于冲压门...
  • @svick 公平点,取决于你如何实现盐:stackoverflow.com/questions/1219899/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2022-08-18
  • 1970-01-01
相关资源
最近更新 更多