📜  公钥加密

📅  最后修改于: 2021-01-12 04:46:03             🧑  作者: Mango


公钥密码术

与对称密钥密码学不同,我们没有发现公共密钥密码学的历史用途。这是一个相对较新的概念。

对称加密非常适合参与分类通信的政府,军事和大型金融公司等组织。

在过去的几十年中,随着越来越多的不安全计算机网络的普及,真正需要大规模使用加密技术。由于对称密钥管理面临挑战,因此发现对称密钥不实用。这产生了公共密钥密码系统。

下图描述了加密和解密的过程-

公钥密码术

公钥加密方案的最重要属性是-

  • 不同的密钥用于加密和解密。这是使该方案与对称加密方案不同的属性。

  • 每个接收者拥有唯一的解密密钥,通常称为他的私钥。

  • 接收者需要发布一个加密密钥,称为他的公共密钥。

  • 在此方案中,需要某种公钥真实性的保证,以避免对手作为接收者的欺骗。通常,这种类型的密码系统涉及可信的第三方,该第三方证明特定的公共密钥仅属于特定的个人或实体。

  • 加密算法非常复杂,足以阻止攻击者从密文和加密(公共)密钥中推断出明文。

  • 尽管私钥和公钥在数学上相关,但是从公钥计算私钥并不可行。实际上,任何公钥密码系统的智能部分都在于设计两个密钥之间的关系。

共有三种类型的公钥加密方案。我们将在以下各节中讨论它们-

RSA密码系统

这个密码系统是一个初始系统。即使在今天,它仍然是使用最多的密码系统。该系统由三位学者Ron Rivest,Adi ShamirLen Adleman发明,因此被称为RSA密码系统。

我们将看到RSA密码系统的两个方面,首先是密钥对的生成,其次是加密-解密算法。

RSA密钥对的生成

希望使用加密参与通信的每个人或一方都需要生成一对密钥,即公钥和私钥。生成密钥所遵循的过程如下所述-

  • 生成RSA模数(n)

    • 选择两个大质数p和q。

    • 计算n = p * q。对于不可破解的强加密,令n为大数,通常至少为512位。

  • 查找派生数(e)

    • 数字e必须大于1且小于(p − 1)(q − 1)。

    • e和(p − 1)(q − 1)除1外,没有任何公因子。换句话说,两个数字e和(p – 1)(q – 1)是互质的。

  • 形成公钥

    • 这对数字(n,e)构成RSA公钥并公开。

    • 有趣的是,尽管n是公钥的一部分,但分解大质数的难度确保了攻击者无法在有限的时间内找到用于获取n的两个质数(p&q)。这就是RSA的优势。

  • 生成私钥

    • 私钥d由p,q和e计算得出。对于给定的n和e,存在唯一数d。

    • 数d是e模(p-1)(q-1)的倒数。这意味着d是小于(p-1)(q-1)的数,因此当乘以e时,它等于1模(p-1)(q-1)。

    • 这种关系的数学写法如下-

ed = 1 mod (p − 1)(q − 1)

扩展欧几里得算法以p,q和e为输入,并以d为输出。

下面给出了生成RSA密钥对的示例。 (为便于理解,此处取的质数p&q很小。实际上,这些值很高。)

  • 令两个素数分别为p = 7和q =13。因此,模数n = pq = 7 x 13 = 91。

  • 选择e = 5,这是一个有效的选择,因为除1之外,没有其他因数为5且(p − 1)(q − 1)= 6×12 = 72的数字。

  • 这对数字(n,e)=(91,5)构成了公共密钥,并且可以提供给我们希望能够向我们发送加密消息的任何人。

  • 将p = 7,q = 13和e = 5输入到扩展欧几里得算法。输出将是d = 29。

  • 通过计算-检查计算出的d是否正确-

de = 29 × 5 = 145 = 1 mod 72
  • 因此,公钥为(91,5),私钥为(91,29)。

加密与解密

一旦生成了密钥对,加密和解密的过程就相对简单明了,并且计算上也很容易。

有趣的是,RSA不像对称密钥加密那样直接对位字符串进行操作。它对模n进行运算。因此,有必要将纯文本表示为一系列小于n的数字。

RSA加密

  • 假设发件人希望向公共密钥为(n,e)的某人发送一些文本消息。

  • 然后,发送者将纯文本表示为一系列小于n的数字。

  • 加密第一个明文P,它是一个以n为模的数字。加密过程是简单的数学步骤,例如-

C = Pe mod n
  • 换句话说,密文C等于明文P乘以自身e倍,然后以n为模降低。这意味着C也是小于n的数字。

  • 返回我们的明文P = 10的密钥生成示例,我们得到密文C-

C = 105 mod 91

RSA解密

  • RSA的解密过程也非常简单。假设公用密钥对(n,e)的接收者已收到密文C.

  • 接收方将C提升到其私钥d的能力。结果模n将为纯文本P。

Plaintext = Cd mod n
  • 再次回到我们的数值示例,密文C = 82将使用私钥29解密为数字10-

Plaintext = 8229 mod 91 = 10

RSA分析

RSA的安全性取决于两个独立功能的优势。 RSA密码系统是最流行的公钥密码系统,其强度是基于分解非常大的数字的实际难度。

  • 加密功能-它被认为是将纯文本转换为密文的单向函数,并且只有在知道私钥d的情况下才能逆转。

  • 密钥生成-从RSA公共密钥确定私钥的难度等同于模数n。因此,除非攻击者可以分解为n,否则攻击者无法使用RSA公钥的知识来确定RSA私钥。它也是一种单向函数,从p&q值到模数n很容易,但不可能反向。

如果这两个功能中的任何一个被证明不是单向的,则RSA将被破坏。实际上,如果开发出一种有效分解因子的技术,那么RSA将不再安全。

如果数字p和q不是大质数和/或选择的公共密钥e是小数,则RSA加密的强度将大大降低其抵御攻击的能力。

ElGamal密码系统

与RSA一起,还提出了其他公共密钥密码系统。他们中的许多人基于离散对数问题的不同版本。

ElGamal密码系统(称为椭圆曲线变体)基于离散对数问题。它是基于这样的假设得出的强度的:在给定数量的实际时间范围内找不到离散对数,而可以有效地计算出功率的逆运算。

让我们看一下ElGamal的简单版本,该版本可以对p取模。对于椭圆曲线变体,它基于完全不同的数字系统。

ElGamal密钥对的生成

ElGamal密码系统的每个用户通过以下方式生成密钥对-

  • 选择一个大的素数p。通常,选择素数为1024至2048位的长度。

  • 选择一个发电机元件g。

    • 该数字必须介于1到p − 1之间,但不能为任何数字。

    • 它是模p的整数乘法组的生成器。这意味着对于p的每个整数m互素,都有一个整数k使得g k = a mod n。

      例如,3是组5的生成器(Z 5 = {1,2,3,4})。

N 3n 3n mod 5
1 3 3
2 9 4
3 27 2
4 81 1
  • 选择私钥。私钥x是大于1且小于p-1的任何数字。

  • 计算公钥的一部分。值y由参数p,g和私钥x计算得出,如下所示-

y = gx mod p
  • 获取公钥。 ElGamal公钥包含三个参数(p,g,y)。

    例如,假设p = 17且g = 6(可以确认6是组Z 17的生成器)。私钥x可以是大于1且小于71的任何数字,因此我们选择x =5。然后按如下方式计算值y-

y = 65 mod 17 = 7
  • 因此,私钥为62,公钥为(17、6、7)。

加密与解密

ElGamal密钥对的生成比RSA的等效过程相对简单。但是加密和解密比RSA稍微复杂一些。

ElGamal加密

假设发送方希望将明文发送给ElGamal公钥为(p,g,y)的某人,然后-

  • 发件人将纯文本表示为一系列以p为模的数字。

  • 加密第一个明文P,它表示为模数p。获取密文C的加密过程如下-

    • 随机产生一个数k;
    • 计算两个值C1和C2,其中-
C1 = gk mod p
C2 = (P*yk) mod p
  • 发送密文C,密文C由两个单独的值(C1,C2)组成,一起发送。

  • 参照上面给出的ElGamal密钥生成示例,明文P = 13加密如下-

    • 随机生成一个数字,例如k = 10
    • 计算两个值C1和C2,其中-
C1 = 610 mod 17
C2 = (13*710) mod 17 = 9
  • 发送密文C =(C1,C2)=(15,9)。

ElGamal解密

  • 要使用私钥x解密密文(C1,C2),采取以下两个步骤-

    • 计算(C1) x模p的模逆,即(C1) -x ,通常称为解密因子。

    • 使用以下公式获取纯文本-

C2 × (C1)-x  mod p = Plaintext
  • 在我们的示例中,要使用私钥x = 5解密密文C =(C1,C2)=(15,9),解密因子为

15-5  mod 17 = 9
  • 提取明文P =(9×9)mod 17 = 13

ElGamal分析

在ElGamal系统中,每个用户都有一个私钥x。并具有三个组成部分:公钥-质数模p,生成器g和公有Y = g x mod p 。 ElGamal的强度基于离散对数问题的难度。

安全密钥大小通常> 1024位。今天,甚至使用2048位长的密钥。在处理速度方面,Elgamal相当慢,它主要用于密钥身份验证协议。由于更高的处理效率,ElGamal的椭圆曲线变体变得越来越流行。

椭圆曲线密码学(ECC)

椭圆曲线密码术(ECC)是一个术语,用于描述一组密码工具和协议,其安全性基于离散对数问题的特殊版本。它不使用模数p。

ECC基于与称为椭圆曲线的数学对象相关联的数字集。有一些规则可以增加和计算这些数字的倍数,就像有一些数字以p为模。

ECC包括许多最初为模块化数字设计的加密方案的变体,例如ElGamal加密和数字签名算法。

可以认为,离散对数问题在应用于椭圆曲线上的点时要困难得多。这提示从模数p切换到椭圆曲线上的点。如果我们使用基于椭圆曲线的变体,则使用较短的密钥也可以获得等效的安全级别。

较短的键有两个好处-

  • 密钥管理轻松
  • 高效计算

这些优点使得基于椭圆曲线的加密方案变体对于计算资源受限的应用非常有吸引力。

RSA和ElGamal方案–比较

让我们简要比较一下各个方面的RSA和ElGamal方案。

RSA ElGamal
It is more efficient for encryption. It is more efficient for decryption.
It is less efficient for decryption. It is more efficient for decryption.
For a particular security level, lengthy keys are required in RSA. For the same level of security, very short keys are required.
It is widely accepted and used. It is new and not very popular in market.