信息安全基础综合实验总共包含有二大块的内容,分为小组作业(小组作业有四项任务,为Fermat素性检验算法、中国剩余定理、密钥分配以及SM3的实现)和个人作业(SM2加密算法的实现),我也会分别通过五篇博客来分别记录。先进行小组作业,等把小组作业的四次做完之后,就可以对Miracl库的使用基本上掌握了。
俗话说的好,要做实验,肯定要先搭建环境,
环境两小时,实验五分钟。而实验所需要的环境就是把miracl库添加进来即可。首先编译miracl包,参加我同学W的这个博客:https://blog.csdn.net/Baron_wu/article/details/83151473,里面讲述了如何生成所需要的miracl.lib,如果搞不定的话,那就来问我索取吧(邮箱联系[email protected]);得到了这个包之后,那环境就算是完成了90%了,下面是在Visual Studio中调用此库即可,过程可以继续参考我这个同学W的另外一篇博客:https://blog.csdn.net/Baron_wu/article/details/83177251。通过这两个步骤后,就可以很开心的去编程吧!顺便感谢一下这个同学W,为什么他的出镜率这么高呢,因为我们两个是一组的,当时为了能够成功地调用Miracl库也是费了一番心思。那下面就切入正题,看看如何通过Miracl库来实现Fermat素性检验算法。因为这是第一篇的博客嘛,除了对Fermat素性检验的介绍之外,对于一些Miracl库中的函数也会有一个很简单的介绍。
一、实验目的
在前面的四次小实验中,对我们的考察难度不是很大,四个小实验对我们提出来的要求是,通过完成验证四个定理的过程,让我们能够相比较才学习信息安全数学基础与现代密码学时,能更加详细的了解关于这四个定理的内容。第一次的实验是使用Fermat素性检验算法(这是一个概率性算法),来判断从文本文件中输入进去的大整数是不是一个素数。在平时我们接触到的C语言结构中,最大的表示数值是unsigned int型数据,其最大可以表示数据
,也就是八个字节的大小,即使是这样,对于我们信息安全实验来说,这样的数据类型长度是远远不够的。在实验中,我们需要用到miracl函数库,它定义了两种新的数据类型——表示大整数的big类型和表示有理数的flash(short for floating-slash)类型。通过本次实验,可以让我们熟悉miracl库中的一些基本操作函数,将Fermat素性检验算法在实验中展示出来。
二、方案设计
2.1 Fermat素性检验
也就是说,要判断一个奇整数是不是素数(如果这个数是偶数那肯定就不是素数了),我们可以通过随机选取同m互为质数的一个整数a(如果m和a不互质的话,那么m也肯定不是素数),判断m和a是否满足费马小定理,如果满足的话,m就会以不低于
的概率是一个素数。对于这个定理的证明,我也去网上查找了相关的资料,但是依旧对这个定理的证明不是特别的了解,等到以后能力提升再来读懂此定理的证明,也不在报告里附上此定理的证明了。
下面是Fermat素性检验算法的步骤,这儿我用一张图来阐明Fermat素性检验算法的原理:
2.2 关于Fermat素性检验算法单身的