浅谈密码学中数论基础

1.模运算(mod)

模运算也可以称为取余运算,例如 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位,因此例如ax mod 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 * a8 * 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
  • 模逆元

逆元:

方程 ax\equiv 1(mod\, \: p) 的解称为 a 关于模 p 的逆,当 gcd(a,p)=1(即 ap 互质)时,方程有唯一解,否则无解。

那么逆元可以用来干什么呢,比如说对于 (a/b)\, mod\: p,并没有 ((a\: mod\: p)/(b\: mod\:p))\, mod\: p,但是直接除又会爆精度,这时我们就可以用到逆元,假设用 inv(b) 代表 b 的逆元,那么 (a/b)\,mod\:p=(a*inv(b))\,mod\:p

模逆元:

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-11(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的质因数。

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

  • 有限域上的离散对数

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

例如:3x15 mod 17  , x = 6

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

1.质数域中的乘法群

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

转载于:https://www.cnblogs.com/sylover/p/11570254.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值