一、了解什么是加密
密码学(Cryptography)是信息安全专业人员可用的最重要的控制手段之一。加密技术可以保护敏感信息在许多不同的环境中免遭未经授权的泄露,许多其他安全功能都依赖于密码学的正常工作。
密码学是使用数学算法将信息转化为一种未经授权的个人无法阅读的形式,但有授权的个人有能力将其转化为可读的形式。 密码学取决于两个基本操作:
- 加密(encryption):将信息从明文形式转换为不可读的加密版本,称为密文(ciphertext);
- 解密(decryption):使用一种算法将加密的信息转换为明文(plaintext)形式,进行反向转换。
加密算法(Encryption algorithms)有两个输入,即明文信息和一个加密密钥(plaintext message and an encryption key)。然后,它们经过一系列步骤,利用加密密钥转换明文信息。这里先暂时跳过细节,后续会进一步讨论。加密算法然后有一个单一的输出。这就是加密后的密文。解密算法(Decryption algorithms )则进行相反的操作。它们也有两个输入。被加密的信息,也就是所谓的密码文本和一个解密密钥(ciphertext and a decryption key)。然后,该算法通过一系列的步骤,使用解密密钥将密码文本转换回明文,然后将明文信息作为输出返回。
二、对称和非对称加密算法(Symmetric and asymmetric crytography)
目前,有许多不同种类的加密算法。我们也可以用不同的方式对它们进行分类。加密算法的两个主要类别是对称算法和非对称算法:
-
在对称加密算法中,也被称为共享秘密加密算法,加密和解密操作使用同一个密钥。如果一个用户用秘钥apple加密了一条信息,第二个用户就必须用同样的密钥解密该信息。这是一个共享的秘密(Shared Secrets)。我们可以把共享秘钥看作是信息的密码。比方说,Alice和Bob希望彼此交流。如果他们都知道相同的共享秘密,他们就可以用这个秘密互相交换加密的信息。当我们只有两个人参与时,这就非常有效。他们可以简单地商定一个加密密钥,然后彼此使用它。
如果我们有三个人参与,现在我们需要改变一些事情。Alice和Bob仍然可以使用他们的共享秘密与对方私下交流,但现在Charlie也加入了,小组中的每个人都希望有能力与小组中的任何其他成员进行私下交流。Alice已经有了与Bob交流的方法,但我们需要添加第二个密钥,使她能够与Charlie私下交流。同样的,Bob和Charlie需要第三把钥匙来相互通信。因此,为了让这三个人进行交流,我们需要三把钥匙。
随着群体越来越大,我们需要越来越多的钥匙来促进他们的交流。有一个公式可以计算出对称密码学所需的钥匙数量。其中N是想要通信的人数,我们将N乘以N减去1,然后将结果除以2。当我们做数学题并发展到更大的群体时,对称密码学开始需要一个难以管理的密钥数量。如果我们有一个拥有1万名员工的组织,我们就需要近5000万个加密密钥。如果一个新人加入组织,我们需要为这个人生成10000个新的密钥,以便他能够与其他员工沟通。然后,我们需要将这一万个密钥分发给组织中的其他每一个员工。 -
非对称加密算法使用不同的密钥进行加密和解密。这些算法也被称为公钥密码学(Public-key cryptography),它们使用密钥对(Key pairs)的概念,每个用户都有两把钥匙,一把是他们可以*分配给任何他们想沟通的人的公钥(Public Key),另一把是他们要保密的私钥(Private Key)。在非对称密码学中,任何用一对中的一把钥匙加密的东西都可以用同一对中的另一把钥匙解密。对于正常的通信,信息的发送者会用收件人的公钥对其进行加密,而这是公开的。然后,收件人将使用他们的私钥来解密该信息:
非对称密码学比对称密码学要慢,但它解决了我们为大型组织创建密钥的问题。我们只需要为每个用户提供两个密钥。所需密钥的数量如下所示,这使得大型组织的密钥数量更容易管理。
三、使用密码学的原因
安全专家出于几个不同的原因使用密码学。我们可以用密码学的五个目标来描述这些原因:
- 首先,密码学最常见的目标是保护机密性(Confidentiality)。保密性确保未经授权的个人无法获得敏感信息。如果Alice和Bob使用加密技术相互通信,他们希望确保他们的通信保持私密性,即使有第三方Mal,拦截他们的通信,她也无法阅读这些信息的内容。当我们使用密码学来保护信息的机密性时,考虑数据的三种不同状态,在这些状态下,数据可能会暴露在窥探者面前。
对于存储在硬盘或其他存储设备上的数据。我们可以使用加密技术来保护存储的数据,这样,即使设备丢失或被盗,它仍然受到保护。传输中的数据,是在两个系统之间通过网络发送的数据。我们使用加密技术来保护传输中的数据,这样,即使有人窃听网络通信,它也能得到保护。最后,使用中的数据,是在内存中被应用程序积极使用的数据。我们可以使用加密技术来保护这些数据不被其他处理器或个人访问。 - 密码学的第二个目标是完整性。完整性(Integrity),保护信息免受未经授权的修改。如果Alice和Bob,正在互相通信,他们想确保Mal也不能篡改信息。鲍勃想知道他收到的声称是来自爱丽丝的信息实际上是爱丽丝发送的信息。
- 密码学的第三个目标是,验证(Authentication)。许多验证用户身份的系统都依赖于加密技术的使用。当我们讨论身份和访问管理时,我们将更多地讨论使用加密来提供认证。
- 加密学的第四个目标是,混淆(Obfuscation)。有时我们想让任何人,包括我们自己,都无法理解数据。例如,我们可能想用一个由SSN创建的独特的值来代替身份证号,而这个值的敏感性要低得多。
- 密码学的最后一个目标是不可抵赖性(Non-repudiation)。不可抵赖意味着信息的接收者可以向独立的第三方证明,信息确实来自所谓的中心。例如,如果Alice使用支持不可抵赖性的加密算法向Bob发送了一条信息,那么Bob就可以向Charlie展示这条信息,并证明这条信息确实来自Alice,而Bob并不是简单地自己创造的。我们用来实现不可抵赖性的技术被称为数字签名(Digital signatures),后续会进一步讨论。不可抵赖性只有在非对称加密算法中才能实现,因为在对称加密法中,发送方和接收方都知道并使用相同的密钥,Bob很容易伪造来自Alice的信息,因为Bob知道与Alice相同的秘密密钥。如果Bob收到了用该密钥加密的信息,他知道它来自Alice,因为她是唯一拥有该密钥的人。然而,Bob不能向Charlie证明这个信息来自于Alice,因为Bob也可以很容易地自己创造这个信息。
当我们使用密码学时,还必须记住,密码学操作在数学上很复杂,需要计算时间来处理。这使我们不得不在资源限制和我们实现的安全水平之间做一个权衡。一般来说,我们的加密算法越强大,我们就需要更多的处理能力来加密和解密数据。
四、代码和密码(Code and ciphers)
Code和Ciphers是不同的概念,尽管人们有时会交替使用这些术语,但它们实际上是两种非常不同的东西:
- 代码是一个用一个有意义的词或短语来代替另一个词或短语的系统。这可能是出于保密的目的,也可能是为了提高通信效率,让一个简短的信息传达一个详细的意思。例如,警察和其他通过无线电通信的组织所使用的10码系统。他们有一长串代码,允许发送信息的人只需说出两个数字,就能传达一个很长的意思。这是一个使用代码来提高通信效率的例子。
- 另一方面,密码是使用数学算法来加密和解密信息的系统。我们之前提到的所有加密算法都是密码的例子,而不是代码。密码设备有两种不同的处理信息的方式。
流密码(Stream Ciphers) 是一次处理信息中的一个字符,它们在一个字符或一个比特上执行其行动,然后转到下一个字符或比特。分组加密(Block Ciphers) 在同一时间对被称为块的信息进行处理。例如,它们可能对一个信息中的100个字符进行加密,并一次性对所有这些字符进行加密。 - 两种简单的加密方式:替换式密码(Substitution Ciphers)实际上改变了信息中的字符。例如,一个简单的替换密码可能会将信息中的所有字母移动两个位置,将A改为C,B改为D,等等。当有人想解密以这种形式加密的信息时,他们只需将这些字符移回两个位置。这种类型的简单替换密码也被称为旋转密码,因为它只是将字母表向左或向右旋转几个位置。旋转密码通常用ROT的缩写来表示,后面是字符被旋转的位置数。例如,旋转密码将字符转移到13个位置,称为ROT 13。转位密码(Transposition Ciphers)并不改变信息中的字符,而是重新排列它们。它们基本上是以一种只有知道解密密钥的人才能解开的方式来扰乱信息。
我们今天不会使用这些例子,因为它们很容易被破解。但这两种操作构成了我们后面要讲的现代加密算法的基础。
五、密码学数学(Cryptographic math)
数学在密码学中起着核心作用。首先,许多密码学算法使用Exclusive Or操作,将明文和密码文本与密码密钥结合起来。Exclusive Or运算,通常被缩写为X-O-R或XOR,是一种逻辑运算,当输入的一个且只有一个为真时,该运算为真。 XOR操作的真值表如下。我们有两个变量,X和Y,然后是X XOR Y,XOR是一个周围有圆圈的加号。如果我们有两个输入,X和Y,而且它们都是假的,那么这两个变量中没有一个是真的,X XOR Y是假的。如果X是真的,Y是假的,那么正好有一个输入是真的,X XOR Y是真的。如果X是假的,Y是真的,同样X XOR Y也是真的。但如果X和Y都是真的,那么XOR操作就是假的,因为它只允许其中一个输入为真。
密码学依赖于随机数来生成密钥和其他用于为加密数据提供安全的关键值。但是,计算机实际上没有办法生成一个真正的随机数。相反,我们不得不依赖于伪随机数的使用。**伪随机数生(pseudo random numbers)**成器使用一系列复杂的输入和数学函数来产生非常接近随机的数字。
**混淆(Confusion)**是一个密码学中重要的概念。为了提供混淆,密码必须隐藏密文(Ciphertext)和密钥之间的联系,以使其更难以破解。用技术术语来说,密文的每一位都必须依赖于加密密钥的一个以上的比特。进一步说,改变明文(Plaintext)的一个比特,应该产生一个分布在密文大部分位置的变化。理想情况下,改变明文的一个比特将改变至少一半的密文的比特。混淆是密码学在软件开发领域的一种应用。希望向用户隐藏其源代码的软件开发者可以使用密码学来混淆其代码,允许用户运行代码,但不允许他们查看代码本身。
六、选择加密算法(Choosing encryption algorithms)
目前,有许多加密算法供我们进行选择。最重要的是要记住,加密是非常复杂的。它使用复杂的数学技术,即使算法中最小的缺陷也会使该算法不安全。出于这个原因,我们永远不应该尝试建立自己的加密算法,除非我们真的、真的知道自己在做什么。同样,如果一个供应商声称他们的软件是用一种专有的加密算法来保证安全的,而且他们不愿意分享细节,那么请以应有的怀疑态度看待这种说法。有些人认为,算法的安全性来自于没有人知道它是如何工作的事实。但事实上并不是这样的,以至于我们创造了一个术语来描述这种方法,称之为 “隐蔽的安全(security through obscurity)”。但**是事实上,我们应该选择一种被证实的加密算法。加密算法的细节通常会被公布,并开放给安全社区检查。**这种公开审查过程很重要,因为它允许数学家和密码学家审查算法的细节,并确保其设计良好,没有可能允许无意中访问信息的后门。
同时,当我们选择一种加密算法时,可能能够选择加密密钥的长度。并非所有的算法都允许这样做,因为有些算法有固定长度的密钥,但如果能够选择密钥长度,密钥越长,加密的信息就越安全。然而,有一个缺点。随着密钥变长,算法的性能就会下降。如下图所示:
选择一个长的密钥很重要,因为它使别人更难猜出我们所使用的密钥。下面是一个40位加密密钥的例子。一个比特是二进制中的1或0,40位密钥由40个1和0组成。这个密钥有超过一万亿种可能的组合。现在,这听起来可能很多,但计算机有可能破解这个加密密钥。如果我们把加密技术提高到128位密钥,那么这里有足够的可能性,用现代计算机来猜测密钥是不可行的。
而当我们使用1024位的密钥时,我们就会得到一些真正强大的安全。但当选择的加密方法时,我需要进行自己的成本效益分析,并选择一个能平衡安全性和加密及解密速度的密钥长度,也就是需要用一部分安全换取速度。
七、完美的加密算法(The perfect encryption algorithm)
在100多年前。由一位电报专家在1882年发明的**一次性密钥(One-Time Pad)**是一种不可破解的加密算法。并且使用一次性密钥是非常简单的,即发送方和接收方各拥有一份包含随机字母串的相同的密钥。密钥的长度必须与发送方和接收方将交换的所有信息的字符总数一样长。
例如,明文是SECRET,一次性密钥为ACGLKBZMNL,如下图所示,其上的数字是其在字母表中的序号。然后用明文和密钥字母的序号相加,得到一个新的序号,从而找到对于的密文。注意,如果相加超过了26,则重新从A开始计算。如下所示,SECRET加密后就成为了THJDPV。
解密的时候,我们用密文与密钥做减法,同样可以还原明文:
一次性密钥是不可破解的,因为它是完全随机的。没有重复,所以没有任何密码学攻击可以对付它,只要发送者只使用一次密钥。
但是这种加密方法并没有被广泛使用,这是因为分发一次性密钥非常困难。发送方和接收方需要在同一个房间里,交换一次性密钥;一旦他们用完了密钥,就需要再次见面,显然不是一个非常有效的通信方式。
八、密码的生命周期(The crytographic lifecycle)
加密算法以及用于保护受加密算法保护的信息的密钥是任何安全计划的最重要组成部分之一。网络安全专业人员必须对密码的生命周期(lifecycle)有深刻的理解,以便随着组织的安全需求和威胁环境的变化,更好地选择、维护和退役使用算法。
随着加密算法的老化(age),它们往往会变得不安全,要么是因为研究人员发现了其实施中的缺陷,要么是因为它们使用的密钥长度变得容易受到暴力攻击。因此,重要的是要有一个密码学的生命周期方法,在算法变得不安全的时候逐步淘汰它们。美国国家标准与技术研究所(NIST)提供了一个五阶段的密码学生命周期,企业应将其应用于企业中的任何密码学的使用。
- 第一阶段是启动(Initiation)阶段。在这个阶段,组织意识到它需要一个新的密码系统,并收集该系统的要求。要求一般包括具体的保密性、完整性和可用性,和基于将被保护的信息的敏感性;
- 在第二阶段,开发和收购(Development and Acquisition)对应加密系统。该组织找到符合其目标的软件、硬件和算法的适当组合;
- 第三阶段,实施和评估(Implementation and Assessment),配置加密系统以供使用,并评估它是否适当地满足组织的安全目标;
- 第四阶段,即运营和维护(Operations and Maintenance)。在这个阶段,组织确保密码系统的持续安全运行;
- 最后,当系统不再适合继续长期使用时,组织将过渡到第五阶段,即废止(Sunset)。在这一阶段,组织停止使用该系统,并销毁或归档敏感材料,如它与该系统一起使用的钥匙。