编程语言及工具
高级加密标准 (AES) 已经成为很多应用(诸如嵌入式系统中的应用等)中日渐流行的密码规范。自从 2002 年美国国家标准技术研究所 (NIST) 将此规范选为标准规范以来,处理器、微控制器、FPGA 和 SoC 应用的开发人员就开始利用 AES 来保护输入、输出及保存在系统中的数据。我们可在更高抽象层上非常高效地描述算法,就像用于传统软件开发中那样;但由于涉及到的操作,该算法在 FPGA 中实现起来最为高效。开发人员甚至可在布线中“免费”获得一些操作。
基于这些原因,AES 是个绝佳的例子,即开发人员可利用 C 语言描述算法,然后在硬件中加速实现,从而受益于赛灵思 SDSoC? 开发环境。本文中我们就是要这样做,首先熟悉一下 AES 算法,然后在赛灵思 Zynq?-7000 All Programmable SoC 的处理系统 (PS) 上实现 AES256(256 位秘钥长度)以建立软件性能基准,然后再在片上可编程逻辑 (PL) 中进行加速。为了完全了解可获得的优势,我们将在 SDSoC 环境所支持的全部三个操作系统中执行这几个步骤,三个操作系统为:Linux、FreeRTOS 和裸机。
AES 属于对称块密码,可采用 128、192 和 256 位不同的秘钥长度。秘钥长度决定加密或解密数据所需的处理步骤数。顾名思义,块密码算法采用的是数据块。AES 算法一次处理 16 字节的固定模块。因此,如果我们密码内容少于 16 字节,就必须将未使用的字节进行填充。
由于 AES 是对称密码,信息加密和解密都采用相同的做法和秘钥。相反,非对称算法(例如 RSA)则使用不同秘钥进行数据加密和解密。
AES 算法中四个阶段中每个阶段都代表一个状态。四个 AES 阶段的组合称为一个循环。所需循环的数量取决于秘钥长度。
很简单,AES 状态起始于我们要加密的 16 个字节。每个新步骤都会对状态进行更新。处理状态之前,我们需要将输入字节串变为初始状态,即 4 x 4 矩阵(图 1)。
全部0条评论
快来发表一下你的评论吧 !