当前位置: 首页 > 工具软件 > mod_asn > 使用案例 >

PKCS#1规范阅读笔记2--------公私钥ASN.1结构

左丘昊天
2023-12-01

     PKCS#1中介绍了哈希算法的OID等的ASN.1结构,因为使用ASN.1的解码工具(比如:ASN1View)时,会自动显示出各OID的含义,所以这里就不说明了。下面就只简单摘抄一下RSA公私钥的ASN.1的结构。

     ASN.1的编码回头会专门介绍,为了便于理解:SEQUENCE,暂时就理解为C语言里面的结构体就好;INTEGER,理解为正数类型就好。

    ASN.1抽象语法标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。

 

     RSA公钥:

     RSAPublicKey :: = SEQUENCE{

         modulus              INTEGER,   ------ n(模长,正整数)

         publicExponent    INTEGER    ------ e (指数,3~n-1范围内的正整数)

      }

     RSA公钥的ASN.1结构,可以表述为:名为RSAPublicKey的这个结构呢,就可以用来表述一个RSA公钥了。它有两个INTEGER型变量:modulus和publicExponent。

 

     RSA私钥:

     RSAPrivateKey :: = SEQUENCE{

         version                 Version,

         modulus               INTEGER,   ------ n

         publicExponent     INTEGER,   ------ e

         privateExponent    INTEGER,   ------ d

         prime1                 INTEGER,   ------ p

         prime2                 INTEGER,   ------ q

         exponent1            INTEGER,   ------ d mod (p -1)

         exponent2            INTEGER,   ------ d mod (q -1)

         coefficient            INTEGER,   ------- (inverse of q) mod p

         otherPrimeInfos    OtherPrimeInfos   ------ OPTIONAL(当version为0时,不存在;当 version为1时,必须有)

     }

     Version :: = INTEGER{ two-prime(0), multi(1)}

     版本号的ASN.1结构可以表述为:名为Version的结构体,用于描述版本信息。它类似于枚举类型,其变量类型为INTEGER,取值为0或1。

 

     OtherPrimeInfos :: = SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo

     OtherPrimeInfos 是由 OtherPrimeInfo组成的数组

 

     OtherPrimeInfo :: = SEQUENCE {

        prime          INTEGER,   --- ri

        exponent     INTEGER,   --- di

        coefficient    INTEGER    --- ti

     }

     推荐一篇专门介绍ASN.1编码的文章:《ASN.1/BER/DER 编码子集入门指南》

转载于:https://my.oschina.net/hejunbinlan/blog/1475325

 类似资料: