#finite-fields #field #element #operations #ec #bitcoin #module

bitcoinsecp256k1-field

用于椭圆曲线密码学中的域元素模块

4个版本

0.1.16-alpha.02023年3月31日
0.1.13-alpha.02023年3月17日
0.1.12-alpha.02023年1月19日
0.1.10-alpha.02023年1月18日

#9#ec

Download history 133/week @ 2024-03-11 170/week @ 2024-03-18 328/week @ 2024-03-25 276/week @ 2024-04-01 130/week @ 2024-04-08 161/week @ 2024-04-15 171/week @ 2024-04-22 156/week @ 2024-04-29 210/week @ 2024-05-06 165/week @ 2024-05-13 172/week @ 2024-05-20 121/week @ 2024-05-27 130/week @ 2024-06-03 134/week @ 2024-06-10 172/week @ 2024-06-17 191/week @ 2024-06-24

627 每月下载量
92 个crate(4个直接) 中使用

MIT 许可证

590KB
2K SLoC

Rust 1.5K SLoC // 0.8% comments GNU Style Assembly 742 SLoC // 0.1% comments

简短描述标签:用于在secp256k1椭圆曲线密码学中操作有限域的Rust crate。

更长的描述

bitcoinsecp256k1-field Rust crate是比特币系统中用于在secp256k1椭圆曲线密码学中操作有限域的实用工具组件。此crate提供了一套用于操作有限域的操作,这些操作用于secp256k1曲线算术。有限域算术操作包括域元素的加法、乘法、求逆和平方根。

此crate还提供将域元素从二进制序列化和反序列化的实用工具,以及域元素的比较函数和标准化函数。

此crate使用的底层数学概念包括有限域上的算术运算,这对于椭圆曲线密码学至关重要。secp256k1曲线定义在模素数的一个有限域上,此crate提供了操作该字段中元素的必要操作。

请注意,此crate是比特币核心从C++直接翻译到Rust的一部分。因此,某些函数体可能仍在翻译过程中。请注意,一旦翻译完成,此系统将成为可测试的。

135>什么是有限域?

在抽象代数中,有限域(也称为Galois域)是包含有限数量元素的域。域是推广加法、减法、乘法和除法等算术操作性质的一类代数结构,在数学和计算机科学的各个领域都很重要,包括密码学、编码理论和数论。

有限域由素数p和一个正整数n指定,表示为GF(p^n)。该域包含p^n个元素,可以将其视为从0到p^n-1的数字。域中的算术运算定义如下:结果总是域中的另一个元素,并且它们满足某些性质,例如交换性、结合性、分配性和存在加法和乘法逆元。

有限域的一个重要性质是,算术运算是在模p下进行的,其中p是一个素数。这意味着当值达到p时,它们会循环,因此结果始终在0到p-1的范围内。另一个重要性质是,有限域的元素在乘法下形成一个循环群,这意味着每个非零元素都有一个乘法逆元。

有限域在密码学中有很多应用,包括数据的加密和解密、数字签名的生成和验证,以及Diffie-Hellman密钥交换和椭圆曲线密码学等密码协议的实现。

136>有限域的性质有哪些?

有限域,也称为伽罗瓦域,是一个元素数量有限的域。有限域的性质包括

  1. 有限性:域有有限数量的元素,通常用q表示。

  2. 交换性:加法和乘法是交换的,意味着对于域中的所有a, b,有a + b = b + a和ab = ba。

  3. 结合性:加法和乘法是结合的,意味着对于域中的所有a, b, c,有(a + b) + c = a + (b + c)和(ab)c = a(bc)。

  4. 分配性:乘法对加法是分配的,意味着对于域中的所有a, b, c,有a(b + c) = ab + ac。

  5. 存在单位元:域有一个加法单位元0和一个乘法单位元1,使得对于域中的所有a,有a + 0 = a和a1 = a。

  6. 存在逆元:域中每个非零元素a都有一个加法逆元-a和乘法逆元a^-1,使得a + (-a) = 0和aa^-1 = 1。

  7. 唯一分解:域中每个非零元素a都可以写成不可约元素的乘积,这意味着这些元素不能进一步分解为非零元素的乘积。

  8. 特征:域有一个特征p,这是使所有a在域中满足pa = 0的最小正整数。如果不存在这样的整数,则特征为0。

137>为什么它们在密码学中很有用?

有限域在密码学中很有用,因为它们提供了一个数学结构,允许进行高效的算术运算,这对于许多密码算法是必需的。特别是椭圆曲线密码学,它在现代密码学中广泛用于密钥交换、数字签名和加密,高度依赖于有限域。

有限域也用于对称密钥密码学,在那里它们用于执行密钥扩展和置换等操作。此外,它们还用于纠错码,纠错码用于检测和纠正数据传输中的错误,如在卫星通信和存储设备中。

总的来说,有限域为密码学提供了一个强大的数学工具,使高效和安全的密码算法的开发成为可能。

138>我们如何在计算机内存中表示它们?

有限域可以使用各种方法在计算机内存中表示。一种常见的方法是将域的每个元素表示为一个整数,该整数模一个素数,其中素数被选得足够大,以容纳所需的域大小。

例如,在有限域GF(2^256)的情况下,域的元素可以表示为模素数2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4的整数

    1. 这意味着域中的每个元素都可以表示为一个无符号256位整数,其中整数的值减模素数以获得相应的域元素。

在计算机内存中表示有限域的另一种方法是使用多项式算术,其中域中的每个元素都表示为定义域时选择的不可约多项式的次数低于的多项式。例如,在GF(2^256)的情况下,可以使用不可约多项式x^256 + x^10 + x^5 + x^2 + 1来定义域,域中的每个元素都可以表示为小于256次的多项式,其系数属于二元域GF(2)。多项式算术提供了更紧凑的域元素表示,但对于某些操作可能不如整数算术高效。

139> 在使用有限域时我们应该注意什么?

当使用有限域时,有一些事情需要注意:

  1. 模运算:有限域中的所有操作都是在某个素数或不可约多项式下进行的。确保所有中间值和结果也都以这个素数或多项式为模进行简化,以防止溢出并确保计算与域性质一致。

  2. 素数或多项式的选择:用于定义有限域的素数或不可约多项式的选择可以显著影响使用该域的密码学算法的安全性和性能。选择一个足够大且随机选择的素数或多项式,以防止如离散对数或多项式分解等攻击。

  3. 时间攻击:通过测量在有限域中执行某些操作所需的时间,可以使用时间攻击来获取关于私钥的信息。实现应使用恒定时间算法来防止此类攻击。

  4. 侧信道攻击:其他侧信道攻击,如功耗分析或电磁分析,可以通过测量执行加密操作的设备的功耗或电磁辐射来提取关于私钥的信息。可以使用屏蔽、电源滤波和安全的编程技术等对策来防止这些攻击。

  5. 实现错误:使用有限域的密码学算法实现中的错误可能导致缓冲区溢出、整数溢出和内存损坏等漏洞。实现应彻底测试和验证,以确保正确性和安全性。

依赖项

~88MB
~831K SLoC