跳转到主要内容

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 查看哈希值)

上传时间 Python 3

由以下组织支持