——————————————————————————————————密码学中一些常用的数学知识————————————————————————————————
·代数系统
代数系统是对要研究的现象或过程建立起的一种数学模型,模型中包括要处理的数学对象的集合以及集合上的关系或运算。
运算可以是一元的也可以是多元的,可以有一个也可以有多个。
·封闭性
·结合律
·半群
设<G,*>是一个代数系统,*满足:
<1>封闭性
<2>结合律
则称<G,*>是半群
·群
·有限群&无限群
如果G是有限集合,则称<G,*>是有限群,否则是无限群。有限群中,G的元素个数称为群的阶数
·Abel群(交换群)
群中运算*一般称为乘法,称该群为乘法群。若运算*改为+,则称为加法群
·循环群
·环
·域
·有限域
有限域是指域中元素个数有限的域,元素个数称为域的阶
·Galois域
·素数和互素数
1.因子
设a,b(b!=0)是两个整数,如果存在另一整数m,使得a = mb,则称b整除a,记为b|a,且称b是a的因子。
2.素数
·整数分解的唯一性
3.互素数
·最大公因子
·同余,同余类
·费尔玛定理[Fermat定理]
·欧拉函数
·欧拉定理(Euler)
·欧几里得算法(Euclid)
1.求最大公因子
Euclid算法是基于下面一个基本结论:
2.求乘法逆元
#include<stdio.h> int EX_Euclid(int a,int b){ int temp,q; if(a < b){ temp = a; a = b; b = temp; } int x[5],y[5],z[5]; x[1] = 1; x[2] = 0; x[3] = a; y[1] = 0; y[2] = 1; y[3] = b; while((y[3] != 0) && y[3] != 1){ q = x[3]/y[3]; z[1] = x[1]-q*y[1]; z[2] = x[2]-q*y[2]; z[3] = x[3]-q*y[3]; x[1] = y[1]; x[2] = y[2]; x[3] = y[3]; y[1] = z[1]; y[2] = z[2]; y[3] = z[3]; } if(y[3] == 0){ printf("gcd(a,b) = %d,no inverse\n",x[3]); return 0; } if(y[3] == 1){ if(y[2] < 0) y[2] += a; printf("gcd(a,b) = %d,inverse = %d\n",y[3],y[2]); return 0; } } int main(){ int x,y; while(scanf("%d%d",&x,&y) != EOF){ EX_Euclid(x,y); } return 0; }
Sample:
算法中的变量有以下关系:
Extended Euclid(a,b)中的X3,Y3与Euclid(a,b)中的X,Y作用相同,因此可正确产生gcd(f,d)
·中国剩余定理
中国剩余定理是数论中最有用的一个工具,定理说如果已知某个数关于一些两两互素的数的同余类集,就可重构这个数
利用中国剩余定理还可将大数用小数表示,大数的运算通过小数实现
中国剩余定理提供了一个非常有用的特性:
e.g.
·离散对数
1.求模下的整数幂
定理:
·平方剩余
·Lengendre符号
Legendre符号有以下性质: