加密
当进行数据加密时,明文消息(plain-text message)在被编码后会看起来象完全随机的二进制数据,以至于没有密鈅就很难将其转化为原来的消息。本文中使用如下定义:
消息(Message):指任何数据块。消息可以是ASCII文本,一个数据库文件或者任何你要安全存储或者传输的数据。
明文(Plain text):指没有被加密的数据。
密文(Cipher text):指被加密过的数据。
一旦消息被加密,它就可以存储在非安全的介质上或者通过非安全的网络传输而仍然保持安全。之后,消息可以解密回原来的格式。图2图解了这个过程:
图2 . 加密、解密消息
当加密消息时,要使用加密密鈅(encryption key)。 这就类型于用一把钥匙去锁一把锁一样。当解密这个消息时,必须用相应的解密密鈅(decryption key)。对解密密鈅的严格限制访问非常重要,因为任何拿到它的人可以解开用相应的加密密鈅加密的所有消息。
可能有点不可思议,但数据加密/解密就是这么简单。真正的难点是安全的保存密鈅和安全的将密鈅传输到其它人那。这部分已经超出了本文的范围,我建议读者去读文章"Exchanging Cryptographic Keys"的相应部分,文章在Win32 Cryptography API文档中(MSDN Library, Platform, SDK, DDK 文档)。
有两种主要的加密算法:对称算法(symmetric algorithms)与公鈅算法(public-key algorithms )[也叫做非对称算法(asymmetric algorithms)]。 使用对称算法的系统有时归入传统型( conventional)中。
算法
对称算法是最普遍的加密算法类型。它们叫“对称”是因为使用相同的密鈅进行加密与解密。与使用公鈅算法的密鈅不同,对称密鈅是经常变化的。因为这个原因,此处将它们归于会话密鈅。与公鈅算法相比,对称算法非常快,因此最适于加密大量数据的情况。一些最常用的对称加密算法是 RC2, RC4,与数据加密标准(Data Encryption Standard ,DES)。(译注:单重DES因密鈅长度已不适应当前的加密环境,最好不用。可以使用三重DES,或者AES)
公鈅(非对称)算法使用一对不同的密鈅:一个公鈅和一个私鈅。私鈅由密鈅对的所有者自己保存,公鈅可以自由分发给所有要求得到的人。如果用一个密鈅加密一个消息,必须用另一个密鈅解密此消息。公鈅算法很慢, 要比对称算法慢数千倍。因此它们一般仅用来加密会话密鈅。它们也用来对消息进行数字签名(digitally sign),下一部分会讨论这个内容。最常用的公鈅加密算法之一是RSA Public-Key Cipher。
文件签名
数字签名(Digital signatures)用在你要以明文形式分发一个消息,并且你想要让接收者能够验证这个消息自从离开你手后没有被篡改过。对消息签名并不会改变消息,它仅生成一个可附着在消息上或者单独传输的数字签名。
数字签名使用公鈅算法生成。使用私鈅来生成,并且使用相对应的公鈅来验证。图3图解了这一过程:
图3验证签名