CN114626537B - 一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法 - Google Patents

一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法 Download PDF

Info

Publication number
CN114626537B
CN114626537B CN202210531900.3A CN202210531900A CN114626537B CN 114626537 B CN114626537 B CN 114626537B CN 202210531900 A CN202210531900 A CN 202210531900A CN 114626537 B CN114626537 B CN 114626537B
Authority
CN
China
Prior art keywords
value
bit
binary
random number
matrix
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210531900.3A
Other languages
English (en)
Other versions
CN114626537A (zh
Inventor
杨鸽
傅波海
张仕峰
冯俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Matrix Time Digital Technology Co Ltd
Original Assignee
Matrix Time Digital Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matrix Time Digital Technology Co Ltd filed Critical Matrix Time Digital Technology Co Ltd
Priority to CN202210531900.3A priority Critical patent/CN114626537B/zh
Publication of CN114626537A publication Critical patent/CN114626537A/zh
Application granted granted Critical
Publication of CN114626537B publication Critical patent/CN114626537B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N10/00Quantum computing, i.e. information processing based on quantum-mechanical phenomena
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • G06F7/575Basic arithmetic logic units, i.e. devices selectable to perform either addition, subtraction or one of several logical operations, using, at least partially, the same circuitry
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/588Random number generators, i.e. based on natural stochastic processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Condensed Matter Physics & Semiconductors (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Error Detection And Correction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法,其能够基于x86平台SIMD去计算不可约多项式,不可约多项式计算过程中二进制的平方运算采用交错法实现平方运算,相较于传统循环移位的实现,使得效率得到大幅提升;而在量子哈希计算过程中,采用异或乘操作或与判断操作进行哈希运算,也使得哈希计算的效率也得到了提升。

Description

一种基于x86平台SIMD的不可约多项式及量子安全哈希值计 算方法
技术领域
本发明涉及量子安全技术领域,具体涉及一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法。
背景技术
早期,我们在传输信息时,由于信道不安全可能会出现信息错乱,接收方需要反复多次确认来判断收发信息的一致性,而来回多次传送确认是效率极低的一种通信方式。如果利用哈希算法则可很好地解决这一问题,哈希算法是区块链中使用最多的一种算法,它被广泛地用于构建区块和确认交易的完整性上。例如,使用哈希算法把交易生成数据摘要,当前区块中包含上一个区块的哈希值,后面一个区块又包含当前区块的哈希值,就这样一个接一个地连接起来,形成一个不可逆向篡改的链表。
哈希值和哈希函数的概念对安全性来说特别关键。哈希是一种数学计算机程序,它接收任何一组任意长度的输入信息,通过哈希算法变换成固定长度的数据指纹输出形式,如字母和数字的组合,该输出就是“哈希值”。总体而言,哈希算法可以理解为一种消息摘要算法,将消息或数据压缩变小并拥有固定的格式。由于其单向运算具有一定的不可逆性,哈希算法已成为加密算法中一个构成部分。目前常见的哈希算法包括国际上的MD系列和SHA系列算法,以及国内的 SM3 算法。
而哈希算法计算哈希值的时候,最主要的就是哈希函数的生成,哈希函数的生成大部分都基于不可约多项式。专利号为CN202111360079.5,专利名称为的一种基于LFSR哈希的无条件安全的认证加密方法,该专利中提出了一种计算不可约多项式的方法,但其是一种数学思路,不能在x86平台SIMD上进行运用,而且根据此不可约多项式生成哈希函数计算哈希的方法在计算过程中效率低下,工程实践效果差。因此一种适用于x86平台SIMD且高效的不可约多项式计算方法和哈希计算方法的提出就显得尤为重要。
发明内容
发明目的:本发明目的是提供一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法,解决了目前计算不可约多项式的方法不能在x86平台SIMD上进行运用的问题,而且解决了根据此不可约多项式生成哈希函数计算哈希的方法在计算过程中效率低下,会耗费大量的资源的问题。本发明基于x86平台SIMD去计算不可约多项式,并在此基础上得到最终的哈希值,整个技术方案在时间和空间效率方面都有大幅的提升。
技术方案:本发明一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法,其特征在于,包括以下步骤:
步骤1:将输入计算机的待处理明文C均分为N份,每份为128位的数据;
步骤2:取一个128位的随机数r,将随机数r的二进制数值最高位左边补0再与不可约多项式中每一项系数组成的字符串
Figure DEST_PATH_IMAGE001
进行异或操作得到数m1,将数m1中的每一位二进制数值依次进行异或得到一位的数t1,然后将随机数r的最高位左边补上数t1,并删除随机数r的最低位二进制数值,得到一个新的128位的随机数r1;
将随机数r1的二进制数值最高位左边补0再与不可约多项式中每一项系数组成的字符串
Figure 429932DEST_PATH_IMAGE001
进行异或操作得到数m2,将数m2中的每一位二进制数值依次进行异或得到一位的数t2,然后将随机数r1的最高位左边补上数t2,并删除随机数r1的最低位二进制数值,得到一个新的128位的随机数r2;
以此类推,直至将随机数r127的二进制数值最高位左边补0再与不可约多项式中每一项系数组成的字符串
Figure 57353DEST_PATH_IMAGE001
进行异或操作得到数m128,将数m128中的每一位二进制数值依次进行异或得到一位的数t128,然后将随机数r127的最高位左边补上数t128,并删除随机数r127的最低位二进制数值,得到一个新的128位的随机数r128;
步骤3:构建128×128的矩阵,该矩阵的第一列数值为随机数r1且随机数r1的最高位位于矩阵的第128行,第二列数值为随机数r2且随机数r2的最高位位于矩阵的第128行,以此类推,第一百二十八列数值为随机数r128且随机数r128的最高位位于矩阵的第128行,从而形成矩阵Q1
步骤4:将随机数r128作为新的随机数r代替步骤2中的随机数r,重复步骤2和步骤3得到矩阵Q2;以此类推,直至得到矩阵QM,M与N相同;
步骤5:将矩阵Q1和明文C中的第一份128位数据对应的列向量进行异或乘操作或与判断操作得到第一哈希值h1,将矩阵Q2和明文C中的第二份128位数据对应的列向量进行异或乘操作或与判断操作得到第二哈希值h2,以此类推,将矩阵QM和明文C中的第N份128位数据对应的列向量进行异或乘操作或与判断操作得到第N哈希值hx;
步骤6:最后将第一哈希值h1、第二哈希值h2直至第N哈希值hx依次进行异或得到哈希值F,哈希值F即为明文C的量子哈希值;
其中,所述不可约多项式的生成具体过程步骤如下:
(1)初始化一个128位的数g,该数g分为前64位和后64位两部分,前64位的最后一位数值为1,其他位数值为0;后64位的每一位数值均为0;
(2)取一个128位的随机数,并在随机数的最低位右边增加一位从而形成一个129位的随机数,将129位随机数的最高位数值和最低位数值改为1,得到新的随机数p;
(3)根据步骤(1)和步骤(2)得到的g和p,进行迭代计算得到不可约多项式中每一项系数组成的字符串
Figure 676554DEST_PATH_IMAGE001
,再通过不可约多项式中每一项系数组成的字符串
Figure 848647DEST_PATH_IMAGE001
生成不可约多项式
Figure 578705DEST_PATH_IMAGE002
所述迭代计算得到不可约多项式中每一项系数组成的字符串
Figure 388529DEST_PATH_IMAGE001
的具体过程步骤为:
1)第一次:计算数g的平方再对p进行取模运算得到数
Figure DEST_PATH_IMAGE003
,
Figure 850735DEST_PATH_IMAGE004
2)第二次:计算数
Figure 870643DEST_PATH_IMAGE003
的平方再对p进行取模运算得到数
Figure DEST_PATH_IMAGE005
,
Figure 545338DEST_PATH_IMAGE006
以此类推,
58)第五十八次:计算数
Figure DEST_PATH_IMAGE007
的平方再对p进行取模运算得到数
Figure 502012DEST_PATH_IMAGE008
,
Figure DEST_PATH_IMAGE009
对数
Figure 869540DEST_PATH_IMAGE008
进行判断:若
Figure 252111DEST_PATH_IMAGE010
,则随机数p为不可约多项式中每一项系数组成的字符串
Figure 323972DEST_PATH_IMAGE001
Figure DEST_PATH_IMAGE011
,则随机数p不是不可约多项式中每一项系数组成的字符串
Figure 905126DEST_PATH_IMAGE001
,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;
Figure 145352DEST_PATH_IMAGE008
不等于1也不等于2,则继续计算:
59)第五十九次:计算数
Figure 405432DEST_PATH_IMAGE008
的平方再对p进行取模运算得到数
Figure 749826DEST_PATH_IMAGE012
,
Figure DEST_PATH_IMAGE013
60)第六十次:计算数
Figure 185486DEST_PATH_IMAGE012
的平方再对p进行取模运算得到数
Figure 98079DEST_PATH_IMAGE014
,
Figure DEST_PATH_IMAGE015
以此类推,
122)第一百二十二次:计算数
Figure 251979DEST_PATH_IMAGE016
的平方再对p进行取模运算得到数
Figure DEST_PATH_IMAGE017
,
Figure 573633DEST_PATH_IMAGE018
对数
Figure 457275DEST_PATH_IMAGE017
进行判断:若
Figure DEST_PATH_IMAGE019
,则随机数p不是不可约多项式中每一项系数组成的字符串
Figure 337506DEST_PATH_IMAGE001
,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;
Figure 181966DEST_PATH_IMAGE020
,则计算
Figure DEST_PATH_IMAGE021
,如果
Figure 540266DEST_PATH_IMAGE022
,则随机数p为不可约多项式中每一项系数组成的字符串
Figure 543994DEST_PATH_IMAGE001
;如果
Figure DEST_PATH_IMAGE023
,则随机数p不是不可约多项式中每一项系数组成的字符串
Figure 828082DEST_PATH_IMAGE001
,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;
其中,所述数
Figure 894259DEST_PATH_IMAGE003
、数
Figure 915304DEST_PATH_IMAGE005
至数
Figure 648905DEST_PATH_IMAGE016
均存储在寄存器中;
所述数
Figure 198835DEST_PATH_IMAGE003
、数
Figure 17886DEST_PATH_IMAGE005
至数
Figure 311465DEST_PATH_IMAGE016
中任意一个数的平方计算过程如下:
首先,令数
Figure 395177DEST_PATH_IMAGE003
、数
Figure 381588DEST_PATH_IMAGE005
至数
Figure 687935DEST_PATH_IMAGE016
中任意一个数为
Figure 785204DEST_PATH_IMAGE024
,n为1至121中的正整数;将该数
Figure 227818DEST_PATH_IMAGE024
中除最低位数值外的每一位数值之后插入0从而形成该数
Figure 385130DEST_PATH_IMAGE024
的平方,即
Figure DEST_PATH_IMAGE025
Figure 709932DEST_PATH_IMAGE025
存储在寄存器中。
进一步的,所述异或乘操作具体过程步骤如下:
A1:将参与异或乘操作的矩阵表示为
Figure 79734DEST_PATH_IMAGE026
,将参与异或乘操作的明文C中的128位数据对应的列向量表示为
Figure DEST_PATH_IMAGE027
A2:取矩阵的第一行异或乘明文C中的128位数据对应的列向量,得到第一个二进制数值Z1,即
Figure 672127DEST_PATH_IMAGE028
A3:取矩阵的第二行异或乘明文C中的128位数据对应的列向量,得到第二个二进制数值Z2,即
Figure DEST_PATH_IMAGE029
A4:以此类推,直至取矩阵的第一百二十八行异或乘明文C中的128位数据对应的列向量,得到第一百二十八个二进制数值Z128,即
Figure 406865DEST_PATH_IMAGE030
A5:将第一个二进制数值Z1、第二个二进制数值Z2直至第一百二十八个二进制数值Z128按顺序组成数值串,则得到对应的哈希值。
进一步的,所述与判断操作具体过程步骤如下:
B1:将参与异或乘操作的矩阵表示为
Figure 422225DEST_PATH_IMAGE026
,将参与异或乘操作的明文C中的128位数据对应的列向量表示为
Figure 126876DEST_PATH_IMAGE027
B2:取矩阵的第一行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W1,即
Figure DEST_PATH_IMAGE031
,再判断数W1中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z1;
B3:取矩阵的第二行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W2,即
Figure 809661DEST_PATH_IMAGE032
,再判断数W2中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z2;
B4:以此类推,直至取矩阵的第一百二十八行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W128,再判断数W128中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z128;
B5:将第一个二进制数值Z1、第二个二进制数值Z2直至第一百二十八个二进制数值Z128按顺序组成数值串,则得到对应的哈希值。
进一步的,所述数
Figure 685607DEST_PATH_IMAGE024
中除最低位数值外的每一位数值之后插入0从而形成该数
Figure 312897DEST_PATH_IMAGE024
的平方过程如下:
(a)判断数
Figure 165447DEST_PATH_IMAGE024
是否为128位,若是,则进行下一步;若不是,将数
Figure 827372DEST_PATH_IMAGE024
的二进制数值最高位左边补0,直至形成128位的数
Figure 372754DEST_PATH_IMAGE024
(b)将128位数
Figure 752920DEST_PATH_IMAGE024
的最低位右边补0,直至形成256位的数G;
(c)64位交错:将数G均分为4部分,并使其中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G1
(d)32位交错:将数G1均分为2组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G2
(e)16位交错:将数G2均分为4组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G3
(f)8位交错:将数G3均分为8组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G4
(g)4位交错:将数G4均分为16组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G5
(h)2位交错:将数G5均分为32组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G6
(i)1位交错:将数G6均分为64组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G7
(j)计算数G7的最高有效位数,将数G7的最高有效位数左边的所有二进制数值0删除,以及将数G7的最低位二进制数值0删除,形成数G8,数G8即为该数
Figure 409160DEST_PATH_IMAGE024
的平方。
进一步的,所述数
Figure 925592DEST_PATH_IMAGE003
、数
Figure 140411DEST_PATH_IMAGE005
至数
Figure 476714DEST_PATH_IMAGE016
中任意一个数
Figure 936645DEST_PATH_IMAGE024
的平方对p进行取模运算的计算过程步骤如下:
S1 计算出
Figure 307584DEST_PATH_IMAGE025
和p的最高有效位数, 分别记为uLenG和uLenB;
S2 将p的二进制数值左移uLenG - uLenB位,并在低位补0得到p1
S3 将
Figure 194768DEST_PATH_IMAGE025
与p1进行异或,得到新的
Figure 18368DEST_PATH_IMAGE025
,计算新的
Figure 281990DEST_PATH_IMAGE025
的最高有效位数,得到新的uLenG;
S4 比较新的uLenG与uLenB,若新的uLenG大于或等于uLenB,则将步骤S3中新的
Figure 507435DEST_PATH_IMAGE025
返回步骤S1,继续重复步骤S1至S3,直至新的uLenG小于uLenB,则输出步骤S3中的
Figure 61126DEST_PATH_IMAGE025
,即为输出结果。
本发明的有益效果:本发明相较于现有技术,能够基于x86平台SIMD去计算不可约多项式,并在此基础上得到最终的哈希值,整个技术方案在时间和空间效率方面均有大幅的提升;而且在二进制的平方运算过程中,采用交错法实现平方运算,相较于传统循环移位的实现,效率提升4倍以上;在量子哈希计算过程中,采用异或乘操作或与判断操作进行哈希运算,其中与判断操作运算效率高,使得哈希计算的效率也得到了提升。
附图说明
图1为数g的示意图;
图2为随机数p的示意图;
图3为求不可约多项式流程图;
图4为通用寄存器拆分为64bit存储数据示意图;
图5为数组存储多项式示意图;
图6为Packed和Scalar加法运算示意图。
具体实施方式
下面结合附图和实施例对本发明做进一步描述:
本发明在计算哈希值的时候,首先对于给定的随机数,求解一个不可约多项式,然后再用LFSR的方式对一个新的随机数进行变换得到矩阵,然后利用变化出来的矩阵与待哈希的明文一段一段进行异或乘操作或与判断操作,最终将一段一段的128bit的哈希值,互相再进行异或操作,得到最终的哈希。
简单说分成两步:第一步计算不可约多项式;第二步利用LFSR根据第一步得到的不可约多项式计算哈希值。
本发明提出了一种基于x86平台SIMD的不可约多项式计算方法,包括以下步骤:
(1)初始化一个128位的数g,数g的格式要求如图1所示,该数g分为前64位和后64位两部分,前64位的最后一位数值为1,其他位数值为0;后64位的每一位数值均为0;
(2)取一个128位的随机数,并在随机数的最低位右边增加一位从而形成一个129位的随机数,将129位随机数的最高位数值和最低位数值改为1,得到新的随机数p,p的结构如图2所示;
(3)根据步骤(1)和步骤(2)得到的g和p,进行迭代计算得到不可约多项式中每一项系数组成的字符串
Figure 637601DEST_PATH_IMAGE001
,再通过不可约多项式中每一项系数组成的字符串
Figure 439335DEST_PATH_IMAGE001
生成不可约多项式
Figure 519287DEST_PATH_IMAGE002
如图3所示,迭代计算得到不可约多项式中每一项系数组成的字符串
Figure 13853DEST_PATH_IMAGE001
的具体过程步骤为:
1)第一次:计算数g的平方再对p进行取模运算得到数
Figure 812045DEST_PATH_IMAGE003
,
Figure 151890DEST_PATH_IMAGE004
2)第二次:计算数
Figure 351927DEST_PATH_IMAGE003
的平方再对p进行取模运算得到数
Figure 515930DEST_PATH_IMAGE005
,
Figure 535839DEST_PATH_IMAGE006
以此类推,
58)第五十八次:计算数
Figure 944955DEST_PATH_IMAGE007
的平方再对p进行取模运算得到数
Figure 999498DEST_PATH_IMAGE008
,
Figure 570288DEST_PATH_IMAGE009
对数
Figure 343072DEST_PATH_IMAGE008
进行判断:若
Figure 290299DEST_PATH_IMAGE010
,即
Figure DEST_PATH_IMAGE033
,则此时可以证明随机数p为不可约多项式中每一项系数组成的字符串
Figure 107339DEST_PATH_IMAGE001
Figure 239243DEST_PATH_IMAGE011
,则说明随机数p不是不可约多项式中每一项系数组成的字符串
Figure 374689DEST_PATH_IMAGE001
,需从头开始重新计算,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;
Figure 250242DEST_PATH_IMAGE008
不等于1也不等于2,则继续计算:
59)第五十九次:计算数
Figure 154744DEST_PATH_IMAGE008
的平方再对p进行取模运算得到数
Figure 191970DEST_PATH_IMAGE012
,
Figure 814712DEST_PATH_IMAGE013
60)第六十次:计算数
Figure 228376DEST_PATH_IMAGE012
的平方再对p进行取模运算得到数
Figure 220340DEST_PATH_IMAGE014
,
Figure 428468DEST_PATH_IMAGE015
以此类推,
122)第一百二十二次:计算数
Figure 272927DEST_PATH_IMAGE016
的平方再对p进行取模运算得到数
Figure 755861DEST_PATH_IMAGE017
,
Figure 103797DEST_PATH_IMAGE018
对数
Figure 748405DEST_PATH_IMAGE017
进行判断:若
Figure 80160DEST_PATH_IMAGE019
,则随机数p不是不可约多项式中每一项系数组成的字符串
Figure 835627DEST_PATH_IMAGE001
,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;
Figure 88270DEST_PATH_IMAGE020
,即
Figure 903780DEST_PATH_IMAGE034
,则计算p与
Figure 457252DEST_PATH_IMAGE017
相互取模的结果即计算
Figure 16409DEST_PATH_IMAGE021
,如果
Figure 604516DEST_PATH_IMAGE022
,则随机数p为不可约多项式中每一项系数组成的字符串
Figure 590927DEST_PATH_IMAGE001
;如果
Figure 897275DEST_PATH_IMAGE023
,则随机数p不是不可约多项式中每一项系数组成的字符串
Figure 728964DEST_PATH_IMAGE001
,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;其中,所述数
Figure 296212DEST_PATH_IMAGE003
、数
Figure 827425DEST_PATH_IMAGE005
至数
Figure 480123DEST_PATH_IMAGE016
均存储在寄存器中。
涉及到计算
Figure DEST_PATH_IMAGE035
,而g和p都不是小数字,直接算的话,有两种方法:
方法一:通用寄存器只能存储64位的数据,所以把128位的数据分成两个64位数据存储。平方操作后128位的数据最大不会超过256位数据,所以需要有四个64位去存储数据,然后再对这个数据进行移位,二进制模等运算,如图4所示;
方法二:把128位的数据存储在一个数组Array里,如图5所示。
以上这两种方法都存在一定的问题。第一种方法,首先由于计算过程中会经常用到256位的数据来求解不可约多项式,因此两个64位的数就会在需要的时候,变成四个64位的数;其次,不管是针对两个64位的数还是四个64位的数,我们需要实现各种移位、二进制模、加法等运算,需要区分高低位运算,同时还涉及到进位、退位等,每实现一个算子,都相当复杂。第二种方法,用数组的方式存储数据进行运算,这种方法的优点就是可以支持更高维的计算,例如如果需要计算512位,甚至1024位,再大都能平行扩展。但是第一种方法存在的问题,在第二种方法上统统都存在,例如加减乘除,需要进位借位,因为是数组中的元素,所以这些操作都是跨字节的,因此在时间和空间上效率更低。
本发明采用一种新的方法,利用SIMD指令集,充分发挥平行计算的优势,结合本发明优化的计算方法,经过测试,性能提升到几乎和硬件计算效率差不多,例:FPGA(注:一种可编程的半定制电路)。求解不可约多项式的性能:采用传统运算的方式,优化前:900ms/个,优化后:约合2.2ms/个;利用LFSR计算哈希,优化前17MB/s,优化后100MB/s。目前支持SSE指令集的CPU,其XMM寄存器是可以存储128位数据,而支持AVX/AVX2指令集的CPU,其YMM寄存器可以一次性装载256位数据,这就为本发明的运算提供了极大的操作空间和效率提升空间。
SIMD指令集的运算指令分为两大类:Packed和Scalar。如图6所示,Packed指令是一次对XMM寄存器中的四个数,即DATA0 ~ DATA3,均进行计算,而Scalar则只对XMM寄存器中的DATA0进行计算。例如对128位数据做算术运算和逻辑运算,用Scalar的方式实现,这里以加法为例,步骤是这样的:先计算A0 + B0;再计算A1 + B1,然后进位;进而计算A2 + B2,然后进位;最后计算A3 + B3,然后进位,才完成一次完整的加法运算。而用Packed方式,则只需要调用诸如:_mm_add_epi32这类加法指令即可完成加法运算。所以Packed方式大量减少了循环和比较,是本发明采取的方式。
在此基础上,由上可知
Figure 787608DEST_PATH_IMAGE036
是一个128位的数据,128位的数据平方后得到的结果最大不会超过256位,所以本发明利用SIMD寄存器,并且当前计算机支持AVX指令。使用支持SSE指令集的cpu中的XMM寄存器来存储128位的数据
Figure 350307DEST_PATH_IMAGE036
,用AVX指令集的YMM寄存器来存储最大不会超过256位的平方后的结果。知道如何对数据做存储后,我们再来计算
Figure DEST_PATH_IMAGE037
其中,数
Figure 819466DEST_PATH_IMAGE003
、数
Figure 959460DEST_PATH_IMAGE005
至数
Figure 775363DEST_PATH_IMAGE016
中任意一个数的平方计算过程如下:
首先,令数
Figure 317203DEST_PATH_IMAGE003
、数
Figure 691683DEST_PATH_IMAGE005
至数
Figure 318974DEST_PATH_IMAGE016
中任意一个数为
Figure 437103DEST_PATH_IMAGE024
,n为1至121中的正整数;将该数
Figure 99028DEST_PATH_IMAGE024
中除最低位数值外的每一位数值之后插入0从而形成该数
Figure 644410DEST_PATH_IMAGE024
的平方,即
Figure 493417DEST_PATH_IMAGE025
Figure 913772DEST_PATH_IMAGE025
存储在寄存器中。举例说明:举一些常规二进制平方的例子,例如
Figure 164625DEST_PATH_IMAGE038
Figure DEST_PATH_IMAGE039
Figure 412067DEST_PATH_IMAGE040
;从这些例子中,可以发现一个规律,即二进制的数据平方后就是在原有数值之间插入0。
实现插0,可以通过不停移位的方法做到,但是移位的方法计算量大,所以本发明采用交错实现,即数
Figure 748370DEST_PATH_IMAGE024
中除最低位数值外的每一位数值之后插入0从而形成该数
Figure 208301DEST_PATH_IMAGE024
的平方过程如下:
(a)判断数
Figure 579240DEST_PATH_IMAGE024
是否为128位,若是,则进行下一步;若不是,将数
Figure 466424DEST_PATH_IMAGE024
的二进制数值最高位左边补0,直至形成128位的数
Figure 555603DEST_PATH_IMAGE024
(b)将128位数
Figure 49252DEST_PATH_IMAGE024
的最低位右边补0,直至形成256位的数G;
(c)64位交错:将数G均分为4部分,并使其中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G1
(d)32位交错:将数G1均分为2组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G2
(e)16位交错:将数G2均分为4组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G3
(f)8位交错:将数G3均分为8组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G4
(g)4位交错:将数G4均分为16组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G5
(h)2位交错:将数G5均分为32组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G6
(i)1位交错:将数G6均分为64组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G7
(j)计算数G7的最高有效位数,将数G7的最高有效位数左边的所有二进制数值0删除,以及将数G7的最低位二进制数值0删除,形成数G8,数G8即为该数
Figure 540276DEST_PATH_IMAGE024
的平方。
举例:一次操作128位的数据,由于128位的数据太长,版面影响,故以16位的数据
Figure DEST_PATH_IMAGE041
来具体说明交错;
首先将16位的数据最低位右边补0,直至形成32位的数据
Figure 129520DEST_PATH_IMAGE042
1、交错:均分为4部分,并使其中的第2部分二进制数值与第3部分二进制数值进行交换;
交错前:abcd efgh ijkl mnop 0000 0000 0000 0000;
交错后:abcd efgh 0000 0000 ijkl mnop 0000 0000;
2、交错:先均分为2组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换;
交错前:abcd efgh 0000 0000 ijkl mnop 0000 0000;
交错后:abcd 0000 efgh 0000 ijkl 0000 mnop 0000;
3、交错:先均分为4组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换;
交错前:abcd 0000 efgh 0000 ijkl 0000 mnop 0000;
交错后:ab00 cd00 ef00 gh00 ij00 kl00 mn00 op00;
4、交错:先均分为8组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换;
交错前:ab00 cd00 ef00 gh00 ij00 kl00 mn00 op00;
交错后:a0b0 c0d0 e0f0 g0h0 i0j0 k0l0 m0n0 o0p0;(由于数值是16位的,所以交错4次即可,而128位的数值需要按上述方法继续交错,直至形成数
Figure 50203DEST_PATH_IMAGE024
的平方)
然后将最高有效位数左边的所有二进制数值0删除,以及将最低位二进制数值0删除,至此,得到了交错后的结果
Figure DEST_PATH_IMAGE043
;完成了16位数据的插0运算,也就是实现了二进制的平方运算,数
Figure 383095DEST_PATH_IMAGE024
也是同理,首先将数
Figure 728626DEST_PATH_IMAGE024
的二进制数值最高位左边补0,直至形成128位;将128位数
Figure 456148DEST_PATH_IMAGE024
的最低位右边补0,直至形成256位的数G,再进行交错直至形成最终的数
Figure 254340DEST_PATH_IMAGE024
的平方。经过测算,该算法相较于传统循环移位的实现,效率提升4倍以上,在部分高主频的机器上甚至能达到8倍以上。
利用SIMD单指令多数据的方式,一个指令周期内就可以操作128位、256位,甚至512位的数据,当数
Figure 718819DEST_PATH_IMAGE024
的平方得到之后,数
Figure 794223DEST_PATH_IMAGE024
的平方对p进行取模运算的计算过程步骤如下:
S1 计算出
Figure 318745DEST_PATH_IMAGE025
和p的最高有效位数, 分别记为uLenG和uLenB;
S2 将p的二进制数值左移uLenG - uLenB位,并在低位补0得到p1;这一步实际上仅仅就是将p低位补0,在总长度上与
Figure 479599DEST_PATH_IMAGE025
对齐;
S3 经过上一步之后,
Figure 13348DEST_PATH_IMAGE025
与p1的总长度是相等的,将
Figure 943258DEST_PATH_IMAGE025
与p1进行异或,得到新的
Figure 373103DEST_PATH_IMAGE025
,计算新的
Figure 788297DEST_PATH_IMAGE025
的最高有效位数,得到新的uLenG;
S4 比较新的uLenG与uLenB,若新的uLenG大于或等于uLenB,则将步骤S3中新的
Figure 860158DEST_PATH_IMAGE025
返回步骤S1,继续重复步骤S1至S3,直至新的uLenG小于uLenB,则输出步骤S3中的
Figure 644574DEST_PATH_IMAGE025
,即为输出结果。整个计算过程,简单说就是不停把p进行移位,异或掉最高位,直到新的
Figure 510899DEST_PATH_IMAGE025
的最高有效位数小于p的最高有效位数。
综上,实现了
Figure 646345DEST_PATH_IMAGE035
的高效运算,进而判断出了p是不是不可约多项式中每一项系数组成的字符串
Figure 521898DEST_PATH_IMAGE001
量子哈希运算经常会使用到线性反馈移位寄存器来与明文进行运算。线性反馈移位寄存器,下文简称为LFSR,是指将前一状态输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些比特位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。LFSR在工程实现中大都基于硬件来操作,如果是用软件的方式来计算LFSR,时间和空间上都会很复杂,本发明提出一种基于x86平台SIMD的量子安全哈希值计算方法,包括以下步骤:
步骤1: 将输入计算机的待处理明文C均分为N份,每份为128位的数据;
步骤2:取一个128位的随机数r,将随机数r的二进制数值最高位左边补0(变成129位)再与上述得到的不可约多项式中每一项系数组成的字符串
Figure 160820DEST_PATH_IMAGE001
(129位)进行异或操作得到数m1,将数m1中的每一位二进制数值依次进行异或得到一位的数t1,然后将随机数r的最高位左边补上数t1,并删除随机数r的最低位二进制数值,得到一个新的128位的随机数r1;
将随机数r1的二进制数值最高位左边补0再与不可约多项式中每一项系数组成的字符串
Figure 198047DEST_PATH_IMAGE001
进行异或操作得到数m2,将数m2中的每一位二进制数值依次进行异或得到一位的数t2,然后将随机数r1的最高位左边补上数t2,并删除随机数r1的最低位二进制数值,得到一个新的128位的随机数r2;
以此类推,直至将随机数r127的二进制数值最高位左边补0再与不可约多项式中每一项系数组成的字符串
Figure 53745DEST_PATH_IMAGE001
进行异或操作得到数m128,将数m128中的每一位二进制数值依次进行异或得到一位的数t128,然后将随机数r127的最高位左边补上数t128,并删除随机数r127的最低位二进制数值,得到一个新的128位的随机数r128;
步骤3:构建128×128的矩阵,该矩阵的第一列数值为随机数r1且随机数r1的最高位位于矩阵的第128行,第二列数值为随机数r2且随机数r2的最高位位于矩阵的第128行,以此类推,第一百二十八列数值为随机数r128且随机数r128的最高位位于矩阵的第128行,从而形成矩阵Q1
步骤4:将随机数r128作为新的随机数r代替步骤2中的随机数r,重复步骤2和步骤3得到矩阵Q2;以此类推,直至得到矩阵QM,M与N相同;
步骤5:将矩阵Q1和明文C中的第一份128位数据对应的列向量进行异或乘操作或与判断操作得到第一哈希值h1,将矩阵Q2和明文C中的第二份128位数据对应的列向量进行异或乘操作或与判断操作得到第二哈希值h2,以此类推,将矩阵QM和明文C中的第N份128位数据对应的列向量进行异或乘操作或与判断操作得到第N哈希值hx;
步骤6:最后将第一哈希值h1、第二哈希值h2直至第N哈希值hx依次进行异或得到哈希值F,哈希值F即为明文C的量子哈希值。
其中,异或乘操作具体过程步骤如下:
A1:将参与异或乘操作的矩阵表示为
Figure 467409DEST_PATH_IMAGE026
,将参与异或乘操作的明文C中的128位数据对应的列向量表示为
Figure 226417DEST_PATH_IMAGE027
A2:取矩阵的第一行异或乘明文C中的128位数据对应的列向量,得到第一个二进制数值Z1,即
Figure 700124DEST_PATH_IMAGE028
A3:取矩阵的第二行异或乘明文C中的128位数据对应的列向量,得到第二个二进制数值Z2,即
Figure 544583DEST_PATH_IMAGE029
A4:以此类推,直至取矩阵的第一百二十八行异或乘明文C中的128位数据对应的列向量,得到第一百二十八个二进制数值Z128,即
Figure 761938DEST_PATH_IMAGE030
A5:将第一个二进制数值Z1、第二个二进制数值Z2直至第一百二十八个二进制数值Z128按顺序组成数值串,则得到对应的哈希值。
与判断操作具体过程步骤如下:
B1:将参与异或乘操作的矩阵表示为
Figure 234508DEST_PATH_IMAGE026
,将参与异或乘操作的明文C中的128位数据对应的列向量表示为
Figure 754482DEST_PATH_IMAGE027
B2:取矩阵的第一行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W1,即
Figure 210871DEST_PATH_IMAGE031
,再判断数W1中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z1;
B3:取矩阵的第二行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W2,即
Figure 337309DEST_PATH_IMAGE032
,再判断数W2中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z2;
B4:以此类推,直至取矩阵的第一百二十八行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W128,再判断数W128中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z128;
B5:将第一个二进制数值Z1、第二个二进制数值Z2直至第一百二十八个二进制数值Z128按顺序组成数值串,则得到对应的哈希值。与判断操作运算效率高于异或乘操作的效率。
在计算哈希的时候,这个过程是进行了128次的
Figure 195543DEST_PATH_IMAGE044
异或乘
Figure DEST_PATH_IMAGE045
,异或乘涉及了大量的乘法运算
Figure 151998DEST_PATH_IMAGE046
Figure DEST_PATH_IMAGE047
Figure 236629DEST_PATH_IMAGE048
Figure DEST_PATH_IMAGE049
,刚好逻辑与运算也是这个结果:
Figure 202311DEST_PATH_IMAGE050
Figure DEST_PATH_IMAGE051
Figure 554532DEST_PATH_IMAGE052
Figure DEST_PATH_IMAGE053
,由于逻辑与运算效率比乘法运算高,所以这里本发明将乘运算更换为逻辑与运算,提升了效率。
乘法运算之后需要将数据进行异或操作,根据异或规律,
Figure 947468DEST_PATH_IMAGE054
Figure DEST_PATH_IMAGE055
Figure 519394DEST_PATH_IMAGE056
Figure DEST_PATH_IMAGE057
,可知0与任何数异或都是这个数本身,1与任何数异或都是这个数的相反数。那么对于求取数据异或的值,就等价于求数据中1的个数,如果个数为奇数,则结果为1。如果个数为偶数,则结果为0。因此,我们可以把求异或,转化为求取1的个数。这样显然效率又得到了提高。
本发明能够基于x86平台SIMD去计算不可约多项式,并在此基础上得到最终的哈希值,整个技术方案在时间和空间效率方面均有大幅的提升;而且在二进制的平方运算过程中,采用交错法实现平方运算,相较于传统循环移位的实现,效率提升4倍以上;在量子哈希计算过程中,采用异或乘操作或与判断操作进行哈希运算,使得哈希计算的效率也得到了提升。

Claims (4)

1.一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法,其特征在于,包括以下步骤:
步骤1:将输入计算机的待处理明文C均分为N份,每份为128位的数据;
步骤2:取一个128位的随机数r,将随机数r的二进制数值最高位左边补0再与不可约多项式中每一项系数组成的字符串
Figure 250353DEST_PATH_IMAGE001
进行异或操作得到数m1,将数m1中的每一位二进制数值依次进行异或得到一位的数t1,然后将随机数r的最高位左边补上数t1,并删除随机数r的最低位二进制数值,得到一个新的128位的随机数r1;
将随机数r1的二进制数值最高位左边补0再与不可约多项式中每一项系数组成的字符串
Figure 920369DEST_PATH_IMAGE001
进行异或操作得到数m2,将数m2中的每一位二进制数值依次进行异或得到一位的数t2,然后将随机数r1的最高位左边补上数t2,并删除随机数r1的最低位二进制数值,得到一个新的128位的随机数r2;
以此类推,直至将随机数r127的二进制数值最高位左边补0再与不可约多项式中每一项系数组成的字符串
Figure 175901DEST_PATH_IMAGE001
进行异或操作得到数m128,将数m128中的每一位二进制数值依次进行异或得到一位的数t128,然后将随机数r127的最高位左边补上数t128,并删除随机数r127的最低位二进制数值,得到一个新的128位的随机数r128;
步骤3:构建128×128的矩阵,该矩阵的第一列数值为随机数r1且随机数r1的最高位位于矩阵的第128行,第二列数值为随机数r2且随机数r2的最高位位于矩阵的第128行,以此类推,第一百二十八列数值为随机数r128且随机数r128的最高位位于矩阵的第128行,从而形成矩阵Q1
步骤4:将随机数r128作为新的随机数r代替步骤2中的随机数r,重复步骤2和步骤3得到矩阵Q2;以此类推,直至得到矩阵QM,M与N相同;
步骤5:将矩阵Q1和明文C中的第一份128位数据对应的列向量进行异或乘操作或与判断操作得到第一哈希值h1,将矩阵Q2和明文C中的第二份128位数据对应的列向量进行异或乘操作或与判断操作得到第二哈希值h2,以此类推,将矩阵QM和明文C中的第N份128位数据对应的列向量进行异或乘操作或与判断操作得到第N哈希值hx;
步骤6:最后将第一哈希值h1、第二哈希值h2直至第N哈希值hx依次进行异或得到哈希值F,哈希值F即为明文C的量子哈希值;
其中,所述不可约多项式的生成具体过程步骤如下:
(1)初始化一个128位的数g,该数g分为前64位和后64位两部分,前64位的最后一位数值为1,其他位数值为0;后64位的每一位数值均为0;
(2)取一个128位的随机数,并在随机数的最低位右边增加一位从而形成一个129位的随机数,将129位随机数的最高位数值和最低位数值改为1,得到新的随机数p;
(3)根据步骤(1)和步骤(2)得到的g和p,进行迭代计算得到不可约多项式中每一项系数组成的字符串
Figure 97721DEST_PATH_IMAGE001
,再通过不可约多项式中每一项系数组成的字符串
Figure 348573DEST_PATH_IMAGE001
生成不可约多项式
Figure 64857DEST_PATH_IMAGE002
所述迭代计算得到不可约多项式中每一项系数组成的字符串
Figure 666739DEST_PATH_IMAGE001
的具体过程步骤为:
1)第一次:计算数g的平方再对p进行取模运算得到数
Figure 622276DEST_PATH_IMAGE003
,
Figure 993215DEST_PATH_IMAGE004
2)第二次:计算数
Figure 880399DEST_PATH_IMAGE003
的平方再对p进行取模运算得到数
Figure 703999DEST_PATH_IMAGE005
,
Figure 826675DEST_PATH_IMAGE006
以此类推,
58)第五十八次:计算数
Figure 927487DEST_PATH_IMAGE007
的平方再对p进行取模运算得到数
Figure 375785DEST_PATH_IMAGE008
,
Figure 562047DEST_PATH_IMAGE009
对数
Figure 488415DEST_PATH_IMAGE008
进行判断:若
Figure 207847DEST_PATH_IMAGE010
,则随机数p为不可约多项式中每一项系数组成的字符串
Figure 561468DEST_PATH_IMAGE001
Figure 235026DEST_PATH_IMAGE011
,则随机数p不是不可约多项式中每一项系数组成的字符串
Figure 965085DEST_PATH_IMAGE001
,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;
Figure 40488DEST_PATH_IMAGE008
不等于1也不等于2,则继续计算:
59)第五十九次:计算数
Figure 565010DEST_PATH_IMAGE008
的平方再对p进行取模运算得到数
Figure 725864DEST_PATH_IMAGE012
,
Figure 994035DEST_PATH_IMAGE013
60)第六十次:计算数
Figure 425409DEST_PATH_IMAGE012
的平方再对p进行取模运算得到数
Figure 386412DEST_PATH_IMAGE014
,
Figure 768983DEST_PATH_IMAGE015
以此类推,
122)第一百二十二次:计算数
Figure 575265DEST_PATH_IMAGE016
的平方再对p进行取模运算得到数
Figure 625261DEST_PATH_IMAGE017
,
Figure 491585DEST_PATH_IMAGE018
对数
Figure 627032DEST_PATH_IMAGE017
进行判断:若
Figure 237005DEST_PATH_IMAGE019
,则随机数p不是不可约多项式中每一项系数组成的字符串
Figure 640042DEST_PATH_IMAGE001
,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;
Figure 942847DEST_PATH_IMAGE020
,则计算
Figure 300010DEST_PATH_IMAGE021
,如果
Figure 713674DEST_PATH_IMAGE022
,则随机数p为不可约多项式中每一项系数组成的字符串
Figure 472683DEST_PATH_IMAGE001
;如果
Figure 946389DEST_PATH_IMAGE023
,则随机数p不是不可约多项式中每一项系数组成的字符串
Figure 790849DEST_PATH_IMAGE001
,此时将随机数p的二进制数值与二进制数值10相加形成新的随机数p,再利用数g和新的随机数p返回步骤1)重新计算;
其中,所述数
Figure 477045DEST_PATH_IMAGE003
、数
Figure 480773DEST_PATH_IMAGE005
至数
Figure 761932DEST_PATH_IMAGE016
均存储在支持SSE指令集的cpu中的XMM寄存器中;所述XMM寄存器采用Packed指令一次对XMM寄存器中的四个数进行计算;
所述数
Figure 952742DEST_PATH_IMAGE003
、数
Figure 583574DEST_PATH_IMAGE005
至数
Figure 176230DEST_PATH_IMAGE016
中任意一个数的平方计算过程如下:
首先,令数
Figure 867105DEST_PATH_IMAGE003
、数
Figure 810790DEST_PATH_IMAGE005
至数
Figure 245314DEST_PATH_IMAGE016
中任意一个数为
Figure 958055DEST_PATH_IMAGE024
,n为1至121中的正整数;将该数
Figure 52788DEST_PATH_IMAGE024
中除最低位数值外的每一位数值之后插入0从而形成该数
Figure 218190DEST_PATH_IMAGE024
的平方,即
Figure 190825DEST_PATH_IMAGE025
Figure 23652DEST_PATH_IMAGE025
存储在AVX指令集的YMM寄存器中;
所述数
Figure 790751DEST_PATH_IMAGE024
中除最低位数值外的每一位数值之后插入0从而形成该数
Figure 709028DEST_PATH_IMAGE024
的平方过程如下:
(a)判断数
Figure 485354DEST_PATH_IMAGE024
是否为128位,若是,则进行下一步;若不是,将数
Figure 907108DEST_PATH_IMAGE024
的二进制数值最高位左边补0,直至形成128位的数
Figure 877732DEST_PATH_IMAGE024
(b)将128位数
Figure 752147DEST_PATH_IMAGE024
的最低位右边补0,直至形成256位的数G;
(c)64位交错:将数G均分为4部分,并使其中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G1
(d)32位交错:将数G1均分为2组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G2
(e)16位交错:将数G2均分为4组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G3
(f)8位交错:将数G3均分为8组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G4
(g)4位交错:将数G4均分为16组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G5
(h)2位交错:将数G5均分为32组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G6
(i)1位交错:将数G6均分为64组,将每组的二进制数值再均分为4部分,并使每组中的第2部分二进制数值与第3部分二进制数值进行交换,形成数G7
(j)计算数G7的最高有效位数,将数G7的最高有效位数左边的所有二进制数值0删除,以及将数G7的最低位二进制数值0删除,形成数G8,数G8即为该数
Figure 332164DEST_PATH_IMAGE024
的平方。
2.根据权利要求1所述的一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法,其特征在于,所述异或乘操作具体过程步骤如下:
A1:将参与异或乘操作的矩阵表示为
Figure 874004DEST_PATH_IMAGE026
,将参与异或乘操作的明文C中的128位数据对应的列向量表示为
Figure 248484DEST_PATH_IMAGE027
A2:取矩阵的第一行异或乘明文C中的128位数据对应的列向量,得到第一个二进制数值Z1,即
Figure 875775DEST_PATH_IMAGE028
A3:取矩阵的第二行异或乘明文C中的128位数据对应的列向量,得到第二个二进制数值Z2,即
Figure 993903DEST_PATH_IMAGE029
A4:以此类推,直至取矩阵的第一百二十八行异或乘明文C中的128位数据对应的列向量,得到第一百二十八个二进制数值Z128,即
Figure 390250DEST_PATH_IMAGE030
A5:将第一个二进制数值Z1、第二个二进制数值Z2直至第一百二十八个二进制数值Z128按顺序组成数值串,则得到对应的哈希值。
3.根据权利要求1所述的一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法,其特征在于,所述与判断操作具体过程步骤如下:
B1:将参与异或乘操作的矩阵表示为
Figure 434167DEST_PATH_IMAGE026
,将参与异或乘操作的明文C中的128位数据对应的列向量表示为
Figure 548753DEST_PATH_IMAGE027
B2:取矩阵的第一行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W1,即
Figure 64048DEST_PATH_IMAGE031
,再判断数W1中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z1;
B3:取矩阵的第二行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W2,即
Figure 721426DEST_PATH_IMAGE032
,再判断数W2中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z2;
B4:以此类推,直至取矩阵的第一百二十八行与明文C中的128位数据对应的列向量进行逻辑与运算,得到数W128,再判断数W128中1的个数,如果1的个数为奇数,则输出结果为1;如果1的个数为偶数,则输出结果为0;最终将输出结果记为第一个二进制数值Z128;
B5:将第一个二进制数值Z1、第二个二进制数值Z2直至第一百二十八个二进制数值Z128按顺序组成数值串,则得到对应的哈希值。
4.根据权利要求1所述的一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法,其特征在于,所述数
Figure 296764DEST_PATH_IMAGE003
、数
Figure 774012DEST_PATH_IMAGE005
至数
Figure 358577DEST_PATH_IMAGE016
中任意一个数
Figure 604882DEST_PATH_IMAGE024
的平方对p进行取模运算的计算过程步骤如下:
S1 计算出
Figure 616701DEST_PATH_IMAGE025
和p的最高有效位数, 分别记为uLenG和uLenB;
S2 将p的二进制数值左移uLenG - uLenB位,并在低位补0得到p1
S3 将
Figure 811272DEST_PATH_IMAGE025
与p1进行异或,得到新的
Figure 933949DEST_PATH_IMAGE025
,计算新的
Figure 34760DEST_PATH_IMAGE025
的最高有效位数,得到新的uLenG;
S4 比较新的uLenG与uLenB,若新的uLenG大于或等于uLenB,则将步骤S3中新的
Figure 217479DEST_PATH_IMAGE033
返回步骤S1,继续重复步骤S1至S3,直至新的uLenG小于uLenB,则输出步骤S3中的
Figure 669320DEST_PATH_IMAGE033
,即为输出结果。
CN202210531900.3A 2022-05-17 2022-05-17 一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法 Active CN114626537B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210531900.3A CN114626537B (zh) 2022-05-17 2022-05-17 一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210531900.3A CN114626537B (zh) 2022-05-17 2022-05-17 一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法

Publications (2)

Publication Number Publication Date
CN114626537A CN114626537A (zh) 2022-06-14
CN114626537B true CN114626537B (zh) 2022-08-16

Family

ID=81907053

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210531900.3A Active CN114626537B (zh) 2022-05-17 2022-05-17 一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法

Country Status (1)

Country Link
CN (1) CN114626537B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120226731A1 (en) * 2011-03-01 2012-09-06 Gashkov Sergey B Low depth combinational finite field multiplier
CN113779645A (zh) * 2021-11-12 2021-12-10 南京大学 一种量子数字签名和量子数字签密方法
CN114065247A (zh) * 2021-11-12 2022-02-18 南京大学 一种量子数字混合签密方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120226731A1 (en) * 2011-03-01 2012-09-06 Gashkov Sergey B Low depth combinational finite field multiplier
CN113779645A (zh) * 2021-11-12 2021-12-10 南京大学 一种量子数字签名和量子数字签密方法
CN114065247A (zh) * 2021-11-12 2022-02-18 南京大学 一种量子数字混合签密方法

Also Published As

Publication number Publication date
CN114626537A (zh) 2022-06-14

Similar Documents

Publication Publication Date Title
US8787563B2 (en) Data converter, data conversion method and program
US7219293B2 (en) High performance CRC calculation method and system with a matrix transformation strategy
US20030110196A1 (en) Galois field multiply/ multiply-add/multiply accumulate
US20110153701A1 (en) Implementation of arbitrary galois field arithmetic on a programmable processor
WO2010115371A1 (zh) 一种循环冗余校验crc码的实现方法和装置
US7343389B2 (en) Apparatus and method for SIMD modular multiplication
US11283464B2 (en) Compression and decompression engines and compressed domain processors
CN114063973B (zh) 伽罗华域乘法器及纠删编解码系统
Barenghi et al. Evaluating the trade-offs in the hardware design of the ledacrypt encryption functions
US6957243B2 (en) Block-serial finite field multipliers
CN114389752A (zh) 循环冗余校验码生成方法、装置、设备、介质和程序产品
Bhaskar et al. Efficient Galois field arithmetic on SIMD architectures
CN114626537B (zh) 一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法
CN116318660B (zh) 一种消息扩展与压缩方法及相关装置
US7103180B1 (en) Method of implementing the data encryption standard with reduced computation
US7181009B1 (en) Generating message digests according to multiple hashing procedures
EP1649634B1 (en) Method and apparatus for fast rc4-like encryption
CN115525341A (zh) 一种md5信息摘要算法的加速方法及指令集处理器
US7539719B2 (en) Method and apparatus for performing multiplication in finite field GF(2n)
CN112819168B (zh) 一种格密码加解密中的环多项式乘法器电路
CN114553424A (zh) Zuc-256流密码轻量级硬件系统
CN110247754B (zh) 一种分组密码fbc的实现方法及装置
CN113741972A (zh) 一种sm3算法的并行处理方法及电子设备
JP2002251137A (ja) モジュラ乗算のためのシステム及び方法
KR100473449B1 (ko) 병렬 연산구조를 갖는 엠디5 해쉬함수 연산 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant