The Cryptography API, or How to Keep a Secret (二)

加密

当进行数据加密时,明文消息(plain-text message)在被编码后会看起来象完全随机的二进制数据,以至于没有密钥就很难将其转化为原来的消息。本文中使用如下定义:

  • 消息(Message:指任何数据块。消息可以是ASCII文本,一个数据库文件或者任何你要安全存储或者传输的数据。
  • 明文(Plain text:指没有被加密的数据。
  • 密文(Cipher text:指被加密过的数据。

一旦消息被加密,它就可以存储在非安全的介质上或者通过非安全的网络传输而仍然保持安全。之后,消息可以解密回原来的格式。图2图解了这个过程:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />CSDN_Dev_Image_2004-2-61627190.gif

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 图解了这一过程:

CSDN_Dev_Image_2004-2-61627192.gif

3 验证签名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章