Як визначити, які шифри та режими шифрування я можу використовувати в dm-crypt / LUKS?


14

Я використовую систему на базі Ubuntu, і мені важко визначити, які шифри та режими шифрування мені доступні.

Сторінка людини cryptsetup говорить:

"Перегляньте / proc / crypto для переліку доступних опцій. Можливо, вам доведеться завантажити додаткові криптовалюти ядра, щоб отримати більше варіантів."

У моєму / proc / crypto дуже мало в ньому. Як дізнатися, які додаткові криптовалюти ядра доступні для завантаження?


/lib/modules/*/kernel/crypto/це, ймовірно, місце для пошуку, але модулі можуть бути в будь-якому місці файлової системи.
Марк

2
Я думаю, це хороше питання. Я сам шукав цю інформацію. /proc/cryptoчудово, але в ньому не вказані дійсні рядки шифру; такі речі, як aes-xts-plain64або aes-cbc-essiv:sha256. Хороша відповідь дасть цю інформацію та покаже, які модулі /lib/modules...потрібно завантажувати, щоб їх використовувати.
starfry

@starfry Мене також цікавить це. Оскільки між іменним рядком немає і тим, що знаходиться в моєму, не існує відповідності іменуванню /proc/crypto. Це не має сенсу.
CMCDragonkai

Відповіді:


10

Можна прочитати багато, багато документів та мандатних сторінок, але один документ, який може вас особливо зацікавити, - це специфікація формату LUKS On-Disk Format (PDF).

У додатку B (який, природно, знаходиться наприкінці), сказано:

Реєстр специфікацій Cipher та Hash

Навіть якщо шифрування назву і шифр режим рядок не інтерпретується будь-якою операцією LUKS, вони повинні мати однакове значення для всіх реалізацій для досягнення сумісності між різними реалізаціями LUKS на основі. LUKS повинен гарантувати, що система, що лежить в шифрі, може використовувати ім'я шифру та рядки в режимі шифрування, і оскільки ці рядки не завжди можуть бути вродженими для системи шифрів, LUKS, можливо, доведеться відобразити їх у щось відповідне.

Дійсні назви шифрів наведені в таблиці 1.

Дійсні режими шифрування перераховані в Таблиці 2. За контрактом, шифрові режими, що використовують IV та налаштування, повинні починатись із нульового IV / налаштування. Це стосується всіх викликів до примітивів шифрування / розшифрування, особливо під час роботи з ключовими матеріалами. Крім того, ці режими шифрування IV / tweak зазвичай розрізають потік шифрів на незалежні блоки шляхом повторного перетворення налаштування / IV на кордонах сектору. Потрібна загальна нульова частота IV / налаштування для першого зашифрованого / розшифрованого блоку еквівалентна вимозі, що перший блок визначений для відпочинку в секторі 0.

У таблиці 3 наведено дійсні хеш-характеристики для поля хеш-специфікацій . Сумісна реалізація не повинна підтримувати всі характеристики шифру, шифру або хеш-характеристики.

Таблиця 1: Дійсні назви шифрів

  • aes - Розширений стандарт шифрування - FIPS PUB 197
  • twofish - Twofish: 128-бітний блоковий шифр - http://www.schneier.com/paper-twofish-paper.html     (див. нижче)
  • змія - http://www.cl.cam.ac.uk/~rja14/serpent.html
  • cast5 - RFC 2144
  • cast6 - RFC 2612

Таблиця 2: Дійсні режими шифрування

  • ecb - вихід шифру використовується безпосередньо
  • cbc-plain - шифр працює в режимі CBC. Ланцюг CBC розрізається кожен сектор і реініціалізується з номером сектору як початковий вектор (перетворюється в 32-бітовий і мало-ендіанський). Цей режим визначений у [Fru05b], Розділ 4.
  • cbc-essiv: хеш - шифр працює в режимі ESSIV, використовуючи хеш для генерації ключа IV для вихідного ключа. Наприклад, коли використовується sha256 як хеш, специфікація режиму шифрування є "cbcessiv: sha256". ESSIV визначено у [Fru05b], розділі 4.
  • xts-plain64 - http://grouper.ieee.org/groups/1619/email/pdf00086.pdf, plain64 - це 64-розрядна версія звичайного початкового вектора

Таблиця 3: Дійсні хеш-характеристики

  • sha1 - RFC 3174 - Алгоритм 1 безпечного хешу США (SHA1)
  • sha256 - варіант SHA згідно FIPS 180-2
  • sha512 - варіант SHA згідно FIPS 180-2
  • ripemd160 - http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html    (Див. нижче)

Примітка редактора: вищезазначене скопійовано із специфікації. Після написання URL-адреси цих документів змінилися:


1

Ви можете перерахувати шифри, підтримувані вашими ядрами, за допомогою наступної команди,

[root@arif]# ls /lib/modules/[your kernel version]/kernel/crypto/
algif_rng.ko.xz   blowfish_common.ko.xz   cmac.ko.xz               cts.ko.xz          gf128mul.ko.xz           michael_mic.ko.xz  rsa_generic.ko.xz      tgr192.ko.xz           xts.ko.xz
ansi_cprng.ko.xz  blowfish_generic.ko.xz  crc32_generic.ko.xz      deflate.ko.xz      ghash-generic.ko.xz      pcbc.ko.xz         salsa20_generic.ko.xz  twofish_common.ko.xz   zlib.ko.xz
anubis.ko.xz      camellia_generic.ko.xz  crct10dif_common.ko.xz   des_generic.ko.xz  jitterentropy_rng.ko.xz  pcrypt.ko.xz       seed.ko.xz             twofish_generic.ko.xz
arc4.ko.xz        cast5_generic.ko.xz     crct10dif_generic.ko.xz  dh_generic.ko.xz   khazad.ko.xz             rmd128.ko.xz       serpent_generic.ko.xz  vmac.ko.xz
async_tx          cast6_generic.ko.xz     cryptd.ko.xz             drbg.ko.xz         lrw.ko.xz                rmd160.ko.xz       sha512_generic.ko.xz   wp512.ko.xz
authencesn.ko.xz  cast_common.ko.xz       crypto_null.ko.xz        fcrypt.ko.xz       mcryptd.ko.xz            rmd256.ko.xz       tcrypt.ko.xz           xcbc.ko.xz
authenc.ko.xz     ccm.ko.xz               crypto_user.ko.xz        gcm.ko.xz          md4.ko.xz                rmd320.ko.xz       tea.ko.xz              xor.ko.xz

Ви можете перерахувати шифри та хеші, які ви можете використовувати, та їх порівняння вводу / виводу за luksдопомогою наступної команди,

[root@arif arif]# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       289342 iterations per second for 256-bit key
PBKDF2-sha256     353293 iterations per second for 256-bit key
PBKDF2-sha512     227555 iterations per second for 256-bit key
PBKDF2-ripemd160  233224 iterations per second for 256-bit key
PBKDF2-whirlpool  236165 iterations per second for 256-bit key
argon2i       4 iterations, 917485 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id      4 iterations, 951672 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b       642.2 MiB/s      2495.8 MiB/s
    serpent-cbc        128b        89.3 MiB/s       542.6 MiB/s
    twofish-cbc        128b       100.4 MiB/s       343.1 MiB/s
        aes-cbc        256b       477.2 MiB/s      1979.2 MiB/s
    serpent-cbc        256b        89.3 MiB/s       538.9 MiB/s
    twofish-cbc        256b       173.3 MiB/s       343.1 MiB/s
        aes-xts        256b      1668.0 MiB/s      1664.1 MiB/s
    serpent-xts        256b       535.7 MiB/s       523.4 MiB/s
    twofish-xts        256b       332.6 MiB/s       339.8 MiB/s
        aes-xts        512b      1384.5 MiB/s      1380.7 MiB/s
    serpent-xts        512b       539.3 MiB/s       524.4 MiB/s
    twofish-xts        512b       335.0 MiB/s       340.1 MiB/s

Ви можете порівняти конкретні шифри за допомогою наступної команди,

[root@arif]# ciphers="aes-xts serpent-xts anubis-xts"

[root@arif]# echo "#     Algorithm |       Key |      Encryption |      Decryption";for i in $ciphers ; do cryptsetup benchmark --cipher $i|tail -n 1; done

#     Algorithm |       Key |      Encryption |      Decryption
        aes-xts        256b      1613.9 MiB/s      1642.8 MiB/s
    serpent-xts        256b       538.9 MiB/s       521.9 MiB/s
     anubis-xts        256b       182.0 MiB/s       182.1 MiB/s


Звідки ви знаєте, який із 58 вищевказаних файлів перетворюється в шифровані сумісні режими cryptsetup? Це не може бути контрольною командою, оскільки вона не перераховує anubis-
xts

1

Ядро 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 для всіх, крімlmkivmode, де він за замовчуванням до 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як видається, найбільш часто рекомендується.
    • 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рядку. Однак багато шифрів (як правило, програмне забезпечення, яке не має певного апаратного коду) реалізуються як загальний шифр, який поєднується з загальним кодом блочного ланцюга для отримання остаточного шифру. Наприклад:

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все еквівалентні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.