密码学系列之一:公钥密码体制

1. 概述

1.1 公钥密码体制的提出

随着计算机与网络技术的飞速发展,保密通信的需求越来越广泛,对称密码体制逐渐表现出以下局限性:

  • 密钥分发问题:通信双方要进行加密通信,需要通过秘密的安全信道协商加密密钥,而这种安全信道可能很难实现。
  • 密钥管理问题:在$n$个用户的网络中,每个用户要想和其它$n-1$个用户进行通信,须使用$n-1$个密钥,系统的总密钥量将达到$ \frac{n(n-1)}{2} $。密钥的产生、保存、传递、使用和销毁等各个环节中都会变得很复杂,存在着安全隐患。
  • 无法实现身份认证和消息的不可否认性

1976年,Whitefield Diffie和MartinHellman《密码学的新方向》(New Directions in Cryptography)中开创性的提出了公钥密码体制,又称非对称密码体制。

该体制中,用户A有一对密钥:加密密钥(公钥)$P_k$和解密密钥(私钥)$ S_k$,两者是不同的,且从加密密钥(公钥)无法推出解密密钥(私钥)。若B要给A发送加密信息,需要在公开目录中查找A的加密密钥(公钥)$P_k$,用它加密消息;A收到密文后,用自己的解密密钥(私钥)$ S_k$解密密文。

在公钥密码体制之前,所有的密码算法都是基于代换和换位两个基本方法,建立在位(字符)方式的操作上。

公钥密码体制为密码学提供了新的理论和技术基础,开创了密码学的新纪元。

  • 一方面公钥密码算法是建立在数学函数基础上的,而不是建立在位(字符)方式的操作上的
  • 另一方面公钥密码算法是以非对称的形式使用两个密钥,对密钥分配、认证等方面有着深刻的意义。

1.2 公钥密码体制的原理

公钥密码体制的设计最终归结为一个陷门单向函数。陷门单向函数是满足以下条件的函数$f$:

  • 正向计算容易。即如果知道密钥 $P_k$ 和消息 $M$,容易计算 $C = f_{P_k} (M)$。
  • 不知道密钥 $S_k$ 的情况下,反向计算不可行。即如果只知道加密后的消息 $C$ 而不知道密钥 $S_k$,则计算 $M = f^{-1} (C)$ 不可行。
  • 知道密钥 $S_k$ 的情况下,反向计算容易。即如果知道加密消息 $C$ 和密钥 $S_k$,则计算 $M = f_{S_k}^{-1} (C)$ 是容易的。密钥 $S_k$ 相当于陷门。

公钥密码体制设计主要考虑以下几个问题:

  • 公钥密码体制的安全性依赖的数学难题是什么
  • 私有密钥和公开密钥是如何生成的,它们之间有着怎样的关系
  • 安全的密钥长度是多少
  • 如何实现公钥加密及私钥解密,反之亦然(数字签名)
  • 公钥密码体制的安全分析

1.3 常见公钥密码体制

目前应用最广的公钥密码体制主要有3个:

  • 基于大整数因子分解问题的RSA公钥密码体制
  • 基于有限域乘法群上的离散对数问题的ElGamal公钥密码体制
  • 基于椭圆曲线上离散对数问题的椭圆曲线公钥密码体制

此外,还有基于概率的平方剩余问题的公钥密码、基于格的短向量问题的公钥密码、基于余代数编码中的线性解码问题的公钥密码体制等。

2. RSA公钥密码

1978年,美国麻省理工学院的Rivest、Shamir、Adleman联合提出了RSA公钥密码体制,是第一个安全、实用的公钥码算法,已经成为公钥密码的国际标准,得到了广泛应用。

RSA的基础是数论的欧拉定理,其安全性依赖于大整数因子分解的困难性。RSA公钥密码体制可用于加密,也可用于数字签名,且具有安全、易实现等特点。

2.1 RSA密码体制

(1)公私密钥对生成

选取两个大素数$p$、$q$(不可泄露),计算$n=pq$及$n$的欧拉函数$\varphi(n)=(p-1)(q-1)$。

随机选取整数$e(1<e<\varphi(n))$作为公钥,满足$gcd(e,\varphi(n))=1$,即$e$与$\varphi(n)$互素。

使用$Euclid$扩展算法计算私钥$d\equiv e^{-1}$ mod $\varphi(n)$,即$e$的逆元。

(2)加解密算法

  • 公钥:$(e,n)$
  • 私钥:$d$
  • 加密:$c\equiv m^e$ mod $n$
  • 解密:$m\equiv c^d$ mod $n$

(3)参数选择

素数 $p$ 和 $q$ 的选取应满足以下要求

  • 为避免椭圆曲线因子分解法,$p$ 和 $q$ 的长度相差不能太大。如使用1024bit的数 $n$ ,则 $p$ 和 $q$ 的模长都大致在512bit
  • $p$ 和 $q$ 差值不应该太小。如果 $p-q$ 太小,则 $p\approx q$ ,因此 $p\approx\sqrt n$ ,故 $n$ 可以简单地用所有接近 $\sqrt n$ 的奇整数试除而被有效分解
  • $gcd(p-1,q-1)$ 应该尽可能小,从而减少不动点个数。
  • $ p$ 和$ q$  应为强素教,即 $p-1$ 和 $q-1$ 都应有大的素因子。

另外,为了防止低指数攻击,$ e$ 和$ d$ 不能选取太小的数。

2.2 RSA公钥密码安全性

RSA密码体制的安全性主要依赖于整数因子分解问题,分解模数$n$的素因子是攻击RSA最直接的方法。如果能够对模数$n$进行分解,便可算出$\varphi(n)=(p-1)(q-1)$,公钥$d$关于私钥$e$满足:$d\times e=1mod(\varphi(n))$,便不难求出私钥$e$,从而破解RSA公钥密码体制。

较早的因子分解分析法是试除法,基本思想是一个密码分析者完全尝试小于$n$的所有素数,直到因子找到。根据素数理论,尝试的次数上限为$\frac{2\sqrt{n}}{\log\sqrt{n}}$。但是对于大数$n$,这种方法的资源消耗在现实中是不可能实现的。

后来出现了一些比较重要的因子分解分析法,包括Pollard在1974年提出的$p-1$因子分解法、Williams提出的$p+1$因子分解法、二次筛(Quadratic Sieve)因子分解法、椭圆曲线因子分解法、数域筛(Number Field Sieve)因子分解法等。

3. ElGamal公钥密码

ElGamal公钥密码体制由T.ElGamal于1985年提出,该体制基于有限域上离散对数问题,既可用于加密,又可以用于数字签名。由于其较好的安全性,且同一明文在不同的时刻会生成不同的密文,在实际中得到了广泛的应用,尤其在数字签名方面的应用,著名的美国数字签名标准(DSS,Digital Signature Standard)其实就是ElGamal签名方案的一种变形。

(1)公私密钥对生成

随机选择一个大素数$p$,且要求$p-1$有大素数因子,$Z_p$是一个本原元($Z_p$ 是一个有$p$个元素的有限域,$Z_p^*$是$Z_p$中的非零元构成的乘法群)

选一个随机数$ x(1<x<p-1) $作为私钥,计算$y\equiv g^x  $    $  mod  $   $ p$, 公钥为 $ ( y, g, p)$

(2)加解密算法

  • 公钥:($y,g,p)$
  • 私钥:$x$
  • 加密:$C=(c,c^{\prime})$,其中$c\equiv g^r $    $mod$   $  p $,  $c^{^{\prime}}\equiv my^r $  $mod$  $  p$
  • 解密:$m\equiv( \frac{c^{\prime}}{c^{x}}  )  mod   p$

ElGamal公钥密钥体制每次加密运算需要选择一个随机数,密文既依赖于明文,又依赖于选择的随机数,因此对于同一个明文,不同的时刻生成的密文不同。

此外,ElGamal加密使得消息扩展了两倍,即密文的长度是对应明文长度的两倍。


参考链接:密码学系列之六:公钥密码体制-CSDN博客

感谢你的阅读


欢迎评论交流


忽如一夜春风来,千树万树梨花开。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇