浅谈密码学中数论基础

匆匆过客 提交于 2019-12-02 01:12:23

浅谈密码学中数论基础

 

1.模运算1765243235

模运算也可以称为取余运算,例如 23≡11(mod12),因此如果a=kn+b,也可以表示为a ≡ b(mod n),运算规则:

(a+b) mod n = ((a mod n) + (b mod n))mod n

  (a*b) mod n = ((a mod n) * (b mod n)) mod n

  • 完全剩余集合

1~n-1构成了自然数n的完全剩余集合,对于任意一个整数m%n都存在于1~n的集合中。

  • 构造加法链

   在加密算法中,运用到了大量的取模运算,对于一个k位数模n,所有的运算例如加减乘除中间结构将不会超过2k位,因此例如amod n将会大大简化计算时的复杂度。

例如a8 mod n 在计算时可以这样计算 ((a2 mod n)2 mod n)2 mod n

当指数x不是2的倍数时则需要构造加法链,例如25,25 = 16 + 8 +1 = 24 + 23 + 20

因此a25 mod n = (a * a* a16 ) mod n = ((((a* a)2)2)2*a)mod n

C语言表示

复制代码
unsigned long ss(unsigned long x , unsigned long y , unsigned long n) {  unsigned long s,t,u;  int i ;  s = 1; t =x ; u=y;  while(u){  if(u&1) s = (s*t)&n;  u>>=1;  t = (t*t) % n ;  }  return (s);  }
复制代码
  • 素数

最大公因数(gcd)

gcd(4,2)=2 gcd(4,3)=1 gcd(6,4)=2

c语言:

复制代码
int gcd(int x,int y){  int m;  while(x>0){  m = x;  x = x%y;  y = m;  }   return m
复制代码
  • 模逆元

逆元:

方程 

 的解称为 

 关于模 

 的逆,当 

(即 

 互质)时,方程有唯一解,否则无解。

那么逆元可以用来干什么呢,比如说对于 

,并没有 

,但是直接除又会爆精度,这时我们就可以用到逆元,假设用 

 代表 

 的逆元,那么 

 

模逆元:

4 * x ≡ 1(mod 7),即 4x = 7k + 1

更常见的问题是:1 = (a * x) mod n 也可以写作 a-1≡ x (mod n)

因此这里存在一个解集的问题:

当gcd(a,n) = 1 , a-1 ≡ x (mod n) 存在唯一解

当gcd(a,n) ≠ 1 a-1 ≡ x (mod n) 无解

如何找出a%n  的逆元,利用拓展欧几里得算法

 

复制代码
void e_gcd(int a, int b, int &gcd, int &x, int &y)  {      if (b == 0)      {          x = 1;          y = 0;          gcd = a;      }      else      {          e_gcd(b, a % b, gcd, y, x);          y -= x * (a / b)      }  }
复制代码

 

  • 费马小定理

       这个定理在初中数学联赛中经常会遇到,貌似之前看过高中联赛也有过,只不过CMO作为了基础写了一下。

内容:如果m是一个素数,且a不是m的倍数,那么根据定理存在 a m-1≡ 1(mod m)

  • 欧拉函数

      欧拉函数:φ(n)表示从1~n-1中有多少个数与n互为质数。 φ(1) = 1,通项公式:φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn)

其中 p1~pn为n的质因数。

在一些加密算法中,产生秘钥的过程即计算欧拉函数的过程。

  • 有限域上的离散对数

模指数是频繁运用于密码学中的另一种单向函数

例如:3x≡ 15 mod 17  , x = 6

不是所有的离散对数都有相应解 例如  3 x ≡ 7 mod 13 没有整数x可以符合这个公式,因此这个离散对数无解。有限域上的离散对数存在于两种情况中:

1.质数域中的乘法群

2.有限域中的椭圆曲线群

 

1.模运算1765243235

模运算也可以称为取余运算,例如 23≡11(mod12),因此如果a=kn+b,也可以表示为a ≡ b(mod n),运算规则:

(a+b) mod n = ((a mod n) + (b mod n))mod n

  (a*b) mod n = ((a mod n) * (b mod n)) mod n

  • 完全剩余集合

1~n-1构成了自然数n的完全剩余集合,对于任意一个整数m%n都存在于1~n的集合中。

  • 构造加法链

   在加密算法中,运用到了大量的取模运算,对于一个k位数模n,所有的运算例如加减乘除中间结构将不会超过2k位,因此例如amod n将会大大简化计算时的复杂度。

例如a8 mod n 在计算时可以这样计算 ((a2 mod n)2 mod n)2 mod n

当指数x不是2的倍数时则需要构造加法链,例如25,25 = 16 + 8 +1 = 24 + 23 + 20

因此a25 mod n = (a * a* a16 ) mod n = ((((a* a)2)2)2*a)mod n

C语言表示

复制代码
unsigned long ss(unsigned long x , unsigned long y , unsigned long n) {  unsigned long s,t,u;  int i ;  s = 1; t =x ; u=y;  while(u){  if(u&1) s = (s*t)&n;  u>>=1;  t = (t*t) % n ;  }  return (s);  }
复制代码
  • 素数

最大公因数(gcd)

gcd(4,2)=2 gcd(4,3)=1 gcd(6,4)=2

c语言:

复制代码
int gcd(int x,int y){  int m;  while(x>0){  m = x;  x = x%y;  y = m;  }   return m
复制代码
  • 模逆元

逆元:

方程 

 的解称为 

 关于模 

 的逆,当 

(即 

 互质)时,方程有唯一解,否则无解。

那么逆元可以用来干什么呢,比如说对于 

,并没有 

,但是直接除又会爆精度,这时我们就可以用到逆元,假设用 

 代表 

 的逆元,那么 

 

模逆元:

4 * x ≡ 1(mod 7),即 4x = 7k + 1

更常见的问题是:1 = (a * x) mod n 也可以写作 a-1≡ x (mod n)

因此这里存在一个解集的问题:

当gcd(a,n) = 1 , a-1 ≡ x (mod n) 存在唯一解

当gcd(a,n) ≠ 1 a-1 ≡ x (mod n) 无解

如何找出a%n  的逆元,利用拓展欧几里得算法

 

复制代码
void e_gcd(int a, int b, int &gcd, int &x, int &y)  {      if (b == 0)      {          x = 1;          y = 0;          gcd = a;      }      else      {          e_gcd(b, a % b, gcd, y, x);          y -= x * (a / b)      }  }
复制代码

 

  • 费马小定理

       这个定理在初中数学联赛中经常会遇到,貌似之前看过高中联赛也有过,只不过CMO作为了基础写了一下。

内容:如果m是一个素数,且a不是m的倍数,那么根据定理存在 a m-1≡ 1(mod m)

  • 欧拉函数

      欧拉函数:φ(n)表示从1~n-1中有多少个数与n互为质数。 φ(1) = 1,通项公式:φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn)

其中 p1~pn为n的质因数。

在一些加密算法中,产生秘钥的过程即计算欧拉函数的过程。

  • 有限域上的离散对数

模指数是频繁运用于密码学中的另一种单向函数

例如:3x≡ 15 mod 17  , x = 6

不是所有的离散对数都有相应解 例如  3 x ≡ 7 mod 13 没有整数x可以符合这个公式,因此这个离散对数无解。有限域上的离散对数存在于两种情况中:

1.质数域中的乘法群

2.有限域中的椭圆曲线群

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!