DLMS/COSEM中公开密钥算法的使用_椭圆曲线加密法

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。

相关推荐
颜酱6 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
zone773911 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
CoovallyAIHub14 小时前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub14 小时前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉
CoovallyAIHub14 小时前
Claude Code 突然变成了 66 个专家?这个 5.8k Star 的开源项目,让我重新理解了什么叫"会用 AI"
深度学习·算法·计算机视觉
兆子龙14 小时前
前端哨兵模式(Sentinel Pattern):优雅实现无限滚动加载
前端·javascript·算法
CoovallyAIHub18 小时前
9个视觉语言模型工厂实测:Qwen 87.9%碾压全场,你的显卡能跑哪个?
算法
SparkX开源AI知识库18 小时前
手摸手带你安装OpenClaw并对接飞书
算法·架构
一语071618 小时前
3分钟搞懂深度学习AI:实操篇:卷积层
人工智能·算法