对RFC系列文档中ASN.1 bitstring 编码取值的解释

        在RFC系列(https://www.ietf.org/rfc.html)文档中,对于数据的封装格式,一般采用ASN.1编码形式描述。这样做的原因在于:ASN.1编码是一种与软硬件无关的数据格式定义方法,具有普适性。在前一篇博文中,介绍过ASN.1对bitstring类型的编码方法,在本文中将举例说明ASN.1 bitstring在RFC文档中的应用。
        在RFC5280 《Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile》中的4.2.1.3. Key Usage部分,使用bitstring类型描述密钥用途,如下所示:
KeyUsage ::= BIT STRING {
  digitalSignature (0),
  nonRepudiation (1), -- recent editions of X.509 have
                                   -- renamed this bit to contentCommitment
  keyEncipherment (2),
  dataEncipherment (3),
  keyAgreement (4),
  keyCertSign (5),
  cRLSign (6),
  encipherOnly (7),
  decipherOnly (8) }
        比特串中不同位置的比特,如果值为1,表示具有该比特位对应的密钥用途;如果值为0,表示不具备该比特位的密钥用途。在上面的例子中,比特位从0开始计,比特位置与密钥用途的对应关系如下图:

        如果一张数字证书的密钥用途是keyCertSign,则应将上图中第5比特位的值设为1,那么此时表示密钥用途的比特串为{0, 0, 0, 0, 0, 1, 0, 0, 0}。由于一般使用DER编码,要求当一个比特串作为编码器的输入时,其最后一个比特必须为1,所以需要去掉最后一个比特1之后的所有比特0,此时密钥用途比特串的值应该表示为:{0, 0, 0, 0, 0, 1}。对这个比特串进行DER编码,得到的编码结果为:0x3  0x2  0x2  0x4,编码过程如下图:

        在Windows中查看一张密钥用途为keyCertSign的证书,显示内容如下:


用Asn1View工具查看这张证书的密钥用途部分,显示如下:


        同一张数字证书可能会具有多种密钥用途,此时可能会有多个比特位的值为1。比如一张数字证书具有的密钥用途包括以下几种:digitalSignature,nonRepudiation,keyCertSign,cRLSign,使用比特串表示时应写为:{1, 1, 0, 0, 0, 1, 1, 0, 0}。对这个比特串进行编码的过程如下:

        在Windows中查看一张密钥用途包括digitalSignature,nonRepudiation,keyCertSign,cRLSign的证书,显示内容如下:


        用Asn1View工具查看这张证书的密钥用途部分,显示如下:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值