分享

关于模式和初始化向量IV

 凯之风 2011-10-12
以下内容摘自其他资料。
 
    分组密码每次加密一个数据分组,这个分组的位数可以是随意的,一般选择64或者128位。另一方面,流加密程序每次可以加密或解密一个字节的数据,这就使它比流加密的应用程序更为有用。
 
    ECB(Electronic Code Book:电码本)
 
    ECB是最简单的模式,同样的明文分组总是加密成相同的密文分组。这对于发送单一的块数据来说是非常好的,如密钥。但对执行一个加密的信息流来说不是很好,因为如果相同的明文多次发送以后,同样的密文也会被多次发送。
 
    ECB最大的弱点是对每一个块用相同的方式进行加密。如果我们的密钥或者数据不断发生变化,ECB是完全安全的。但是如果类似的块经过同样的密钥加密发出以后,攻击者可能获得一些我们并不想让别人知道的信息。

    CBC(Cipher Block Chaining:密码分组链接

    CBC模式改变了加密方式,同样的明文分组不一定加密或解密同样的密文块,因此解决了ECB存在的主要问题。CBC使用前一分组的信息加密当前分组。因此和ECB模式大不相同。这个方法依然存在问题,那就是相同的信息仍然加密成相同的密文,因为所有的分组是同时变成密文分组的。为了解决这个问题,我们引入一个Initialization Vector(初始化向量),也就是前不久有人问到的IV问题。IV仅仅是一个初始化加密程序的随机数。它无需秘密保存,但队每一个信息来说它都是不同的,通过这个方式,即使有两条相同的信息,只要他们有不同的IV,那么他们加密后的密文也是不同的。从这个意义上来说,初始化向量无疑就和口令加密过程中使用的掩值是一样的。
    CBC很适合文本传输,但它每一次都需要传送一个完整的数据块,一般选8个字符。
 
    CFB(Cipher FeedBack:密码反馈) 

    CFB的工作方式与CBC类似,但它可以执行更小的数据块,典型的有8位,这非常适合加密像聊天对话这样的信息,因为每次可以发送单一的字节数据块。
    和CBC一样,CFB也需要一个IV,且相同及钥发送的每条信息的IV都必须是唯一的。
 
    OFB(Output FeedBack:输出反馈)

    OFB除了在传输中能给数据提供更好的保护,防止数据丢失外,其他和CFB类似。密文中一位出错,也只造成明文中的一位出错,其他的方式会造成整个块丢失。
    和CBC以及CFB一样,OFB也需要一个IV。
 
    IV的产生方法:
    java--->
    SecureRandom random = new SecureRandom();   
    byte[] iv = new byte[8];   
    random.nextBytes(iv);
    c#--->
     RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();   //Random Numeric Generator
     byte[] randBytes= new byte[8];    
     rand.GetBytes(randBytes);

 
IV:初始化向量   
MSDN:基类库中提供的块密码类使用称作密码块链    (CBC)    的链模式,它使用一个密钥和一个初始化向量    (IV)    对数据执行加密转换。对于给定的私钥    k,一个未使用初始化向量的简单块密码将把相同的明文输入块加密为同样的密文输出块。如果在明文流内有重复的块,那么在密文流内也会有重复的块。如果未经授权的用户知道有关明文块的结构的所有信息,就可以使用该信息解密已知的密文块并有可能获得您的密钥。若要克服这个问题,可将上一个块中的信息混合到加密下一个块的过程中。这样,两个相同的明文块的输出就会不同。由于该技术使用上一个块加密下一个块,因此使用了一个    IV    来加密数据的第一个块。使用该系统,未经授权的用户有可能知道的公共消息标头将无法用于对密钥进行反向工程。
优点:
1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的 标准。
缺点:
1.不利于并行计算;
2.误差传递;
3.需要初始化向量IV

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多