NFC with URL 和上面写的服务器信息
NFC with URL and information for the server written on it
目前我正在尝试制作一个系统,它使用 NFC 标签来确定客户端是否已到达指定位置。
我目前的解决方案很简单,很容易上当。 NFC 标签有一个带有 GET 信息的 URL ( service.domain/index.php?location=1 )。一个人只需手动输入正确的 URL 即可轻松复制。
所以我在想的是,我需要一些方法让 NFC 标签保存一个唯一的 'not so easy to access' 密钥,当在浏览器中打开 URL 时,它会提交给服务器.类似于页面上的表单如何生成 POST 数据,用户不可见。
目前网上关于此类的资料很少,希望这里有人能提供解决方案。它几乎可以是任何一种解决方案,只要它坚持通过用户互联网浏览器工作的原则,当他将他的设备(NFC reader、phone 等)放在 NFC 上时标签。
这看起来像是数字签名的工作。
而不是写:
service.domain/index.php?location=1
在你的标签上,你可以这样写:
service.domain/index.php?location=1&nonce=some-number&sig=some-base64-string
想法是,您将一个上升的随机数附加到 URL。随机数不应重复使用和升序。您在此 URL 上构建数字签名并附加它。
只有您拥有生成有效签名的私钥。然而,每个 reader 位置可能有 public 密钥,用于检查签名的有效性。这使得 URL 防篡改,例如任何人都无法通过仅修改位置来构建有效的 url。
攻击者仍然能够复制此 URL 并将其写入不同的标签。但是,他既不能更改随机数、签名,也不能更改位置。如果您跟踪 nonce 值并在使用后验证它们(通过使用新的 nonce 和新的签名重写标签),您可以检测到用副本欺骗系统的尝试。
您也可以将UID加入到签名计算中。这使得攻击变得更加困难,因为如果攻击者想要复制,他还必须克隆 UID(可能,但这需要相当多的专业知识)。
它不是绝对安全,但破解这个系统需要相当多的犯罪精力和努力。
如果您使用这样的系统,我建议使用椭圆曲线数字签名,因为它们的签名非常小,甚至应该适合小标签。
目前我正在尝试制作一个系统,它使用 NFC 标签来确定客户端是否已到达指定位置。
我目前的解决方案很简单,很容易上当。 NFC 标签有一个带有 GET 信息的 URL ( service.domain/index.php?location=1 )。一个人只需手动输入正确的 URL 即可轻松复制。
所以我在想的是,我需要一些方法让 NFC 标签保存一个唯一的 'not so easy to access' 密钥,当在浏览器中打开 URL 时,它会提交给服务器.类似于页面上的表单如何生成 POST 数据,用户不可见。
目前网上关于此类的资料很少,希望这里有人能提供解决方案。它几乎可以是任何一种解决方案,只要它坚持通过用户互联网浏览器工作的原则,当他将他的设备(NFC reader、phone 等)放在 NFC 上时标签。
这看起来像是数字签名的工作。
而不是写:
service.domain/index.php?location=1
在你的标签上,你可以这样写:
service.domain/index.php?location=1&nonce=some-number&sig=some-base64-string
想法是,您将一个上升的随机数附加到 URL。随机数不应重复使用和升序。您在此 URL 上构建数字签名并附加它。
只有您拥有生成有效签名的私钥。然而,每个 reader 位置可能有 public 密钥,用于检查签名的有效性。这使得 URL 防篡改,例如任何人都无法通过仅修改位置来构建有效的 url。
攻击者仍然能够复制此 URL 并将其写入不同的标签。但是,他既不能更改随机数、签名,也不能更改位置。如果您跟踪 nonce 值并在使用后验证它们(通过使用新的 nonce 和新的签名重写标签),您可以检测到用副本欺骗系统的尝试。
您也可以将UID加入到签名计算中。这使得攻击变得更加困难,因为如果攻击者想要复制,他还必须克隆 UID(可能,但这需要相当多的专业知识)。
它不是绝对安全,但破解这个系统需要相当多的犯罪精力和努力。
如果您使用这样的系统,我建议使用椭圆曲线数字签名,因为它们的签名非常小,甚至应该适合小标签。