programmatūra · 6 min · 21.08.2026

Linux 7.3 izmet dubulto šifrēšanas kodu no ext4 un f2fs: mīnus 1240 rindas

Linux 7.3 kodolā iekļautais fscrypt atjauninājums izmet no ext4 un f2fs pašu failu satura šifrēšanas kodu. Linus Torvalds apvienoja 29 ielāpus 17. augusta vakarā. Diffstat rāda 39 mainītus failus, 1240 izņemtas rindas un 488 pievienotas.

Līdz šim ext4 un f2fs katrs nesa savu satura šifrēšanas implementāciju failu sistēmas slānī. Otra implementācija dzīvoja bloku slānī ar nosaukumu blk-crypto un ieslēdzās tikai tad, ja failu sistēmu montēja ar karodziņu -o inlinecrypt. Tagad palikusi tikai blk-crypto.

Kas ir fscrypt

fscrypt ir kodola bibliotēka, kurai failu sistēmas pieslēdzas, lai šifrētu atsevišķus failus un mapes. Atšķirībā no dm-crypt tā strādā failu sistēmas, nevis bloku ierīces līmenī, tāpēc vienā failu sistēmā var būt gan šifrēti faili ar atšķirīgām atslēgām, gan pilnīgi atvērti faili. Kodola dokumentācija iesaka to lietot caur rīku fscrypt, rīku fscryptctl vai Android atslēgu pārvaldību, nevis tieši caur kodola saskarni.

Saturam pēc noklusējuma tiek lietots AES-256-XTS, failu nosaukumiem AES-256-CBC-CTS. Vājākiem procesoriem bez AES paātrinājuma ir Adiantum abiem uzdevumiem. Šifrēšanas granularitāti nosaka datu vienības izmērs, kur vērtība 12 nozīmē 4096 baitu vienības, katra ar savu IV.

Ko tieši izņēma

Lielākie gabali ir failu sistēmās. ext4 zaudēja 164 rindas četros failos, f2fs 117 rindas piecos. Pati pārslēgšanās uz blk-crypto aizņēma deviņus failus ar attiecību 140 pret 57.

Atsevišķs ielāps izmeta 144 rindas neizmantotu funkciju un vienu darba rindu, nepievienojot vietā nevienu jaunu rindu. Vēl 121 rinda aizgāja kopā ar failu sistēmas slāņa nullēšanas kodu, 37 rindas no fs/buffer atšifrēšanas ceļa un 64 rindas kopā ar funkciju fscrypt_dio_supported(). Divi faili sapludināti vienā: bio.c un inline_crypt.c kļuva par block.c.

Izmests arī apiešanas risinājums gcc 7 kļūdai un konstante FSCRYPT_MODE_MAX. Mutex slēdzenes pārrakstītas uz lock guard sintaksi.

Vecais failu sistēmas slāņa ceļš rakstīšanas laikā nevarēja šifrēt datus uz vietas lappušu kešatmiņā, jo atklātais teksts tur bija jāsaglabā. ext4 un f2fs tāpēc atsevišķi rezervēja pagaidu lappuses jeb bounce pages un rakstīja diskā tās. Tagad šī rezervēšana no ext4 un f2fs ir prom.

inlinecrypt maina nozīmi

Karodziņš -o inlinecrypt nepazūd, taču tā nozīme sašaurinās. Agrāk tas izvēlējās, kurš no diviem šifrēšanas ceļiem strādās. Tagad tas nosaka tikai to, vai blk-crypto drīkst izmantot iebūvēto šifrēšanas aparatūru. Lai šī izvēle paliktu lietotāja rokās, blk-crypto saskarnei pievienots karodziņš BLK_CRYPTO_CFG_ALLOW_HW. Tas prasīja 27 jaunas rindas četros failos.

Bez piemērotas aparatūras blk-crypto pāriet uz blk-crypto-fallback, kas šifrē procesorā. Eric Biggers no Google pull pieprasījumā raksta, ka šis ceļš funkcionāli atbilst vecajam failu sistēmas slāņa kodam.

Biggers pieprasījumā šo darbu apraksta kā “a significant simplification that’s been overdue for a while now”.

Divas uzvedības izmaiņas

Pirmā: tiešā ievadizvade tagad strādā uz šifrētiem failiem arī bez karodziņa inlinecrypt. Agrāk kodols klusi pārgāja uz buferēto ievadizvadi. Biggers to sauc par kļūdas labojumu, tomēr atzīmē, ka turpinās vērot, vai kāds nav paļāvies uz veco uzvedību.

Otrā skar IV_INO_LBLK_32 politikas. Tās vairs nestrādā gadījumos, kad bloka izmērs atšķiras no lappuses izmēra. Kodola dokumentācija šo formātu apraksta kā domātu eMMC 5.2 aparatūrai, kurai vienam ievadizvades pieprasījumam ir tikai 32 IV biti un maz atslēgu slotu, tātad galvenokārt Android tālruņiem. Formāts pieļauj zināmu IV atkārtošanos, tāpēc dokumentācija to iesaka lietot vienīgi aparatūras spiestā kārtā.

Radniecīgais formāts IV_INO_LBLK_64 paliek neskarts. To dokumentācija apraksta kā domātu UFS standarta aparatūrai, kas vienam pieprasījumam dod 64 IV bitus. Abi formāti darbojas tikai ar v2 politikām un ir savstarpēji izslēdzoši, tāpat kā vecākais DIRECT_KEY.

Kam tas vajadzīgs un kas vēl mainījās

Dubultā koda izmešana ir priekšnoteikums trim citiem darbiem: iomap atbalstam, large folios un šifrēšanai btrfs. Biggers atzīmē, ka btrfs izstrādātāji jau bija plānojuši lietot tikai blk-crypto. Kamēr ext4 un f2fs turēja savu kodu, katru jaunu funkciju vajadzēja ieviest divās vietās.

Phoronix uzskaita to pašu sarakstu un norāda, ka tiešās ievadizvades labojums ir tūlītējs ieguvums lietotājiem ar šifrētu mājas mapi. Aparatūras šifrēšanas ceļš nav jauns kods: to jau lieto daudzas sistēmas ar inlinecrypt, tostarp Android ierīces.

No 29 ielāpiem vairāki skar tikai tekstus. Dokumentācija par inlinecrypt pārrakstīta ar attiecību 43 pret 26 trīs failos, atsevišķi atjaunināts apraksts par datu ceļu un par blk-crypto-fallback jēgu. Divās vietās salaboti novecojuši komentāri f2fs un fs koda daļās.

Sērija atradās linux-next zarā kopš 22. jūlija bez ziņotām problēmām. Visi šifrēšanas xfstests testi iziet gan uz ext4, gan f2fs. Biggers raksta, ka pats to lieto uz sistēmas ar fscrypt šifrētu mājas mapi.

Augusta sākumā tajā pašā zarā iekrita mazāka izmaiņa: ext4 vairs neieslēdz DAX jauniem šifrētiem failiem, kas aizņēma 24 jaunas rindas divos failos. Linux 7.2 iznāca 16. augustā, tāpēc fscrypt sērija nonāca kodolā 7.3 apvienošanas loga otrajā dienā.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie