引 言
在商用密码应用安全性评估过程中,需要密评工程师具备大量和扎实的密码应用基础知识,本系列为密评工程师学习扎记,供大家共同探讨交流。
01 对称加密
1.1 基本概念
A(Alice) | m | —(+e)→ | c |
↓ | |||
B(Bob) | m | ←(-e)— | c |
假如有一个人Alice,她想把一个信号m传递给Bob,她不能直接把这个信号告诉Bob,否则的话可能会被人窃听。于是呢,她通过一些算法,比如加一个e,或减去一个e,等等一些数学上的算法,变成一个新的数字c,Bob接到这个c后,再减去或加上这个e后就会得到原来的数字m。这里的m我们称之为明文(原始的消息或数据,既算法的输入),c我们称之为密文(原始的消息或数据,既算法的输入),e称之为密钥(独立于明文和算法,也是加密算法的输入。算法根据所用的特定的密钥而产生不同的输出)。
注:密钥 mì yuè(口语中多读mì yào)
在对称密码体制中,怎么把这个e安全的传给Bob,人工传递效率有非常低,打电话告诉Bob又有可能被监听,所以密钥分发是一个难题。
1.2 对称密钥的分发
在金融机构密钥使用过程中,用于加密大部分数据的密钥需要频繁更改(例如,每天更改一次或每次会话更改一次),这些密钥不适用于通过人工分发密钥来完成,因为这种实现方式的代价太高。因此,在银行业务的对称密钥管理体系中一般将密钥分成两类:数据密钥(Data Key,DK)和密钥加密密钥(Key Encrypting Key,KEK)。数据密钥用于保护数据,有时也称为会话密钥;密钥加密密钥用于保护数据密钥。对称密钥分发主要有两种基本结构,一种是点到点结构,另一种是基于密钥中心的结构。
1.2.1
点到点的结构
点到点结构存在的一个主要问题是如果有n个成员组成的团体希望互相通信,那么需要人工分发的KEK为n(n-1)/2。在一个大型的网络中,KEK的分发问题就变得极难处理。
1.2.2
基于密钥中心的结构
为解决点对点结构中大量KEK分发困难的问题,在密钥加密密钥分发结构中引入了密钥中心,这就是第二类结构。在这类结构中,每个通信方和密钥中心共享一个人工分发的KEK,但是通信方之间无共享的KEK。因此,对于一个由n个成员组成的团体,人工分发的KEK数量仅为n。
密钥中心结构有两种:密钥转换中心(KTC)和密钥分发中心(KDC)。
在密钥转换中心结构中,数据密钥DK由通信发起方产生,如图所示。
密钥分发过程如下:
①当A希望和B进行通信时,由通信发起方A产生一个DK,产生的DK利用A与KTC共享的KEKA进行加密保护,A将加密后的DK发送给KTC;
②KTC解密得到DK,用KTC和B共享的KEKB重新加密DK,KTC直接将加密后的DK传给B;
③或者KTC解密得到DK,用KTC和B共享的KEKB重新加密DK,KTC将加密后的DK返回给A,由A再传送给B使用。
在密钥分发中心结构中,数据密钥DK由KDC产生,如图所示。
密钥分发过程如下:
①当A希望和B建立一个对称密钥时,A向KDC申请一个与B的共享密钥;
②KDC产生一个DK,分别用与A、B共享的KEK加密DK,并分别返回给A和B。
重点
在对称密钥分发过程中,密钥管理协议需要能抵抗旧密钥传输的重放攻击,防范方法有以下几种。
①密钥计数器:用于传输消息的密钥都有一个标记它的序列号,该序列号被附加到使用该密钥的一对用户所传输的每一个消息上。
②密钥调整:将一个与KEK有关的计数序列与KEK进行异或后,再加密所分配的DK。接收者在解密之前也同样地用计数序列调整KEK。
③时间戳:每个传输消息有一个标记它的时间戳,时间戳太旧的消息将被接收者拒绝接收。
02 非对称加密
2.1 基本概念
A(Alice) | 公钥e | m | —(+e)→ | c |
↑ | ↓ | |||
B(Bob) | 公钥e 私钥d | m | ←(-e)— | c |
假如有一个人Alice,她想把一个信号m传递给Bob,首先Bob先生成一个自己的公钥e和私钥d。Bob先把公钥e传递给Alice,这里通过公开的方式传递,我不怕你窃听,即使你窃听了你不知道私钥是什么,你也无法解密。然后Alice使用一些算法,比如加一个e,或减去一个e,等等一些数学上的算法,变成一个新的数字c,她把c传递给Bob,Bob通过除以d或乘以d得到明文m,非对称加密的非对称就是体现在这里,加密和解密使用的算法不一样,但是得到的明文确是一样的。
2.2 典型的公钥加密算法RSA
2.2.1
密钥生成
选取两个随机的大素数p和q
计算:n=p*q、φ(n)=(p-1)(q-1)
选择随机数e,满足1<e<φ(n),且e与φ(n)互素
计算d=e-1modφ(n) 即:e-1除以φ(n)余数为d
公开(n,e)作为公钥,保留(d,p,q)作为私钥
2.2.2
加密过程
对于明文m,计算密文c=memodφ(n)
即:me除以φ(n)余数为c
2.2.3
解密过程
对于密文C,计算明文m=cdmodn
即:cd除以n余数为m
2.2.4
安全性
传播了n、e、c
解密需要用到n、d、c
其中d不知
求d=e-1modφ(n)
其中φ(n)不知
求φ(n)=(p-1)(q-1)
其中p、q不知
求n=p*q
难点
大整数的质因子分解是很困难的。我们要知道,一个RSA算法,他比较常用的是1024位的二进制数,虽然他是二进制的,但是这个数也很大,你想把它进行质因数分解,目前人类还没办法做到。那么有没有什么方式能比较快的计算大数的质因数分解呢?有,那就是量子计算机,普通计算机算十年的大数质因数分解,它可能一个星期就算出来了。
备注
1024比特及以下秘钥长度(n的长度)的RSA算法目前已不推荐使用,为了保证安全,n的长度至少选用2048比特,即RSA2048算法。
2.3 关于RSA的典型例题
RSA算法中的两个数学基础
——欧拉函数和模运算
1 | 欧拉函数:设n是一个正整数,小于n且与n互素的正整数的个数为n的欧拉函数,记为φ(n)。 例如:φ(6)=2,φ(7)=6,φ(8)=4。 若n为素数,则显然有φ(n)=n-1。 定理:若n为两个素数p和q的乘积,则φ(n)=φ(p)*φ(q)=(p-1)*(q-1)。 |
2 | 模运算:模运算即求余运算。“模”是“Mod”的音译,模运算多应用于程序编写中。Mod的含义为求余。 基本理论:给定一个正整数p,任意一个整数n,一定存在等式 n = kp + r ;其中k、r是整数,且 0 ≤ r < p,称呼k为n除以p的商,r为n除以p的余数。例如d=e-1modφ(n),即e-1除以φ(n)余数为d,可以引入一个正整数k,k为e-1除以φ(n)的商,那么可以表达为kφ(n)+d= e-1。 |
2.3.1
例题1
设在RSA的公钥密码体制中,公钥为(e,n)=(13,35),则私钥d=( )。
A.11.0
B.13.0
C.15.0
D.17.0
解题思路:
由题可知e=13,n=35
n=p*q=35 不难分析出p=7,q=5,或p=4,q=7
则φ(n)=(p-1)(q-1)=24
d=e-1modφ(n)
即:13d=mod24(13*d除以24的余数为1)
13d=24k+1(这里引入变量正整数k,便于大家理解)
d | k |
无正整数解 | 1 |
无正整数解 | 2 |
无正整数解 | 3 |
无正整数解 | 4 |
无正整数解 | 5 |
无正整数解 | 6 |
13 | 7 |
故:d=13
2.3.2
例题2
在RSA算法中,取p=3,q=11,e=3,则d等于( )。
A.33.0
B.20.0
C.14.0
D.7.0
解题思路:
由题知n=p*q=33
φ(n)=(p-1)(q-1)=20
随机数e=3,满足1<e<φ(n),且e与φ(n)互素
则d=e-1modφ(n)
即d=1/3mod20
3d=mod20(1除以20余数为3d)
3d=20k+1
d | k |
7.0 | 1 |
无正整数解 | 2 |
无正整数解 | 3 |
27.0 | 4 |
无正整数解 | 5 |
无正整数解 | 6 |
47.0 | 7 |
综上可知d=7.0、27.0、47.0……………
故d=7.0
本文内容仅供参考与学习,更多商用密码应用知识,欢迎关注“中尔安全实验室”,与我们共同探讨。