CBOR 对象签名和加密 (COSE) 实施
项目描述
pycose:snake: --- CBOR 对象签名和加密
该项目是 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或签名(用于MAC0或Sign1消息)
- 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 和cose
API 的更多文档,请访问:https ://pycose.readthedocs.io
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
cose-0.9.dev8.tar.gz
(32.8 kB
查看哈希)
内置分布
cose-0.9.dev8-py3-none-any.whl
(49.0 kB
查看哈希)
关
cose- 0.9.dev8 -py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f1c3be98e50724e846e3a1d23efe19a150665a4f24917ac8bfbc8e5abb31ccb0 |
|
MD5 | 0d5c0ba23713d2fef7ba1ed9c1f81b81 |
|
布莱克2-256 | 15d58adf228892da7aafc4893129e08c689465ab0cbabe0e6f582306d6e0d4de |