14、超椭圆曲线密码系统中雅可比计算的硬件导向算法

超椭圆曲线密码系统中雅可比计算的硬件导向算法

1. 引言

超椭圆曲线密码系统是密码学领域的一个重要研究方向。Koblitz对定义在有限域上的超椭圆曲线的雅可比进行了研究,并提出了超椭圆曲线密码系统。不过,Frey指出Koblitz的超椭圆密码系统的离散对数问题可以在亚指数时间内求解。随后,Sakai、Sakurai、Ishizuka以及Smart等人研究了超椭圆曲线的雅可比,找到了能抵御所有已知攻击的雅可比。

超椭圆曲线雅可比中的加法显式公式由Cantor和Koblitz引入。虽然雅可比中的加法公式比椭圆曲线上点的加法公式更复杂,但如果超椭圆曲线雅可比的阶与椭圆曲线上点的阶大小相同,那么雅可比的基域比椭圆曲线的基域小,这对硬件实现是一个有利的特性。而且,公式中使用的多项式乘法运算可以通过并行处理硬件有效地执行。

本文的目标是研究如何通过硬件手段有效地实现超椭圆曲线密码系统。具体步骤如下:
1. 解释基于Cantor和Koblitz算法的算法,并从硬件角度讨论乘法运算的数量。
2. 描述逻辑设计和综合的结果,使用0.27 - um CMOS门阵列技术来估计硬件的大小和速度。
3. 分析硬件效率对曲线亏格的依赖性,并将结果与RSA和椭圆曲线密码系统进行比较。

2. 预备知识

设 (K) 是一个域,(\overline{K}) 表示其代数闭包。我们将亏格为 (g) 的超椭圆曲线 (C) 定义为 (y^{2}+h(x)y = f(x)) 的形式,其中 (h(x)) 是次数至多为 (g) 的多项式,(f(x)) 是次数为 (2g + 1) 的首一多项式。本文主要关注特征为2的有限域。

点 (P(x,y)) 生成除子的自由群。除子 (D) 是 (K) - 点的有限形式和 (D=\sum m_{i}P_{i}),(m_{i}\in Z)。我们定义 (D) 的次数为 (\text{deg}(D)=\sum m_{i})。除子形成一个加法群,其中次数为0的除子构成子群 (D_{0})。

有理函数 (r) 在 (C) 上有有限个零点和极点。我们将 (r) 与其除子 ((r)=\sum m_{i}P_{i}) 关联起来,其中 (P_{i}) 是具有重数 (m_{i}) 的极点或零点。非零函数的除子,如 ((r)),称为主除子。主除子构成 (D_{0}) 的一个子群。雅可比簇定义为商群 (J_{C}(K)=D_{0}/P)。

设 (F_{q}) 是具有 (q) 个元素的有限域。(J_{C}(F_{q}^{n})) 的离散对数问题是:给定定义在 (F_{q}^{n}) 上的两个除子 (D_{1}) 和 (D_{2}),确定一个整数 (m),使得 (D_{2}=mD_{1})(如果这样的 (m) 存在)。

3. 提出的算法
3.1 雅可比中的计算

雅可比簇的元素可以由约化除子唯一表示。任何约化除子都可以看作是一对多项式 ((a,b)),满足 (\text{deg}b<\text{deg}a) 且 (\text{deg}a\leq g)。下面简要描述Cantor和Koblitz提出的加法算法 (D_{3}=D_{1}+D_{2}),其中 (D_{3}=\text{div}(a_{3},b_{3})),(D_{2}=\text{div}(a_{2},b_{2})),(D_{1}=\text{div}(a_{1},b_{1}))。

  1. 计算最大公因子(GCD)
    • 计算多项式 (a_{1}) 和 (a_{2}) 的最大公因子。当基域 (K) 很大且 (a_{1}) 和 (a_{2}) 是雅可比中随机选择的两个元素的坐标时,(\gcd(a_{1},a_{2}) = 1) 的情况极有可能发生。本文仅研究 (\gcd(a_{1},a_{2}) = 1) 和 (D_{1}=D_{2})(加倍)的情况,其他情况假设由软件在硬件的协助下处理。
    • 使用扩展欧几里得算法计算 (d = \gcd(a_{1},a_{2})) 以及两个多项式 (s_{1}) 和 (s_{2}),满足 (s_{1}a_{1}+s_{2}a_{2}=d)。为方便起见,将 (s_{1}) 和 (s_{2}) 除以 (d),以满足 (s_{1}a_{1}+s_{2}a_{2}=1)。

扩展欧几里得算法也用于从里德 - 所罗门码解码中的 syndrome 计算错误定位和评估多项式。里德 - 所罗门码是一种强大的纠错码,广泛应用于存储设备和通信中,并且经常通过硬件手段实现。不过,里德 - 所罗门码解码只需要 (s_{1}) 和 (s_{2}) 中的一个,而雅可比中的加法需要 (s_{1}) 和 (s_{2}) 两个。

亏格为 (g) 的超椭圆曲线雅可比加法的硬件由四个寄存器组组成:(U_{reg})、(X_{reg})、(Y_{reg}) 和 (Z_{reg})。(U_{reg}) 和 (X_{reg}) 有 ((g + 1)) 个寄存器用于存储次数为 (g) 的多项式的系数,而 (Y_{reg}) 和 (Z_{reg}) 有 (g) 个寄存器用于存储次数为 ((g - 1)) 的多项式的系数。在 (U_{reg}) 和 (Y_{reg}) 的每个寄存器中放置一个伽罗瓦域乘法器,电路中的求逆运算符中也放置一个。电路总共包含 ((4g + 2)) 个系数寄存器、((2g + 1)) 个伽罗瓦域乘法器和一个求逆运算符。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A([开始]):::startend --> B(计算GCD):::process
    B --> C(选择算法):::process
    C -->|加法| D(执行加法算法):::process
    C -->|加倍| E(执行加倍算法):::process
    D --> F([结束]):::startend
    E --> F

当 (a_{1}) 和 (a_{2}) 互质时,加法算法如下:

算法1(加法)

输入: a1, a2, b1, b2, s1, s2
输出: a’, b’
步骤A1: a3 = a1 * a2
步骤A2: b3 = (s1 * a1 * b2 + s2 * a2 * b1) mod a3
步骤A3: a4 = (f + b3 + b3^2) / a3
步骤A4: a4 = a4 / (leading coefficient of a4)
步骤A5: b4 = (b3 + 1) mod a4
步骤A6: a’ = a4; b’ = b4;
步骤A7: while(deg a4 > g)
    步骤A7.1: a5 = (f + b4 + b4^2) / a4
    步骤A7.2: a5 = a5 / (leading coefficient of a5)
    步骤A7.3: b5 = (b4 + 1) mod a5
    步骤A7.4: a’ = a5; b’ = b5;
    步骤A7.5: a4 = a5; b4 = b5;
返回 [a’, b’]

各步骤的乘法运算数量如下:
|步骤|乘法运算数量|
| ---- | ---- |
|步骤A1| ((13g^{2}-12g + 2)) 次域乘法|
|步骤A2| ((16g^{2}-14g + 3)) 次域乘法|
|步骤A3(亏格3曲线迭代1次,亏格6曲线迭代2次)| - |

为了减少计算量,引入多项式 (q(x)=s_{1}(b_{1}+b_{2})\bmod a_{2})。可以证明在步骤A2中,(a_{4}=Q(q^{2}a_{1},a_{2})+Q(f,a_{3}))。

以亏格为3的曲线 (C:y^{2}+y = x^{7}/GF(2)) 为例,得到新的加法算法:

算法2(加法)

输入: a1, a2, b1, b2, s1, s2
输出: a, b
步骤A1’: q = s1 * (b1 + b2) mod a2
步骤A2’: a4 = Q(q^2 * a1, a2) + x + c2 + e2
步骤A3’: a4 = a4 / (leading Coefficient of a4)
步骤A4’: b4 = (q * a1 + b1 + 1) mod a4
步骤A5’: a’ = a4; b’ = b4;
步骤A6’: while(deg a4 > g)
    步骤A6’.1: a5 = Q(x^7 + b4^2, a4)
    步骤A6’.2: a5 = a5 / (leading coefficient of a5)
    步骤A6’.3: b5 = (b4 + 1) mod a5
    步骤A6’.4: a’ = a5; b’ = b5;
    步骤A6’.5: a4 = a5; b4 = b5;
返回 [a’, b’]

当 (D_{1}=D_{2})(加倍)时,算法如下:

算法3(加倍)

输入: a1, b1
输出: a’, b’
步骤D1: a3 = a1^2
步骤D2: b3 = (b1^2 + f) mod a3
步骤D3: a4 = (f + b3 + b3^2) / a3
步骤D4: a4 = a4 / (leading coefficient of a4)
步骤D5: b4 = (b3 + 1) mod a4
步骤D6: a’ = a4; b’ = b4;
步骤D7: while(deg a4 > g)
    步骤D7.1: a5 = (f + b4 + b4^2) / a4
    步骤D7.2: a5 = a5 / (Leading Coefficient of a5)
    步骤D7.3: b5 = (b4 + 1) mod a5
    步骤D7.4: a’ = a5; b’ = b5;
    步骤D7.5: a4 = a5; b4 = b5;
返回 [a’, b’]

各步骤的乘法运算数量如下:
|步骤|乘法运算数量|
| ---- | ---- |
|步骤D1| ((6g^{2}+1)) 次域乘法|
|步骤D2| ((16g^{2}-14g + 3)) 次域乘法|
|步骤D3(与步骤A3相同)| - |

同样,为了减少计算量,引入多项式 (T(\xi)=Q(E_{3},D_{1})),在步骤D2中,(a_{4}=q^{2}+Q(f,a_{3}))。

3. 提出的算法(续)
3.2 算法优化分析

在上述加法和加倍算法中,步骤A1、A2、D1和D2中多项式的乘法和除法运算较为耗时。通过引入辅助多项式 (q(x)) 和 (T(\xi)),可以有效减少计算量。

以算法2为例,引入 (q(x)=s_{1}(b_{1}+b_{2})\bmod a_{2}) 后,在步骤A2中可以将 (a_{4}) 表示为 (a_{4}=Q(q^{2}a_{1},a_{2})+Q(f,a_{3})),避免了一些不必要的计算。同样,在加倍算法中引入 (T(\xi)) 也能达到类似的优化效果。

下面我们详细分析优化后的计算复杂度变化。假设原算法的总乘法运算次数为 (O_{old}),优化后的总乘法运算次数为 (O_{new})。

对于加法算法,原算法步骤A1和A2的乘法运算次数分别为 ((13g^{2}-12g + 2)) 和 ((16g^{2}-14g + 3)),优化后通过引入 (q(x)) 减少了部分冗余计算。虽然具体减少的次数难以精确量化,但可以直观地看出,通过将 (b_{3}) 表示为 (q a_{1}+b_{1}),在计算 (a_{4}) 时避免了对 (b_{3}) 的重复计算,从而减少了乘法运算次数。

对于加倍算法,步骤D1和D2的乘法运算次数分别为 ((6g^{2}+1)) 和 ((16g^{2}-14g + 3)),引入 (T(\xi)) 后也能对计算进行优化。

算法 原乘法运算次数 优化后乘法运算次数(大致)
加法算法 ((13g^{2}-12g + 2)+(16g^{2}-14g + 3)) 减少部分冗余计算
加倍算法 ((6g^{2}+1)+(16g^{2}-14g + 3)) 减少部分冗余计算
3.3 硬件实现考虑

在硬件实现方面,亏格为 (g) 的超椭圆曲线雅可比加法的硬件由四个寄存器组 (U_{reg})、(X_{reg})、(Y_{reg}) 和 (Z_{reg}) 组成。为了实现算法的高效运行,需要合理安排寄存器的使用和数据的流动。

以下是硬件实现的一些关键步骤:
1. 初始化寄存器 :将输入的多项式 (a_{1})、(a_{2})、(b_{1})、(b_{2}) 等的系数存储到相应的寄存器中。
2. 计算GCD :使用扩展欧几里得算法计算 (a_{1}) 和 (a_{2}) 的最大公因子 (d) 以及 (s_{1}) 和 (s_{2}),并将结果存储在寄存器中。
3. 选择算法 :根据输入判断是进行加法还是加倍运算,然后执行相应的算法。
4. 执行算法步骤 :按照算法的步骤依次进行多项式的乘法、除法、取模等运算,将中间结果存储在寄存器中。
5. 输出结果 :将最终计算得到的 (a’) 和 (b’) 从寄存器中输出。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A([初始化寄存器]):::startend --> B(计算GCD):::process
    B --> C(选择算法):::process
    C -->|加法| D(执行加法算法):::process
    C -->|加倍| E(执行加倍算法):::process
    D --> F(输出结果):::process
    E --> F
    F --> G([结束]):::startend
4. 实验结果与分析
4.1 硬件性能估计

使用0.27 - um CMOS门阵列技术对硬件的大小和速度进行估计。对于亏格为6的曲线,硬件计算一次加法运算需要100个时钟周期,计算一次加倍运算需要29个时钟周期,并且可以在高达83 MHz的时钟频率下工作。

不同亏格曲线的硬件性能估计如下表所示:
|曲线亏格|加法时钟周期数|加倍时钟周期数|最大时钟频率|
| ---- | ---- | ---- | ---- |
|3|待估计|待估计|待估计|
|6|100|29|83 MHz|

4.2 与其他密码系统的比较

从硬件实现的角度,将超椭圆曲线密码系统与RSA和椭圆曲线密码系统进行比较。

超椭圆曲线密码系统的优势在于,如果超椭圆曲线雅可比的阶与椭圆曲线上点的阶大小相同,那么雅可比的基域比椭圆曲线的基域小,这对于硬件实现更为有利。而且,公式中使用的多项式乘法运算可以通过并行处理硬件有效地执行。

不过,超椭圆曲线密码系统也存在一定的局限性。例如,对于亏格大于4的曲线,可能存在一些攻击方法,使得其安全性有所降低。具体来说,Gaudry给出了超椭圆曲线上离散对数问题的新算法,Duursma、Gaudry和Morain提出了加速具有大阶自同构曲线离散对数计算的方法,这些方法对亏格大于4的曲线攻击效果可能较好。因此,亏格为3的超椭圆曲线密码系统具有与160 - 位密钥椭圆曲线密码系统相同的安全级别,而亏格为6的超椭圆曲线密码系统安全性相对较弱。

密码系统 基域大小优势 安全性 硬件实现复杂度
超椭圆曲线密码系统(亏格3) 基域较小 与160 - 位密钥ECC相同 适中
超椭圆曲线密码系统(亏格6) 基域较小 弱于160 - 位密钥ECC 适中
椭圆曲线密码系统 基域相对较大 较高 适中
RSA - 较高 较高
5. 结论

本文提出了适用于硬件实现的超椭圆曲线雅可比计算算法。通过引入辅助多项式对算法进行优化,减少了计算量。使用0.27 - um CMOS门阵列技术对硬件性能进行估计,结果表明该算法在硬件实现上具有一定的优势。

在安全性方面,亏格为3的超椭圆曲线密码系统具有较好的安全性,与160 - 位密钥椭圆曲线密码系统相当。而亏格为6的曲线虽然在硬件计算速度上有一定优势,但安全性相对较弱。

未来的研究可以进一步探索如何提高超椭圆曲线密码系统的安全性,同时优化硬件实现,降低功耗和面积,以满足实际应用的需求。例如,可以研究新的算法优化策略,或者采用更先进的硬件技术来实现。

内容概要:本文档围绕“经济学期刊论文复现:数字化转型能否促进企业的高质量发展”这一核心命题,系统整合了MATLAB与Python编程实现的大量科研案例,聚焦于数字化转型对企业全要素生产率(TFP)及高质量发展影响的实证研究。文档不仅复现了高水平经济学期刊论文中的计量经济模型,如基于中国上市公司数据的数字化转型与生产率关系分析,还深度融合了工程领域的建模技术,涵盖微电网优化、负荷预测、风电光伏不确定性建模、电力系统故障仿真等。同时,提供了智能优化算法(如遗传算法、粒子群优化)、机器学习(LSTM、CNN-BiGRU-Attention)、信号处理、路径规划等多学科交叉的技术资源,构建了一个从理论推导到代码实现的完整科研支持体系,旨在帮助研究者系统掌握论文复现与实证分析的核心方法。; 适合人群:具备一定MATLAB或Python编程基础,从事经济学、管理学、能源系统、智能制造及相关交叉学科研究的研究生、科研人员及高校教师。; 使用场景及目标:①复现经济学顶刊中关于数字化转型与企业高质量发展的实证模型;②学习如何量化数字化转型并构建其对企业绩效的影响评估框架;③掌握基于真实数据的计量经济建模、场景生成与优化调度仿真技术,全面提升科研论文写作与实证研究能力。; 阅读建议:建议读者结合文中提供的代码与数据资源,重点研读“论文复现”与“创新未发表”模块,按照技术路径循序渐进地实现模型复现与拓展。推荐关注“荔枝科研社”公众号及百度网盘链接获取完整资料,系统性地开展学习与科研实践。
下载代码方式:https://pan.quark.cn/s/9de6a9d0b3d8 依据所提供的文件内容,能够推导出此段程序的核心任务在于对一个任意的三位数进行拆解,并且分别呈现该数值的百位、十位及个位部分。随后,我们将对该知识点进行进一步的深入研究。 ### 一、程序功能说明 #### 1. 接收任意一个三位数输入 程序起始阶段运用`scanf`函数来获取用户输入的一个整数。为确保输入内容确实为一个三位数,在实际应用场景中通常需要嵌入验证机制来保障输入的有效性。然而,在本示例情形下,该环节被简化处理,预设用户总会准确输入一个三位数。 #### 2. 实施数字的拆分并提取各位置数值 程序借助一系列数学计算来对三位数进行拆分,将其转化为百位、十位和个位三个独立的构成部分。具体而言,通过除法和取模运算完成了这一过程。 #### 3. 展示各位置上的数值 程序运用`printf`函数来输出原始数值以及各个位上的数值。需要留意的是,代码中的输出部分似乎存在一些混淆,存在语法上的错误,例如多余的`printf`语句和乱码字符等问题。 ### 二、核心代码分析 #### 1. 数字拆分逻辑 ```c a[0] = n / 1000; // 提取千位数,但鉴于题目要求是三位数,此处应为百位数 a[1] = n % 1000 / 100; // 提取百位数 a[2] = n % 1000 % 100 / 10; // 提取十位数 a[3] = n % 1000 % 100 % 10; // 提取个位数 ``` 这段代码通过一连串的除法和取模运算,成功地将输入的数字n拆分为百位、十位和个位三个独立的构成部分,...
内容概要:本文提出了一种基于CNN-BiGRU-Attention混合神经网络模型的风电功率预测方法,采用多变量输入实现单步预测,并通过Matlab进行代码实现与验证。该模型融合卷积神经网络(CNN)以提取输入数据的局部时空特征,利用双向门控循环单元(BiGRU)充分捕捉风速、温度、湿度等多源气象与运行变量的时间序列前后依赖关系,并引入注意力机制(Attention)动态加权关键时间步的特征信息,有效提升模型对风电功率波动性和不确定性的建模能力,显著增强了预测的准确性与鲁棒性。; 适合人群:具备一定机器学习与深度学习理论基础,熟悉Matlab编程环境,从事新能源发电预测、电力系统调度、智能电网优化等相关领域的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①应用于实际风电场功率预测系统,为电网调度、电力市场交易与可再生能源消纳提供高精度数据支撑;②作为深度学习在能源时序预测领域的典型案例,用于科研项目开发、学术论文复现与技术创新;③深入理解多变量时间序列预测中特征融合、序列建模与注意力权重分配的协同机制,掌握先进神经网络架构的设计与优化方法。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点剖析数据预处理流程、模型网络结构搭建、训练参数调优及注意力权重可视化等关键环节,鼓励尝试替换不同特征输入、调整网络深度或引入其他优化算法(如贝叶斯优化、粒子群优化等)以进一步提升模型性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值