基于RSA非对称加密的NFC业余无线电QSL卡片验证教程

发布于 2023-12-09  229 次阅读


1. 前言

如果你是扫二维码进入的本篇文章,感谢你收到我的卡片并愿意探究验证方式,这张卡片采用了一些很好玩的内容做了防伪。

对于这一技术我写了一篇文章进行介绍:现在还没写完,先随便放个链接 写完了,点这里!! 如果你也有兴趣的话欢迎基于这一想法继续改进。

2. 卡片介绍

2.1 正面(呼号信息面)

示意图

该面左上角为NFC标志,提醒您这是一个NFC卡片。旁边是一只洛天依,她很可爱,我想让你们都看看。再往右为卡片名称以及和正常卡片一样的位置信息介绍。下方是我的呼号,在2的上方我放置了一个LED灯,在刷卡的时候这个贴片LED会亮起。右侧是一个100欧的电阻(LED灯用)以及一个NTAG216芯片。

该芯片内存储了不可篡改的QSL信息,详情请查看3.1

2.2 背面(传统QSL信息面)

示意图

该面和正常的QSL卡片相同,用于记录通联信息。下方的两个二维码,一个指向本文,另一个为RSA加密的公钥,后续解密会用到。详情请查看3.1

卡片的正反面均覆盖了铜线构成的线圈,作为NFC卡片的天线。

3. 信息读取与信息验证

3.1 信息读取

由于该卡片为NFC卡,所以您可以使用任何带有全功能NFC的设备贴近卡片来读取信息。(苹果设备除外,Apple没有给用户开放NFC使用权限)

Android端建议使用NFC Tools Plus。

安装可以读取卡片信息的软件后,打开NFC,贴近卡片,看到卡片的灯亮即为读取成功。

您将会在您的软件内看到类似如下内容:

其中 QSL-INFO 为精简过的卡面上记载的通联信息,与卡面记载一般相同。

SING 为经过我私钥加密的通联信息,源文本与上方相同。

PUBLIC-KEY 为用于解密信息的公钥,可以用这段文字去解密上方我加密的内容。

3.2 信息验证

该卡片内信息的内容具有不可篡改性。卡片已经被设置禁止写入,正常情况下,QSL-INFO即为正确的通联信息。

当然,如果对信息的真实性存疑,可以使用下方的 SINGPUBLIC-KEY 对信息进行验证。

publickey在QSL卡片上有二维码提供备份)

3.2.1 使用在线工具验证

如果您没有代码基础,您可以使用这个在线工具进行验证。

您需要做的只有:复制 SING PUBLIC-KEY中的内容,点击解密即可:

将解密后的内容与原QSL-INFO内容对比,如完全一致则代表未被篡改

如发现有不一致的地方则原内容被篡改请以解密后的内容为准

3.2.2 使用Openssl命令行解密

既然你选择了这种方法,想必也不需要我教你

openssl rsautl -decrypt -pubin -inkey public.pem -in encrypted.txt -out decrypted.txt

这是一段代码示例,你需要在电脑里安装了Openssl的情况下,把公钥存储为public.pem ,加密的文本村存储为encrypted.txt后,在该目录下输入以上命令。

该命令会使用将public.pem解密encrypted.txt并将解密后的结果存储为decrypted.txt

然后的步骤就与上一步相同:

将解密后的内容与原QSL-INFO内容对比,如完全一致则代表未被篡改

如发现有不一致的地方则原内容被篡改请以解密后的内容为准

4.原理简介

该卡片是我自己画的PCB板,将线圈预先埋在pcb内(感谢嘉立创),制作出来板子后自行焊接NFC芯片(采用恩智浦216芯片,可以存储888字节的数据)以及led灯,方便用户识别刷卡状态。

将NFC芯片内写入精简后的QSL信息,然后把写入的信息通过我手里的RSA私钥加密,得到的内容和公钥同时写入nfc卡片内,然后设置卡片为不可写入。

如QSL内容被篡改,也可以通过下方的验证信息来恢复篡改前的内容;如签名信息被篡改,无法解密或解密有误,则该卡片不可信;如公钥被篡改,可以通过卡面上的二维码获取备用公钥。这样就做到了电子卡片的不可篡改性,即使被篡改也可以被确定更正或宣布该卡片不可信。

5.相关阅读

在我没写完篇头的文章时,阅读以下内容会方便你理解:

理解公钥与私钥 - 知乎 (zhihu.com)

SSH 公钥 私钥的理解 - 知乎 (zhihu.com)

NTAG213_215_216.pdf (nxp.com)

搞懂Nfc刷卡看这篇就够了 - 知乎 (zhihu.com)

NXP 公司的 RFID 卡 - sammei - 博客园 (cnblogs.com)

届ける言葉を今は育ててる
最后更新于 2023-12-10