AES-NI
1. 개요
AES-NI는 AES(Advanced Encryption Standard) 암호화 알고리즘을 위한 x86 CPU의 명령어 집합으로, 암호화 및 복호화 연산 속도를 향상시킨다. 인텔과 AMD를 포함한 여러 CPU 제조사에서 지원하며, AESENC, AESDEC, AESKEYGENASSIST 등의 명령어를 포함한다. AES-NI는 다양한 운영체제, 암호화 라이브러리 및 소프트웨어에서 지원되며, 성능 향상에 기여한다. 또한, AES-NI는 다른 암호 알고리즘에도 활용될 수 있으며, AVX-512와 같은 확장된 명령어 집합으로 성능을 더욱 향상시킬 수 있다.
| 종류 | 명령어 집합 확장 |
|---|---|
| 설계자 | 인텔 |
| 소개 | 2010년 |
| 아키텍처 | x86 |
| 사용 | 고급 암호 표준(AES) 알고리즘의 속도 향상 |
| 대체 이름 | AES-NI |
|---|---|
| 유형 | 명령어 집합 확장 |
| 목적 | AES 암호화 및 암호 해독 가속화 |
| 도입 시기 | 웨스트미어 (2010년) |
| 지원 아키텍처 | 인텔 64 x86 |
| AESENC | AES 암호화 라운드 수행 |
|---|---|
| AESDEC | AES 암호 해독 라운드 수행 |
| AESENCLAST | AES 암호화 마지막 라운드 수행 |
| AESDECLAST | AES 암호 해독 마지막 라운드 수행 |
| AESKEYGENASSIST | AES 라운드 키 생성 지원 |
| AESIMC | AES 역혼합 열 연산 지원 |
-
고급 암호화 표준 -
Poly1305
Poly1305는 16바이트 비밀 키와 메시지를 입력으로 받아 16바이트 해시값을 출력하는 메시지 인증 코드 알고리즘으로, 카터-웨그만 구조에 기반하여 OpenSSH, 구글 Chrome, 안드로이드 등에서 메시지 인증 및 암호화에 활용되며 빠른 계산 속도와 효율적인 작동이 특징이다. -
X86 명령어 -
스트리밍 SIMD 확장
스트리밍 SIMD 확장(SSE)은 x86 아키텍처의 SIMD 명령어 집합으로, 128비트 XMM 레지스터를 사용하여 데이터 병렬 처리를 통해 성능을 향상시키며, 인텔 펜티엄 III 프로세서에 처음 도입되어 여러 후속 버전으로 발전했다. -
X86 명령어 -
SSE2
SSE2는 인텔이 개발한 x86 아키텍처의 SIMD 명령어 집합 확장으로, MMX 명령어의 정수 벡터 연산을 확장하고 XMM 레지스터를 사용하여 부동 소수점 연산 성능을 향상시키며, AMD64 아키텍처에서도 지원된다. -
X86 아키텍처 -
물리 주소 확장
물리 주소 확장(PAE)은 x86 아키텍처에서 32비트 주소를 36비트 이상으로 확장하여 CPU가 4GB 초과 물리 메모리에 접근하도록 하는 기술로, 페이지 테이블 확장 및 추가 페이지 테이블을 통해 최대 64GB 메모리를 지원하며 AMD64 아키텍처에서 가상 주소 공간 확장에 사용되고 운영 체제, 칩셋, 마더보드의 지원이 필요하며 CPUID 플래그로 지원 여부를 확인한다. -
X86 아키텍처 -
X86 가상화
X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다.
2. 명령어 목록
AES-NI는 AES 암호화 및 복호화 과정에 필요한 여러 명령어들을 포함하고 있다. 각 명령어의 기능은 다음과 같다.
2.1. 주요 명령어
AES-NI는 AES 암호화 및 복호화 과정을 가속화하기 위해 설계된 명령어 집합이다. 주요 명령어와 그 기능은 다음과 같다.
이 명령어들은 각각 암호화, 복호화, 키 생성, 그리고 보조 연산 등 특정 작업을 담당하여 전체적인 암호화 성능을 향상시킨다.
2.1.1. 암호화 관련 명령어
| 명령어 | 설명 |
|---|---|
| AESENC | AES 암호화 한 라운드를 수행한다. |
| AESENCLAST | AES 암호화의 마지막 라운드를 수행한다. |
| AESDEC | AES 복호화 한 라운드를 수행한다. |
| AESDECLAST | AES 복호화의 마지막 라운드를 수행한다. |
| AESKEYGENASSIST | AES 라운드 키 생성을 돕는다. |
| AESIMC | AES Inverse Mix Column 연산을 수행한다. |
| PCLMULQDQ | 캐리 없는 곱셈(CLMUL) |
2.1.3. 키 생성 및 처리 관련 명령어
`AESKEYGENASSIST` 명령어는 AES 라운드 키 생성을 지원한다. 이 명령어는 이중 쿼드워드(SSE 레지스터)의 4개의 32비트 단어에서 AES 키 확장의 4개의 병렬 하위 표현식을 계산한다. AES-256에서는 AES S-box 치환 및 가 사용되고, AES-128, AES-192, AES-256에서는 및 가 사용된다.
`AESIMC` 명령어는 AES 복호화 라운드 키 생성을 지원하며, 라운드 키에 역 혼합 열을 적용한다.
3. AES-NI 지원 CPU
AES-NI는 인텔과 AMD를 포함한 다양한 제조사의 CPU에서 지원된다.
인텔은 웨스트미어 아키텍처 기반 프로세서 일부, 샌디브리지 기반 프로세서 (데스크톱은 코어 i5, 코어 i7, 제온, 모바일은 코어 i5, 코어 i7. 일부 노트북은 바이오스 설정에서 비활성화 후 업데이트), 아이비브리지 기반 프로세서 (모든 코어 i5, 코어 i7, 제온, i3-2115C), 하스웰 기반 프로세서 (코어 i3-4000M, 펜티엄, 셀러론 제외), 브로드웰 기반 프로세서 (펜티엄 3xxxU, 셀러론 3xxxU 제외), 스카이레이크 기반 프로세서 (펜티엄 3xxxU, 셀러론 3xxxU 제외)에서 지원된다.
AMD는 불도저 기반 프로세서, 파일드라이버, 스팀롤러, 재규어, 푸마, 젠 기반 프로세서 (라이젠, EPYC)에서 지원된다.
3.1. 인텔 (Intel)
인텔은 네할렘 마이크로아키텍처의 개선판인 웨스트미어 아키텍처 기반 프로세서부터 AES-NI를 지원하기 시작했다. 이후 샌디브리지, 아이비브리지, 하스웰, 브로드웰, 스카이레이크 등 후속 아키텍처 프로세서에서도 AES-NI를 지원한다.
3.1.1. 지원 프로세서 목록
다음은 AES-NI 명령어 집합을 지원하는 프로세서 목록이다.
* 인텔
* AMD
인텔은 AES-NI를 지원하는 프로세서 목록을 웹사이트에 공개하고 있다.
3.2.1. 지원 프로세서 목록
* 인텔
* 웨스트미어 기반 프로세서 중 일부
* 웨스트미어-EP (제온 5600 시리즈)
* 클락데일 (코어 i3, 펜티엄, 셀러론 제외)
* 애런데일 (코어 i5-4xxM, 코어 i3, 펜티엄, 셀러론 제외)
* 샌디브리지 기반 프로세서
* 데스크톱: 코어 i5, 코어 i7, 제온
* 모바일: 코어 i5, 코어 i7. 일부 노트북 제조사들은 바이오스 설정에서 AES-NI를 비활성화시켜 두었고 이후 업데이트로 활성화시켰다.
* 아이비브리지 기반 프로세서
* 모든 코어 i5, 코어 i7, 제온, i3-2115C
* 하스웰 기반 프로세서
* 코어 i3-4000M, 펜티엄, 셀러론 제외 모든 프로세서
* 브로드웰 기반 프로세서
* 펜티엄 3xxxU, 셀러론 3xxxU 제외 모든 프로세서
* 스카이레이크 기반 프로세서
* 펜티엄 3xxxU, 셀러론 3xxxU 제외 모든 프로세서
* AMD
* 불도저 기반 프로세서
* 파일드라이버 기반 프로세서
* 스팀롤러 기반 프로세서
* 재규어 기반 프로세서
* 푸마 기반 프로세서
* 젠 기반 프로세서 (라이젠, EPYC)
4. 성능
패트릭 슈미트(Patrick Schmid)와 아힘 로스(Achim Roos)는 AES-NI Performance Analyzed에서 "인텔의 AES-NI 기능을 활용하도록 이미 최적화된 소수의 애플리케이션에서 인상적인 결과를 발견했다"고 밝혔다. Crypto++ 보안 라이브러리를 사용한 성능 분석 결과, AES/GCM의 처리량이 가속 기능이 없는 펜티엄 4에 비해 바이트당 약 28.0 사이클에서 3.5 사이클로 증가했다.
5. 지원 소프트웨어
AES-NI는 발표 이후 출시된 다양한 컴파일러 및 소프트웨어에서 널리 사용되고 있다. 주요 지원 소프트웨어는 다음과 같다.
이 외에도 NonStop SSH2, NonStop cF SSL 라이브러리 및 BackBox VTC 소프트웨어 HPE Tandem NonStop OS L-series 등 다양한 소프트웨어에서 AES-NI를 지원한다.
5.1. 운영체제
* 마이크로소프트 윈도우: Windows 7부터 차세대 암호화 API (CNG)를 통해 지원한다.
* 리눅스: 커널 암호화 API를 통해 지원한다.
* macOS: FileVault 2 (macOS 10.10 이상) 전체 디스크 암호화 기능에서 지원한다.
* FreeBSD: OpenCrypto API (aesni(4) 드라이버)를 통해 지원한다.
* 솔라리스: 솔라리스 10 이상의 암호화 프레임워크에서 지원한다.
5.2. 암호화 라이브러리
* OpenSSL 1.0.1 이상
* GnuTLS
* Crypto++
* NSS 3.13 이상 (파이어폭스, 구글 크롬 등에서 사용)
* 자바 7 HotSpot
* Bloombase Cryptographic Module
5.3. 기타 애플리케이션
AES-NI 발표 이후 출시된 여러 컴파일러 및 소프트웨어에서 해당 명령어를 지원하며, 다음을 포함한다.
* 7-Zip 9.1
* BitLocker
* VeraCrypt
* Go 프로그래밍 언어
* Bloombase 암호화 모듈
* Oracle Database 11g Release 2 Patchset 1 (11.2.0.2) 투명 데이터 암호화
* Citrix XenClient 1.0 이후
* FileVault 버전 2 (macOS 10.14(모하비)) 디스크 전체 AES 암호화
* FreeBSD의 OpenCrypto API (aesni(4) 드라이버)
* Vormetric Encryption 5
6. AES-NI의 확장 및 활용
AES-NI는 인텔 AVX-512 명령어 집합에 포함된 VAES를 통해 확장되어 더욱 향상된 성능을 제공한다. 또한, 최신 SPARC 프로세서(T3, T4, T5, M5 이상)와 최신 ARM 프로세서에서도 비특권 프로세서 명령어를 통해 AES를 지원한다.
마벨 테크놀로지의 SoC CPU는 드라이버 기반 가속 AES 처리를 사용하며, Linux 암호화 API를 참조한다. ARMv8-A 아키텍처의 ARM 암호화 확장은 ARM Cortex-A30/50/70 코어에서 선택적으로 지원된다.
다음은 암호화 하드웨어 가속기/엔진을 사용하는 제조사 및 제품 목록이다.
RISC-V 아키텍처는 스칼라 및 벡터 암호화 명령어 집합 확장을 통해 AES, GHASH, SHA-256, SHA-512, SM3, SM4에 대한 하드웨어 가속을 구현한다. RISC-V에서 AES 전용 명령어를 사용할 수 있기 전에는 듀얼 코어 RISC-V 64비트 Sipeed-M1 (AES 및 SHA256 지원), RISC-V 아키텍처 기반 ESP32-C, Bouffalo Labs BL602/604 32비트 RISC-V 등 AES 보조 프로세서를 포함한 여러 RISC-V 칩이 있었다.
Power ISA v2.07부터 `vcipher` 및 `vcipherlast` 명령을 통해 AES의 한 라운드를 직접 구현하며, IBM z9 이후의 메인프레임 프로세서는 IBM의 CryptoExpress 하드웨어를 통해 단일 연산 코드(KM, KMC) AES ECB/CBC 명령어를 지원한다.
Atmel XMEGA, SPARC T3 이후 프로세서, Cavium Octeon MIPS 기반 프로세서도 AES를 포함한 여러 암호화 알고리즘에 대한 하드웨어 지원을 제공한다.
AES 명령어 집합은 SM4, Camellia, ARIA와 같이 유사한 구조의 S-box를 가진 블록 암호에 적용되어 성능 향상을 꾀할 수 있다. 또한, 새로운 암호화 알고리즘은 AES 알고리즘의 일부를 활용하여 AES 명령어 집합을 통한 성능 향상을 얻을 수 있도록 설계되기도 한다. 인증된 암호화를 제공하는 AEGIS는 AES보다 최소 두 배 빠른 속도로 실행되며, CAESAR 공모전에서 "고성능 응용 분야의 추가 결선 진출자"이다.
6.1. AVX-512 벡터 AES 명령어 (VAES)
인텔은 AVX-512 명령어 집합에 포함된 VAES를 통해 AES-NI를 확장하여 더욱 향상된 성능을 제공한다.
6.2. 다른 아키텍처에서의 하드웨어 가속
최신 SPARC 프로세서(T3, T4, T5, M5 이상)와 최신 ARM 프로세서에서도 비특권 프로세서 명령어를 통해 AES를 지원한다. 2011년에 출시된 SPARC T4 프로세서는 AES 라운드를 구현하는 사용자 수준 명령어를 가지고 있다. ARMv8-A 프로세서 아키텍처는 2011년에 발표되었으며, ARM Cortex-A53 및 A57을 포함한다(하지만 Cortex A5, 7, 8, 9, 11, 15와 같은 이전 v7 프로세서는 제외). 이 아키텍처 역시 AES 라운드를 구현하는 사용자 수준 명령어를 갖추고 있다.
마벨 테크놀로지의 다양한 SoC에 내장된 코어인 Marvell Kirkwood는 SoC CPU(ARM, Linux의 mv_cesa)가 드라이버 기반 가속 AES 처리를 사용한다. (Linux 암호화 API 참조).
* ARMv8-A 아키텍처
** ARM 암호화 확장은 ARM Cortex-A30/50/70 코어에서 선택적으로 지원된다.
* 암호화 하드웨어 가속기/엔진
RISC-V 아키텍처를 위한 스칼라 및 벡터 암호화 명령어 집합 확장은 각각 2022년과 2023년에 비준되었으며, 이를 통해 RISC-V 프로세서는 AES, GHASH, SHA-256, SHA-512, SM3, SM4에 대한 하드웨어 가속을 구현할 수 있게 되었다.
RISC-V에서 AES 전용 명령어를 사용할 수 있기 전에는 여러 RISC-V 칩에 통합된 AES 보조 프로세서가 포함되어 있었다. 예시는 다음과 같다.
* 듀얼 코어 RISC-V 64비트 Sipeed-M1은 AES 및 SHA256을 지원한다.
* RISC-V 아키텍처 기반 ESP32-C (Xtensa 기반 ESP32도 마찬가지)는 플래시용 AES, SHA, RSA, RNG, HMAC, 디지털 서명 및 XTS 128을 지원한다.
* Bouffalo Labs BL602/604 32비트 RISC-V는 다양한 AES 및 SHA 변형을 지원한다.
Power ISA v2.07부터, `vcipher` 및 `vcipherlast` 명령은 AES의 한 라운드를 직접 구현한다.
IBM z9 또는 그 이후의 메인프레임 프로세서는 IBM의 CryptoExpress 하드웨어를 통해 단일 연산 코드(KM, KMC) AES ECB/CBC 명령어를 지원한다.
* Atmel XMEGA (병렬 실행을 갖춘 온칩 가속기, 명령어는 아님)
* SPARC T3 및 이후 프로세서는 AES를 포함한 여러 암호화 알고리즘에 대한 하드웨어 지원을 제공한다.
* Cavium Octeon MIPS 모든 Cavium Octeon MIPS 기반 프로세서는 특수 보조 프로세서 3 명령어를 사용하여 AES를 포함한 여러 암호화 알고리즘에 대한 하드웨어 지원을 제공한다.