一、公钥密码的基本概念:
1、对称密码体制的缺陷:
每个用户需要与其余的N-1个用户共享私钥;一个有N个用户的系统就需要管理N(N-1)/2个密钥。
2、公钥密码体制:(非对称密码体制)
每个用户生成一个密钥对,一个公钥pk和一个对应的私钥sk;私钥由用户本人使用,公钥由系统中其他用户使用。
特点:
(1)密钥分发:公钥能够采用公开信道进行传输;
(2)密钥管理:整个系统仅仅需要维护N个公钥;
(3)开放系统:即使是没有预先建立关系的用户也能通过对方的公钥建立安全通信
二、完全剩余系:
1、等价关系:
设 R 是集合 A 上的一个二元关系,若R满足:
自反性:∀ a ∈A, => (a, a) ∈ R
对称性:(a, b) ∈R∧ a ≠ b => (b, a)∈R
传递性:(a, b)∈R,(b, c)∈R =>(a, c)∈R
则称R是定义在A上的一个等价关系。
2、同余关系:
给定正整数m,全体整数可按照模m是否同余分为若干个两两不相交的集合,使得每一个集合中的任意两个正整数对模m一定同余,而属于不同集合的任意两个整数对模m不同余,每一个这样的集合称为模m的同余类或剩余类
3、完全剩余系:
模m的m个剩余类可分别记为[i],i为该剩余类中整数除m所得的余数。
定义:在整数模m的所有剩余类中各取一个代表元,则称为模m的完全剩余系。完全剩余系0,1,2,...,m-1称为最小非负完全剩余系。
4、相关定理:
定理1:
对于给定的正整数m,有且恰有m个不同的模m的剩余类。
定理2:
设m是正整数,整数a满足gcd(a,m)=1,b是任意整数。若x遍历模m的一个完全剩余系,则ax+b也遍历模m的一个完全剩余系。
定理3:
设是两个互素的正整数。如果x遍历模的一个完全剩余系,y历模的一个完全剩余系,则遍历模的一个完全剩余系。
三、简化剩余系:
1、简化剩余系:
在模m的一个剩余类当中,如果有一个数与m互素,则该剩余类中所有的数均与m互素,这时称该剩余类与m互素。
定义1:
与m互素的剩余类的个数称为欧拉函数,记为,等于(是完全剩余类)当中与m互素的数的个数。对于任意一个素数p,=p-1
定义2:
在与m互素的个模m的剩余类中各取一个代表元,它们组成的集合称为模m的一个简化剩余系。中与m互素的数构成模m的一个最小非负简化剩余系。
Ex:设m=12,则1,5,7,11构成模12简化剩余系(最小非负简化剩余系)
2、相关定理:
定理1:
设m是正整数,整数a满足gcd(a,m)=1,b是任意整数。若x遍历模m的一个简化剩余系,则ax+b也遍历模m的一个简化剩余系。
定理2:
设是两个互素的正整数。如果x遍历模的一个简化剩余系,y历模的一个简化剩余系,则遍历模的一个简化剩余系。
推论1:设m,n是两个互素的素数,则
四、欧拉定理:
1、定理1:
若(任何正整数都可以表示为若干个素数的幂乘积),则
Ex:;;;
2、欧拉定理:
设m是正整数,,若,则
五、RSA加密算法:(利用了大数难分解的原理)
1、密钥生成:
(1)选择两个大素数p,q(例如每个1024位)
(2)计算, 这里
(3)随机选取e(e<n),e与z没有公因数
(4)选取d,使得
(5)公钥是(n,e),私钥是(n,d)
2、加密/解密算法:
加密:,将明文m转变为密文c,注意m<n
解密:
核心思想:
六、群的概念:
1、群的定义:
设G是一个具有代数运算的非空集合,且满足:
(1)封闭性:,有
(2)结合律:,有
(3)有单位元:即G中存在一个元素e:,有
(4)有逆元:,存在一个元素,使得
Ex:模正整数n的最小非负完全剩余系,对于模n的加法构成一个群,单位元为0,逆元为n-a。
2、交换群:
若群G上的运算还满足交换律,即对于群G中的任意元素都有:,则为交换群
3、群的阶:
一个有限群G(群中元素个数有限)中的元素个数称为群的阶,记为
4、群的判定:(有限群)
定理1:
一个有乘法的有限集合G,若其乘法在G中封闭,且满足结合律和消去律,则G是群。
Ex:取模m的最小非负简化剩余系,记为,其中元素个数为个,定义其上的乘法为模m的乘法。显然其乘法在上封闭,且满足结合律。由扩展欧几里得算法可知,中的元素均存在模m的乘法逆元。
七、循环群:
1、元素的方幂:
乘法:
; ;;;
加法:
;;;;
2、循环群:
设G是一个群,若存在一个元素a,使得(G中的所有元素都能用给定元素a的指数运算来表示),则称G为循环群,元素a称为G的生成元。若(a的阶无穷大),G称为无限循环群;若,n是某个正整数,则称G为有限循环群。
3、循环群中的离散对数问题:
定义:设是循环群,群G中的离散对数问题是指:给定G中的一个元素h,找到正整数k,使得,我们把k称为h相对于生成元的离散对数,记作
八、ElGamal加密:(利用循环群离散对数问题)
1、密钥生成:
p,一个较大素数
g,中的生成元
, (其实就是中的一个元素)
为公钥;为私钥
2、加密/解密算法:(x是明文;r,s是密文)
加密:
随机生成一个秘密数k,
,其中:
解密:
九、实数域上的椭圆曲线:
1、椭圆曲线:
椭圆曲线并非椭圆,之所以称他为椭圆曲线是因为它的曲线方程与计算椭圆周长的方程相似
(1)一般的,椭圆曲线指的是由维尔斯特拉斯方程:
所确定的曲线。它是由方程的全体解(x,y)再加上一个无穷远点O构成的集合,其中a,b,c,d,e是满足一些简单条件的实数,x和y也在实数集上取值。
(2)上述曲线方程可以通过坐标变化转化为下列形式:
整个方程的特性完全依赖于a,b的取值,因此由它确定的椭圆曲线常记为
Ex:
2、基于实数域椭圆曲线的交换群:
(1)当时,称是一条非奇异椭圆曲线,对于非奇异椭圆曲线,可以基于集合定义一个具有重要"加法规则"的交换群
(2)加法规则的几何描述:
如果椭圆曲线上的三个点位于同一直线上,那么它们的和为O。从这个定义出发,可以定义椭圆曲线的加法规则:
O为加法的单位元,对于椭圆曲线上的任何一点P,有
对于椭圆曲线上的一点,它的逆元为,注意到
设时椭圆曲线上x坐标不同的两点,P+Q定义如下:作一条通过P和Q的直线与椭圆曲线相交于R,然后过R点作y轴的平行线,与椭圆曲线相交的另一点就是
上述几何解释也适用于具有相同x坐标的两个点P和-P的情形,此时与椭圆曲线相交于O
为计算点Q的两倍,在Q点作一条切线并找到与椭圆曲线的另一个交点T,则Q+Q=2Q=-T
以上定义的"加法规则"满足加法运算的一般性质,满足交换律,结合律等
(3)加法规则的代数描述:
对于椭圆曲线上不互为逆元的两点和,由以下规则确定:
式中:
十、有限域上的椭圆曲线:
1、定义:
有限域上的椭圆曲线是指满足方程:的所有点(x,y)再加上一个无穷远点O构成的集合,其中,a,b,x,y均在有限域上取值,p是素数。这里把该椭圆曲线记为。该椭圆曲线只有有限个点,其点数N由Hasse定理决定。
2、Hasse定理:
设是有限域上的椭圆曲线,N是E上点的个数,则:
3、基于有限域椭圆曲线的交换群:
(1)当时,称是一条非奇异椭圆曲线,对于非奇异椭圆曲线,可以基于集合定义一个具有重要"加法规则"的交换群,其加法规则与实数域上描述的代数方法一致。
(2)倍点运算定义为重复加法,如
(3)是一个具有生成元 (无限远点O是中出现最晚的元素)的循环群,也就存在循环群中的离散对数问题
Ex:
十一、椭圆曲线密码学:
1、点P的阶:
椭圆曲线上点P的阶是指满足:的最小正整数,记为,其中O是无限远点。(无限远点O是中出现最晚的元素)
2、椭圆曲线上的离散对数问题:
设G是椭圆曲线上的一个循环子群,P是G的一个生成元,。已知P和Q,求满足:的整数m,,称为椭圆曲线上的离散对数问题。计算mP的过程称为点乘运算。
3、椭圆曲线上的ElGamal密码体制:
在使用该密码体制时,首先需要将发送的明文编码为有限域椭圆曲线上的点,然后再对点做加密解密变换。
(1)密钥生成:
在椭圆曲线上选取一个阶位n(n为一个大素数)的生成元P。随机选取整数x(1<x<n),计算Q=xP,公钥为Q,私钥为x
(2)加密:(为明文)
随机选取一个整数k,1<k<n,计算,,(都是有限域椭圆曲线上的点)则密文
(3)解密:
计算:
攻击者想要从计算出,就必须知道k。而要从P和kP中计算出k将面临求解椭圆曲线上的离散对数问题。
十二、SM2公钥加密算法:
1、符号:
:使用公钥密码系统的两个用户;
:中的元素,它们定义了上的一条椭圆曲线;
:用户的私钥;
:用户的公钥;
:上椭圆曲线的所有有理点(包括无穷远点)组成的集合;
:上点的数目,称为的阶;
:包含个元素的有限域;
:椭圆曲线的一个基点,其阶为素数;
:密码杂凑函数;
:消息摘要长度为比特的密码杂凑函数;
:密码派生函数;
:待加密的消息;
:解密得到的消息;
:基点的阶,(是的素因子);
:椭圆曲线的特殊点,是椭圆曲线加法群的单位元;
:有限域中元素的数目;
:与的拼接,其中,可以是比特串或字节串;
:椭圆曲线上点的倍点,是正整数;
:顶函数;
:底函数;
2、基于素数域的SM2算法参数:((种子)和(曲线)的产生算法略)
(1)的特征:为比特长的素数,要尽可能大,通常选择160比特大小;
(2)长度不小于192比特的比特串:;
(3)上的两个元素,满足,定义:;
(4)基点:;
(5)的阶为比特长的素数,满足且;
(6)称为余因子,其中是 上点的数目;
3、基于素数域的SM2算法描述:
(1)SM2密钥产生:
私钥:接收方的密钥取为的一个随机数,记为,其中是基点的阶。
公钥:的公开钥取为椭圆曲线上的点:,其中是基点
(2)SM2加密算法:(椭圆曲线系统参数,长度为klen比特的消息,公钥)
选择随机数;
计算椭圆曲线点,将表示为比特串;
计算椭圆曲线点,若是无穷远点,则报错并退出;
计算椭圆曲线点,将表示为比特串;
计算,若为全0的比特串,则返回;
计算(异或运算);
计算;
输出密文:;
注:其中第步是密钥派生函数,其本质上就是一个伪随机数产生函数,用来产生密钥。建议使用哈希函数SM3,第步Hash函数也建议使用哈希函数SM3
(3)SM2解密算法:(椭圆曲线系统参数,密文,私钥)
从中取出比特串,将表示为椭圆曲线上的点,验证是否满足有椭圆曲线方程,若不满足则报错并退出;
计算椭圆曲线点,若是无穷远点,则报错并退出;
计算, 将表示为比特串;
计算,若为全0的比特串,则返回报错并退出;
从中取出比特串,计算;
计算,从中取出比特串,若,则报错并推出;
输出明文