Der 5.1-Kernel, der zum Zeitpunkt des Schreibens aktuell ist, hat zwei verschiedene Formate: das For-Chiffrier-String, das "alte" Format und das "neue" Format. Alles in dieser Frage und anscheinend auch alle Dokumente befassen sich mit dem "alten" Format, daher werde ich es hier beschreiben. Dies dient nur zur Verschlüsselung. Wenn Sie Integrität mit dm-crypt verwenden, müssen Sie AEAD-Chiffren berücksichtigen, und es wird noch komplizierter.
Das vom Kernel analysierte Format ist " cipher [ :
keycount ] -
mode -
ivmode [ :
ivopts ]". Beispiele: aes-xts-plain64
, blowfish-cbc-essiv:sha256
, aes:64-cbc-lmk
.
chiffrieren
die Chiffre zu verwenden, Beispiele sindaes
,anubis
,twofish
,arc4
usw. Die Kernel dm-cryptTreiber nichteine Liste von Chiffren. Dies wird an die Linux Crypto API weitergeleitet, sodass jede geeignete vom Kernel unterstützte Verschlüsselung verwendet werden kann.
keycount
Optionale Leistung von zwei Schlüsseln zur Verwendung mit der Verschlüsselung. Dies ist standardmäßig 1 für alles außer demlmk
ivmode, wo es standardmäßig 64 ist. Dies gilt wirklich nur für LMK und andere Werte als 1 funktionieren mit anderen Modi nicht richtig.
mode Der Blockverkettungsmodus, der mit der Chiffre verwendet werden soll. Beispiele hierfür sindecb
,cbc
,xts
. Abgesehen davon, dassecb
keine IV verwendet wird, leitet der md-crypt-Treiber dies an die Linux Crypto-API weiter und kann jeden vom Kernel unterstützten Verkettungsmodus verwenden.
ivmode Der Algorithmus, der zum Generieren des Initialisierungsvektors (IV) für jeden Sektor verwendet wird. Bei der typischen Verschlüsselung mit symmetrischen Schlüsseln ist die IV im Gegensatz zu dm-crypt ein weiteres Datenbit, das beim Ver- oder Entschlüsseln zusammen mit dem Schlüssel an die Verschlüsselung übergeben wird. Für die gesamte Operation wird nur eine Infusion übergeben. Da dm-crypt jeden Sektor einzeln lesen und schreiben kann, wird nicht die gesamte Festplatte als einzelne Operation verschlüsselt. Stattdessen gibt es für jeden Sektor eine IV. Anstatt die IV als Daten zu übergeben, wird hier ein Algorithmus zum Erstellen der IVs angegeben. Dies ist nicht Teil der Linux Crypto API, da die IV-Generierung nicht über die Verschlüsselung erfolgt und die zulässigen ivmode- Werte im dm-crypt-Treiber definiert sind. Sie sind:
plain
, plain64
, plain64be
, benbi
Diese verwenden Sie einfach die Sektornummer, in verschiedenen Formaten, wie die IV. Gemeint für Blockmodi wie XTS, die Angriffen wie Wasserzeichen widerstehen sollen, wenn eine einfache und vorhersehbare IV verwendet wird. plain64
scheint am häufigsten empfohlen zu werden.
null
IV ist immer Null. Zum Testen und zur Abwärtskompatibilität sollten Sie dies nicht verwenden.
lmk
Kompatibel mit dem Loop-AES-Verschlüsselungsschema.
tcw
Kompatibel mit TrueCrypt.
essiv
Verwendet die mit einem Hash des Schlüssels verschlüsselte Sektornummer. Gemeint für Modi wie CBC, die bei Verwendung einer einfachen IV nicht wie verschiedene Angriffe resistent sind plain64
.
ivopts Der mitessiv
ivmode zu verwendende Hash , der für alle anderen Modi ignoriert wird.
Als Sonderfall wird " Chiffre-plain
" oder nur " Chiffre " als " Chiffre-cbc-plain
" interpretiert . Ein weiterer Sonderfall ist, dass im ecb
Modus kein ivmode angegeben werden muss.
Wie das zusammenhängt /proc/crypto
In Bezug auf /proc/crypto
sind nur die Verschlüsselung und der Modus relevant. dm-crypt erstellt eine Crypto-API-Spezifikation der Form " mode (
cipher)
" und fordert diese vom Kernel an. Dies ist, was man /proc/crypto
als das name
für ein suchen sollte skcipher
. Beispiel:
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
Das type
of skcipher
gibt an, dass es sich um eine symmetrische Schlüsselverschlüsselung handelt, was dm-crypt verwendet, und der Name von xts(aes)
wird geschrieben, aes-xts
wenn es mit dm-crypt angegeben wird. Die keysize
Felder geben auch an, welche Schlüsselgrößen mit dieser Chiffre verwendet werden können.
Wenn dies von einem Modul stammt, wird möglicherweise der Modulname in der module
Zeile angezeigt. Viele Chiffren (normalerweise solche in Software, die keinen hardwarespezifischen Code haben) werden jedoch als generische Verschlüsselung implementiert, die mit generischem Blockverkettungscode kombiniert wird, um die endgültige Verschlüsselung zu erstellen. Beispielsweise:
name : xts(anubis)
driver : xts(ecb(anubis-generic))
module : kernel
type : skcipher
name : anubis
driver : anubis-generic
module : anubis
type : cipher
In diesem Fall wird die Anubis-Verschlüsselung mit dem Code des Kernel-XTS-Blockverkettungsmodus kombiniert, um die endgültige Verschlüsselung zu erzeugen xts(anbuis)
, der ein Modul von zugewiesen wurde kernel
. Um dies jedoch zur Verfügung zu haben, benötigen wir die generische Anubis-Chiffre, die aus dem anubis
Modul stammt. Die meisten Chiffren haben einen Modulalias von " crypto-
Chiffre ", mit dem sie geladen werden können, z. B. modprobe crypto-anubis
würde ein Modul geladen, das die Anubis-Chiffre bereitstellt.
Bei Verwendung des cryptsetup benchmark
Befehls sind nur die Verschlüsselung und der Modus von Bedeutung, da dies alles ist, was als Benchmark verwendet wird. Wenn der Modus nicht angegeben ist, wird standardmäßig CBC verwendet. Der ivmode wird völlig ignoriert. So kann zum Benchmarking aes
, aes-cbc
und aes-cbc-foobar
alle sind gleichwertig.
/lib/modules/*/kernel/crypto/
ist ein wahrscheinlicher Ort, um zu suchen, aber Module können sich überall im Dateisystem befinden.