Ядро 5.1, действующее в то время, когда я пишу это, имеет два разных формата: строку шифра, «старый» формат и «новый» формат. Пока что все в этом вопросе и, очевидно, во всех документах, имеет дело со «старым» форматом, поэтому я опишу его здесь. Это только для шифрования. Если используется целостность с dm-crypt, то нужно учитывать шифры AEAD, и это становится еще сложнее.
Анализируемый ядром формат - это « шифр [ :keycount ] -режим -ivmode [ :ivopts ]». Примеры: aes-xts-plain64, blowfish-cbc-essiv:sha256, aes:64-cbc-lmk.
шифровать
шифр для использования, примерыaes,anubis,twofish,arc4и т.д. дй-крипты драйвер ядра не имеет список шифров. Это передается в Linux Crypto API, поэтому можно использовать любой подходящий шифр, поддерживаемый ядром.
keycount
Опциональная мощность двух чисел ключей для использования с шифром. По умолчанию это значениеlmkравно1 для всего, кромеivmode, где оно по умолчанию равно 64. Это действительно относится только к LMK, и значения, отличные от 1, не будут работать должным образом с другими режимами.
mode Режим цепочки блоков для использования с шифром. Примерами являютсяecb,cbc,xts. Помимо знания, что неecbиспользует IV, драйвер md-crypt передает это через Linux Crypto API и может использовать любой режим цепочки, поддерживаемый ядром.
ivmode Алгоритм, используемый для генерации вектора инициализации (IV) для каждого сектора. В типичном шифровании с симметричным ключом, в отличие от dm-crypt, IV - это еще один бит данных, передаваемый в шифр вместе с ключом при шифровании или дешифровании. На всю операцию передан только один IV. Поскольку dm-crypt должен уметь читать и записывать каждый сектор отдельно, он не шифрует весь диск как одну операцию. Вместо этого есть IV для каждого сектора. Вместо того, чтобы передавать IV в качестве данных, здесь описан алгоритм создания IV. Это не является частью Linux Crypto API, поскольку шифрование IV не производится, а допустимыезначения ivmode определяются драйвером dm-crypt. Они есть:
plain, plain64, plain64be, benbi
Они просто использовать номер сектора, в различных форматах, как IV. Предназначен для блочных режимов, таких как XTS, которые разработаны, чтобы противостоять атакам, например водяным знакам, при использовании простого и предсказуемого IV. plain64кажется наиболее рекомендуемым.
nullIV всегда ноль. Для тестирования и обратной совместимости вы не должны использовать это.
lmk Совместим со схемой шифрования Loop-AES.
tcw Совместим с TrueCrypt.
essivИспользует номер сектора, зашифрованный с помощью хэша ключа. Предназначен для таких режимов, как CBC, которые не устойчивы к различным атакам при использовании простого IV plain64.
ivopts Хеш для использования сessiv ivmode , игнорируется для всех других режимов.
В особом случае « шифр-plain » или просто « шифр » интерпретируются как « шифр-cbc-plain ». Другим частным случаем является то, что ecbрежим не должен указывать ivmode .
Как это относится к /proc/crypto
Что касается /proc/crypto, только шифр и режим актуальны. dm-crypt с созданием спецификации Crypto API в форме " шифра режима " и запросом этого у ядра. Это то , что нужно искать в качестве для . Пример:()/proc/cryptonameskcipher
name : xts(aes)
driver : xts-aes-aesni
module : kernel
priority : 401
refcnt : 1
selftest : passed
internal : no
type : skcipher
async : yes
blocksize : 16
min keysize : 32
max keysize : 64
ivsize : 16
chunksize : 16
walksize : 16
Значение typeof skcipherуказывает на этот симметричный ключ шифра, который использует dm-crypt, и имя xts(aes)будет записано, aes-xtsесли указано с помощью dm-crypt. В keysizeполях также говорят нам , какие ключевых размеры могут быть использованы с этим шифром.
Если это из модуля, имя модуля может отображаться в moduleстроке. Тем не менее, многие шифры (как правило, те в программном обеспечении, которые не имеют какого-либо аппаратного кода) реализованы как универсальный шифр, который комбинируется с универсальным кодом цепочки блоков для создания окончательного skcipher. Например:
name : xts(anubis)
driver : xts(ecb(anubis-generic))
module : kernel
type : skcipher
name : anubis
driver : anubis-generic
module : anubis
type : cipher
В этом случае анубисный шифр объединяется с кодом режима цепочки блоков XTS ядра для получения окончательного шифра xts(anbuis), которому был назначен модуль kernel. Но для того, чтобы это было доступно, нам нужен общий шифр anubis, который взят из anubisмодуля. Большинство шифров имеют псевдоним модуля « crypto-шифр », который можно использовать для их загрузки, например modprobe crypto-anubis, загружал бы модуль, который предоставляет шифр анубиса.
При использовании cryptsetup benchmarkкоманды важны только шифр и режим , так как это все, что проверяется. Если режим не указан, по умолчанию используется CBC. Ivmode полностью игнорируется. Таким образом, для сравнительного анализа, aes, aes-cbcи aes-cbc-foobarвсе эквивалентны.
/lib/modules/*/kernel/crypto/это вероятное место для поиска, но модули могут находиться где угодно в файловой системе.