• openSSL AES 加密引擎代码分析



    SSL VPN 2010-01-29 11:12:31 阅读459 评论0  字号: 订阅

            本文以openssl-0.9.8l代码为基础,对openSSL中AES加密引擎的代码做一个分析,这里侧重于应用的角度对代码进行分析,有关aes加密算法的原理等有很多介绍(例如:http://zh.wikipedia.org/zh-cn/AES),不在本文的讨论范围之内。

    AES的区块长度固定为128 位元,密钥长度则可以是128,192或256位元;AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:

    1. AddRoundKey — 矩阵中的每一个字节都与该次回合金钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。

    2. SubBytes — 透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。

    3. ShiftRows — 将矩阵中的每个横列进行循环式移位。

    4. MixColumns — 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每行内的四个字节。

    最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。

    一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,对于快加密而言,主要有4种加密处理模式,如:

    1. 电子密码本模式       Electronic Code Book(ECB)

    2. 加密块链模式          Cipher Block Chaining(CBC)

    3. 加密反馈模式          Cipher Feedback Mode(CFB)

    4. 输出反馈模式          Output Feedback Mode(OFB)

    有关四种处理模式的介绍可以参见如下的两个文档:

    分组对称加密模式:ECB/CBC/CFB/OFB http://blog.csdn.net/SearchSun/archive/2008/06/06/2516191.aspx.

    对称块加密算法加密模式详解 http://dev.csdn.net/article/16/16674.shtm

    文件说明

    aes.h             头文件,提供给外部调用和包含,openSSL本身通常以库的形式供外部调用;

    aes_core.c     aes加密引擎的基础和核心文件,主要实现基于AES的区块加解密和密钥设置;

    aes_x86core.c 基于x86架构进行优化的核心文件;

    aes_ecb.c         ECB模式加密的实现,将要加密的数据分成固定位元的大小,然后使用密钥对每一个位元进行加密,位元之间没有关联。

    aes_cbc.c         CBC模式加密的实现,将要加密的数据分成固定位元的大小并构成一个位元的序列,将前面一个加密块输出的密文与下一个要加密的明文块进行XOR(异或)操作计算,将计算结果再用密钥进行加密得到密文。第一明文块加密的时候,因为前面没有加密的密文,所以需要一个初始化向量(IV);

    aes_cfb.c         CFB模式加密的实现;

    aes_ofb.c         OFB模式加密的实现;

    aes_ctr.c          CTR模式加密的实现;CTR模式是NIST为对称分组密码算法新开发的种操作模式。AES—CTR加密机制对于高速网络,具有许多引人的特性。首先,AES—CTR使用AES分组密码加密连续的计数分组(CTRBLK:Counter Block)生成密钥流。数据在加、解密时,明、密文与密钥流进行异或运算 AES—CTR易于实
    现,可以进行流水线和并行处理。多个独立的AES加密实现可以用于提高效率。例如,AES-CTR加密处理可以进行双机并行实现,从而达到双倍效率的吞吐量。AES—CTR支持密钥流的预计算。预计算处理能够减少数据包的延迟性。无论对于加密还是解密,AES CTR仅使用AES的加密操作。这使得AES—CTR相较于AES其它模式实现更为精简。如果AES—CTR得到正确使用,能够提供很强的保密性;

    aes_ige.c         IGE模式加密的实现;

    asm                  汇编目录下放置着不同架构cpu对aes加密的优化实现。

    参考文献:

    1. 分组对称加密模式:ECB/CBC/CFB/OFBhttp://blog.csdn.net/SearchSun/archive/2008/06/06/2516191.aspx.

    2. 对称块加密算法加密模式详解 http://dev.csdn.net/article/16/16674.shtm

    3. http://zh.wikipedia.org/zh-cn/AES

  • 相关阅读:
    c中NULL,'\0'和0之间的区别. (the difference between NULL,'\0' and 0 in c)
    python 解析xml文件python parse xml.
    mysql升级 ,MySQL Error: #1558 Column count of mysql.proc is wrong. Expected 20, found 16.
    文献随笔15
    文献笔记11
    文献笔记16
    文献笔记13
    文献笔记17
    文献笔记20
    文献笔记19
  • 原文地址:https://www.cnblogs.com/p2liu/p/6048822.html
Copyright © 2020-2023  润新知