密码学中的数学知识

群G,有时记为{G, . },是定义了一个二元运算的集合,这个二元运算可表示为 . ,G中的每一个序偶(a,b)通过运算生成G中的元素(a.b),并满足以下公理:
(A1)封闭性:如果a和b都属于G,则a.b也属于G。
(A2)结合律:对于G中任意a,b,c,都有(a.b).c=a.(b.c)成立。
(A3)单位元:G中存在一个元素e,对于G中任意元素a,都有a.e=e.a=a。
(A4)逆元:对于G中任意元素a,G中都存在一个元素a',使得下式成立:a.a'=a'.a=e
如果一个群的元素是有限的,则该群称为有限群,并且群的阶就等于群中元素的个数。否则,称该群为无限群。
一个群如果还满足以下条件,则称为交换群:
(A5)交换律:对于G中任意的元素a,b,都有a.b=b.a成立。

循环群

我们在群中定义求幂运算为重复运用群中的运算,如a3=a.a.a。而且,我们定义a0=e作为单位元;并且a-n=(a')n,其中a'是a在群内的逆元算。如果群G中的每一个元素都是一个固定元素a(a属于G)的幂ak(k为整数),则称群G是循环群。我们认为元素a生成了群G,或者说a是群G的生成元。循环群总是交换群,它可能是有限群或无限群。

在GF(p)中求乘法逆元

当p值较小时,求GF(p)中元素的乘法逆元很容易。你只需构造一个乘法表,所要的结果可以从中直接读出。但是,当p值比较大时,这种方法是不切实际的。
如果a和b互素,则b有模a的乘法逆元。也就是说,如果gcd(a,b)=1,那么b有模a的乘法逆元。即对于正整数b

求乘法逆元

正如Euclid算法可以用来求两个多项式的最大公因式,扩展Euclid算法则可以用来求一个多项式的乘法逆元。如果多项式b(x)的次数小于a(x)的次数
且gcd[a(x),b(x)]=1,那么该算法能求出b(x)以a(x)为模的乘法逆元。若a(x)为既约多项式,即除了本身与1之外没有其他因式,则始终有gcd[a(x),b(x)]=1.
算法的描述方式和整数情形的扩展Euclid算法一样。给定两个多项式a(x)和b(x),其中a(x)的次数大于b(x)的次数。我们希望解如下方程获得v(x),w(x)以及d(x),其中d(x)=gcd[a(x),b(x)] : a(x)v(x)+b(x)w(x)=d(x)
如果d(x)=1,则w(x)是b(x)模a(x)的乘法逆元。

乘法逆元的应用

满足 a * k ≡ 1 (mod p) 的k 叫做 a关于p的乘法逆元。
另一种表达方法是 k ≡ a-1 (mod p)
逆元在密码学中有广泛应用,AES密码体系的字节替代就是运用了逆元。
应用:
我们知道(a+b)%p=(a%p+b%p)%p
    (ab)%p=(a%p)(b%p)%p
而求(a/b)%p时,可能会因为a是一个很大的数,不能直接算出来,却又不能(a/b)%p=(a%p/b%p)%p。
但是可以通过 k ≡ b-1 (mod p)

应用
a / b
= a * b-1 (mod p )
= (a mod p ) * (b-1 mod p ) mod p
= (a mod p ) * (k mod p ) mod p
= a * k mod p
转换为a*k % p 的问题,然后a是一个加减乘的式子,就可以用上面两个取余公式了

你可能感兴趣的:(密码学中的数学知识)