HarmonyOS鸿蒙Next中关于ECC压缩/非压缩公钥的区别

HarmonyOS鸿蒙Next中关于ECC压缩/非压缩公钥的区别

ECC相关记录

在椭圆曲线密码学(ECC)中,公钥数据和点数据都与椭圆曲线上的点相关。

ECC公钥和点组成和区别

公钥数据:在 ECC 中,公钥由椭圆曲线上的一个点表示。公钥数据包括两个坐标值,通常是 X 坐标和 Y 坐标。这两个坐标值可以表示椭圆曲线上的一个点。

点数据:点数据是指椭圆曲线上的点的信息。

非压缩和压缩的公钥数据区别

  • 非压缩公钥:非压缩公钥使用完整的坐标值表示一个椭圆曲线上的点。对于素数域上的曲线,通常使用 X 坐标和 Y 坐标来表示点的位置。

  • 压缩公钥:压缩公钥只使用一个坐标值和一个标志位来表示一个椭圆曲线上的点。对于素数域上的曲线,通常只使用 X 坐标表示点的位置。而 Y 坐标可以通过计算得到,或者使用一个标志位来表示其奇偶性。

压缩公钥的存在是为了减小公钥的长度,以便在存储和传输时节省空间和带宽。由于椭圆曲线上的点的数量是有限的,每一个 X 坐标都只对应两个 Y 坐标,一个是奇数的,一个是偶数的。因此,可以通过一个标志位来指示使用哪一个 Y 坐标,从而实现对公钥进行压缩表示。

非压缩和压缩的点数据区别

根据RFC5480规范中第2.2节的描述:

  • 非压缩点数据,表示为前缀0x04|x坐标|y坐标;
  • 压缩的点数据,对于Fp素数域上的点,表示为:前缀0x03|x坐标 (坐标y是奇数时),前缀0x02|x坐标 (坐标y是偶数时)。

比如椭圆曲线y2=x3+ax+b,算出+y和-y,因为都是mod p,所以结果-y mod p = p-y mod p,又因为p是奇素数,所以y和-y肯定是一奇一偶。

而在椭圆曲线密码学中,生成公钥时需要确定 Y 坐标的奇偶性。

通常情况下,生成公钥的过程中使用的是非压缩的点数据,因此需要明确选择一个 Y 坐标值来得到完整的非压缩点。

在OpenSSL中,根据椭圆曲线上点的性质,可以通过计算确定 Y 坐标的奇偶性。

但通过OpenSSL生成椭圆曲线公钥,确定 Y 坐标的奇偶性时,具体的实现细节可能会因 OpenSSL 版本、使用的椭圆曲线参数和算法而有所不同。

因此,在具体的应用中,建议查阅 OpenSSL 的文档或参考相关的实现代码以了解详细的生成公钥过程和 Y 坐标奇偶性判断的方法。


更多关于HarmonyOS鸿蒙Next中关于ECC压缩/非压缩公钥的区别的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中关于ECC压缩/非压缩公钥的区别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,ECC(椭圆曲线加密)的公钥分为压缩和非压缩两种格式。非压缩公钥包含完整的x和y坐标,通常以04开头,长度为65字节。压缩公钥仅包含x坐标和y坐标的符号位,以02或03开头,长度为33字节。压缩公钥通过减少存储空间和传输带宽,提高了效率,但需要在使用时解压缩为完整坐标。选择哪种格式取决于具体应用场景对存储和性能的需求。

回到顶部