
Функциональное расширение AES-NI (Advanced Encryption Standard New Instructions) предоставляет в распоряжение прикладного программиста набор инструкций, являющихся строительными блоками для реализации криптографических алгоритмов. Технология классифицируется как требующая явной поддержки: для ускорения шифрования и дешифрования программное обеспечение должно детектировать это функциональное расширение. Объединение аппаратно реализованных примитивов в необходимые итерационные алгоритмы происходит программно.
При двоичной совместимости и наличии общего для Intel и AMD метода детектирования, достижение оптимального уровня производительности может потребовать учета низкоуровневых особенностей реализации, а значит написания фрагментов кода, учитывающих свойства конкретных моделей процессоров.

AES-NI, базируясь на программной модели SSE, добавляет 6 новых инструкций, операнды которых располагаются в XMM-регистрах и/или 128-битных областях памяти.

Примечание. Инструкция PCLMULQDQ не входит в данную функциональную группу, упомянута в силу особенностей организации документа Intel.
Несмотря на разрядность операндов, составляющую 128 бит, в целях нивелирования потерь производительности, связанных с применением 128-битных инструкций в 256-битном контексте, специально предусмотрены 256-битные форматы инструкций, обнуляющие старшие 128 бит при сохранении 128-битного операнда в 256-битном регистре. Для использования таких инструкций, ОС должна обеспечить сохранение и восстановление 256-битного состояния блока AVX. В свою очередь, для 128-битного контекста, предусмотрены инструкции, не изменяющие старшие 128 бит 256-битных регистров AVX.
Как любое расширение системы команд x86, AES-NI является открытой спецификацией. Разработчик может реализовать собственные криптографические алгоритмы на языке ассемблера.

Ускорить процесс создания готовых программных продуктов можно применяя библиотеку Intel IPP Crypto Library.

Инструкции AES-NI поддерживаются современными версиями компиляторов для ОС Microsoft Windows и Linux.
Послесловие
Необходимо понимать, что имея полную информацию по набору инструкций AES-NI, достаточную для самостоятельного кодирования, мы, тем не менее, не можем утверждать, что все существующее программное обеспечение эффективно пользуется этой аппаратной поддержкой. Консервативность или проблемы с гибкостью могут сыграть в пользу программной реализации алгоритмов шифрования.