# Conjunt d'instruccions AES

Un conjunt d'instruccions AES (Advanced Encryption Standard) és un conjunt d'instruccions dissenyades específicament per realitzar operacions de xifratge i desxifrat AES de manera eficient. Aquestes instruccions es troben normalment als processadors moderns i poden accelerar molt les operacions AES en comparació amb les implementacions de programari. Un conjunt d'instruccions AES inclou instruccions per a l'expansió, el xifratge i el desxifrat de claus amb diferents mides de clau (128 bits, 192 bits i 256 bits).
El conjunt d'instruccions sovint s'implementa com un conjunt d'instruccions que poden realitzar una única ronda d'AES juntament amb una versió especial per a l'última ronda que té un mètode lleugerament diferent.
Quan AES s'implementa com a conjunt d'instruccions en lloc de programari, pot tenir una seguretat millorada, ja que la seva superfície d'atac del canal lateral es redueix.

## Processadors d'arquitectura x86

AES-NI (o l'estàndard Intel Advanced Encryption New Instructions; AES-NI) va ser la primera implementació important. AES-NI és una extensió de l'arquitectura del conjunt d'instruccions x86 per a microprocessadors d'Intel i AMD proposada per Intel el març de 2008.
Una versió més àmplia d'AES-NI, AVX-512 Vector AES instructions (VAES) es troba a AVX-512.

### Instruccions

| Instrucció | Descripció |
| AESENC | Realitzeu una ronda d'un flux de xifratge AES |
| AESENCLAST | Realitzeu l'última ronda d'un flux de xifratge AES |
| AESDEC | Realitzeu una ronda d'un flux de desxifrat AES |
| AESDECLAST | Realitzeu l'última ronda d'un flux de desxifrat AES |
| AESKEYGENASSIST | Ajuda a la generació de claus rodones AES |
| AESIMC | Ajuda a la generació de claus rodones de desxifrat AES. Aplica columnes de mescla inversa a les tecles rodones. |

### Intel

Els processadors Intel següents admeten el conjunt d'instruccions AES-NI:
* Processadors basats en Westmere, concretament:
** Processadors Westmere-EP (també conegut com a model de servidor DP de la sèrie Gulftown Xeon 5600)
** Processadors Clarkdale (excepte Core i3, Pentium i Celeron)
** Processadors Arrandale (excepte Celeron, Pentium, Core i3, Core i5-4XXM)
* Processadors Sandy Bridge :
** Escriptori: tots excepte Pentium, Celeron, Core i3
** Mòbil: tots els Core i7 i Core i5. Diversos venedors han enviat configuracions de BIOS amb l'extensió desactivada; Cal una actualització de la BIOS per activar-los.
* Processadors Ivy Bridge
** Només tots els i5, i7, Xeon i i3-2115C
* Processadors Haswell (tots excepte i3-4000m, Pentium i Celeron)
* Processadors Broadwell (tots excepte Pentium i Celeron)
* Processadors Silvermont/Airmont (tots excepte Bay Trail-D i Bay Trail-M)
* Processadors Goldmont (i posteriors).
* Processadors Skylake (i posteriors).

### AMD

Diversos processadors AMD admeten instruccions AES:
* Processadors Jaguar i més nous
* Processadors Puma i més nous
* Processadors "Equip Pesat".
** Processadors de bulldozer
** Processadors Piledriver
** Processadors Steamroller
** Processadors d'excavadores i més nous
* Processadors basats en Zen (i posteriors).

## Acceleració de maquinari en altres arquitectures

El suport AES amb instruccions de processador sense privilegis també està disponible als processadors SPARC més recents (T3, T4, T5, M5 i posterior) i als processadors ARM més recents. El processador SPARC T4, introduït el 2011, té instruccions a nivell d'usuari que implementen rondes AES. Aquestes instruccions s'afegeixen a les ordres de xifratge de nivell superior. L'arquitectura del processador ARMv8-A, anunciada el 2011, incloent l'ARM Cortex-A53 i A57 (però no els processadors v7 anteriors com el Cortex A5, 7, 8, 9, 11, 15) també tenen instruccions a nivell d'usuari que implementen rondes AES.

### Arquitectura ARM

La informació de programació està disponible al Manual de referència de l'arquitectura ARM ARMv8, per al perfil d'arquitectura ARMv8-A (Secció A2.3 "L'extensió criptogràfica Armv8").
El Marvell Kirkwood era el nucli incrustat d'una gamma de SoC de Marvell Technology, aquestes CPU SoC (ARM, mv_cesa a Linux) utilitzeu el maneig AES accelerat basat en controladors. (Vegeu Crypto API (Linux).
* Arquitectura ARMv8-A
** Les extensions criptogràfiques ARM admeten opcionalment els nuclis ARM Cortex-A30/50/70
* Acceleradors/motors de maquinari criptogràfic
** Allwinner
*** A10, A20, A30, A31, A80, A83T, H3 i A64 mitjançant el sistema de seguretat
** Broadcom
*** BCM5801/BCM5805/BCM5820 utilitzant el processador de seguretat
** NXP Semiconductors
*** i.MX6 en endavant
** Qualcomm
*** Snapdragon 805 en endavant
** Rockchip
*** Sèrie RK30xx en endavant
** Samsung
*** Sèrie Exynos 3 en endavant

### Arquitectura RISC-V

Tot i que l'arquitectura RISC-V no inclou instruccions específiques d'AES, una sèrie de xips RISC-V inclouen coprocessadors AES integrats. Alguns exemples inclouen:
* RISC-V de doble nucli Sipeed-M1 de 64 bits compatible amb AES i SHA256.
* ESP32 -C basat en l'arquitectura RISC-V (així com ESP32 basat en Xtensa), admet AES, SHA, RSA, RNG, HMAC, signatura digital i XTS 128 per a flash.
* Bouffalo Labs BL602/604 RISC-V de 32 bits admet diverses variants AES i SHA.

## Referències

* ↑ «Intel Software Network» (en anglès). Intel. Arxivat de l'original el 7 abril 2008. [Consulta: 5 abril 2008].
* ↑ «Intel® Architecture Instruction Set Extensions and Future Features Programming Reference» (en anglès). Intel. [Consulta: 16 octubre 2017].
* ↑ Shay Gueron. «Intel Advanced Encryption Standard (AES) Instruction Set White Paper» (en anglès). Intel. [Consulta: 20 setembre 2012].
* ↑ «Intel Product Specification Advanced Search» (en anglès). Intel ARK.
* ↑ Dan Anderson. «SPARC T4 OpenSSL Engine» (en anglès). Oracle. [Consulta: 20 setembre 2012].
* ↑ Richard Grisenthwaite. «ARMv8-A Technology Preview» (en anglès). ARM. Arxivat de l'original el 2018-06-10. [Consulta: 20 setembre 2012].
* ↑ «Arm Architecture Reference Manual Armv8, for Armv8-A architecture profile» (en anglès). ARM, 22-01-2021.