29、亏格2超椭圆曲线族的构造与计算

亏格2超椭圆曲线族的构造与计算

1. 引言

在密码学领域,亏格2超椭圆曲线有着重要的应用。本文将介绍亏格2超椭圆曲线族的相关内容,包括构造配对友好曲线的方法、计算曲线雅可比行列式阶数的具体方式等。我们会利用一些已有的方法,如Cocks - Pinch方法和基于分圆多项式的方法,来构造适合配对的亏格2曲线。同时,还会详细阐述如何计算曲线雅可比的阶数,为密码学应用提供支持。

2. 配对友好曲线的构造约束

在构造适合配对的曲线时,椭圆曲线有以下几个固有的约束条件:
1. 嵌入度k要小 :为了在椭圆曲线r - 挠子群E(Fp)[r]和有限域扩展Fpk中达到相同的比特安全级别,通常要求6 ⩽ k ⩽ 60。对于随机椭圆曲线,一般k ≃ r,所以这是一个很大的约束。
2. 曲线的迹t满足条件 :|t| ⩽ 2√p。
3. 曲线的行列式Δ有要求 :Δ = t2 − 4p = −Dy2,其无平方因子部分D要非常小,D < 109,以便在合理时间内运行CM方法。
4. 子群大小接近最优情况 :ρ = g log p / log r ∼ 1,其中g是曲线的亏格。对于椭圆曲线,通用方法能达到1 ⩽ ρ ⩽ 2,我们尝试为亏格2曲线找到2 ⩽ ρ ⩽ 4的构造方法。

下面是这些约束条件的总结表格:
|约束条件|具体要求|
| ---- | ---- |
|嵌入度k|6 ⩽ k ⩽ 60|
|曲线的迹t| |t| ⩽ 2√p|
|曲线的行列式Δ|无平方因子部分D < 109|
|子群大小|ρ = g log p / log r,2 ⩽ ρ ⩽ 4(亏格2曲线)|

3. Cocks - Pinch方法

3.1 方法概述

Cocks和Pinch在2001年提出了构造配对友好椭圆曲线的方法,我们将其应用于上述具有密码学意义的雅可比族。该方法的输入包括无平方因子整数D、子群阶r的大小和嵌入度k,输出是素数阶r、素数p以及椭圆曲线的参数a, b。

3.2 算法步骤

以下是Cocks - Pinch方法的具体步骤:

算法1. Cocks - Pinch方法寻找配对友好椭圆曲线
输入: 无平方因子整数D,r的大小和嵌入度k以匹配比特安全级别,已知ρ ≈ 2。
输出: 素数阶r,素数p,椭圆曲线参数a, b ∈ Fp,使得E(Fp) : Y² = X³ + aX + b有一个阶为r的子群,且相对于r的嵌入度为k。
1. 重复
2.     随机选取规定大小的素数r,直到 - D是有限域Fr中的平方数,且Fr包含一个k次本原单位根ζk,即r ≡ 1 mod k。
3.     由于r整除Φk(p),可将其重写为Φk(p) ≡ 0 mod r。根据分圆多项式的性质,得到p ≡ ζk mod r,其中ζk是k次本原单位根。此外,t ≡ 1 + p mod r,所以该方法选择t = 1 + ζk在Fr中。然后y = (t - 2) / √ - D在Fr中。
4.     将t和y从Fr提升到Z,并设置p = 1/4(t² + Dy²)。
5. 直到p是素数。
6. 返回r, p, a, b ∈ Fp

3.3 方法应用于不同类型的超椭圆曲线

3.3.1 配对友好超椭圆曲线C5
  • b不是Fp中的平方数,但√b, 4√b ∈ Fp² (p ≡ 3 mod 4) :此时#JC5(Fp) = #E1(Fp²) = p² + 1 - tp²。任何定义在二次扩展Fp²上的配对友好椭圆曲线(且阶为偶数)都能为素域Fp上的这种类型的配对友好雅可比提供相同的阶和ρ值。只有当Fp上雅可比的群运算比Fp²上椭圆曲线的群运算更快时,选择雅可比才更合适。
  • b是平方数但不是四次方数 :这种情况在[14]中几乎已解决。采用r | #JC5(Fp) = (p - 1)² + (t′p)²的Cocks - Pinch方法,会产生与[14, Alg. 5.5] 接着 [14, Alg. 5.11] 相同的算法,其中π = (t′p - y√ - D) / 2,d = 4。实际上,d | k并非必要,我们假设q = p是素数。
  • b不是平方数且p ≡ 1 mod 4 :此时4√b ∉ Fp²,4√b ∈ Fp⁴,且#JC5(Fp) = p² + 1 + 2n² - 2n(1 + p) = (p - n)² + (n - 1)²,其中2p ± t′p² = 2n²。同构的椭圆曲线定义在Fp²上。通过一系列计算可得Δ = - D(2ny)²,p = (Dy² + n²) / 2,n ≡ (ζk + i)(1 - i) / 2 mod r,y ≡ ±(ζk - i)(1 + i) / (2√D) mod r。迹t′p通过构造为偶数,为了找到有效的参数,要求p ≡ 1 mod 4。

以下是寻找这种类型配对友好雅可比的算法:

算法2. 类型JC5的配对友好雅可比,Th.1(4)
输入: 无平方因子整数D,r的大小和嵌入度k以匹配比特安全级别,已知ρ ≈ 4。
输出: 素数阶r,素数p,雅可比参数a, b ∈ Fp,使得曲线C5(Fp) : Y² = X⁵ + aX³ + bX的雅可比有一个阶为r的子群,且相对于r的嵌入度为k。
1. 重复
2.     选择规定大小的素数r,使得i, √D, ζk ∈ Fr。
3.     令n = (ζk + i)(1 - i) / 2,y = ±(ζk - i)(1 + i) / (2√D) ∈ Fr。
4.     将n和y从Fr提升到Z,并设置p = (n² + Dy²) / 2。
5. 直到p ≡ 1 mod 4且p是素数。
6. 运行CM方法,找到迹为±t′p²且Δ = - 4D(ny)²的椭圆曲线E′1(Fp²)的j - 不变量。
7. 在Fp²中求解j(E′1) = 2⁶(3c - 10)³ / ((c - 2)(c + 2)²),并选择满足c² ∈ Fp的解。
8. 选择a, b ∈ Fp,使得a ≠ 0且b = (a / c)²(b是Fp²中的平方数,但不是Fp中的平方数)。
9. 返回r, p, a, b ∈ Fp

3.4 示例

当k = 6,D = 516505,ρ = 4.1时,得到以下结果:
- p = 0x9d3e97371e27d006f11762f0d56b4fbf2caca7d606e92e8b6f35189723f46f57ed46e9650ce1cca1bd90dc393db35cc38970cb0abbe236bf2c4ac2f65f1b50afb135 (528 bits)
- r = 0x679d8c817e0401203364615b9d34bdb3a0b89e70fa8d6807fa646e25140f25ad(255b)
- n = 0x28f34a88ab9271c2ea6d70f4a3dc758a025ad6e4ee51c16867763e8d940022de5
- y = - 0x65110defe8f4669a158149675afaa23dba326d49ce841d7ef9855c7d8a65df95
- a = 1
- b = 0x85eb6f5b5594c1bca596a53066216ad79588cf39984314609bbd7a3a302241fc786703a19bc1ccb44fc9e09b9c17ac62fc38d6bf82851d3d8b753c79da7338ca56b0
- C5(Fp) : Y² = 2(X⁵ + aX³ + bX)

3.5 方法流程图

graph TD;
    A[开始] --> B[选择素数r];
    B --> C{r是否满足条件};
    C -- 否 --> B;
    C -- 是 --> D[计算t和y];
    D --> E[计算p];
    E --> F{p是否为素数};
    F -- 否 --> B;
    F -- 是 --> G[运行CM方法];
    G --> H[求解j - 不变量方程];
    H --> I[选择a, b];
    I --> J[返回结果];
    J --> K[结束];

4. 配对友好超椭圆曲线C6

4.1 b是立方数但不是平方数的情况

当b是立方数但不是平方数时,#JC6(Fp) = p² + 1 - tp²,这种情况与椭圆曲线情况接近,相当于在Fp²上寻找配对友好椭圆曲线。但实际上,在Fp上寻找这种配对友好椭圆曲线的方法在Fp²上并不适用,因为p² = 1/4((t′p²)² + Dy²)很难找到素数平方。

4.2 b是平方数但不是立方数的情况

这种情况在[14, Alg. 5.5, Alg. 5.11]中已有处理,对应d = 3和π = (tp - y√ - D) / 2,也是一种类似Cocks - Pinch的方法,要求r | p² - p + 1 + (1 + p)tp + (tp)²且r | Φk(p)。与C5情况类似,“3 | k”并非必要条件。

我们发现p ≡ 1 mod 3且p + 1 ± tp ≡ 0 mod 3就足以找到有效的参数。Freeman和Satoh指出,方程j(Ec) = 2⁸3³(2c - 5)³ / ((c - 2)(c + 2)³)在Fp中有解的情况仅占三分之一。这可以通过简单的算术考虑来解释:椭圆曲线Ec有一个3 - 挠点意味着p + 1 - tp ≡ 0 mod 3,当p ≡ 1 mod 3时,这种情况发生的概率是三分之一。假设p ≡ 1 mod 3,如果p + 1 + tp ≡ 0 mod 3,那么Ec(Fp)没有3 - 挠点,但它的二次扭转有。这两条椭圆曲线有相同的j - 不变量,并且在Fp²上有一个3 - 挠子群。在实践中,当p + 1 ± tp ≡ 0 mod 3时,我们验证该方程有解。结合p ≡ 1 mod 3和p + 1 ± tp ≡ 0 mod 3这两个条件,方程j(Ec)有解的概率确实是三分之一(1/2 · 2/3)。当p ≡ 1 mod 3且tp ≡ 2 mod 3时,我们总能在[14, Alg. 5.11]的步骤2中找到解并完成算法;当p ≡ 1 mod 3且tp ≡ 1 mod 3时,我们仍然可以在步骤2中找到解,并在步骤3中构造C6(Fp)的系数,但在步骤6中,我们必须选择C6的二次扭转。

4.3 示例

考虑127位的梅森素数p = 2¹²⁷ - 1,我们寻找参数a和b较小且适合密码学应用的曲线C6。最终找到C6(Fp) : Y² = X⁶ - 3X³ - 92,其中b = - 92既不是平方数也不是立方数。经过计算,tp2 = 0x6089c0341e5414a24bef1a1a93c54fd2,2p - tp2 = 3n²,n = ± 0x74a69cde5282dbb6。因此,#JC6(Fp) = p² + p + 1 + 3n(p + 1) + 3n²。通过在雅可比上使用几个随机点,我们发现n < 0,并且#JC6(Fp)有一个250位的素因子r = 0x25ed097b425ed0974c75619931ea7f1271757b237c3ff3c5c00a037e7906557,提供了接近128位的安全级别。

4.4 效率分析

对于密码学应用,我们需要#JC(Fq)是一个大素数r乘以一个小的余因子h。这里r ∼ q²,所以q的大小比安全级别多几位,而不是像椭圆曲线那样是安全级别的两倍。为了计算雅可比的阶数,如果b是平方数,我们只需对定义在Fq上的椭圆曲线运行一次SEA算法;否则,对定义在Fq²上的椭圆曲线运行。如果b是平方数,我们的方法比生成密码学椭圆曲线快得多;如果b不是平方数,我们的方法与寻找适合密码学的椭圆曲线效率大致相同。

下面是不同情况下计算雅可比阶数的效率总结表格:
|b的情况|计算雅可比阶数的方式|效率比较|
| ---- | ---- | ---- |
|b是平方数|对定义在Fq上的椭圆曲线运行SEA算法|比生成密码学椭圆曲线快得多|
|b不是平方数|对定义在Fq²上的椭圆曲线运行SEA算法|与寻找适合密码学的椭圆曲线效率大致相同|

5. 亏格2超椭圆曲线雅可比阶数的显式计算

5.1 曲线 (C_5) 雅可比阶数计算

5.1.1 雅可比分解为两条同构椭圆曲线

对于定义在有限域 (F_q) 上的亏格 2 超椭圆曲线 (C_5(F_q): Y^2 = X^5 + aX^3 + bX)((a,b \neq 0 \in F_q)),其雅可比 (JC_5) 可分解为两条椭圆曲线。Satoh 证明 (JC_5) 在 (F_q[\sqrt[4]{b}]) 上同构于 (E_1 \times E_2),其中
(E_1(F_q[\sqrt[4]{b}]) : Y^2 = \delta(X - 1)(X^2 - \gamma X + 1))
(E_2(F_q[\sqrt[4]{b}]) : Y^2 = -\delta(X - 1)(X^2 - \gamma X + 1))
(\gamma = \frac{2a - 12\sqrt{b}}{a + 2\sqrt{b}}),(\delta = \frac{a + 2\sqrt{b}}{64\sqrt[4]{b}^3})。使用 (c = \frac{a}{\sqrt{b}}) 表示,则 (\gamma = \frac{2c - 12}{c + 2}),(\delta = \frac{c + 2}{2^6\sqrt[4]{b}}),且 (j(E_1) = j(E_2) = \frac{2^6(3c - 10)^3}{(c + 2)^2(c - 2)})。

设 (E_1’) 和 (E_2’) 是 (E_1) 和 (E_2) 的二次扭转,它们在 (F_q[\sqrt{b}, \sqrt{-1}]) 上同构。雅可比 (JC_5) 与 (E_1 \times E_2) 以及 (E_1’ \times E_2’) 之间的关系如下:

graph LR;
    A[JC5(Fq)] --> B[JC5(Fq[√b])];
    B --> C[JC5(Fq[4√b])];
    C --> D[(E1 × E2)(Fq[4√b])];
    D --> E[(E1 × E2)(Fq[8√b])];
    F[(E1' × E2')(Fq[√b])] --> G[(E1' × E2')(Fq[4√b])];
    G --> H[(E1' × E2')(Fq[8√b])];
    E <-- 同构 --> H;
    D <-- 同构 --> G;
5.1.2 使用zeta函数计算显式阶数

设 (Z_{JC_5}) 是雅可比 (JC_5) 的 zeta 函数,它满足以下性质:
1. (Z_{JC_5}(T, F_q) \in Z[T]),即 zeta 函数是具有整数系数的多项式。
2. (Z_{JC_5}(T, F_q)) 的次数为 (2g = 4)。
3. (#JC_5(F_q) = Z_{JC_5}(1, F_q))。
4. 设 (z_{1,q}, z_{2,q}, z_{3,q}, z_{4,q}) 是 (Z_{JC_5}(T, F_q)) 在 (C) 中的四个根,有 (z_{1,q}z_{2,q} = q) 且 (z_{3,q}z_{4,q} = q)。
5. (Z_{JC_5}(T, F_{q^n})) 的根是 (Z_{JC_5}(T, F_q)) 的根的 (n) 次幂。

通过计算得到以下公式:
(a_{q^2} = (a_q)^2 - 2b_q)
(b_{q^2} = (b_q)^2 - 4qb_q + 2q^2 - 2qa_{q^2})

根据 (b) 的不同情况,得到雅可比 (JC_5) 阶数的定理:
1. 如果 (b) 是四次方数,若 (\sqrt{-1} \in F_q),则 (#JC_5(F_q) = (q + 1 - t_q)^2);若 (\sqrt{-1} \notin F_q),则 (#JC_5(F_q) = (q + 1 - t_q)(q + 1 + t_q))。
2. 如果 (b) 是平方数但不是四次方数((q \equiv 1 \mod 4)),且 (t_{q^2} + 2q) 不是平方数,则 (#JC_5(F_q) = (q - 1)^2 + (t’ q)^2)。
3. 如果 (b) 不是平方数且 (\sqrt[4]{b} \in F
{q^2})((q \equiv 3 \mod 4)),且 (t_{q^2} + 2q) 不是平方数,则 (#JC_5(F_q) = q^2 + 1 - t_{q^2})。
4. 如果 (b) 不是平方数且 (\sqrt[4]{b} \notin F_{q^2})((q \equiv 1 \mod 4)),且 (t_{q^4} + 2q^2) 不是平方数,则 (#JC_5(F_q)) 等于 (q^2 + 1 - 2n(q + 1) + 2n^2) 或 (q^2 + 1 + 2n(q + 1) + 2n^2),其中 (n \in N) 使得若 (q \equiv 5 \mod 8),(2q + t’ {q^2} = 2n^2);若 (q \equiv 1 \mod 8),(2q - t’ {q^2} = 2n^2)。

5.2 曲线 (C_6) 雅可比阶数计算

5.2.1 分解为两条同构椭圆曲线

Freeman 和 Satoh 证明 (JC_6) 在 (F_q[\sqrt[6]{b}]) 上同构于另一个亏格 2 超椭圆曲线 (C_6’) 的雅可比 (JC_6’),(JC_6’) 分解为两条椭圆曲线 (E_c) 和 (E_{-c}),它们在 (F_q[\sqrt{b}, \sqrt{-3}]) 上同构。设 (c = \frac{a}{\sqrt{b}}) 且 (c \neq \pm 2),则
(E_{red}^c(F_q[\sqrt{b}]) : Y^2 = X^3 + 3(2c - 5)X + c^2 - 14c + 22)
(E_{red}^{-c}(F_q[\sqrt{b}]) : Y^2 = X^3 - 3(2c + 5)X + c^2 + 14c + 22)

两条椭圆曲线有相同的 3 - 挠子群,通过 V´elu 公式可计算它们之间的同构。雅可比 (JC_6) 与 (E_c \times E_{-c}) 之间的关系如下:

graph LR;
    A[JC6(Fq)] --> B[JC6(Fq[√b])];
    B --> C[JC6(Fq[6√b])];
    C --> D[JC6'(Fq[6√b])];
    D --> E[(Ec × E - c)(Fq[√b])];
5.2.2 得到雅可比阶数定理

根据 (b) 的不同情况,得到雅可比 (JC_6) 阶数的定理:
1. 如果 (b) 是六次方数,若 (\sqrt{-3} \in F_q),则 (#JC_6(F_q) = (q + 1 - t_q)^2);若 (\sqrt{-3} \notin F_q),则 (#JC_6(F_q) = (q + 1 - t_q)(q + 1 + t_q))。
2. 如果 (b) 是平方数但不是立方数,且 (3(4q - (t_q)^2)) 不是平方数,则 (#JC_6(F_q) = q^2 - q + 1 + (1 + q + t_q)t_q)。
3. 如果 (b) 是立方数但不是平方数,且 (2q + t_{q^2}) 不是平方数,则 (#JC_6(F_q) = q^2 + 1 - t_{q^2})。
4. 如果 (b) 既不是立方数也不是平方数,且 (2q + t_{q^2}) 不是平方数,则存在 (n \in N) 使得 (2q - t_{q^2} = 3n^2),(#JC_6(F_q) = q^2 + q + 1 + (q + 1 + n)3n) 或 (#JC_6(F_q) = q^2 + q + 1 - (q + 1 - n)3n)。

5.3 特殊情况说明

对于 (C_5) 和 (C_6) 曲线,在某些特殊情况下,雅可比阶数会有不同的结果,具体如下表所示:
|曲线类型|特殊条件|雅可比阶数结果|
| ---- | ---- | ---- |
| (C_5) | (b) 是平方数但不是四次方数,(t_{q^2} + 2q = y^2) | 可能为 ((q + 1 - y)^2),((q + 1 + y)^2) 或 ((q + 1 - y)(q + 1 + y) = (q - 1)^2 + (t’ q)^2) |
| (C_5) | (b) 不是平方数,(\sqrt[4]{b} \in F
{q^2}),(t_{q^2} + 2q = y^2) | 可能为 ((q + 1 - y)^2),((q + 1 + y)^2) 或 ((q + 1 - y)(q + 1 + y) = q^2 + 1 - t_{q^2}) |
| (C_5) | (b) 不是平方数,(\sqrt[4]{b} \notin F_{q^2}),(t_{q^4} + 2q^2 = y^2) | 根据不同的分解情况有多种可能结果 |
| (C_6) | (b) 是平方数但不是立方数,(4q - (t_q)^2 = 3y^2) | 可能为 ((q + 1 + (t_q + 3y)/2)(q + 1 + (t_q - 3y)/2) = q^2 - q + 1 + (1 + q + t_q)t_q) 等多种结果 |
| (C_6) | (b) 是立方数但不是平方数,(2q + t_{q^2} = y^2) | 可能为 ((q + 1 - y)^2),((q + 1 + y)^2),((q + 1 - y)(q + 1 + y) = q^2 + 1 - t_{q^2}) |
| (C_6) | (b) 既不是立方数也不是平方数,(2q + t_{q^2} = s^2) 等不同条件 | 有多种可能结果 |

在实际应用中,当出现多种阶数可能性时,可以通过检查随机点的标量乘法是否得到无穷远点来区分。

6. 总结

本文详细介绍了亏格 2 超椭圆曲线族的相关内容,包括构造配对友好曲线的方法和计算雅可比阶数的具体方式。在构造配对友好曲线方面,我们介绍了 Cocks - Pinch 方法,并将其应用于不同类型的超椭圆曲线 (C_5) 和 (C_6),给出了具体的算法步骤和示例。在计算雅可比阶数方面,我们通过将雅可比分解为两条同构椭圆曲线,并利用 zeta 函数的性质,得到了不同情况下雅可比阶数的计算公式。这些结果为亏格 2 超椭圆曲线在密码学中的应用提供了重要的理论支持和实践指导。

未来,我们可以进一步研究如何优化这些构造方法和计算算法,提高效率和安全性。同时,可以探索亏格 2 超椭圆曲线在更多密码学场景中的应用,如密钥交换、数字签名等。

本项目采用C++编程语言结合ROS框架构建了完整的双机械臂控制系统,实现了Gazebo仿真环境下的协同运动模拟,并完成了两台实体UR10工业机器人的联动控制。该毕业设计在答辩环节获得98分的优异成绩,所有程序代码均通过系统性调试验证,保证可直接部署运行。 系统架构包含三个核心模块:基于ROS通信架构的双臂协调控制器、Gazebo物理引擎下的动力学仿真环境、以及真实UR10机器人的硬件接口层。在仿真验证阶段,开发了双臂碰撞检测算法和轨迹规划模块,通过ROS控制包实现了末端执行器的同步轨迹跟踪。硬件集成方面,建立了基于TCP/IP协议的实时通信链路,解决了双机数据同步和运动指令分发等关键技术问题。 本资源适用于自动化、机械电子、人工智能等专业方向的课程实践,可作为高年级课程设计、毕业课题的重要参考案例。系统采用模块化设计理念,控制核心硬件接口分离架构便于功能扩展,具备工程实践能力的学习者可在现有框架基础上进行二次开发,例如集成视觉感知模块或优化运动规划算法。 项目文档详细记录了环境配置流程、参数调试方法和实验验证数据,特别说明了双机协同作业时的时序同步解决方案。所有功能模块均提供完整的API接口说明,便于使用者快速理解系统架构并进行定制化修改。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值