从 SPARC T4 微处理器开始,可以在硬件中直接使用执行加密函数的新指令。这些指令是非特权指令。因此,任何程序都可以使用这些指令,无需任何内核环境、root 权限或其他特殊设置。加密直接在硬件上执行,而不使用大量的低级指令。因此,与以前采用有单独的加密处理单元的 SPARC 处理器的系统相比,加密运算速度更快。
以下比较显示了 SPARC T-3 系统与经过加密优化的 SPARC T-4 系统之间的数据流差异。
图 2-1 SPARC T 系统之间的数据流比较
下表提供了与特定的 Oracle Solaris 发行版相结合的 SPARC T 微处理器单元中加密函数的详细比较。
|
T4 加密指令包括以下指令:
aes_kexpand0、aes_kexpand1、aes_kexpand2
这些指令执行密钥扩展。它们将 128 位、192 位或 256 位用户提供的密钥扩展为在加密和解密过程中在内部使用的密钥排程。aes_kexpand2 指令仅用于 AES-256。另两种 aes_kexpand 指令用于全部三种密钥长度:AES-128、AES-192 和 AES-256。
aes_eround01、aes_eround23、aes_eround01_l、aes_eround_23_l
这些指令用于 AES 加密循环或变换。根据 FIPS 197 中的 AES 标准,所用的循环数量(例如 10、12 或 14)会因为 AES 密钥长度而有差异,因为使用较大的密钥大致上表示需要牺牲更多的计算性能来实现更强大的加密。
aes_dround01、aes_dround23、aes_dround01_l、aes_dround_23_l
这些指令以类似于加密的方式用于 AES 解密循环。
DES/DES-3、Kasumi、Camellia、Montgomery 乘/开方(针对 RSA Bignum)和 CRC32c 校验和指令
MD5、SHA1 和 SHA2 摘要指令
SPARC T4 硬件加密指令在运行 Oracle Solaris 11 的 SPARC T4 系统上可用,并通过系统的 T4 微处理器上的内置 t4 引擎自动使用。从 Oracle Solaris 11.2 开始,这些指令已嵌入到 OpenSSL 上游代码中。因此,在此发行版中,OpenSSL 1.0.1e 随附有一个使其可使用这些指令的修补程序。
有关 T4 指令的更多信息,请参考以下文章。
要确定是否正在使用 T4 优化,可使用 isainfo 命令。在输出中包括 sparcv9 和 aes 表示系统正在使用优化。
$ isainfo -v 64-bit sparcv9 applications crc32c cbcond pause mont mpmul sha512 sha256 sha1 md5 camellia kasumi des aes ima hpc vis3 fmaf asi_blk_init vis2 vis popc
要检查正在系统上运行的 OpenSSL 的版本,请键入 openssl version。输出以下类似内容:
OpenSSL 1.0.0j 10 May 2012
要确定您的系统是否支持带 SPARC T4 优化的 OpenSSL,请按如下方式检查 libcrypto.so 库:
# nm /lib/libcrypto.so.1.0.0 | grep des_t4 [5239] | 504192| 300|FUNC |GLOB |3 |12 |des_t4_cbc_decrypt [5653] | 503872| 300|FUNC |GLOB |3 |12 |des_t4_cbc_encrypt [4384] | 505024| 508|FUNC |GLOB |3 |12 |des_t4_ede3_cbc_decrypt [2963] | 504512| 508|FUNC |GLOB |3 |12 |des_t4_ede3_cbc_encrypt [4111] | 503712| 156|FUNC |GLOB |3 |12 |des_t4_key_expand
如果该命令不生成任何输出,则您的系统不支持针对 OpenSSL 的 SPARC T4 优化。