Ядро 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
кажется наиболее рекомендуемым.
null
IV всегда ноль. Для тестирования и обратной совместимости вы не должны использовать это.
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/crypto
name
skcipher
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
Значение type
of 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/
это вероятное место для поиска, но модули могут находиться где угодно в файловой системе.