zoukankan      html  css  js  c++  java
  • 密码学初探|加密模式

    https://mp.weixin.qq.com/s/ynPaGOaBKFuBEWbrQKoPFQ

    1、实际加密场景

           在实际的分组密码加密过程中,无论是文本文件,图形图像,或是电子邮件,长度都是不定的,基本不会等于单个加密算法的分组长度,对这些长明文数据的加密,有多种不同的方式,常用的有如下几种:

           电码本模式(ECB)

           分组链接模式(CBC)

           计数器模式(CTR)

           输出反馈模式(OFB)

           密码反馈模式(CFB)

           GCM模式

        其中,

        ECB、CBC模式要求明文长度是分组长度的整数倍,如何将不同长度的明文组织为分组长度的整数倍,将在后续内容中分享;

        CTR、OFB、CFB三种模式将分组密码用作序列密码的基本模块;

        而GCM模式同时实现了身份验证和数据加密。

    2、加密模式

    2.1 ECB模式

           ECB模式是最简单、最直接的加密模式。

           ECB模式要求将明文按照算法的分组长度进行分割,使用密钥对每个分组进行加密后进行拼接,获取密文数据;解密时,对密文按照算法分组长度分割后使用密钥对分组进行解密拼接后,获取的数据结果就是明文数据。

           流程如下:

    图片

    图一 ECB模式加密流程

    2.2 CBC模式

          CBC模式要求加密之前设置一个初始化向量(IV),IV值长度与分组长度相等,加密过程分两步:

           1) 第一个分组,对IV与其进行异或进行加密

          2) 对于其的分组,以上一个分组的加密结果为IV,对分组数据与新IV值异或的结果进行加密

           解密过程同样分两步:

           1) 第一个分组,解密后,使用解密结果与IV异或,获取明文    

          2) 其他分组,将上一分组密文作为IV,对该分组解密后,与新的IV值异或,获取明文

           具体的流程如下:

    图片

    图2 CBC加密模式

           与其他加密模式相比,CBC模式是在加密前对明文进行操作,然后对明文加密的方式。在使用CBC加密时,由于每一个分组都需要上一个分组的结果(第一个分组需要IV),因此只能串行,效率上要比ECB差些。

           同时,CBC模式中,IV值的变化,也能够使同一个密钥,使用一样的算法加密同一个密文的结果不一致,这样的结果对于oscar来说,两次加密的结果是不相关的,降低被攻击的风险。

           一般来说,我们需要的IV值最好能做到每次都是完全随机的,但这并不容易,所以通常会采用计数器模式,ECB加密计数器结果,hash计算计数器加密结果等方式生成需要的IV值。

           而在一些特殊情况下,使用固定值作为IV也是一种可用的选择方案,比如在AES算法中,很多场景会选择16bytes 0X00作为IV值

     2.3 CTR、OFB、CFB

           这三种模式都是通过各种方式对密钥进行转换,然后转换出的结果与明文异或之后获取密文,这里仅做简单介绍。

           CTR:选择一个IV,与CBC模式不同,这里的IV值长度要小于分组长度,剩余为计数器长度(比如AES算法,IV长度96bits,计数器长度32bits),将IV与计数器拼接后加密,并与明文异或,获取密文。

           OFB:选择IV,对IV加密后的s与明文异或得密文,然后将s作为新的IV,重复以上内容计算最终的密文;

           CFB:选择IV,对IV加密后与明文分组进行异或,将异或结果作为新的IV,重复以上内容计算最终的密文。

     2.4 GCM

           GCM是一种加密认证模式。加密部分使用CRT模式通过对IV和计数器的变化计算密文,而认证buf则是利用有限域上的乘法进行HASH

           加密流程如下:

    图片

    图3 GCM加密模式

    3 - 加密模式存在的问题

    3.1 ECB模式的流量分析攻击

           ECB模式加解密时,各个分组分别加密,互不影响,所以在使用时可以采用多路并行加密的方式进行,保证加密速率。

           同样由于每个分组互不影响,容易造成只要密钥不变,相同的明文分组加密出的结果相同,这样就可以通过流量分析对密文进行攻击;

           而且分组间无任何关系,oscar可以对密文分组进行重排,bob收到的密文可以正确解密,但解密结果并不是正确的明文。

    3.2 使用IV的雪崩效应

           CBC、OFB、CFB、GCM因为都要使用IV,而且从以上加密模式的描述中可以看到,

           后边分组数据的加密都要依赖前一个分组的加密结果,如果前一个分组的加密结果出现问题,则其后的所有分组加密都会出现异常

    4、如何选择加密模式

           实际应用中,ECB多应用于存储加密方向,CBC多应用于传输加密方向,其他加密模式相对使用较少。但对加密模式的选择也需要考虑使用场景的需求。

           磁盘加密由于加密的数据量很大,而且磁盘中的数据不是连续的,因此加密时通常要选择ECB模式,满足快速加密和防止雪崩效应的需求;

           网络通信中,为应对流量分析攻击,多选择CBC模式

  • 相关阅读:
    robotframework笔记9
    robotframework笔记8
    Spring预处理
    WebStrom快捷键
    json死循环问题
    java线程与缓存
    oss文件删除策略
    Eclipse自动编译问题
    将 JAR 转为 EXE – EXE4J 的使用教程(第一期)(转载)
    将 JAR 转为 EXE – JSMOOTH 的使用教程(第二期)(转载)
  • 原文地址:https://www.cnblogs.com/dhcn/p/15720347.html
Copyright © 2011-2022 走看看