商密学习札记 | 对称加密与非对称加密
2022-11-11 17:33:11 Author: 中尔安全实验室(查看原文) 阅读量:10 收藏

 引   言 

在商用密码应用安全性评估过程中,需要密评工程师具备大量和扎实的密码应用基础知识,本系列为密评工程师学习扎记,供大家共同探讨交流。

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

本文内容仅供参考与学习,更多商用密码应用知识,欢迎关注“中尔安全实验室”,与我们共同探讨。


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NDYzNDM2NQ==&mid=2247484308&idx=1&sn=36c29201f5be056b5941ef17f6b4cfdd&chksm=ce671706f9109e102fbdb86cc2a9fcded63f3ab735fc3b2c7fc3a5052bb6a3c17426e3304463#rd
如有侵权请联系:admin#unsafe.sh