|
Cryptographic Terminology 101
(密码术语101)[翻译]
原文:
http://www.onlamp.com/pub/ct/15
作者:Dru Lavigne
翻译: rainren
本人能力有限, 很多地方自我感觉都翻译的不对, 请大家指出, 我慢慢修改。
在接下来的几篇文章中,我将介绍怎样在网络中安全的传送数据。如果你还记得IP数据包系列(查看 抓取TCP包 -- 原文: see Capturing TCP Packets)大部分网络传输都是使用明文传输, 有很多packet sniffing工具能将它们解开查看信息。如果数据包中含有usernames, passwords或其它一些敏感数据, 这将非常糟糕。幸运地, 有一些工具可以加密你的网络传输。
在配置之前, 你需要了解加密的条件和它将要使用的算法。这一篇是密码术语101, 接下来的文章将实证介绍如何在FreeBSD上配置使用。
什么是加密, 你为什么要使用它?加密工具使用组合算法, 它由下面三个部分构成:privacy, integrity, authenticity。不同的加密工具使用不同的算法, 但所有这些加密工具都需要这三个部分。每一个都很重要, 让我们分别看看每一部分:
Privacy
Privacy保证只有接收者才能明白网络传输的内容。即使是数据包被捕获, 它也不能将信息解开阅读。密码系统使用一种加密算法, 或密码, 在传输前它会将明文加密成密文。只有特定的接收都才能使用一个key将密文解密成明文。这个key存在于发送者和接收者之间,用它来加密解密文件。显然,这只能允许接收者才能有这个key, 否则任何人都可以解密文件了。
有些人没有key他可能会使用分解或猜测加密文件的key来解开这个密码。 一个强壮的加密算法应该有一个怎样解开密码的难易度。通常, 强壮的条件使用bitsize来表示。例如:解开使用56位的加密算法的时间比使用256位加密算法的时间要少。
这是否就是说我们应该使用尽可能多的位的加密算法呢?并不一定。很有代表性地, 随着bit size的增加, 加密解密数据需要的时间会越来越长。在现实中, 这个转化会发费大量CPU的工作时间和增大网络流量。根据你的硬件和网络情况选择适当的加密bit size。近几年, CPU的工作频率增加的很快。这就允许我们可以选择使用较强壮的算法。这样, 你应该过段时间就变改你的密码。很多加密系统可以自动的做这项工作。
还有一些别的因素影响到如何选择加密算法。有些算法使用需要licenses或专利; 有些算法很容易被破解;有些算法比使用同样bit size的算法快或慢。如:DES和3DES都很慢,而Blowfish尽管使用了很大的bit size, 但它还是很快速。
每个国家的法律不同, 一些国家会强行限制使用。也就是说你可以在国内使用一个很强壮的加密算法加密敏感数据但却不允许将它发送给国外的接收者。The United States限制使用40位加密算法加密的数据发送到国外, 这就是为何有些算法使用少于40位加密的原因。
如果你不确定你所在的国家对这方面的限制,在加密你的FreeBSD系统前先找找相关的资料。
下面显示一些算法的使用情况:
Algorithm: DES Bit Size: 56 comment: slow, easily cracked
Algorithm: 3DES Bit Size: 168 comment: slow
Algorithm: Blowfish Bit Size: 32- 448 Patented: no Comment: extremely fast
Algorithm: IDEA Bit Size: 128 Patented: yes
Algorithm: CAST Bit Size: 40-128 Patented: yes
Algorithm: Arcfour Bit Size: 40, 128
Algorithm: AES(Rijndael) Bit Size: 128, 192, 256 Patented: no Comment: fast
Algorithm: Twofish Bit Size: 128, 256 Patended: no Comment: fast
原始数据包在使用encryption模式时有哪些内容会被加密呢。如果加密系统使用的是传输模式, 原始数据包的报头将是明文, 只有一部分数据被加密。这就是说, 网络嗅探器截获的数据包虽然不能看到数据包里的内容但却可以知道发送者和接收者的IP地址和发送接收使用的端口。
如果使用tunnel模式, 整个数据包包括报头和内容都将被加密。数据包还需要到目的地的路由, 现在3层新的报头被创建。新的报头会包含所有到目的地的IP地址。(This is known as encapsulation, and it is quite possible that the new header contains totally different IP addresses than the original IP header)。我们将在下一篇为FreeBSD系统配置IPSEC时看到为什么会这样。
Integrity
Integrity是加密系统的第二部分。这部分保证接收到的数据包在传输过程中存在完整没有丢失。这需要一个不同的算法,如:cryptographic checksums 或 cryptographic hashes。你应该熟悉使用checksums检查对方发送过来的数据包的顺序。虽然frame和header checksums使用的算法很简单,它们只是简单的修改bits并且使用的是相同的算法。Cryptographic checksums need to be more tamper-resistant。
同加密算法一样, Cryptographic checksums有不同的用途。越长的效验和越难以改变数据和制作同样的效验和。当然,有一些checksums我们已知道它的缺陷了。如下面所示:
Cryptographic checksum: MD4 Checksum Length: 128 Known Flaws: yes
Cryptographic checksum: MD5 Checksum Length: 128 Known Flaws: theoretical
Cryptographic checksum: SHA Checksum Length: 160 Known Flaws: theoretical
Cryptographic checksum: SHA-1 Checksum Length: 160 Known Flaws: not yet
上面是有意排列的。正如它所示:MD4是最不安全的而SHA-1是最安全的。通常应能为你的加密系统选择尽可能高的checksum级别。
在cryptographic 里还有另外一种checksum:HMAC或Hash-based Message Authentication Code。简要说明:checksum algorith (效验算法)使用checksum效验值作为算法的key。 Good, 如果不能访问这个key你将很难改变 checksum(效验值)。如果有Cryptographic checksum使用HMAC, 它将会在checksum名字前面显示出来。例如:HMAC-MD4比MD4 安全; HMAC-SHA比SHA安全。如果我们对checksum algorithm(效验算法)排序,它如下所示:
· MD4
· MD5
· SHA
· SHA-1
· HMAC-MD4
· HMAC-MD5
· HMAC-SHA
· HMAC-SHA-1
Authenticity
现在, 我们保证了数据的加密和它在传输过程中没有被改变。但是如果我们的数据, key被错误的传送给错误的接收者将怎么办? 这就是我们第三部分所要描述的:authenticity。
在一些加密算法使用前, key可能已创建和改变。在一个session中使用同样的key加密解密数据,它会知道如何对称或session key。我们应怎样安全的改变这个key呢?我们怎么能确定我们所改变的这个KEY只有接收者在使用而不会是另外的人呢?
这就需要别的算法类型来了解不对称性或公共密匙算法。这些算法具有不对称性是因为它们在发送者和接收者之间并不使用同样的KEY。Instead, 发送者和接收者之间分别创建密匙对来进行工作。接收者从发送者那里取得一份公共密匙。别的密匙, 如私匙, 必须保持隐密。如果用户的私匙已过期, 他应该立即撤回以前的key并重新创建新的密匙对。
当密匙对创建时, 它将有一个独特的string of short nonsense作为fingerprint(指纹)。这个fingerprint(指纹)给你用来检查公共密匙。在校验接收者前, 它们首先要传输一个公共密匙给你。你需要double-check the fingerprint(指纹)以让别人知道你已取得了公共密匙。在下一篇文章中我们创建密匙对, 让你看自己的fingerprint时会有更多的了解。
大多数密匙创建算法是RSA。你平常在数字证书或认证中心应该看到过RSA。数字证书包含了接收者使用的公共密匙和其它一些信息, 还有终止日期。The X.509 or PKCS #9 standard dictates the information found in a digital certificate. You can read the standard for yourself at http://www.rsasecurity.com/rsalabs/pkcs or http://ftp.isi.edu/in-notes/rfc2985.txt.。
数字证书通常作为Certificate Authority存储在计算机里。这就是说作为一个接收者你并不需要手动修改公共密匙。Instead,你的系统将会询问CN何时copy一个接收者使用的公共密匙。这需要一个可以升级证书的系统。CA为许多接收者储备了数字证书,这些接收者可以是用户或电脑。
同样可以使用DSA算法来产生数字证书。但这个算法需要专利并且比RSA慢。Here is a FAQ on the difference between RSA and DSA. (The entire RSA Laboratories' FAQ is very good reading if you would like a more in depth understanding of cryptography.)
数字证书包含了终止日期,在那日期前证书不会从CA删除。如果在那个日期前a private key变得不安全怎么办? 你显然要重新认证一个新的public key。然而在过期前你不能删除旧的认证。确定证书会在不注意时去签别一个接收者,你可以将它放在CRL或Certificate Revocation List。当证书被请求时,CRL会保正证书仍然有效。
认证接收者是authenticity 部分一半。另一半涉及到在加密解密数据时当创建一个session key 时的产生和改变信息。这里同样需要一个不对称算法, 在这里叫 Diffie Hellman或DH。
认识到Diffie Hellman 它自己并不产生实际的session key是重要的,但是keying information用来产生那个key。This involves a fair bit of fancy math which isn't for the faint of heart. The best explanation I've come across, in understandable language with diagrams, is Diffie-Hellman Key Exchange - A Non-Mathematician's Explanation by Keith Palmgren。
It is important that the keying information is kept as secure as possible,所以它越大越好。The possible Diffie Hellman bit sizes have been divided into groups. The following chart summarizes the possible Diffie Hellman Groups:
Group Name Bit Size
1 768
2 1024
5 1536
当配置一个加密系统时,你应该使用Diffie Hellman Group能支持的最大位数。
另一个与keying information(发报信息)在一起的术语是PFS,或Perfect Forward Secrecy, Diffie Hellman支持它。 PFS ensures that the new keying information is not mathematically related to the old keying information. PFS能保证新的keying information不会被联系到早的keying information上。这就是说如果网络嗅探器捕获了旧的session key, 它也不能从上面猜测出新的session key。 PFS是非常棒的, 你应该使你的加密系统支持它。
Putting It All Together
现在让我们对加密系统如何对网络传输数据进行加密做个回顾和总结。
1、 首先,当前接收者使用公共密匙来验证你传送给他的数据。这个公共密匙是使用RSA算法创建,并作为一个数字证书存储在CA上。
2、 一旦接收者经过验证后,DH算法将为创建session key创建信息。
3、 一旦keying information得到后,作为一个独特的key的session被创建。这个KEY用于发送者和接收者之间的数据传送的加密和解密。由于这个key很重要, 所以它会时常变更。
4、 在数据加密前,会进行适当的校验。当数据进行解密时,校验程序会重新对数据进行校验, 以保证接收到的数据是发送方发送过来的原始数据。
在下一篇文章中, 在为freebsd系统配置ssh时你会看到很多这方面的信息。
这两天有点上火, 心情不好,而且对加密解密方面的了解不多, 翻译中存在很多错误, 请大家指出来, 我会改正! 谢谢! |
|