system: [SYSTEM]

user: 3. 难解问题的数学基础 3.1. 随机数 随机数可以理解为随机产生的数字或序列，具有随机性与不可预测性两个显著的特征。 随机性由均匀分布和独立性两个具体的准则来描述。均匀分布是指序列中每个数的出现频率是近似相等的，符合最大熵。独立性为正要出现的数 a i 与此前已知的数 a i − 1 ， a i − 2 ， ⋯ ， a 1 之间对应的互信息 I ( a i ; a i − 1 ， a i − 2 ， ⋯ ， a 1 ) = 0 。而不可预测性即后面生成的数不受前面生成数的影响。 3.1.1. 随机数的数学描述 设无限序列 x ∈ 2 ω ，序列 x 的密度定义描述为： 设 D ( x ， n ) = 1 n ∑ i < n x i ，则 D ( x ， n ) 为序列 x 到第 n 项的密度。如果 D ( x ， n ) 存在一个极限，则称 lim n D ( x ， n ) 为序列 x 的极限密度。 严格条件下，无限序列的极限密度应当满足公式： lim n D ( x ， n ) = 1 / 2 由于实际操作中很难实现无限序列，在非严格条件下，通常需要满足的公式为： lim n D ( x ， n ) → 1 / 2 3.1.2. 量子比特序列与真随机数 产生量子随机数方法很多，以下为通过单个粒子的量子比特产生随机数的方法： 设存在 n 个量子比特，每一个都有形式 | ψ 〉 = α | + x 〉 + β | − x 〉 ，沿着方向 x 去测量每个量子比特，结果是 + x 的概率是 ‖ α ‖ 2 ，是 − x 的概率是 ‖ β ‖ 2 。在测完 n 个量子比特之后，出现 n 个结果，由此形成随机数序列 S = { s 1 ， s 2 ， ⋯ ， s n | s i ∈ ( + x ， − x ) } 。由于量子噪声的存在，测量结果是一个概率出现的结果，测量之前并不能对结果预测。当 α = β 时，测量结果为 + x 和 − x 的概率都是 50 % ， + x 和 − x 以相同概率出现 [ 4 ] 。 由于经典噪声和测量仪器的影响，无法保证 + x 和 − x 出现的概率都是 50 % 。如果 + x 的概率为 50 % + ε ， − x 出现的概率为 50 % − ε ，可采用John von Neumann算法进行处理。 同时读取两个比特，去掉为11和00的结果。对于10和01的结果只输出前一个比特。设 + x 为0、 − x 为1，可得： 11 → ( 1 / 2 − ε ) ( 1 / 2 − ε ) = 1 / 4 − ε + ε 2 10 → ( 1 / 2 − ε ) ( 1 / 2 + ε ) = 1 / 4 − ε 2 01 → ( 1 / 2 + ε ) ( 1 / 2 − ε ) = 1 / 4 − ε 2 00 → ( 1 / 2 + ε ) ( 1 / 2 + ε ) = 1 / 4 + ε + ε 2 结果表明，考虑测量误差的前提下，得到比特1和比特0的概率是相等的。 结合John von Neumann算法和Bell态，每次从四个Bell态中随机选取一个，用Bell基来测量Bell态的两个粒子，得到11、10、01和00，最后使用John von Neumann算法可以获得出现概率相通的比特0和比特1，由此构成可靠的随机数序列。 3.2. 大数分解难解问题 3.2.1. 素数无穷的证明 通过假设即可反证出“素数为有限多个”的命题是伪命题。 3.2.2. 素性检验 构建大数分解难题的基础是进行大数的素性检验。RSA加密算法在实现过程中需要寻找两个足够大的质数，在数足够大的时候，如何确定它是一个素数，需要用到数论中关于素数(质数)的相关理论。 在Rabin密码体制、Okamoto签名体制和ElGamal签名体制中，同样需要使用大素数，同样需要素性检验的合理方式。 Miller-Rabin素性检验法 采用Miller-Rabin素性检验方法检验的大整数，如果已经进行了t步迭代，还没有出现非素数的判定结果，那么这个数是素数的概率不低于 1 − 2 − t 。当t充分大的时候，通过此方法检测的数为素数的概率已经足够可靠。 费马素性检验 费马素性检验的本质就是借助费马小定理来判定选出的大整数是素数还是合数。其本质与Miller-Rabin素性检验类似。 Solovay-Stassen素性检验 对于一个大于2的素数n，由于 x 2 ≡ b ( mod n ) ，其中的b是否为二次剩余可借助欧拉判别法或者勒让德符号进行判定。而如果采用雅可比符号判定，对整数b而言，计算 b ( n − 1 ) / 2 ( mod n ) ，如果 b ( n − 1 ) / 2 ≠ ( b n ) ( mod n ) ，就能够确定n一定不是素数。 确定性的素性检验方法 借助Eratosthenes筛选法，给出一个正数x，满足 lim x → ∞ x n = 1 ，可以设计一种可行的确定性素性检验方法。 面对一个给定的大整数 m ，要判定其是否为素数的时候。首先把问题进行转化，变成确定一个常数 k ≥ 1 ，得到新的数 M = m + k ，寻找比M小的素数的问题。此时，借助Eratosthenes筛选法，能够逐一得到一个比M小的素数，然后再进行判定，如果m存在于这些寻找到的素数中，则能够确定 m 为素数。如此一来，不论结果如何，都能够一次性获得大整数m的确定性素性检验结果 [ 5 ] 。 这种类似于迭代的计算方式，巧妙地借助了平方根的运算。同时，借助整数的其他相关性质，此算法能够在计算机中有效实现，并且具备很高的素性检验速度。 3.3. 离散对数难解问题 3.3.1. 离散对数问题描述 在有限循环群G中，存在一个生成元a，对任意已知的整数n，容易得到 a n = b ∈ G 。但是在情况相反时，已知 b ∈ G 和有限循环群的生成元a，借助 a n = b 计算出n是十分困难的，构成数学基础上的计算复杂性难解问题。 之所以逆向计算整数n十分困难，首先因为是有限循环群，它的阶式有限的，对应的同一个b，实际上可能有无数的解，设 o r d ( a ) = m ，对应的解需要满足 r ≡ n ( mod ( o r d ( a ) ) ) ，而如果要从这么多解中确定出某个值，自然是不可能。此外，如果并不知道相应循环群的阶m，求解n就更加困难了。 3.3.2. 离散对数问题在数字签名中的应用 密码专家们设计了ElGamal、Okamoto等具体的数字签名认证方法 [ 6 ] 。其全过程可以分为系统参数设置、签名产生过程和签名验证过程三个部分。 系统参数设置： 确定有限群换群的阶p。选取一个大素数p，则构成一个有限循环群 G = p Z − { 0 } 。同时确定一个大素数q，可以是 p − 1 的素因数，也可以就是 p − 1 。 在 G = p Z − { 0 } 中随机选出生成元g，要求 g q ≡ 1 ( mod p ) 。 签名方生成其持有的私钥n，这个私钥可以被限制在一定范围内。同时生成公钥K，要求 K = g n ( mod p ) 。 签名生成部分： 设置需要签名的消息为m，由签名方计算关于的杂凑值 H ( m ) ，在 ( 1 ， q ) 中，由随机数 k ，根据 r ≡ g k ( mod p ) 求得 r 。 根据签名方程 a k ≡ ( b + c s ) ( mod q ) 计算出对应的s值，其中方程的系数a，b，c与 H ( m ) 之间存在着一定的关系，可以由签名方决定。由所得到的r值和s值，构建具体的签名 ( r ， s ) 。 签名验证部分： 接收方收到消息与签名 ( r ， s ) ，然后使用验证方程进行检验所收到的签名是否属实。一般情况下，判定是否满足 r a = g b y c ( mod p ) 。 3.3.3. 前沿动态 在近期的研究中，基于多离散对数问题，出现了MDLP公钥加密等算法，是此类难解问题基础上加密算法的有效改进，但后来也被证明其算法应用是不严格安全的 [ 7 ] 。 3.4. K椭圆曲线上的离散对数难解问题 3.4.1. 椭圆曲线上的离散对数问题 椭圆曲线上的离散对数问题的本质就是把离散对数难解问题的数的问题放到由域上的Weierstrass方程所定义的椭圆等曲线上考虑，具体而言，就是在已经知道素数p和 G F ( p ) 的椭圆曲线群 E ( G F ( p ) ) = { ( x ， y ) ∈ G F ( p ) | y 2 = x 3 + a x + b ， a ∈ G F ( p ) ， b ∈ G F ( p ) } ∪ { 0 } 以及点 P = ( x ， y ) 的阶是一个大素数的基础上，解决下面问题： 给定 s ∈ N 的条件下，并且 s < p ，以及 P = ( x ， y ) ，计算点 s P = Q = ( x s ， y s ) 是比较容易的。而逆运算中，已知点Q的情况，由 s P = Q = ( x s ， y s ) 求s的值是几乎不可能实现的。 3.4.2. 基于椭圆曲线离散对数问题的密码体制 目前已经成型的密码体制有Diffie-hellmen密钥交换和ElGamal密码体制，它们是椭圆曲线密码体制的典型系统。 Diffie-hellmen密钥交换过程 选择大素数 p 并确定 E ( G F ( p ) ) ，选取 E ( G F ( p ) ) 的一个生成元 G ( x 1 ， y 1 ) ，这个生成元应当是非常大的素数，所谓 G ( x 1 ， y 1 ) 的阶梯，记作n， E ( G F ( p ) ) 和 G ( x 1 ， y 1 ) 可以公开。 然后，事先通信双方密钥交换的过程：由甲选定一个小于n的整数 n a ，作为私钥，再根据 P a = n a G ( x 1 ， y 1 ) 和 P a ∈ E ( G F ( p ) ) 得到 P a ，并作为公钥。同样，乙也选定一个小于n的整数 n b ，作为私钥，并根据 P b = n b G ( x 1 ， y 1 ) 和 P b ∈ E ( G F ( p ) ) 求出 P b ，把 P b 也作为公钥。甲计算 K 1 = n a P b ， P b ∈ E ( G F ( p ) ) ，乙计算 K 2 = n b P a ， P a ∈ E ( G F ( p ) ) 。甲乙可以把 K 1 和 K 2 作为双方共同的私钥。 K 1 = n a P b = n a ( n b G ( x 1 ， y 1 ) ) = n b ( n a G ( x 1 ， y 1 ) ) = n b P a = K 2 其中： P a ∈ E ( G F ( p ) ) ， P b ∈ E ( G F (p)) 在不知道私钥 n a 的条件下，由 P a = n a G ( x 1 ， y 1 ) 和 P a ∈ E ( G F ( p ) ) 计算 n a ，就是椭圆曲线离散对数问题。同理，在不知道 n b 的情况下，由 P b = n b G ( x 1 ， y 1 ) 和 P b ∈ E ( G F ( p ) ) 计算 n b 也是椭圆曲线离散对数问题，由此保证了安全性。 ElGamal密码体系 选择一个大素数 p 和两个小于该素数的随机数 g 和 x ，计算 y ≡ g x ( mod p ) ，得出 y 。然后以 ( y ， g ， p ) 为公钥， x 为私钥。若明文为 M ，则相应的加密过程为选定一个满足 ( k ， p − 1 ) = 1 的数 k ，计算 C 1 = g k ( mod p ) 和 C 2 = y k M ( mod p ) ，得出密文 C = ( C 1 ， C 2 ) 。 ElGamal算法的解密过程的核心是通过 M ≡ C 1 C 2 ( mod p ) 得到明文，证明如下： C 1 C 2 x ( mod p ) ≡ y k M g k x ( mod p ) ≡ y k M ( g x ) k ( mod p ) ≡ M ( mod p ) 在加密过程中的随机数 k 是信息发送方生成的，接收方根据收到的密文，通过 C 1 = g k ( mod p ) 运算得到 k ，然后进行解密运算，解密时要用到私钥 x 。 首先需要选择一个椭圆曲线 E ( G F ( p ) ) ，并把明文与 E ( G F ( p ) ) 上面的点建立对应关系。其加密和解密过程也就转化为了在规定了 ⊕ 运算法则的Abel群中的运算，其具体过程分析如下： 首先，选取 E ( G F ( p ) ) 上的一个生成元 G ，把 E ( G F ( p ) ) 和 G 作为公开的参数。然后，接收方根据 P b = n b G ( x ， y ) 把 P b 作为公钥， n b 作为密钥。发送方选取一个正整数 k ，同时根据公钥 P b 对明文 P m 进行运算： C m = ( C 1 ， C 2 ) = ( k G ( x ， y ) ， P m + k P b ) C 1 = k G ( x ， y ) C 2 = P m + k P b 解密的过程就是 C 2 − n b C 1 的过程，因为： C 2 − n b C 1 = P m + k P b − n b k G ( x ， y ) = P m + k n b G ( x ， y ) − n b k G ( x ， y ) = P m 非法的窃听者由于没有私钥 n b ，也就不能解密。另外，如果要想根据 C m 得到 P m ，就必须知道整数 k ，而要知道 k ，就必须知道椭圆曲线 E ( G F ( p ) ) 上的点 G 和 k G ，这显然是椭圆曲线上的离散对数问题，安全性得到了保障。 分析展望 椭圆曲线上的密码体制具有安全性高的特点，同时，由于密钥量比较小，密码设计者能够发挥的空间比较大。此外，作为椭圆曲线的推广，已经出现了超椭圆曲线理论和超椭圆曲线上的离散对数难解问题为基础的密码体制HECC，构成了椭圆曲线密码体制ECC理论的发展方向 [ 8 ] 。