什么是加密密钥? |密钥和SSL加密

密钥是一组按特定顺序排列的随机字符。加密协议使用密钥来更改数据,以便对数据进行加密,这样没有密钥的任何人都无法解码信息。

Share facebook icon linkedin icon twitter icon email icon

密码密钥

学习目标

阅读本文后,您将能够:

  • 了解密码学中的"密钥"是什么
  • 了解密钥如何在加密过程中打乱数据
  • 阐释交换公钥如何使HTTPS成为可能
Cryptographic Key

什么是加密密钥?

在密码学中,密钥是加密算法中用于更改数据而使用的字符串,以便使其看起来是随机的。就像实体钥匙一样,它锁定(加密)数据,以便只有拥有相匹配的钥匙的人才能解锁(解密)数据。

Cryptographic Key Hello

原始数据称为明文 ,密钥加密后的数据称为密文

公式:

明文
+ 密钥
=密文

早期加密形式的密钥

在计算机出现之前,密文通常是通过简单地用明文中的一个字母替换另一个字母来创建的,这种方法称为"替换密码“。例如,假设某人向另一人发送了一条消息 "Hello",之后每个字母都被替换为该字母后面的一个字母:"Hello"就变成了"Ifmmp”。

H E L L O
+1 +1 +1 +1 +1
I F M M P

" Ifmmp "看起来像一个毫无意义的字母字符串,但是如果有人知道密钥,他们可以替换正确的字母并将消息解密为"Hello“。在此示例中,密钥为( 字母)-1,按照字母表将每个字母向前移动一个位置以得到真实的字母。

I F M M P
-1 -1 -1 -1 -1
H E L L O

通过简单的统计分析,相对容易破解这种密码,因为在给定的文本中某些字母会比其他字母更频繁地出现(例如,E是英语中最常见的字母)。为了解决这个问题,密码学家开发了一种称为一次性密码本的系统。

一次性密码本是一次性使用的密钥,其所包含的数值的个数至少与明文中字母的数量一样多。换句话说,每个字母都将被替换成一个新字母,而新字母由原本的明文字母按照所对应的密钥数值逐个依字母表顺序向后推算得出。

例如,假设某人对信息”Hello”进行加密,并使用了一次性密码本,其包含的数值为7, 17, 24, 9, 11。

H E L L O
7 17 24 9 11

在之前,我们只是将每个字母向后推移一个位置(字母+ 1),而现在我们将每个字母向后推不同的步数来得到新的字母。我们将第一个字母H往后推7个;第二个字母后推17个;以此类推。如果以此后推超出了字母Z,我们只需循环回到字母表的开头并继续后推。

H E L L O
7 17 24 9 11
O V 来粘贴复制的文本 J U Z

从明文的”Hello“开始,我们现在通过密钥"7, 17, 24, 9, 11"可以得出密文 ”Ovjuz“。

为了让通过一次性密码本进行加密的通信正常工作,对话双方必须为每个单独的消息使用相同的密钥( 对称加密 ),但每一个新消息都会使用不同的密钥。虽然"Ovjuz"在任何第三方看起来都像是随机的胡言乱语,但是接收到”Ovjuz"的人会知道使用密钥"7, 17, 24, 9, 11"来对其进行解密(解密则需反向向前推移字母而不是向后):

O V 来粘贴复制的文本 J U Z
7 17 24 9 11
H E L L O

因此,简单的信息可以通过随机数据字符串(密钥)进行更改,以便进行加密或解密。

现代加密密钥

尽管以上早期密码学的示例说明了如何使用随机信息串将明文转换为密文,当今的加密密钥却要复杂得多。

例如,cloudflare.com的公钥是:

04 CE D7 61 49 49 FD 4B 35 8B 1B 86 BC A3 C5 BC D8 20 6E 31 17 2D 92 8A B7 34 F4 DB 11 70 4E 49 16 61 FC AE FA 7F BA 6F 0C 05 53 74 C6 79 7F 81 12 8A F7 E2 5E 6C F5 FA 10 69 6B 67 D9 D5 96 51 B0 (复制来源为cloudflare.com 的SSL证书)

这比我们上面用来加密"Hello的"7 17 24 9 11"密钥要复杂得多。

现代加密不是简单的后推或前移,而是使用称为算法的复杂数学公式。而且,现代密钥通常会进一步随机分配,而不是简单的随机数字串。

这种情况有几个原因:

  1. 与人类密码学家相比,计算机能够在更短的时间内完成更复杂的计算,从而使更加复杂的加密技术不仅成为可能,更是不可或缺。
  2. 计算机可以更改二进制级别的信息,即由1和0组成的数据,而不仅仅是单个字母和数字的层面。
  3. 如果被加密的数据不够随机,计算机程序将能够对其解密。真正的随机性对于真正安全的加密极为重要。尽管不可能编写出可以100%产生真正随机数据的程序,但是计算机要比人类自身的能力强很多。

与加密算法结合使用,加密密钥将打乱文本,并超出人类的识别范围。

例如,我们使用 cloudflare.com 的公钥对消息"Hello"进行加密。使用具有该密钥的加密算法,我们得到密文" KZ0KVey8l1c ="。(供技术达人参考:Blowfish算法、CBC模式、base64编码。)

SSL加密(HTTPS)中如何使用密钥?

加密有两种:对称加密和非对称加密,后者也称为公钥加密。在对称加密中,对话的双方都使用相同的密钥将明文转换为密文,反之亦然。

在非对称或公共密钥加密中,对话的双方各自使用不同的密钥。一个密钥称为公钥,一个密钥称为私钥,之所以如此命名,是因为其中一方将其保密,并且永远不会与任何人共享。当使用公钥加密明文时,只有私钥可以解密它,而公钥不能。反过来也成立:用私钥加密的明文,只有公钥才能将其解密。

SSL (或今天称为 TLS )是一种用于确保互联网通信安全的加密协议,通过HTTPS而非 HTTP 提供服务的网站使用这种加密方式。在TLS / SSL中,网站或Web应用程序将同时具有公钥和私钥。公钥在网站的 SSL证书公开共享,任何人都可以查看。私钥则安装在源站并且绝对保密。

TLS / SSL通信会话以 TLS握手开头,在此期间,网站和客户端使用公钥和私钥来生成新密钥,称为会话密钥。然后,双方都可以使用这些会话密钥来回加密它们的消息。

因此,TLS从非对称加密(使用两个密钥)开始,然后过渡到对称加密(使用一个密钥)。双方在通信会话期间使用相同的密钥,但是当他们开始新的会话时,它们将一起生成新的密钥。