2021SC@SDUSC
NTL密码算法开源库(数论库)代码分析项目--综述
项目综述
NTL算法库是开放源码的自由软件,具有专业处理任意精度大整数、实数的计算数论与计算代数的高性能可移植c++库,提供了任意大整数、任意精度实数以及基于整环和有限域上向量、矩阵、多项式的数据结构和算术运算,同时提供了大量的库函数实现,因此它是信息安全理论实现、符号计算与计算机自动推理平台开发的高效函数库。近年来,众多国内外研究人员将其应用于信息安全研究领域。算法库的使用非常方便与灵活,同时具备在Windows与Linux平台进行扩展开发与直接调用算法库实现函数,同时提供了优秀的二次开发接口,并具备面向过程与面向对象双重开发方法。基于上述优点,笔者欲对算法库进行深入分析,介绍NTL算法库的算法内部实现原理,深度剖析NTL算法库内在的工作原理和实现过程。
NTL开源代码库的安装和使用
第一步:下载NTL代码开源库(https://www.shoup.net/ntl/download.html)
第二步:选择合适的NTL开源库进行下载(这里笔者下载的是NTL 11.5.1 for Windows)
第三步:将压缩包下载到电脑中的非系统盘中并进行解压缩
第四步:在Visual studio 2017中创建NTL静态库
第五步:创建测试程序测试NTL静态库的运行状态是否正常
NTL代码开源库主要解决的问题
NTL密码开源库主要解决的问题有:任意大整数、任意精度实数以及基于整环和有限域上向量、矩阵、多项式的数据结构和算术运算,同时提供了大量的库函数实现。针对这些功能,笔者在下载了NTL库之后对其内部的src文件进行了翻看,NTL算法定义了很多的类,下面对NTL中的相对重要的类进行阐述说明:
–大整数(zz):任意长度大整数表示、最大公因数、Jacobi符号和素性检验;
–模P大整数(ZZ_P):ZZ—P上数据表示、基本运算、关系运算与流控制等;
–模单精度整数(zz_P):模单精度P整数表示、内存分配、基本运算与重载等;
–模2整数(GF2):GF2上数据表示、基本运算、运算重载与关系运算等;
–ZZ上多项式(zzx):单变元多项式最大公因式、特征多项式、范数与迹运算等;
–ZZ_p上扩张(ZZ_pE):ZZ_pE上数据表示、基本运算、关系运算、范数与迹运算;
–ZZ_p上多项式(ZZ_pX):多项式向量表示、基本运算、模运算与最大公因式等;
–ZZ_pE上多项式(ZZ_pEX):模单变元多项式、极小多项式、特征多项式和插值运算等;
–zz_p上多项式(zz_pX):多项式向量表示、极小多项式、特征多项式与插值运算等;
–zz_p上扩张(zz_pE):ZZ_pE上基本运算、幂运算、范数与迹运算等;
–GF2上多项式(GF2X):GF2上单变元多项式的最大公因式、极小多项式、因式分解;
–GF2上矩阵(mat_GF2):矩阵算术运算、矩阵逆、解非退化线性方程与高斯消元等;
–GF2上环/域扩张(GF2E):GF2上扩张单变元多项式、实现GF2[x]/§上的运算;
–GF2E上多项式(GF2EX):GF2上单变元多项式、模多项式运算、模合成、极小多项式特征多项式和插值运算等。
项目分工以及核心代码的分配
本次NTL密码算法代码分析项目组由两位成员组成,分别是笔者(@元解~殇怀)和@回首,阑珊。我们对代码分析的工作进行了详细的分配,每个人都参与到了核心代码的分析中。针对1.3中说明的NTL中的相对重要的类,我们欲对其进行详细分析,预计每周更新一篇博客。@回首,阑珊主要对代码中的数论方面的数学知识进行深入研究,笔者则侧重于代码的实现逻辑以及数论知识是如何在代码中进行应用和编写的。我们会进行日常交流,共同研究代码,讨论数学,完成报告。
PS:参考文献《基于NTL算法库的多元多项式因式分解高效实现》