命名数据网络 | 证书(Certificate)

命名数据网络 | 证书(Certificate)

参考文档:https://docs.named-data.net/NDN-packet-spec/current/certificate.html

由于签名验证是 NDN 应用程序中的常见操作,因此定义通用证书格式以标准化公钥验证过程非常重要。由于每个 NDN 数据包都经过签名,因此以公钥为内容的数据包在概念上就是证书。但是,单独的数据包规范不足以作为通用 NDN 证书格式的规范,因为后者需要额外的规定。例如,证书遵循特定的命名方案,可能需要包括有效期、撤销信息等。

本文介绍 NDN 证书的命名和结构。

Structure of an NDN certificate
  +--------------------------+
  |           Name           |
  +--------------------------+
  |         MetaInfo         |
  |+------------------------+|
  || ContentType:  KEY(2)   ||
  |+------------------------+|
  |+------------------------+|
  || FreshnessPeriod: ~1h   ||
  |+------------------------+|
  +--------------------------+
  |          Content         |
  |+------------------------+|
  ||       Public Key       ||
  |+------------------------+|
  +--------------------------+
  |       SignatureInfo      |
  |+------------------------+|
  || SignatureType:  ...    ||
  || KeyLocator:     ...    ||
  || ValidityPeriod: ...    ||
  || ...                    ||
  |+------------------------+|
  +--------------------------+
  |       SignatureValue     |
  +--------------------------+
Certificate = DATA-TYPE TLV-LENGTH
                Name     ; /<IdentityName>/KEY/<KeyId>/<IssuerId>/<Version>
                MetaInfo ; ContentType == KEY, FreshnessPeriod required
                CertificateContent
                CertificateSignatureInfo
                SignatureValue

CertificateContent = CONTENT-TYPE TLV-LENGTH SubjectPublicKeyInfo

CertificateSignatureInfo = SIGNATURE-INFO-TYPE TLV-LENGTH
                             SignatureType
                             KeyLocator
                             ValidityPeriod
                             *CertificateExtension

Name

证书名称由五个部分组成,如下所示:

/<IdentityName>/KEY/<KeyId>/<IssuerId>/<Version>

证书名称以公钥绑定到的身份的名称开头。标识后面跟着一个字面值的 KEY GenericNameComponent,以及 KeyId、IssuerId 和 Version 组件。

证书名称以公钥绑定到的身份的名称开头。标识后面跟着一个字面值的 KEY GenericNameComponent,以及 KeyId、IssuerId 和 Version 组件。

KeyId 是一个不透明的名称组件,用于标识证书名称空间中公钥的实例。KeyId的值由名称空间所有者控制,可以是一个8字节的随机数、证书公钥的 SHA-256 摘要、时间戳或任何其他唯一的数字标识符。

IssuerId 是一个不透明的名称组件,用于标识证书的颁发者。该值由证书颁发者控制,与 KeyId 类似,可以是一 个8 字节的随机数、颁发者公钥的 SHA-256 摘要或任何其他自由形式的标识符。

Version 表示证书的版本号。该组件被编码为 VersionNameComponent,遵循 NDN 命名约定 的修订 1(基于标记的)或修订 3(基于类型的)。

示例:

/edu/ucla/cs/yingdi/KEY/%03%CD...%F1/%9F%D3...%B7/v=1617592200702
\_________________/    \___________/\___________/\______________/
   Identity Name           KeyId      IssuerId       Version

MetaInfo

内容类型必须设置为 KEY(2)。

FreshnessPeriod 必须显式指定。推荐值为 3600000(1 小时)。

Content

即为 CertificateContent。

证书的 Content 元素包含公钥的实际位,格式为 DER 编码的 SubjectPublicKeyInfo 结构。

SignatureInfo

证书的 SignatureInfo 元素需要包含 ValidityPeriod 元素。

ValidityPeriod 包含两个 TLV 子元素:NotBefore 和 NotAfter。其中,NotBefore 表示证书生效时间,NotAfter 表示证书过期时间。

它们每个都携带 ISO 8601-1:2019 压缩格式的 UTC 时间戳,不包含最后的“Z”字符(“YYYYMMDDThhmmss”,例如 “20201231T235959”)。

ValidityPeriod = VALIDITY-PERIOD-TYPE TLV-LENGTH
                   NotBefore
                   NotAfter

NotBefore = NOT-BEFORE-TYPE TLV-LENGTH IsoDate "T" IsoTime

NotAfter = NOT-AFTER-TYPE TLV-LENGTH IsoDate "T" IsoTime

IsoDate = 8DIGIT ; YYYYMMDD (UTC)

IsoTime = 6DIGIT ; hhmmss (UTC)

Extension

即为 CertificateExtension。

证书可以在其 SignatureInfo 元素中携带 0 个或多个扩展字段。

根据其 TLV-TYPE 编号,扩展可以是关键或非关键的。关键 TLV-TYPE 意味着如果验证器不能识别或解析扩展,则验证器必须拒绝整个证书。相反,如果验证器无法识别具有非关键 TLV-TYPE 的扩展,则可能忽略该扩展。参考一般的 演化规则 来确定 TLV-TYPE 是否是关键的。

TLV-TYPE 号码范围 [256,511] 保留给扩展使用。本文档目前定义了一个扩展名:AdditionalDescription。

CertificateExtension = AdditionalDescription

AdditionalDescription

AdditionalDescription 是非关键扩展名,提供有关证书的附加信息。

该信息表示为一组键值对。key和value都是UTF-8字符串,例如(“Organization”, “UCLA”)。

证书的颁发者可以指定任意的键值对,以提供有关证书的进一步详细信息。

AdditionalDescription = ADDITIONAL-DESCRIPTION-TYPE TLV-LENGTH
                          1*DescriptionEntry

DescriptionEntry = DESCRIPTION-ENTRY-TYPE TLV-LENGTH
                     DescriptionKey
                     DescriptionValue

DescriptionKey = DESCRIPTION-KEY-TYPE TLV-LENGTH 1*OCTET

DescriptionValue = DESCRIPTION-VALUE-TYPE TLV-LENGTH 1*OCTET
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值