1.概述
椭圆曲线密码涉及有限域上的椭圆曲线上的算术运算。椭圆曲线可以定义在任何数字域上(实数、整数、复数),但在密码学中,椭圆曲线最常用于有限素数域。
素数域上的椭圆曲线由一组实数(x, y)组成,满足以下等式:
方程的所有解的集合构成了椭圆曲线。改变a和b会改变曲线的形状,这些参数的微小变化会导致(x, y)解集的重大变化。
2.NIST推荐使用椭圆曲线
美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)直属美国商务部,从事物理、生物和工程方面的基础和应用研究,以及测量技术和测试方法方面的研究,提供标准、标准参考数据及有关服务,在国际上享有很高的声誉。
FIPS PUB 186- 4:13推荐了素数域GF(p)上的五素数域椭圆曲线。DLMS/COSEM选取P-256和P-384曲线,如表13所示。
表13 - DLMS/COSEM安全套件中的椭圆曲线
3.数据转换
本条款描述了用于将不同用于指定公钥算法的数据类型之间进行转换的原始数据类型。这些数据类型包括八进制字符串(OS)、位字符串(BS)、整数(I)、域元素(FE)和椭圆曲线点(ECP)。DLMS/COSEM使用八进制字符串来表示公钥算法的元素,并使用从和到八进制字符串的数据类型之间的转换原始数据类型。长度为d的八进制字符串Md-1 Md-2 ... M0被编码为A-XDR OCTET STRING,其中左起第一个八进制字符Md-1对应于OCTET STRING编码值的第一个八进制字符。
3.1 位字符串和八位字符串之间的转换(BS2OS)
将位串转换为字节串的原始数据转换函数称为位串到字节串转换函数(BS2OS)。它将位串作为输入,并输出字节串。位串bl-1 bl-2 ... b0的长度为l,将被转换为字节串Md-1 Md-2 ... M0的长度d = ⌈l/8⌉。
转换器在左边添加足够的零来使位数成为8的倍数,然后将数据分割成八位字节。更确切地说,转换应如下:
- 当0≤i < d - 1时,令八位元Mi = b8i+7 b8i+6…b8i,;
- 最左边的八位Md-1应当将其最左边的8d-l位设为零。
- 它最右边的8 - (8d - 1)位应该是bl-1 bl-2…b8d-8。
3.2八位串和位串之间的转换(OS2BS)
将八位字符串转换为位字符串的数据转换原语称为八位字符串到位字符串转换原语(octet string to bit string conversion primitive, OS2BS)。它接受八位字符串作为输入,并输出位字符串。长度为d的八位字符串Md-1 Md-2…M0需要转换为长度为l的位字符串bl-1 bl-2…b0,其中d =⌈l/8⌉,最左八位的最左8d-l位为零。
更准确地说,转换应如下:
- 当0≤I < l - 1时,设比特b8i+7 b8i+6…b8i = Mi;
- 其最左边八位的最左边(8d - l)位应为零。
3.3整数与八位字符串的转换(i2s)
将整数转换为八位字节字符串的数据转换原语称为integer to octet
字符串转换原语,或i2s。它接受一个非负整数x和八位字符串的期望长度d作为输入。长度d必须满足256d > x,否则输出“error”。i2s输出相应的八位字节字符串。
整数x应以其唯一的l位进制256表示:
- x = xd-1·256 d 1 + xd-2·256 d2 + x1····+ 256 + x0,;
- 当0≤I≤d-1时,0≤xi < 256;
- Mi = xi,对于0≤i≤d-1。
输出字节串为Md-1 Md-2…M0。
3.4八字节串与整数的转换(OS2I)
将八位字节字符串转换为整数的数据转换原语称为“八位字节字符串”
整数转换原语,或OS2I。它以长度为d的八位串Md-1 Md-2…M0作为输入,输出相应的整数x。对于长度为0的八位串,转换输出整数0。
每个八位被解释为以256为基数的非负整数。更确切地说,转换应如下:
- xi = Mi,对于0≤i≤d-1;
- x = xd-1·256 d 1 + xd-2·256 d2的x1 +····256 + x0。
3.5字段元素与八位字符串之间的转换(fe2s)
将字段元素转换为八位元组字符串的数据转换原语称为字段元素到八位元组字符串转换原语,或fe2o。它接受一个字段元素作为输入,并输出相应的八位字节字符串。将域元素x∈Fp应用带参数l的i2s转换原语转换为长度d =≤log256 p <e:1>的八位元字符串Md-1 Md-2…M0,其中
•FE2OS(x) = I2OS(x, l)。
3.6八位字符串和字段元素之间的转换(OS2FE)
将八位元组字符串转换为字段元素的数据转换原语称为八位元组字符串到字段元素转换原语,或OS2FE。它接受一个八位字符串作为输入,并输出相应的字段元素。长度为d的八位字符串Md-1 Md-2…M0被转换为字段元素x
∈Fp,其中应用OS2I转换原语:
•OS2FE(x) = OS2I(x) mod p。