现代密码学
传统的对称密码体制
-
对称密码体制(例如DES, AES) 允许两个用户利用提前共享的秘密来建立“安全信道”
-
通信双方共享秘密并不容易…
-
密钥管理
- 考虑一个具有N个用户的团体,如果用户两两之间都需要进行安全通信:
- 采用对称密码体制来保护用户之间的通信:
- 每个用户需要与其余的 \(N -1\) 个用户共享私钥
- 整个系统需要管理 \(N(N -1)/2\) 个密钥
- 采用对称密码体制来保护用户之间的通信:
- 考虑一个具有N个用户的团体,如果用户两两之间都需要进行安全通信:
-
密钥分发
- 用户之间如何在安全通信前共享秘密?
- 需要一个安全信道来共享密钥…
- 尽管密钥分发可以采用如下方式解决…
- 例如, 物理接近, 可信“快递”
- 用户之间如何在安全通信前共享秘密?
-
[!] (注意:这并不意味着对称密码体制没有意义)
-
不支持“开放系统”
- 如果两个没有预先建立关系的用户需要建立安全通信,
- 他们什么时候共享密钥呢?
- 这个场景并不遥远!
- 顾客发送信用卡信息给商家
- 用户发送电子邮件给单位中的所有同事
- 如果两个没有预先建立关系的用户需要建立安全通信,
-
[!] “传统的”对称密码体制无法解决上述问题!
-
[i] Diffie和Hellman因为提出“公钥密码”这一概念获得2015 年ACM图灵奖
公钥密码体制
- 主要思想:
- 一些问题呈现出“非对称性” – 从一个方向计算非常容易,而从另一个方向计算则很困难
- 例如:计算任意给定整数的乘积很容易,而计算给定大整数的因子则非常困难
- 每个用户生成一个密钥对:一个公钥 \(pk\) 和一个对应的私钥 \(sk\)
- 公钥将在系统内被公开
- 私钥由用户本人安全保管
- 私钥由用户本人使用,而公钥则由系统中其他用户使用
- 公钥密码体制也被称为: 非对称密码体制
公钥密码体制的基本思想
![[钥密码体制的基本思想.png]]
公钥密码体制的优势:
- 密钥分发:
- 公钥能够采用公开(认证的)信道进行传输;
- 密钥管理:
- 在用户 \(N\) 个用户的系统中,每个用户只需安全保管自己的私钥和 \(N-1\) 个其他用户的公钥。整个系统仅仅需要维护 \(N\) 个公钥;
- 开放系统:
- 即使是没有预先建立关系的用户也能通过对方的公钥建立安全通信。
公钥密码体制的应用:
- Hyper Text Transfer Protocol over Secure SocketLayer (Https)
- Pretty Good Privacy (PGP): secure E-mail
- Military, Government…
完全剩余系
- 集合根据等价关系可分为两两互不相交的集合。
- 整数的同余关系是一个等价关系。
给定正整数 \(m\),全体整数可按照模 \(m\) 是否同余分为若干两两不相交的集合,使得每一个集合中的任意两个正整数对模 \(m\) 一定同余,而属于不同集合的任意两个整数对模 \(m\) 不同余,每一个这样的集合称为模 \(m\) 的同余类或剩余类。
定理 1
定理 1 定理 1 对于给定的正整数 \(m\),有且恰有 \(m\) 个不同的模 \(m\) 的剩余类。
- 证明: 根据带余除法,对于任意整数 ,都有
也就是说任何一个整数模 \(m\) 必然与 \(\{0,1,2,\dots,m-1\}\) 中的一个同余,而且这 \(m\)个整数模 \(m\) 互不同余。所以模 的剩余类有且恰有 \(m\) 个。
模 \(m\) 的 \(m\) 个剩余类可分别记为 \([i]\) ,\(i\) 为该剩余类中整数除所得的余数,可分别如下表示:
- 定义 在整数模 \(m\) 的所有剩余类中各取一个代表元\(a_{1},a_{2},\dots,a_{m},(a\in [i-1],i=1,2,\dots,m)\),则称 \(a_{1},a_{2},\dots,a_{m}\) 为模 \(m\) 的完全剩余系。完全剩余系 \(0,1,2,\dots,m-1\) 称为最小非负完全剩余系。
例 取 \(m=7\),则模 \(m\) 的剩余类为
- \(7,15,16,-4,-10,5,-1\) 为模 \(7\) 的一组完全剩余系
- \(0,1,2,3,4,5,6\) 为模 \(7\) 的最小非负完全剩余系
通常情况下,以 \(Z_{m}\) 表示由 \(m\) 的最小非负完全剩余系集合 \(Z_{m}=\{0,1,2,\dots,m-1\}\)。\(Z_{m}\) 中的加法、减法、乘法都是模 \(m\) 意义下的运算。
定理2
定理 2 设 \(m\) 是正整数,整数 \(a\) 满足 \(gcd(a,m)=1\),\(b\) 是任意整数。若 \(x\) 遍历模 \(m\) 的一个完全剩余系,则 \(ax+b\) 也遍历模 \(m\) 的一个完全剩余系。
证明: 设 \(a_{1},a_{2},\dots,a_{m}\) 为模 \(m\) 的完全剩余系。根据完全剩余系的定义,这组整数模 \(m\) 两两不同余。
要证明 \(aa_{1}+n,aa_{2}+\dots,aa_{m}+b\) 也是模 \(m\) 的一组完全剩余系。
只需要证明这 \(m\) 个数模 \(m\) 两两不同余即可。若存在 \(a_{i}\) 和 \(a_{j},i\ne j\), 使得 \(aa_{i}+b\equiv aa_{j}+b(mod\,m)\)
则有 \(m|a(a_{i}-a_{j})\)由于 \(gcd(a,m)=1\),所以 \(m|a(a_{i}-a_{j})\),即有 \(a_{i}\equiv a_{i}(\mod{m})\)。这与 \(a_{1},a_{2},\dots,a_{m}\) 模 \(m\) 两两不同余矛盾。因此 \(aa_{1}+b,aa_{2}+\mathbf{b}..,aa_{m}+b\) 模 \(m\) 两两不同余。定理得证。
例 当 \(m=12\) 时,则 \(\{0,1,2,3,4,5,6,7,8,9,10,11\}\) 构成模12 完全剩余系。
定理 3
定理 3 设 \(m_{1},m_{2}\) 是两个互素的正整数。如果 \(x\) 遍历模 \(m_{1}\) 的一个完全剩余系,\(y\) 遍历模 \(m_{2}\) 的一个完全剩余系,\(m_{1}y+m_{2}x\) 则遍历模 \(m_{1}m_{2}\) 的一个完全剩余系。
证明: 只需要证明所有的 \(m_{1}y+m_{2}x\) 模 \(m_{1}m_{2}\) 两两互不同余即可。事实上,若整数 \(x_{1},x_{2}\) 属于模 \(m\) 的一个完全剩余系, \(y_{1},y_{2}\) 属于模 \(m\) 的一个完全剩余系,满足:
根据定理2.1.3同余的性质(5) ,有
- [i] 定理2.1.3同余的性质(5):若 \(a_{1}\equiv b_{1}(\mod{m}),a_{2}\equiv b_{2}(\mod{m})\),则 \(a_{1}+a_{2}\equiv b_{1}+b_{2}(\mod{m})\)
即 \(m_{2}x_{1}\equiv m_{2}x_{2}(\mod{m_{1}})\)
故 \(m_{1}|m_{2}(x_{1}-x_{2})\),又 \(m_{1},m_{2}\) 互素,所以 \(m_{1}|(x_{1}-x_{2})\),即 \(x_{1},x_{2}\) 模 \(m_{1}\) 同余。同理可证 \(y_{1},y_{2}\) 模 \(m_{2}\) 同余。
矛盾!
例 当 \(m=3\) 时,则 \(\{0,1,2\}\) 构成模 \(3\) 完全剩余系,当 \(n=2\) 时,\(\{0,1\}\)构成模 \(2\) 完全剩余系。
\(\{0,1,2,3,4,5\}\)构成模6完全剩余系。
简化剩余系
在模 \(m\) 的一个剩余类当中,如果有一个数与 \(m\) 互素,则该剩余类中所有的数均与 \(m\) 互素,这时称该剩余类与 \(m\) 互素。
- 定义 1 与 互素的剩余类的个数称为欧拉函数,记为 \(\varphi(m)\)
- \(\varphi(m)\) 等于 \(Z_{m}\) 当中与 \(m\) 互素的数的个数。对于任意一个素数 \(p,\varphi(p)=p-1\)
- 定义 2 在与 \(m\) 互素的 \(\varphi(m)\) 个模 \(m\) 的剩余类中各取一个代表元 \(a_{1},a_{2},\dots,a_{\varphi(m)}\),它们组合成的集合称为模 \(m\) 的一个既约剩余系或简化剩余系。\(Z_{m}\) 中与 \(m\) 互素的数构成模 \(m\) 的一个既约剩余系,称为最小非负既约剩余系。
例 设 \(m=12\) ,则 \(1,5,7,11\) 构成模 \(12\) 既约剩余系。
定理 1
- 设 \(m\) 是正整数。整数 \(a\) 满足 \(gcd(a,m)=1\)。若 \(x\) 遍历模\(m\) 的一个既约剩余系,则 \(ax\) 也遍历模 \(m\) 的一个既约剩余系。
证明: 因为\(gcd(a,m)=1,gcd(x,m)=1\),所以 \(gcd(ax,m)=1\)。又若 \(ax_{i}\equiv ax_{j}(\mod{m})\), 则由 \(gcd(a,m)=1\), 可得 \(x_{i}\equiv x_{j}(\mod{m})\)。因此,若 \(x\) 遍历模 \(m\) 的一个既约剩余系, 则 \(ax\) 遍历 \(\varphi(m)\) 个数,这些数均属于某个模 \(m\) 既约剩余类的剩余,而且两两互不同余。故而有 \(ax\) 也遍历模 \(m\) 的一个既约剩余系。
例:设 \(m=12\),则 \(\{1,5,7,11\}\) 构成模12 简化剩余系。
定理 2
- 设 \(m_{1},m_{2}\) 是两个互素的正整数。 如果 \(x\) 遍历模 \(m_{1}\) 的一个既约剩余系, \(y\) 遍历模 \(m_{2}\) 的一个既约剩余系, 则 \(m_{1}y+m_{2}x\) 遍历模 \(m_{1}m_{2}\) 的一个既约剩余系。
证明思路: 首先证明 \(m_{1}y+m_{2}x\) 与 \(m_{1}m_{2}\) 互素,其次证明的任何一个既约剩余都可以表示成为 \(m_{1}y+m_{2}x\) 的形式, 其中 \(x\) 与 \(m_{1}\) 互素,\(y\) 与 \(m_{2}\) 互素。
- 证明:
- 由定理2.2.3可知 \(m_{1}y+m_{2}x\) 模 \(m_{1}m_{2}\) 两两互不同余。首先证明当 \(gcd(x,m_{1})=1,gcd(y,m_{2})\) 时,\(m_{1}y+m_{2}x\) 与 \(gcd(m_{1}m_{2})\) 互素。
- 用反证法。假设 \(m_{1}y+m_{2}x\) 与 \(m_{1}m_{2}\) 不互素,则必有一个素数 \(p\) 满足 \(p|m_{1}y+m_{2}x,p|m_{1}m_{2}\)。
例 \(3\times{5}=15\) 的简化剩余系
- 当 \(m=3\) 时,则 \(\{1,2\}\) 构成模 \(3\) 简化剩余系。
- 当 \(n=5\) 时,则 \(\{1,2,3,4\}\) 构成模 \(5\) 简化剩余系。
\(\{1,2,4,7,8,11,13,14 \}\) 构成模15简化剩余系。
欧拉定理
推论 1 设 \(m,n\) 是两个互素的整数,则\(\varphi(mn)=\varphi(m)\varphi(n)\) 。
定理1
定理 1 若 \(m=p_{1}^{e_{1}}p_{2}^{e_{2}}\dots p_{k}^{e_{k}}\) ,则
- [i] 给定任一正整数 \(m\),它总是能够分解成多个不同素数的乘积
证明:当 \(m=p^{e}\) 为单个素数的方幂时, 在模 \(m\) 的完全剩余系 \(\{ 0,1,2,\dots,p^{e}-1 \}\) 的整数中与 \(p\) 不互素的只有 \(p\) 的倍数, 共有\(p^{e-1}\), 因此与 \(p^{e}\) 互素的数共有 \(p^{e}-p^{e-1}\), 即
根据推论 1,有
例 计算11, 121, 143和120的欧拉函数。
解:
例 设 \(m=12\), \(\varphi(12)=4,\{1,5,7,11\}\)构成模12既约剩
余系,\(gcd(5,12)=1\) ,因此有\(5\times{1},5\times{5},5\times{7},5\times{11}\) 也构成
模12的简化剩余系,经过计算可知
将上面四个式子左右对应相乘可得
即
由于 \(gcd(1\times{5}\times{7}\times{11},12)=1\) ,根据同余性质(3)可得 \(5^{4}\equiv{1\mod{12}}\),即
- [!] 并非巧合!
定理2
定理 2 (欧拉定理) 设 \(m\) 是正整数, \(r\in Z_{m}\),若 \(gcd(r,m)=1\),则 \(r^{\varphi(m)}\equiv{1(\mod{m})}\)。
证明: 取模 \(m\) 的一组既约剩余系 \(r_{1},r_{2},\dots,r_{\varphi(m)}\),由简化剩余系结论知 \(rr_{1},rr_{2},\dots,rr_{\varphi(m)}\) 也是模 \(m\) 的一组既约剩余系,从而有
也即:
故有: \(r^{\varphi(m)}\equiv{1(\mod{m})}\)
欧拉定理在密码技术中具有重要应用 ,如RSA
RSA加密算法
RSA公钥密码体制历史
-
麻省理工学院Ron Rivest、 Adi Shamir和Leonard Adleman于1978年一起提出 RSA 加密算法,并受到广泛关注。
-
为奖励Ron Rivest、 Adi Shamir和Leonard Adleman发明RSA公钥算法, 2002年度美国计算机协会(ACM)为三位学者颁发图灵奖Turing Award。
-
RSA目前被广泛应用及部署到不同的场景,比如HTTPS(全称: Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,简单讲是HTTP的安全版)
RSA公钥加密体制原理
- 密钥生成:
- 选择两个大素数 \(p,q\)。(例如:每个1024位)
- 计算 \(n=pq\), \(z=(p-1)(q-1)\)。
- 随机选取 \(e\)(其中 \(e<n\)),\(e\) 与 \(z\) 没有公因数。(\(e,z\)“互为质数”)
- 选取 \(d\) 使得 \(ed-1\) 能够被 \(z\) 完全整除。(换言之:\(ed\mod{z}=1\) )
- 公钥是 \(\underbrace{ (n,e) }_{ K^{+}_{B} }\)。私钥是 \(\underbrace{ (n,d) }_{ K^{-}_{B} }\)。
加解密
- 加密/解密算法:
- 如上所述给出 \((n,e)\) 和 \((n,d)\)。
- 加密:由 \(c=m^{e}\mod{n}\) 将明文 \(m\) 转变为密文 \(e\)( 即:当 \(m^{e}\) 除以 \(n\) 所得的余数)。
- 注意:\(m<n\) (如果需要,则分块)
- 解密:\(m=e^{d}\mod{n}\) (即:\(e^{d}\) 除以 \(n\) 所得的余数)。
具体过程
-
由欧拉定理得出:
-
当 \(gcd(a,N)=1\) 时,\(a^{\varphi(N)}\mod{N}=1\) 。
-
在RSA中有:(解密同样成立)
- \(N=p\cdot q\)
- \(\varphi(n)=(p-1)(q-1)\)
- 选择整数 \(e\) 和 \(d\),\(d\) 为 \(e\) 关于模 \(\varphi(N)\) 的模反元素
- 即 \(e\cdot d\equiv{1}\mod{\varphi(N)}\)
- \(e\cdot d=1+k\cdot\varphi(N)(k>0,k\in{Z})\)
于是有:
例
Bob 选择 \(p=5,q=7\),则 \(n=35,z=24\)。 \(e=5\)(所以 \(e,z\) 互为质数),\(d=29\)(所以 \(ed-1\) 能完全被 \(z\) 整除 )。
加密:
\(加密:\) | \(letter\) | \(m\) | \(m^{e}\) | \(c=m^{e}\mod{n}\) |
---|---|---|---|---|
\(l\) | \(12\) | \(1524832\) | \(17=12^{5}\mod{35}\) |
\(解密:\) | \(c\) | \(c^d\) | \(m=c^{d}\mod{n}\) | \(letter\) |
---|---|---|---|---|
\(17\) | \(481968572106750915091411825223071697\) | \(12\) | \(l\) |
群的概念
群的定义
- 定义 1 设 \(G\) 是一个具有代数运算[1] \(\circ\) 非空集合,并且满足:
- 结合律:\(\forall{a,b,c\in G}\) 有 \((a\circ{b})\circ{c}=a\circ{(b\circ{c})}\) ;
- 有单位元:即 \(G\) 中存在一个元素 \(e:\forall{a\in{G}}\),有 \(e\circ{a}=a \circ e =a\)
- 有逆元:即对于任意 \(a\in G\),存在一个元素 \(a^{-1}\in G\),使得 \(a\circ{a^{-1}=a^{-1}\circ{a}=e}\)
称非空集合 \(G\) 关于代数运算 \(\circ\) 构成一个群。
例
- 全体整数 \(Z\) 对于通常的加法成一个群,这个群称为整数加群,在整数加群中,单位元是0, \(a\) 的逆元是 \(a^{-1}\);同样全体有理数集合 \(Q\),全体实数集合 \(R\),全体复数集合 \(C\) 对加法也构成群
- 全体非零实数 \(R^{*}\) 对于通常的乘法构成一个群,全体正实数 \(R^{+}\) 对于通常的乘法也构成一个群
- 模正整数 \(n\) 的最小非负完全剩余系 ,对于模 \(n\) 的加法构成一个群,这个群称为整数模 \(n\) 加群,其单位元为0,\(a\) 的逆元是 \(n-a\)
交换群
- 如果群 \(G\) 上的乘法运算还满足交换律,即对于群 \(G\) 中的任意元素 \(a,b\in G\) 都有 \(ab=ba\)
- 则称群 为交换群或阿贝尔群。
有限群和无限群
- 定义 2 若群 \(G\) 中只含有有限个元素,则称群 \(G\) 为有限群;若群 \(G\) 中含有无限多个元素,则称群 \(G\) 为无限群。一个有限群 \(G\) 中的元素个数称为群的阶,记为 \(|G|\)。
[[#例]]中的(1)(2)都是无限群,而整数模 \(n\) 加群 \(Z_{n}\) 为有限群,且 \(|Z_{n}|=n\)。
简单性质
有限群的判定
定理 1
- 一个有乘法的有限集合 \(G\),若其乘法在 \(G\) 中封闭,且满足结合律和消去律,则 \(G\) 是群。
证明思路:(定理 1)对于 \(G\) 中的任意元素 \(a,b\in G\),方程
\(ax=b\quad\&\quad xa=b\) 在 \(G\) 中有解, 则 \(G\) 是群
证明:假定 \(G\) 中有 \(n\) 个元素,不妨设这 \(n\) 个元素为\(a_{1},a_{2},\dots,a_{n}\)用 \(a\) 左乘所有的 \(a_{i}\),可做成集合 \(G^{'}=\{aa_{1},aa_{2},\dots,aa_{n}\}\)
由于乘法在 \(G\) 上封闭,所以 \(G^{'}\subseteq G\)
但当 \(i \neq j\) 的时候, \(aa_{i}\neq{aa_{j}}\)。不然的话,由消去律可知,\(a_{i}=a_{j}\)与假定不合。因此 \(G^{'}\) 有 \(n\) 个不同的元素,所以有 \(G^{'}=G\)。这样,对于方程中的 \(b\),必然存在某个 \(k\),使得 \(b=aa_{k}\),也就是说方程 \(ax=b\) 在 \(G\) 中有解。
同理可证,方程 \(xa=b\) 在 \(G\) 中也有解。
根据定理,\(G\) 是群。
例
取模 \(m\) 的最小非负简化剩余系,记为 \(Z^{*}_{m}\),其中元素个数为 \(\varphi(m)\) 个,定义其上的乘法为模 \(m\) 的乘法。显然其乘法在 \(Z^{*}_{m}\) 上封闭,且满足结合律。由扩展欧几里德算法可知,\(Z^{*}_{m}\) 中的元素均存在模 \(m\) 的乘法逆元。对于任意 ,若
则有
- [?] 扩展欧几里得
即 \(b\equiv c(\mod{m})\)。因此,模 \(m\) 的乘法在 \(Z^{*}_{m}\) 上满足消去律。根据定理 1, 是群。
循环群
元素的方幂(乘法,加法)
乘法
- 元素的指数运算
对于任意正整数 \(n\),定义 \(\overbrace{ aa\dots a }^{ n }\)
再约定
容易验证
加法
对于任意正整数 \(n\),定义
再约定
- [i] \(a^{-1}\) 为 \(a\) 的逆元
容易验证
循环群定义
定义 1 设 \(G\) 是一个群,若存在一个元素 \(a\),使得 \(G=\left< a\right>\),则称为循环群。元素 \(a\) 称为 \(a\) 的生成元。若 \(\circ(a)=\infty\),\(G\) 称为无限循环群;若 \(\circ(a)=n\),\(n\) 是某个正整数,则 \(G\) 称为有限循环群。
-
[!] \(G=\left< a \right>\) —— \(G\) 中的元素都可以用 \(a\) 的指数运算表示
-
例
- 整数加法群 \(Z\) 是循环群,其生成元为1或-1。
- 模整数 \(m\) 剩余类加群 \(Z_{m}\) 是循环群,其生成元为 \([1]\)。
- 当 \(m\) 是素数时,模整数 \(m\) 的简化剩余类乘群 \(Z^{*}_{m}\) 是循环群。
群中的离散对数问题
定义 设 \(G=\left< a \right>\) 是循环群。群 \(G\) 中的离散对数问题是指:给定 \(G\) 中一个元素 \(h\),找到正整数 \(k\),使得
我们把 \(k\) 称为 \(h\) 相对于生成元的离散对数,记作
离散对数的例子
例1 \((Z,+)\)
离散对数问题是平凡的
例2 \(Z_{m}\),模 \(m\) 剩余类组成的加法群,\(a\) 为 \(Z_{m}\) 的一个生成元,离散对数问题为:给定 \(h\in Z_{m}\),求解 \(x\),使得
用扩展的欧几里得算法很容易求解
例3 是模 \(Z^{*}_{m}\) 简化剩余系组成的乘法群,\(g\) 为 \(Z^{*}_{m}\) 的一个生成元,离散对数问题为:给定 \(h\in Z^{*}_{m}\),求解 \(x\),使得
当 \(m=7\) 时,\(\left\{ 1,2,3,4,5,6 \right\}\) 关于模 7 乘法构成循环群,比如 3 是该群的生成元,
ElGamal公钥密码体制
- ElGamal密码是一种基于离散对数问题的公钥加密算法,由Taher ElGamal于1985年提出。它既可以用于加密,也可以用于数字签名,因而在现代密码学中具有重要地位。
ElGamal公钥加密体制原理
- 密钥生成:
- \(p\),一个较大素数
- \(g\),\(Z^{*}_{m}\) 中的生成元
- \(\alpha\in Z_{p-1},\beta=g^{\alpha}\mod{p}\)
- \(p,g,\beta\) 为公钥;\(\alpha\) 为私钥
- 加密:
- 随机生成一个秘密数 \(k\), \(k\in Z_{p-1}\)
- \(E(x,k)=(r,s)\),其中
- \(r=g^{k}\mod{p}\)
- \(s=x\beta^{k}\mod{p}\)
- 解密:
- \(D(r,s)=s(r^{\alpha})^{-1}\mod{p}=xg^{\alpha k}g^{-\alpha k}\mod{p}=x\)
ElGamal与RSA的区别
- 数学困难问题
- RSA ——大整数分解
- ElGamal ——循环群中的离散对数问题
- 公开参数设置
- RSA —— \(p,q\dots\)
- ElGamal——只需要设置一个大素数 \(p\),及循环群 \(Z^{*}_{m}\)
椭圆曲线密码体制
实数域上的椭圆曲线
由于椭圆曲线是双线性配对的理论基础,因此本节首先对其进行介绍。
椭圆曲线并非椭圆,之所以称为椭圆曲线是因为它的曲线方程与计算椭圆周长的方程相似。一般的,椭圆曲线指的是由维尔斯特拉斯(Weierstrass)方程
所确定的曲线,它是由方程的全体解 \((x,y)\) 再加上一个无穷远点 \(O\) 构成的集合,其中 \(\left\{ a,b,c,d,e \right\}\) 是满足一些简单条件的实数, \(x\)和 \(y\) 也在实数集上取值。上述曲线方程可以通过坐标变换转化为下述形式:
由它确定的椭圆曲线常记为 \(E(a,b)\),简记为 E。
当 \(4a^{3}+27b^{2}\neq{0}\) 时,称 \(E(a,b)\) 是一条非奇异椭圆曲线。对于非奇异椭圆曲线,可以基于集合 \(E(a,b)\) 定义一个群。
这是一个 Abel 群,具有重要的“加法规则”属性。下面,首先给出加法规则的几何描述,然后给出加法规则的代数描述。
- 加法的几何描述
- 椭圆曲线上的加法运算定义如下:如果椭圆曲线上的3个点位于同一直线上,那么它们的和为 \(O\)。从这个定义出发,可以定义椭圆曲线的加法规则:
- \(O\) 为加法的单位元,对于椭圆曲线上的任何一点 \(P\),有 \(P+O=P\)
- 对于椭圆曲线上的一点 \(P=(x,y)\), 它的逆元为 \(-P=(x,-y)\)。注意到 \(P+(-P)=P-P=O\)。
- 设 \(P\) 和 \(Q\) 是椭圆曲线上 \(x\) 坐标不同的两点,\(P+Q\) 定义如下:作一条通过 \(P\) 和 \(Q\) 的直线 \(l\) 与椭圆曲线相交于 \(R\) (这一点是唯一的,除非这条直线在 \(P\) 点或 \(Q\) 点与该椭圆曲线相切,此时于分别取 \(R=P\) 或 \(R=Q\)),然后过 点 \(R\) 作 \(y\) 轴的平行线 \(l^{'}\),\(l^{'}\) 与椭圆曲线相交的另一点 \(S\) 就是 \(P+Q\),如图1所示。![[图1 椭圆曲线上点的加法的几何解释.png]]
- 上述几何解释也适用于具有相同 \(x\) 坐标的两个点 \(P\) 和 \(-P\) 的情形。 用一条垂直的线连接这两个点,可看做是在无穷远点与椭圆曲线相交,因此有 \(P+(-P)=O\)。这与上述第2条叙述是一致的。
- 为计算点 \(Q\) 的两倍,在 \(Q\) 点作一条切线并找到与椭圆曲线的另一个交点 \(T\),则 \(Q+Q=2Q=-T\)。
- 椭圆曲线上的加法运算定义如下:如果椭圆曲线上的3个点位于同一直线上,那么它们的和为 \(O\)。从这个定义出发,可以定义椭圆曲线的加法规则:
- [!] 以上定义的加法满足加法运算的一般性质,如交换律、结合律等
- 加法的代数描述
- 对于椭圆曲线上不互为逆元的两点 \(P=(x_{1},y_{1})\) 和 \(Q=(x_{2},y_{2})\),\(S=P+Q=(x_{3},y_{3})\)由以下规则确定:
- \(x^{3}=\lambda^{2}-x_{1}-x_{2}\)
- \(y^{3}=\lambda(x_{1}-x_{3})-y_{1}\)
- 对于椭圆曲线上不互为逆元的两点 \(P=(x_{1},y_{1})\) 和 \(Q=(x_{2},y_{2})\),\(S=P+Q=(x_{3},y_{3})\)由以下规则确定:
式中:
有限域上的椭圆曲线
椭圆曲线密码体制使用的是有限域上的椭圆曲线,即变量和系数均为有限域中的元素。有限域 上的椭圆曲线是指满足方程的
的所有点 \((x,y)\) 再加上一个无穷远点 O 构成的集合,其中 \(a,b,x\)和 \(y\) 均在有限域 \(GF(p)\) 上取值,\(p\) 是素数。这里把该椭圆曲线记为。该椭圆曲线只有有限个点,其个数 由 Hasse 定理确定。
Hasse定理
定理 设 \(E\) 是有限域 \(GF(p)\) 上的椭圆曲线,\(N\) 是 \(E\) 上点的个数,则
当 \(4a^{3}+27b^{2}(\mod{p})\neq{0}\) 时,基于集合 \(E_{p}(a,b)\) 可以定义一个Abel群,其加法规则与实数域上描述的代数方法一致。设 \(P,Q\in E_{p}(a,b)\),则
- \(P+O=P\)
- 如果 \(P=(x_{1},y_{1})\) ,那么 \((x,y)+(x,-y)=O\),即点 \((x,-y)\) 是 \(P\) 的加法逆元,表示为 \(-P\)
- 设 \(P=(x_{1},y_{1})\) 和 \(Q=(x_{2},y_{2})\),\(P\neq -Q\),则 \(S=P+Q=(x_{3},y_{3})\)
由以下规则确定:
式中
- 倍点运算定义为重复加法,如 \(4P=P+P+P+P\)。
例
设 \(p=11,a=1,b=6\),即椭圆曲线方程为 \(y^{2}\equiv x^{3}+x+6(\mod{11})\)
要确定椭圆曲线上的点,对于每个 \(x\in GF(11)\),首先计算 \(z\equiv x^{3}+x+6(\mod{11})\),然后再判定 \(z\) 是否是模11的平方剩余(方程 \(y^{2}\equiv z\mod{11}\) 是否有解),若不是,则椭圆曲线上没有与 \(-x\) 相对应的点;若是,则求出 \(z\) 的两个平方根。该椭圆曲线上的点如下表所示。
表 椭圆曲线 上的点
\(x\) | \(0\) | \(1\) | \(2\) | \(3\) | \(4\) | \(5\) | \(6\) | \(7\) | \(8\) | \(9\) | \(10\) |
---|---|---|---|---|---|---|---|---|---|---|---|
\(x^{3}+x+6\pmod{11}\) | \(6\) | \(8\) | \(5\) | \(3\) | \(8\) | \(4\) | \(8\) | \(4\) | \(9\) | \(7\) | \(4\) |
\(是否是模11的平方剩余\) | \(否\) | \(否\) | \(是\) | \(是\) | \(否\) | \(是\) | \(否\) | \(是\) | \(是\) | \(否\) | \(是\) |
\(y\) | 4 | 5 | 2 | 2 | 3 | 2 | |||||
7 | 6 | 9 | 9 | 8 | 9 |
只有 \(x=\left\{ 2,3,5,6,7,10 \right\}\) 时才有点在椭圆曲线上,\(E_{11}\) 是由表中的点再加上一个无穷远点 \(O\) 构成,即
设 \(P=(2,87)\),计算 \(2P=P+P\)。首先计算
于是
所以 \(2P=(5,2)\)。同样可以算出
由此可以看出,\(E_{11}(1,6)\) 是一个循环群,其生成元是 \(P=(2,7)\)。
椭圆曲线密码学
为了使用椭圆曲线来构造密码体制,需要找到类似大整数因子分解或离散对数这样的困难问题。
- 定义1 椭圆曲线 \(E_{p}(a,b)\) 上点 \(P\) 的阶是指满足
的最小正整数,记为 \(ord(P)\),其中 \(O\) 是无穷远点。
- 定义2 设 \(G\) 是椭圆曲线 \(E_{p}(a,b)\) 上的一个循环子群,\(P\) 是 \(G\) 的一个生成元,\(Q\in G\) 。已知 \(P\) 和 \(Q\),求满足 \(mP=Q\) 的整数 \(m\),\(0\leq m\leq ord(P)-1\) 称为椭圆曲线上的离散对数问题(elliptic curve discrete logarithm problem, ECDLP)。计算 的过程称为点乘运算(Point multi-plication)。
在使用一个椭圆曲线密码体制时,首先需要将发送的明文 \(m\) 编码为椭圆曲线上的点 \(P_{m}(x_{m},y_{m})\),然后再对点 \(P_{m}\) 做加密变换,在解密后还得将 \(P_{m}\) 逆向译码才能获得明文。
- 密钥生成(KeyGen)
- 在椭圆曲线 \(E_{p}(a,b)\) 上选取一个阶为 \(n\) ( \(n\) 为一个大素数)的生成元 \(P\)。随机选取整数 \(x(1<x<n)\),计算 \(Q=xP\)。公钥为 \(Q\),私钥为 \(x\)。
- 加密(Encrypt)
- 为了加密 \(P_{m}\),随机选取一个整数 \(k\),计算 \(C_{1}=kP,C_{2}=P_{m}+kQ\) 则密文 \(c=(C_{1},C_{2})\)
- 解密(Decrypt)
- 为了解密一个密文 \(c=(C_{1},C_{2})\),计算 \(C_{2}-xC_{1}=P_{m}+kQ-xkP=P_{m}+kxP-xkP=P_{m}\)
- 攻击者要想从 \(c=(C_{1},C_{2})\) 计算出 \(P_{m}\),就必须知道 \(k\)。而要从 \(P\) 和 \(kP\) 中计算出 \(k\) 将面临求解椭圆曲线上的离散对数问题。
SM2公钥加密算法
SM2公钥密码算法简介
- SM2是中国国家密码管理局颁布的中国商用公钥密码标准算法,它是一组椭
- 圆曲线密码算法,其中包含加解密算法、数字签名算法。
- 2004年,由中国科学院软件研究所张振峰研究员主持研制完成
- 2010年12月,首次公开发布
- 2012年3月,成为中国商用密码标准(GM/T 0003-2012)
- 2016年8月,成为中国国家密码标准(GB/T 32918-2016)
- 2017年11月3日,在第55次ISO/IEC联合技术委员会信息安全技术分委员会(SC27)德国柏林会议上,含有我国SM2与SM9数字签名算法的ISO/IEC14888-3/AMD1《带附录的数字签名第3部分:基于离散对数的机制-补篇1》 获得一致通过,成为ISO/IEC国际标准,进入标准发布阶段。
SM2公钥加密算法原理
符号
- \(A,B\):使用公钥密码系统的两个用户。
- \(a,b\): \(F_q\) 中的元素,它们定义\(F_q\)上的一条椭圆曲线 \(E\)。
- \(d_{}B\):用户B的私钥。
- [!] \(E(F_q)\): \(F_q\) 上椭圆曲线E 的所有有理点(包括无穷远点\(O\))组成的集合。
- \(F_q\):包含 \(q\) 个元素的有限域。
- \(G\):椭圆曲线的一个基点,其阶为素数。
- \(Hash( )\):密码杂凑函数。
- \(H_v( )\):消息摘要长度为 \(v\) 比特的密码杂凑函数。
- [!] \(KDF( )\):密钥派生函数。
- \(M\) :待加密的消息。
- \(M^{'}\):解密得到的消息。
- \(n\):基点\(G\)的阶(\(n\) 是 \(\#E(Fq)\) 的素因子)。
- \(O\):椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭圆曲线加法群的单位元。
- \(P_B\):用户B的公钥。
- \(q\):有限域Fq中元素的数目。
- \(x||y\): \(x\) 与 \(y\) 的拼接,其中 \(x\)、 \(y\) 可以是比特串或字节串。
- \([k]P\):椭圆曲线上点 \(P\) 的 \(k\) 倍点,即 \([k]P=\underbrace{ P+P+\dots+P }_{ k }\),\(k\) 是正整数
- \([x,y]\) :大于或等于 \(x\) 且小于或等于 \(y\) 的整数的集合。
- \(\lceil x \rceil\):顶函数,大于或等于 \(x\) 的最小整数。例如 \([7]=7,[8.3]=9\)
- \(\lfloor x \rfloor\):底函数,小于或等于 \(x\) 的最大整数。例如 \([7]=7,[8.3]=8\)
- \(\#E(F_{q})\):\(E(F_{q})\) 上的点的数目,成为椭圆曲线 \(E(F_{q})\) 的阶
SM2的基本参数
- 基于素数域 \(F_p\) 的SM2算法参数如下:
- \(F_{p}\) 的特征 \(p\),为 \(m\) 比特长的素数 \(p\),要尽可能大,但太大会影响计算速度;通常选择160比特大小。
- 长度不小于192比特的比特串 \(SEED\) ;
- \(F_p\) 上的2个元素 \(a,b\),满足 \(4a^{3}+27b^{2}\neq 0\),定义 \(E(F_{p}):y^{2}=x^{3}+ax+b\mod{p}\)
- 基点 \(G=(x_{G},y_{G})\in E(F_{p}),G\neq O\);
- \(G\) 的阶 \(n\) 为 \(m\) 比特长的素数,满足 \(n>2^{191}\) 且 \(n>4\sqrt{ p }\)
- \(h= \frac{|E(F_{p})|}{n}\)称为余因子,其中 \(|E(F_{p})|\) 是曲线 \(E(F_{p})\) 的点数。
种子和曲线的产生
- \(SEED\) 和 \(a,b\), 的产生算法如下:
- 任意选取长度不小于192比特的比特串 ;
- 计算 \(H=H_{256}(SEED)\),记 \(H=(h_{255},h_{254},\dots,h_{0})\),其中 \(H_{256}\) 表示256比特输出的 SM3 哈希算法;
- 取 \(R=\sum^{255}_{i=0}h_{i}2^{i}\);
- 取 \(r=R\mod{p}\);
- 在 \(F_{P}\) 上任意选择2个元素 \(a,b\),满足 \(rb^{2}=a^{3}\mod{p}\);或者令 \(b = r\) ,取 \(F_{p}\) 中元素 \(a\) 为某固定值;
- 若 \(4a^{3}+27b^{2}=0\mod{p}\),则转向 1;
- 所选择的 \(F_{p}\) 上曲线是 \(E(F_{p}):y^{2}=x^{3}+ax+b\mod{p}\);
- 输出 \((SEED,a,b)\)。
参数范例
- 椭圆曲线方程为: \(y^2 = x^3 + ax + b\)
- 示例1: \(F_p-256\)
- 素数 \(p\):
8542D69E 4C044F18 E8B92435 BF6FF7DE 45728391 5C45517D 722EDB8B 08F1DFC3
- 系数 \(a\):
787968B4 FA32C3FD 2417842E 73BBFEFF 2F3C848B 6831D7E0 EC65228B 3937E498
- 系数 \(b\):
63E4C6D3 B23B0C84 9CF84241 484BFE48 F61D59A5 B16BA06E 6E12D1DA 27C5249A
- 基点\(G=(xG,yG)\),其阶记为n。
- 坐标xG:
421DEBD6 1B62EAB6 746434EB C3CC315E 32220B3B ADD50BDC 4C4E6C14 7FEDD43D
- 坐标yG:
0680512B CBB42C07 D47349D2 153B70C4 E5D7FDFC BFA36EA1 A85841B9 E46E09A2
- 阶n:
8542D69E 4C044F18 E8B92435 BF6FF7DD 29772063 0485628D 5AE74EE7 C32E79B7
- 素数 \(p\):
密钥产生
设接收方为 B, B 的秘密钥取为 \(\left\{ 1,2,\dots,n-1 \right\}\) 的一个随机数 \(d_{B}\),记为 \(d_{B}\leftarrow_{R}\left\{ 1,2,\dots,n-1 \right\}\),其中 \(n\) 是基点 \(G\) 的阶。
B 的公开钥取为椭圆曲线上的点:
其中 \(G=G(x,y)\) 是基点。
SM2加密流程图
![[SM2加密流程图.png]]
加密算法
-
设发送方是A , A要发送的消息表示成比特串 \(M\),\(M\) 的长度为 \(klen\)。
-
加密运算如下:
- 选择随机数 \(k\leftarrow_{R}\left\{ 1,2,\dots,n-1 \right\}\);
- 计算椭圆曲线点 \(C_{1}=kG=(x_{1},y_{1})\),将 \((x_{1},y_{1})\) 表示为比特串;
- 计算椭圆曲线点 \(S=hP_{B}\),若 \(S\) 是无穷远点,则报错并退出;
- 计算椭圆曲线点 \(kP_{B}=(x_{2},y_{2})\),将 \((x_{2},y_{2})\) 表示为比特串;
- 计算 \(t=KDF(x_{2}||y_{2},klen)\),若 \(t\) 为全 0 的比特串,则返回1;
- 计算 \(C_{2}=M\oplus t\);
- 计算 \(C_{3}=Hash(x_{2}||M||y_{2})\);
- 输出密文 \(C=(C_{1},C_{2},C_{3})\);
-
[!] 其中第 5 步 \(KDF(\cdot)\) 是密钥派生函数,其本质上就是一个伪随机数产生函数,用来产生密钥,取为密码哈希函数 SM3。第 7 步 Hash函数也取为SM3。
密钥派生函数 \(KDF(Z, klen)\)
- 输入:比特串 \(Z\),整数 \(klen\) (表示要获得的密钥数据的比特长度,要求该值小于\((2^{32}-1)v)\);
- 输出:长度为 \(klen\) 的密钥数据比特串 \(K\);
- 初始化一个32比特构成的计数器\(ct=0x00000001\);
- 对i从1到\(\left\lceil \frac{klen}{v} \right\rceil\)执行:
- 计算\(H_{a_{i}}=H_{}v(Z ||ct)\);
- ct++;
- 若 \(\frac{klen}{v}\) 是整数,令 \(H_{a!_{\lceil klen=v \rceil}}=H_{a_{\lceil klen=v \rceil}}\) ,否则令 \(H_{a!_{\lceil klen=v \rceil}}\) 为 \(H_{a_{\lceil klen=v \rceil}}\)最左边的 \(\left( klen-\left( v\times \left\lfloor \frac{klen}{v} \right\rfloor \right) \right)\) 比特;
- 令 \(K=H_{a_{1}}||H_{a_{2}}||\dots||H_{a_{\lceil klen=v \rceil-1}}||H_{a!_{\lceil klen=v \rceil}}\)
SM2解密流程图
![[SM2解密流程图.png]]
解密算法
- B 收到密文后,执行以下解密运算:
- 从 \(C\) 中取出比特串 \(C_{1}\),将 \(C_{1}\) 表示为椭圆曲线上的点,验证 是否满足椭圆曲线方程,若不满足则报错并退出;
- 计算椭圆曲线点 \(S=hC_{1}\),若 \(S\) 是无穷远点,则报错并退出;
- 计算 \(d_{B}C_{1}=(x_{2},y_{2})\),将坐标 \((x_{2},y_{2})\)表示为比特串;
- 计算 \(t=KDF(x_{2}||y_{2},klen)\),若 \(t\) 为全0比特串,则报错并退出;
- 从 \(C\) 中取出比特串 \(C_{2}\),计算 \(M^{'}=C_{2}\oplus t\);
- 计算 \(u=Hash(x_{2}||M^{'}||y_{2})\),从 \(C\) 中取出 \(C_{3}\),若 \(u\neq C_{3}\),则报错并退出;
- 输出明文 \(M^{'}\)
解密的正确性
因为 \(P_{B}=d_{B}G\), \(C_{1}=kG=(x_{1},y_{1})\),由解密算法的第3步可得
所以解密算法第4步得到的 \(t\) 与加密算法第5步得到的 \(t\) 相等,由 \(C_{2}\oplus t\),便得到明文 。
SM2与ECC的区别
-
SM2算法与国际标准的ECC算法比较:
- ECC算法通常采用NIST等国际机构建议的曲线及参数, 而SM2算法的参数需要利用一定的算法产生。 而由于算法中加入了用户特异性的曲线参数、 基点、 用户的公钥点信息, 故使得SM2算法的安全性明显提高。
- 在ECC算法中, 用户可以选择MD5、 SHA-1等国际通用的哈希算法。而SM2算法中则使用SM3哈希算法, SM3算法输出为256 比特, 其安全性与SHA-256算法基本相当。
-
传统ECC:
- 计算点 \(X_{2}(x_{2},y_{2})=kP_{B}\);
- 利用分量 \(x_{2}\) 作为密钥进行加密: \(C=Mx_{2}\mod{n}\),分量 \(y_{2}\) 没有利用;
- 计算密文 \(C=Mx_{2}\mod{n}\);
- 加密运算是乘法,比较复杂;
- 最终密文是 \(\left< X_{1},C \right>\).
- SM2:
- 计算点 \(kP_{B}=(x_{2},y_{2})\);
- 利用分量 \(x_{2}\) 和 \(y_{2}\) 经过密钥派生函数产生中间密钥 \(t\),再用 \(t\) 进行加密 \(C_{2}=M\oplus t\),加密运算是模2加,效率较高;
- 计算𝒕 = 𝑲𝑫𝑭(𝒙𝟐||𝒚𝟐, 𝒌𝒍𝒆𝒏);
- 密钥派生函数提高了安全性,但增加了时间消耗;
- 计算𝑪𝟐 = 𝑴 ⊕ 𝒕;
- \(\left< C_{1},C_{2},C_{3} \right>\)为密文,密文扩张较前者严重;
- 最终密文是 \(\left< C_{1},C_{2},C_{3} \right>\).
- SM2中采取了很多检错措施,提高了密码系统的数据完整性和系统可靠性,进而提高了密码系统的安全性。
- 计算点 \(kP_{B}=(x_{2},y_{2})\);
这里的代数运算指出了群的封闭性,即对于运算 \(\circ\) 的结果依旧属于集合内的元素。 ↩︎