• 块数据加密模式


    1.Electronic CodeBlock(ECB)

    块加密模式是最简单的加密模式。信息被分割成单独的块,每一块单独加密。

    601px-ECB_encryption.svg

    601px-ECB_decryption.svg

    算法特点:

    1.因为每一块单独加密,所以不能很好的隐藏数据的模式,特别是在加密bitmap图像数据时。

    2.每次Key、明文、密文的长度都必须是64位。

    2.Cipher Block Chaining(CBC)

    每一块明文在加密前会和前一块明文进行异或处理。为了使每个信息独一无二,第一个块信息会被一个初始化向量(initialization vector)

    601px-CBC_encryption.svg

    601px-CBC_decryption.svg

    ECB加密算法可表示为:

    C0 = Enc(Key, XOR(IV, P0)

    Ci = Enc(Key, XOR(Ci-1, Pi)

    ECB解密算法可以表示为:

    P0 = XOR(IV, Dec(Key, C0))

    Pi = XOR(Ci-1, Dec(Key,Ci))

    算法特点:

    • 每次加密的密文长度为64位(8个字节);
    • 当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文;
    • 密文块要依赖以前的操作结果,所以,密文块不能进行重新排列,同时不能并行加密,但是,很明显解密可以并行处理;
    • 可以使用不同的初始化向量来避免相同的明文产生相同的密文,一定程度上抵抗字典攻击;
    • 一个错误发生以后,当前和以后的密文都会被影响;

    3.Cipher Feedback(CFB)

    CFB模式和CBC模式相似,使块加密变成一个自同步的流加密。操作也十分相似,特别的是,CFB模式加密几乎是倒置的CBC模式加密。

    Ci = Ek(Ci-1) XOR Pi

    Pi = Ek(Ci-1) XOR Ci

    Co = IV

    注:Ci表示第i块数据块的密文,Ek表示加密过程,Pi表示第i块明文,IV 表示初始化向量

    601px-CFB_encryption.svg

    601px-CFB_decryption.svg

    扩展:根据一个自同步密码的定义:如果有一部分密文丢失(例如:传输错误),只会出现一部分的原内容错误,并且在执行一段解密步骤后能继续正常解密。使用CFB模式加密后,解密将不再向CBC一样可以自同步。只有在一整数据块密文丢失时,CBC和CFB可以自同步;但是在丢失一个字节或者一个比特位时将会彻底是解密崩溃。为了解决好这种情况,需要依次加密一个字节或比特位。连通一个移位寄存器,CFB可以实现自同步。

    标注:Si表示移位寄存器的第i次状态值;a<<x 表示a左移x位;head(a, x)表示a的高x位,n表示IV的比特位数。

    image

    算法特点:

    • 加密不能并行处理,解密可以并行处理;
    • 算法是自同步密码;
    • 在解密时,一个比特为错误会影响两个数据块的正确性。
    • 信息大小不必是加(解)密块的倍数;

    4.Output Feedback(OFB)

    与CFB模式不同之处在于,加密移位寄存器与密文无关了,仅与加密key和加密算法有关;做法不再是将密文输入到加密移位寄存器中,而是把输出的分组密文(Oi)输入到移位寄存器中。

    601px-OFB_encryption.svg

    601px-OFB_decryption.svg

    特点:

    • 与CFB类似,以下都是不同之处;
    • 因为密文没有参与链操作,所以使得OFB模式更容易受到攻击;
    • 不会进行错误传播,某位密文发生错误,只会影响该位对应的明文,而不会影响别的位;
    • 不是自同步的,如果加密和解密两个操作失去同步,那么系统需要重新初始化;
    • 每次重新同步时,应使用不同的初始向量。可以避免产生相同的比特流,避免”已知明文”攻击 ;

    互联网程序中加密模式的使用:

    ECB是不推荐的方式,Key相同时,相同的明文在不同的时候产生相同的明文,容易遭到字典攻击;

    CBC由于加入了向量参数,一定程度上抵御了字典工具,但缺点也随之而来,一旦中间一个数据出错或丢失,后面的数据将受到影响;

    CFB与CBC类似,好处是明文和密文不用是8bit的整数倍,中间一个数据出错,只影响后面的几个块的数据;

    OFB比CFB方式,一旦一个数据出错,不会影响后面的数据,但安全性降低;

    因此,推荐使用CFB方式,但每个数据包单独加密,否则一个数据包丢失,需要做很多容错处理;

    当然,具体问题也要具体分析,对于只需要”特定安全性”①,不需要”计算安全性”以上的软件,也可以使用ECB模式;

    参考文献:

    wiki:http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

    sianblog:http://blog.sina.com.cn/s/blog_4c6e822d0102dwfd.html

  • 相关阅读:
    233
    膝为筋之府
    AES 可逆性加密算法
    DES 可逆性加密算法
    Java Swing如何让窗体居中显示
    eclipse 安装插件
    eclipse 搭建Swt 环境
    Java Set元素比较
    Greenplum数据库中系统表gp_ distribution_ policy详解
    Greenplum数据库中系统表pg_class详解
  • 原文地址:https://www.cnblogs.com/maverick-fu/p/4341808.html
Copyright © 2020-2023  润新知