首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 gKrypt 快速保护您的数据(1)

使用 gKrypt 快速保护您的数据(1)

简介在当今的世界中,人们以及各种机构会存储几乎各种类型的信息,用电子方式处理这些信息,并且经常通过本地网络或 Internet 传输信息。结果是,对这些信息进行未授权访问的风险显著增加了,并且对信息安全的挑战也在日益增加。对被截取的传输内容进行未经授权的访问可能危及个人和组织敏感个人信息与财务信息的安全,导致严重违反安全性的问题。对于企业而言,这种违反安全性的问题会使其遭受财务方面的损失、昂贵的法律诉讼,以及声誉和业务受损。对于个人而言,这种问题会导致其身份被盗用以及财务历史信息丢失和信用等级下降。并且从这种信息问题造成的影响中恢复过来可能需要数年的时间以及高昂的成本。加密是保护敏感和重要的个人与组织信息不受这些信息安全性问题影响的有效解决方案,因此加密也成为数据安全系统的基本要素。
批量加密技术提供了在数据传输或存储期间对大量数据进行加密的方法。但在最近几年,对于必须同时加密的敏感信息量,其增长速度已经超出了 CPU 计算能力的增长速度。目前,批量加密的处理能力需求必须通过专门的硬件解决方案,以密码加速器的形式(参阅 )才能得到满足。诸如数据加密标准 (DES) 和高级加密标准 (AES) 等大部分加密算法本身具有较高级别的数据并行性和计算密度,使其很适合 GPU 上的并行实现,并且可有效取代专用的硬件密码解决方案(参阅 )。
gKrypt 引擎gKrypt 引擎是一个现成的密码模块,提供了简单的 API 来使用 Rijndael 高级加密标准与 GPU(参阅 )。它可充分利用显卡和计算处理器形式的底层并行硬件,将计算密集型的加密工作负载从处理器上卸载下来。gKrypt 简单的 C/C++ 接口与 Java™ 和 C# 接口的绑定让希望部署 GPU 解决方案,但又缺乏并行语言(如 CUDA 和 OpenCL)知识的开发人员具有了显著的优势。
该框架支持基于 AMD 和 NVIDIA 的 GPU 以及多核 CPU,因此很容易利用并行处理器的优势。下节解释了 AES 的底层方法以及并行性分析。
高级加密标准 (AES) 算法高级加密标准 (AES) 是美国国家标准与技术研究院 (NIST) 认可的加密标准,它基于 Rijndael 密码(参阅 )。Rijndael 是由比利时密码学家 Joan Daemen 和 Vincent Rijmen 为 NIST 发起的 AES 选择过程所提议的对称密钥分组密码(参阅 )。NIST 于 2001 年 11 月批准 Rijndael 成为高级加密标准 (AES),并且该标准实际取代了已经老化的数据加密标准 (DES)。AES 标准由 3 个分组密码 (block-cipher) 组成,密钥大小为 128、192 和 256 位,但都具有相同的 128 位数据块,因此分别命名为 AES-128、AES-192 和 AES-256。
AES 分组密码是在一个二维字节数组上运行的,该数组又称为状态 (state),用 s 表示。状态数组的大小为 16 字节(128 位),排列为四行四列。这用 Nb = 4 来表示,实际上是一个状态数组中的列数。AES 支持的密钥大小是 128、192 和 256 位,分别用 Nk = 4、6 或 8 表示。AES 应用面向字节的转换(通常称为 AES 转换)来加密或解密状态数组。这些转换适用于具体数量的轮次 Nr,这取决于密钥大小。对于 128、192 和 256 位密钥,Nr 分别为 10、12 和 14。
显示了 AES 算法的各个阶段。
图 1. AES 算法的各个阶段开始 AES 转换之前,会使用 Rijndael 密钥编排 (Key-Schedule) 扩展用户提供的密码-密钥。密钥扩展步骤(如  所示)实现了密钥编排并为后续阶段中的所有轮次提供扩展后的密钥。扩展后的密钥大小计算方法是 Nb(Nr + 1),这是 32 位字(列)的数目。扩展后的密钥的另一部分在每个轮次的 AddRoundKey 步骤中使用。
AES 加密过程的第一步是 AddRoundKey 转换,即使用  中等式所定义的按位异或 (Exclusive OR, xor) 运算将状态数组的每个字节与轮次密钥 (round-key) 组合起来。
图 2. AES 加密过程的第一步下面的  阐释了该步骤。状态、新状态和轮次密钥都表示为 4x4 的字节数组(128 位),因为 Nb = 4。字节数据是用十六进制字形式表示的。
图 3. AddRoundKey 转换在 AES 的下一个阶段中,按照  中所示的顺序,所有四个转换会重复应用 Nr - 1 次,从 Nr = 1 开始,直到 Nr - 1。我会按照转换的应用顺序解释每个转换。
SubBytes 转换是一个非线性字节替代步骤,会根据一个称为 S-Box 的查找表替换状态数组中的每个字节。状态数组中的每个字节都被 S-Box 中的一个条目所替代,该条目与要替代的字节的十六进制值具有相同的索引。 更好地展示了该过程。
图 4. SubBytes 转换此处状态数组的第一个字节拥有一个十六进制值。根据行索引 1 和列索引 9 的交点来确定替代值。同样,字节 {be} 将被 S-Box 中的行索引 b 和列索引 e 所替代。
在 ShiftRows 转换中,按照  中的等式约定,将 状态 数组中的每一行循环位移不同的偏移量。
图 5. 状态数组中的每一行循环位移不同的偏移量移位值 shift(r, Nb) 取决于行号 r,如  中的公式所示。
图 6. 移位值取决于行号针对每一行解析上面的等式表明:第一行是不移位的,而第二行、第三行和第四行的每个字节分别向左移位 1、2 和 3 字节。下面的  解释了如何移位每一行以及最终得到的新状态数组。
图 7. ShiftRows 转换移位模式将各字节移到该行中较低的位置,而将最后一个字节移到该行的开头。
MixColumns 转换在状态数组的各列上执行操作,将每个列视为 GF(28) 上的一个四元素多项式。然后使用 x4 + 1 为模将每个列与  中的多项式系数等式相乘。
图 8. 多项式系数这相当于将状态数组中的每个列替换为该列与系数矩阵的矩阵乘积,如  所示。
图 9. MixColumns 转换
返回列表