Ядро 5.1, поточне в той момент, коли я це пишу, має два різні формати для рядка шифру, "старий" формат і "новий" формат. Все в цьому питанні поки що, і, мабуть, і всі документи теж стосується "старого" формату, тому опишу його тут. Це просто для шифрування. Якщо ви використовуєте цілісність з dm-crypt, тоді слід розглянути шифри AEAD, і це стає ще складніше.
Формат, розібраний ядром, - це " шифр [ :
keycount ] -
режим -
ivmode [ :
ivopts ]". Приклади: aes-xts-plain64
, blowfish-cbc-essiv:sha256
, aes:64-cbc-lmk
.
шифрувати
шифр для використання, прикладиaes
,anubis
,twofish
,arc4
і т.д. ДЙ-крипти драйвер ядра не має список шифрів. Це передається в API Crypto API, тому будь-який відповідний шифр, підтримуваний ядром, може бути використаний.
keycount
Додаткова потужність двох клавіш для використання з шифром. Це значення за замовчуванням до 1 для всіх, крімlmk
ivmode, де він за замовчуванням до 64. Це дійсно стосується лише LMK, а значення, відмінні від 1, не працюватимуть належним чином в інших режимах.
режим Блок ланцюгового режиму для використання з шифром. Прикладами єecb
,cbc
,xts
. Окрім того, що знає, щоecb
не використовує IV, драйвер md-crypt передає це через API Crypto API і може використовувати будь-який режим ланцюга, підтримуваний ядром.
ivmode Алгоритм, що використовується для генерування вектора ініціалізації (IV) для кожного сектора. У типовому симетричному шифруванні ключа, на відміну від dm-крипти, 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
рядку. Однак багато шифрів (як правило, програмне забезпечення, яке не має певного апаратного коду) реалізуються як загальний шифр, який поєднується з загальним кодом блочного ланцюга для отримання остаточного шифру. Наприклад:
name : xts(anubis)
driver : xts(ecb(anubis-generic))
module : kernel
type : skcipher
name : anubis
driver : anubis-generic
module : anubis
type : cipher
У цьому випадку шифр anubis поєднується з кодом режиму ланцюга блоку ядра XTS для отримання остаточного шифру xts(anbuis)
, якому було призначено модуль kernel
. Але для того, щоб мати це в наявності, нам потрібен загальний шифр анубіса, який є з anubis
модуля. Більшість шифрів мають псевдонім модуля « crypto-
шифр », який можна використовувати для їх завантаження, наприклад, він modprobe crypto-anubis
би завантажував модуль, що забезпечує шифр анубіса.
При використанні cryptsetup benchmark
команди мають значення лише шифр і режим , оскільки це все, що орієнтоване. Якщо режим не вказаний, він за замовчуванням відповідає CBC. Ivmode повністю ігнорується. Таким чином, для порівняльного аналізу, aes
, aes-cbc
і aes-cbc-foobar
все еквівалентні.
/lib/modules/*/kernel/crypto/
це, ймовірно, місце для пошуку, але модулі можуть бути в будь-якому місці файлової системи.