Šifrovaný disk v Linuxu na procesoru bez AES-NI

vit20

Šifrovaný disk v Linuxu na procesoru bez AES-NI
« kdy: 15. 08. 2019, 16:40:10 »
Zdravím,
vlastním ne příliš výkonný notebook Lenovo G50-30 (https://www.czc.cz/lenovo-ideapad-g50-30-cerna_5/162212/produkt), a to konkrétně variantu s CPU Intel Celeron N2840, který nepodporuje AES-NI, které, pokud vím, dost zrychluje a energeticky zefektivňuje celodiskové šifrování.
Vzhledem k tomu, že budu v bližší době více cestovat, tak bych si rád disk zašifroval, jak by se to koneckonců již asi dnes mělo dělat.

Výstup z openssl speed -evp ... byl následující:
Kód: [Vybrat]
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-256-cbc      33247.45k    35885.33k    36844.03k    37109.08k    37035.46k    37191.68k
aes-128-cbc      44227.27k    49953.92k    51867.05k    52265.30k    52540.76k    52565.33k
aes-256-gcm      27313.59k    30827.07k   106178.10k   119189.85k   122251.95k   122721.09k
aes-128-gcm      35532.99k    41337.38k   137120.75k   155539.07k   159965.92k   159993.32k
chacha20-poly1305    84451.91k   181450.77k   237042.26k   254834.01k   261215.57k   260712.44k

Jako systém budu používat Ubuntu Mate, který má používat AES-256, nicméně nevím, jestli ve variantě CBC, GCM nebo nějaké úplně jiné. Přitom podle OpenSSL by to na rychlost i efektivitu mohlo mít velký pozitivní dopad, kdyby se použila GCMková šifra. CHACHA20 zvládne údajně bezpečně zašifrovat pouze 256GB dat, takže ta jde asi z kola ven (HDD má 500GB).

Na notebooku budu používat Firefox, Libreoffice, LaTeX a Atom na programování, výhradně zatím full-stack webových stránek. Žádné hry ani jiné 3D programy na tom provozovat nebudu (koneckonců na baytrailovské Intel HD s výkonem 6800 GT by to byl docela masochismus :-) ).

Nejvíce by mě zajímalo to, zda-li to bude mít nějaký velký dopad na baterii/výkon, popřípadě jaký?
Rád bych použil možnost asistovaného rozdělení při instalaci Ubuntu, protože se úplně něcítím na to, abych si disk nakonfiguroval sám, nicméně pokud nebude jiná možnost, půjdu do toho.


Předem děkuji za odpovědi.


Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #1 kdy: 15. 08. 2019, 16:55:59 »
Nainstalujte "cryptsetup" a hodte sem vypis prikazu:
Kód: [Vybrat]
cryptsetup benchmark
GeekBench 3 (AES single core) ukazuje, ze ma 60MBps, takze z toho baterie nebude mit vubec radost, vcetne zpomaleni HDD pri narustu datovych toku.

Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #2 kdy: 15. 08. 2019, 17:00:00 »
určitě použij mód šifra-xts-plain64 buď s klíčem 256b nebo 512b, teda třeba aes-xts-plain64 a šifruj pomocí cryptsetup luksFormat

šifry můžeš zkusit jak jsou rychlé přímo v cryptsetup:

Kód: [Vybrat]
cryptsetup benchmark -c aes-xts -s 256
cryptsetup benchmark -c aes-xts -s 512
cryptsetup benchmark -c twofish-xts -s 256
cryptsetup benchmark -c twofish-xts -s 512
cryptsetup benchmark -c xchacha12,aes-adiantum
cryptsetup benchmark -c xchacha20,aes-adiantum

taky koukni na
Kód: [Vybrat]
cryptsetup benchmark
ty poslední šifry Adiantum https://www.root.cz/zpravicky/nova-sifra-adiantum-od-google-pro-slabsi-cpu/ by měly být rychlejší než aes bez AES-NI, ale ne o tolik jako na ARM

navíc potřebuješ celkem nový kernel (>=5.0) a nový cryptsetup (>=2.0.5), třeba Ubuntututu 18.04.4 LTS první splňuje, ale cryptsetup má jen 2.0.2

jestli teda Ubuntu s Adiantum, tak DiscoDingo 19.04 ten by měl mít oboje a pak přejít na LTS
« Poslední změna: 15. 08. 2019, 17:07:22 od Jan Fikar »

vit20

Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #3 kdy: 15. 08. 2019, 17:50:38 »
Nainstalujte "cryptsetup" a hodte sem vypis prikazu:
Kód: [Vybrat]
cryptsetup benchmark
GeekBench 3 (AES single core) ukazuje, ze ma 60MBps, takze z toho baterie nebude mit vubec radost, vcetne zpomaleni HDD pri narustu datovych toku.

Vystup je zde:
Kód: [Vybrat]
#    Algoritmus |      Klíč |       Šifrování |     Dešifrování
        aes-cbc        128b        77,0 MiB/s       103,3 MiB/s
    serpent-cbc        128b        31,0 MiB/s       106,9 MiB/s
    twofish-cbc        128b        79,3 MiB/s        97,1 MiB/s
        aes-cbc        256b        68,3 MiB/s        79,7 MiB/s
    serpent-cbc        256b        41,2 MiB/s       106,9 MiB/s
    twofish-cbc        256b        97,1 MiB/s        97,1 MiB/s
        aes-xts        256b        88,2 MiB/s       106,4 MiB/s
    serpent-xts        256b        90,9 MiB/s       103,2 MiB/s
    twofish-xts        256b        87,4 MiB/s        93,9 MiB/s
        aes-xts        512b        84,0 MiB/s        77,0 MiB/s
    serpent-xts        512b       103,0 MiB/s       103,1 MiB/s
    twofish-xts        512b        93,0 MiB/s        93,8 MiB/s



určitě použij mód šifra-xts-plain64 buď s klíčem 256b nebo 512b, teda třeba aes-xts-plain64 a šifruj pomocí cryptsetup luksFormat

šifry můžeš zkusit jak jsou rychlé přímo v cryptsetup:

Kód: [Vybrat]
cryptsetup benchmark -c aes-xts -s 256
cryptsetup benchmark -c aes-xts -s 512
cryptsetup benchmark -c twofish-xts -s 256
cryptsetup benchmark -c twofish-xts -s 512
cryptsetup benchmark -c xchacha12,aes-adiantum
cryptsetup benchmark -c xchacha20,aes-adiantum

taky koukni na
Kód: [Vybrat]
cryptsetup benchmark
ty poslední šifry Adiantum https://www.root.cz/zpravicky/nova-sifra-adiantum-od-google-pro-slabsi-cpu/ by měly být rychlejší než aes bez AES-NI, ale ne o tolik jako na ARM

navíc potřebuješ celkem nový kernel (>=5.0) a nový cryptsetup (>=2.0.5), třeba Ubuntututu 18.04.4 LTS první splňuje, ale cryptsetup má jen 2.0.2

jestli teda Ubuntu s Adiantum, tak DiscoDingo 19.04 ten by měl mít oboje a pak přejít na LTS

Vzhledem k tomu, ze Disco pouzivam uz ted, samozrejmne vcetne kernelu 5.0 a cryptsetup 2.1.0, nebude problem Adiantum pouzit. Diky za tip.

Vystup mate zde:
Kód: [Vybrat]
cryptsetup benchmark -c aes-xts -s 256
# Testy jsou počítány jen z práce s pamětí (žádné I/O úložiště).
#Algoritmus |      Klíč |       Šifrování |     Dešifrování
    aes-xts        256b       107,0 MiB/s       106,1 MiB/s

cryptsetup benchmark -c aes-xts -s 512
# Testy jsou počítány jen z práce s pamětí (žádné I/O úložiště).
#Algoritmus |      Klíč |       Šifrování |     Dešifrování
    aes-xts        512b        83,5 MiB/s        81,4 MiB/s

cryptsetup benchmark -c twofish-xts -s 256
# Testy jsou počítány jen z práce s pamětí (žádné I/O úložiště).
#Algoritmus |      Klíč |       Šifrování |     Dešifrování
twofish-xts        256b        91,6 MiB/s        93,7 MiB/s

cryptsetup benchmark -c twofish-xts -s 512
# Testy jsou počítány jen z práce s pamětí (žádné I/O úložiště).
#Algoritmus |      Klíč |       Šifrování |     Dešifrování
twofish-xts        512b        92,6 MiB/s        93,6 MiB/s

cryptsetup benchmark -c xchacha12,aes-adiantum
# Testy jsou počítány jen z práce s pamětí (žádné I/O úložiště).
#           Algoritmus |      Klíč |       Šifrování |     Dešifrování
xchacha12,aes-adiantum        256b       209,8 MiB/s       210,9 MiB/s

cryptsetup benchmark -c xchacha20,aes-adiantum
# Testy jsou počítány jen z práce s pamětí (žádné I/O úložiště).
#           Algoritmus |      Klíč |       Šifrování |     Dešifrování
xchacha20,aes-adiantum        256b       164,2 MiB/s       164,7 MiB/s

Skutecne to vypada, ze Adiantum je dost rychle.
PS: Ten HDD je v takove kondici, ze stejne vic jak v nejlepsim +- 50MB/s nezvlada. Nicmene dopad na baterku by tu byl, to bezpochyby.

vit20

Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #4 kdy: 15. 08. 2019, 18:15:31 »
Jinak pokud je to Adiantum založeno na ChaCha, tak podle Wikipedie (https://en.wikipedia.org/wiki/Salsa20#ChaCha20_adoption) není možné bezpečně pomocí ChaCha20 zašifrovat více než 256GiB dat, což by byl v případě 500GB disku problém:
Citace
Because of the reduced block counter, the maximum message length that can be safely encrypted by the IETF's variant is 232 blocks of 64 bytes (256 GiB). For applications where this is not enough, such as file or disk encryption, RFC 7539 proposes using the original algorithm with 64-bit nonce.

Opravuje Adiantum tento nedostatek (právě třeba použitím RFC 7539) nebo je to skutečně bezpečné jenom na menších discích?


ByCzech

  • *****
  • 1 848
    • Zobrazit profil
    • E-mail
Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #5 kdy: 15. 08. 2019, 20:23:54 »
Jinak pokud je to Adiantum založeno na ChaCha, tak podle Wikipedie (https://en.wikipedia.org/wiki/Salsa20#ChaCha20_adoption) není možné bezpečně pomocí ChaCha20 zašifrovat více než 256GiB dat, což by byl v případě 500GB disku problém:
Citace
Because of the reduced block counter, the maximum message length that can be safely encrypted by the IETF's variant is 232 blocks of 64 bytes (256 GiB). For applications where this is not enough, such as file or disk encryption, RFC 7539 proposes using the original algorithm with 64-bit nonce.

Opravuje Adiantum tento nedostatek (právě třeba použitím RFC 7539) nebo je to skutečně bezpečné jenom na menších discích?

To je maximální délka zprávy, kterou jde zašifrovat. Pochybuju, že by se celý disk tvářil jako jedna zpráva. Šifruje se po samostatných blocích, takže pokud jeden blok nepřekročí 256 GiB (LUKS má 512 B bloky), tak to myslím problém nebude.

_Jenda

  • *****
  • 1 550
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #6 kdy: 15. 08. 2019, 23:23:41 »
Výstup z openssl speed -evp ... byl následující
cryptsetup benchmark bude lepší, implementace v openssl a v kernelu se mohou lišit.

CHACHA20 zvládne údajně bezpečně zašifrovat pouze 256GB dat, takže ta jde asi z kola ven (HDD má 500GB).

To bude limit na délku keystreamu s jedním klíčem/IV. Takhle disk nikdo nešifruje (když bys chtěl rozšifrovat data na pozici 100 GB, musel bys rozšifrovat i všechno před tím). Disk se šifruje po 512/4096B blocích.

Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #7 kdy: 16. 08. 2019, 09:56:07 »
ano, chacha20 je stream šifra, kdežto xchacha20,aes-adiantum je bloková šifra

použiješ teda
Kód: [Vybrat]
cryptsetup luksFormat --type luks2 --sector-size 4096 -c xchacha20,aes-adiantum-plain64 -s 256
případně místo 20 dáš 12, nebo 8  což je rychlejší, ale asi trochu slabší

vit20

Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #8 kdy: 16. 08. 2019, 16:09:32 »
Děkuji všem za odpovědi, zkusím tedy podle nich něco vymyslet a nasadit.

Re:Šifrovaný disk v Linuxu na procesoru bez AES-NI
« Odpověď #9 kdy: 28. 08. 2019, 22:22:03 »
To že jsem paranoidní, neznamená, že po mě nejdou, ale dá se věřit šifře od googlu? Není to něco jako věřit jisté skupině lidí, aby mi pohlídala na hlavním nádraží notebook (pokud to nebude tedy packard bell)?