第九章 公钥密码学与RSA(未完)

1 传统密码与公钥密码

公钥算法基于数学函数而不是基于替换和置换,公钥密码是非对称的。

现有公钥密码方法所需要的计算量大,因此取缔传统密码似乎不太可能。

传统密码中与密钥分配中心的回话是一件异常麻烦的事情,使用公钥密码实现密钥分配则非常简单。是市场,使用公钥密码也是需要某种形式的协议,该协议通常包含一个中心代理,并且他所包含的处理过程既不比传统密码中的那些过程更简单,也不必它更有效。

2 公钥密码体质的基本原理

公钥密码学的概念是为了解决传统密码中最困难的两个问题:

  1. 密钥分配
  2. 数字签名

公钥密码依赖于加密秘钥与加密秘钥相关但是不同的解密密钥:

  1. 仅根据密码算法和加密秘钥确定解密密钥在计算上是不可行的。(不能根据加密秘钥计算解密密钥)

另外有些算法,如RSA,还有如下特点:

  1. 密钥中的任何一个都可用来加密,另一个用来揭秘

公钥密码体制有6个组成部分:

  1. 明文:算法的输入
  2. 加密算法:加密算法对明文进行各种转换
  3. 公钥和私钥:算法的输入,对密钥中一个用于加密,一个用于解密
  4. 密文:算法的输出
  5. 解密算法:该算法接受密文和相应的密钥,并产生原始明文

其主要步骤是:

  1. 每一用户产生一堆密钥,用来加密和解密信息

  2. 每一用户将其中一个密钥存于公开的寄存器(翻译成存储器比较好吧?意思就是大家都可以访问的)或是其他可访问的文件中,该密钥称为公钥

  3. 若Bob要发消息个Alice,则Bob用Alice的公钥对消息加密

  4. Alice收到消息后,勇气私钥对消息解密。

由于只有Alice知道其自身的私钥,所以其他的接受者均不能解密出消息

当接受者Alice使用自己的私钥加密信息,发送个发送者Bob,然后Bob使用公钥解密信息。因此只有Alice能够加密消息(因为只有Alice有私钥)。整个加密后的消息就是数字签名。该消息可用于认证数据源和数据完整性(主要是用于让对端知道,私钥确实是保存在我这里的)。当然为了验证数据源和数据的完整性,因此需要再发送信息的时候同时发送明文和密文,Bob接收到以后用来解密和明文对比。该过程只能保证信息不被修改,但是不能防止被窃听(因为信息中有明文)。解决方法是:利用自己的私钥加密数据,然后利用对端的公钥再次加密,同时发送这两个密文。

公钥密码体制的应用可分为三类:

  1. 加密/解密:发送方用接收方的公钥对消息加密。
  2. 数字签名:发送方使用其私钥对信息签名(也是加密)。签名可以通过整条消息加密或是对消息的一个小数据块加密产生,其中该小数据块是整条消息的函数
  3. 密钥交换:通信双方交换会话密钥。用于交换传统密钥。

公钥密码有:

  1. RSA:都可以
  2. 椭圆曲线:都可以
  3. Diffie-Hellman:只能用于密钥交换
  4. DSS:只能用于数字签名

公钥密码应该满足的要求:

  1. B产生一堆密钥:公钥和私钥。这个在计算上是容易的
  2. 已知公钥和要加密的消息M,发送方Alice产生显影的密文在计算上是容易的
  3. 接收方Bob使用气死要对接受的密文解密已恢复明文在计算上是容易的
  4. 一直公钥是,攻击者要确定私钥在计算上是不可行的
  5. 一直公钥和密文C,攻击者要恢复明文M在计算上是不可行的。
  6. 加密和解密函数的顺序是可以交换的。也就是说:\(M=D[PU_b,E(PR_B,M)]=D[PR_b,E(PU_b,M)]\)(这个可以不满足)

公钥密码分析

和对称密码一样,公钥密码也容易受穷举攻击,其解决方法也是使用长密钥。供药体质使用的是某种可以的数学函数,计算函数值的复杂性可能不是密钥长度的线性函数,而是比线性函数增长更快的函数,因此,为了抗穷举攻击,密钥必须足够长,同时为了便于实现加密和吉米,密钥又必须足够的短。在实际中,现已提出的密钥长度确实可以抗穷举攻击,但是它也使加密解密速度边忙,所以公钥密码目前仅限于密钥交换和签名中。

还有一种供给形式是公钥体制中特有的,这种攻击本质上是穷举消息攻击:假定要发送消息是56位的DES密钥,那么攻击者可以公钥对所有可能的密钥加密,并与传送的密钥匹配,从而可以解密任何消息。因此,无论是公钥体制的密钥有多长,这种攻击都可以转化为对56位密钥的穷举攻击。对抗这种攻击的方法是,在要发送的消息后附加一个随机数。

3 RSA加密算法

3.1 算法

RSA算法的过程为:

  1. 两个素数\(p\),\(q\),
  2. 计算\(n=p \times q\),因为\(p\),\(q\)是素数,所以根据欧拉函数,小于\(n\)的互质的数一共有:\(\phi(n)=(p-1)(q-1)\)
  3. 挑选私钥:挑选一个\(e\),需要满足\(gcd(\phi(n),e)=1;1<e<\phi(n)\)
  4. 计算公钥:然后根据\(d \equiv e^{-1} (mod \ \phi(n))\)

私钥为:\(\{d,n\}\),公钥为:\(\{e,n\}\).而需要加密的数据需要小于\(n\)(因为,要\(mod\ n\))

加密过程:明文分组\(M\),密文分组\(C\)

  1. 加密:\(C=M^e\ mod \ n\)
    . 解密:\(M=C^d\ mod\ n=(M^e)^d\ mod \ n = M^{e\times d}\ mod \ n\)

证明:

首先证明:
。。后面看

3.2 算法优化

求幂运算:一次一个的乘法,优化为对半乘,例如\(3^13\),可以,优化为:\((3^6)^2 \times 2\),然后\(2^6\)可以递归的使用这种方法求解。
公钥\(e\)的选取:如果\(e\)选取的小,那么容易受到简单的攻击。
私钥的运算:

3.3 RSA安全性

RSA算法的攻击有如下5中方式:

  1. 穷举攻击
  2. 数学攻击,是指上是试图分解两个素数的乘积
  3. 计时攻击,依赖于解密算法的运行时间
  4. 基于硬件故障的攻击:这种方法应用产生签名过程中处理器发生的故障
  5. 选择密文攻击:运用了RSA算法的性质

数学攻击主要有以下三种:

  1. 分解\(n\)为两个素数因子,这样就可以计算出\(\phi(n)\),从而可以根据\(d\)计算\(e\)
  2. 直接猜测\(\phi(n)\)的值
  3. 直接确定\(d\)

猜你喜欢

转载自www.cnblogs.com/perfy576/p/9005471.html
今日推荐