Python库,用于处理NFC卡(如NTAG 424 DNA)的安全动态消息(SDM)
项目描述
pylibsdm - 使用Python的NFC安全动态消息
pylibsdm是一个Python库(SDK),用于使用Python处理NFC卡的安全动态消息(SDM)。
安全动态消息是一种技术,它通过标准机制在NFC标签上添加安全功能。虽然标准NFC数据(所谓NDEF消息,例如文本、URL等)可以写入任何兼容的标签,但SUN功能的标签可以对数据部分进行密码学签名和可选加密,然后任何标准NFC阅读器都可以读取。
功能
- 卡片管理/配置
- 配置NDEF文件设置(镜像、偏移量、使用的密钥等)
- 配置NDEF文件数据(URL)
- 密钥提供
- SUN(安全唯一NFC)的后端实现
- 解密和验证SDM数据(镜像)
- 验证来自URI参数的信息
支持的标签
安装和使用
pylibsdm
作为标准Python库提供,并可以从PyPI安装
pip install "pylibsdm[cli]"
cli
额外安装了sdmutil
命令行工具,该工具可以用作独立工具来处理标签。
作为库在自有代码中的使用
以下示例展示了如何在自定义应用程序中使用 pylibsdm
。因此,它可以被视为编写SUN功能应用程序的SDK。
在代码中配置标签
我们将为以下行为配置一个标签
- 将应用程序密钥1和2更改为我们的密钥
- 配置对NDEF数据的写入访问需要使用应用程序密钥1进行身份验证
- 配置SDM使用密钥2对数据进行加密和签名
- 镜像加密的PICC数据(UID和读取计数器)
- 镜像用于验证的CMAC
from pylibsdm.tag.ntag424dna import Tag
# We need a working tag object from nfcpy
nfc_tag = ...
# Configure the SDM tag object for communication
sdm_tag = Tag(nfc_tag)
# Set current master app key nr 0 for authentication
sdm_tag.set_key(0, b"\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff")
# Change app keys 1 and 2 for later use
sdm_tag.change_key(1, 16 * b"\xaa")
sdm_tag.change_key(2, 16 * b"\xaa")
# Configure attributes for mirroring
file_option = FileOption(sdm_enabled=True, comm_mode=CommMode.PLAIN)
sdm_options = SDMOptions(
uid=True,
read_ctr=True,
read_ctr_limit=False,
enc_file_data=False,
tt_status=False,
ascii_encoding=True,
)
# We configure free reading access of NDEF, writing data is limited to app key 1,
# and changing file settings to the master app key 0
access_rights = AccessRights(
read=AccessCondition.FREE_ACCESS,
write=AccessCondition.1,
read_write=AccessCondition.KEY_1,
change=AccessCondition.KEY_0,
)
# When reading the NDEF message, app key 2 is used for
sdm_acceess_rights = SDMAccessRights(
file_read=AccessCondition.KEY_2,
meta_read=AccessCondition.KEY_2,
ctr_ret=AccessCondition.KEY_2,
)
# Aggregate options and offsets in NDEF data
file_settings = FileSettings(
file_option=file_option,
access_rights=access_rights,
sdm_options=sdm_options,
sdm_access_rights=sdm_acceess_rights,
picc_data_offset=32,
mac_offset=67,
mac_input_offset=67,
)
sdm_tag.change_file_settings(2, file_settings)
项目详细信息
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
pylibsdm-1.0.0a0.dev2.tar.gz (24.8 kB 查看哈希值)
构建分布
pylibsdm-1.0.0a0.dev2-py3-none-any.whl (36.1 kB 查看哈希值)
关闭
pylibsdm-1.0.0a0.dev2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7035d8e858c5aac458db6416b16fb4867cbf13e0fa490e534e6cab997e0362dd |
|
MD5 | 27bf38721557749e6668a4f7c1c7ba92 |
|
BLAKE2b-256 | 46ae5ba908011bab782f5be29ec928eedfb6ccf63349c2588d6e233c0e6f2b11 |
关闭
pylibsdm-1.0.0a0.dev2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c5fe71439378f1acafb1d1f41365d90373d251aa2d045ca6ecda8988a2514879 |
|
MD5 | 1d12b466313cf9537e441d6392f1e41c |
|
BLAKE2b-256 | 47d55e9fb6fdc91e6feb515c51f6fed4a18e4a6e78693fd49d2ef5c516c2da32 |