Skip to main content

CBOR 对象签名和加密 (COSE) 实施

项目描述

pycose:snake: --- CBOR 对象签名和加密

Python 包 文件状态

该项目是 IETF CBOR 编码消息语法 (COSE) 的 Python 实现。COSE 已达到 RFC 状态,现在可在 RFC 8152 中使用。

安装

$ pip install cose

:warning: WARNING :warning:: PyPI上有一个名为的包,pycose其中包含来自此存储库的旧代码。由于我不是维护者,因此我无法更新该软件包或将其删除。

什么是 COSE?

CBOR 编码消息语法 (COSE) 是一种用于简明表示小消息RFC 8152的数据格式。COSE 针对低功耗设备进行了优化。可以对消息进行加密、MAC 化和签名。有 6 种不同类型的 COSE 消息:

  • Encrypt0:具有单个收件人的加密 COSE 消息。有效负载和 AAD 由共享的 CEK(内容加密密钥)保护
  • 加密:加密的 COSE 消息可以有多个收件人。对于每个收件人,CEK 都使用 KEK(密钥加密密钥)加密 - 使用 AES 密钥包装 - 并添加到消息中。
  • MAC0:具有一个接收者的经过身份验证的 COSE 消息。
  • MAC:经过身份验证的 COSE 消息,可以有多个收件人。对于每个收件人,身份验证密钥都使用 KEK 加密并添加到消息中。
  • Sign1:带有单个签名的签名 COSE 消息。
  • 签名:一个已经被多个实体签名的 COSE 消息(每个签名都携带在一个 COSE 签名结构中,添加到消息中)。

一个基本的 COSE 消息由 2 个信息 有效负载组成:

  • 受保护的标头:此消息字段包含需要保护的信息。在加密、计算 MAC 或签名期间会考虑此信息。
  • 不受保护的标头:不受保护的标头中包含的信息不受密码算法的保护。
  • 有效负载:包含消息的有效负载,受加密算法保护(mac'ed、签名或加密)。

此外,根据消息类型,可以添加其他消息字段:

  • MAC签名(用于MAC0Sign1消息)
  • COSE 收件人COSE 签名(用于MAC加密签名消息)

例子

编码

from binascii import unhexlify
from cose.messages import Enc0Message
from cose.keys import SymmetricKey

# Create a COSE Encrypt0 Message
msg = Enc0Message(
    phdr={'ALG': 'A128GCM', 'IV': unhexlify(b'01010101010101010101010101010101')},
    uhdr={'KID': b'meriadoc.brandybuck@buckland.example'},
    payload='a secret message'.encode('utf-8')
)

# Create a COSE Symmetric Key
cose_key = SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f'))
msg.key = cose_key

# Performs encryption and CBOR serialization
msg.encode()
b'\xd0\x83U\xa2\x01\x01\x05P\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xa1\x04X$meriadoc.brandybuck@buckland.exampleX \xc4\xaf\x85\xacJQ4\x93\x19\x93\xec\n\x18c\xa6\xe8\xc6n\xf4\xc9\xac\x161^\xe6\xfe\xcd\x9b.\x1cy\xa1'

解码

from binascii import unhexlify
from cose.messages import CoseMessage
from cose.keys import SymmetricKey

# message bytes (CBOR encoded)
msg =  b'\xd0\x83U\xa2\x01\x01\x05P\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xa1\x04X$meriadoc.brandybuck@buckland.exampleX \xc4\xaf\x85\xacJQ4\x93\x19\x93\xec\n\x18c\xa6\xe8\xc6n\xf4\xc9\xac\x161^\xe6\xfe\xcd\x9b.\x1cy\xa1'

cose_msg = CoseMessage.decode(msg)

# Create a COSE Symmetric Key
cose_key = SymmetricKey(key=unhexlify(b'000102030405060708090a0b0c0d0e0f'))
cose_msg.key = cose_key

cose_msg.decrypt()
b'a secret message'

更多示例

更多示例可以在这里找到

测试

要运行您需要的测试套件pytest

$ pip install pytest

移动到存储库的根目录并键入:

$ pytest

密码学

该项目依赖于pyca/cryptography进行所有加密操作,确定性 ECDSA 算法除外。对于确定性 ECDSA ,cose使用python-ecdsa

文档

有关 COSE 和coseAPI 的更多文档,请访问:https ://pycose.readthedocs.io

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

cose-0.9.dev8.tar.gz (32.8 kB 查看哈希

已上传 source

内置分布

cose-0.9.dev8-py3-none-any.whl (49.0 kB 查看哈希

已上传 py3