[0] Интро
Криптографический API в Linux введён с версии 2.5.45 ядра. С тех пор Crypto API оброс всеми популярными (и не только) международными стандартами:
- симметричного шифрования: AES, Blowfish, ...
- хэширования: SHA1/256/512, MD5, ...
- имитозащиты: hMAC-SHA1/256/512, hMAC-MD5, ...
- AEAD: AES-GCM, ChaCha20-Poly1305, ...
- генерации псевдослучайных чисел: FIPS, ...
- асимметричного шифрования: RSA
- согласования ключей: DH, ECDH
- сжатия: Deflate, ZLIB
Эта криптография доступна и, в основном, используется различными подсистемами ядра (в kernel space): IPsec, dm-crypt и др. Воспользоваться функциями Crypto API из пространства пользователя (user space) также возможно через Netlink-интерфейс, в который, начиная с версии 2.6.38 ядра, введено семейство _AFALG, предоставляющее доступ к криптографии ядра из user space кода. Однако, существующего функционала иногда недостаточно, таким образом появляется необходимость расширения Crypto API новыми алгоритмами.