
Jos olet huolissasi järjestelmäsi eheydestä, dm-verity on yksi Linux-ekosysteemin keskeisistä osista käynnistyä turvallisesti ja havaita tallennustilan peukalointi. Se oli alun perin osa ytimen laitekartoitusta ja on nyt perusta varmennetulle käynnistykselle Androidissa, OpenWrt:ssä ja jakeluissa, jotka pyrkivät parempaan tietoturvaan.
Kaukana abstraktista käsitteestä, dm-verity konfiguroidaan ja sitä käytetään oikeilla työkaluilla, kuten veritysetup ja systemd-veritysetup.Se validoi lohkoja lennossa käyttäen hajautuspuita ja voi reagoida vioittumiseen käytännöillä, jotka vaihtelevat tapahtuman kirjaamisesta järjestelmän uudelleenkäynnistykseen tai kaatamiseen. Katsotaanpa asiaa tarkemmin jättämättä mitään irrallisia päitä.
Mikä on dm-verity ja miksi se saattaa kiinnostaa sinua
dm-verity on ytimen laitekartoituskohde, joka tarkistaa lohkolaitteen eheyden datan lukemisen yhteydessäSe toimii laskemalla ja tarkistamalla kunkin lohkon (yleensä 4 kt) tiivisteet ennalta laskettua tiivistepuuta vasten, tyypillisesti käyttäen SHA-256:ta.
Tämä muotoilu mahdollistaa Tiedostoja ei voi muokata hiljaisesti uudelleenkäynnistysten välillä tai suorituksen aikanaSe on avainasemassa käynnistyksen luottamusketjun laajentamisessa käyttöjärjestelmään, haittaohjelmien pysyvyyden rajoittamisessa, suojauskäytäntöjen vahvistamisessa sekä salauksen ja MAC-mekanismien varmistamisessa käynnistyksen aikana.
Androidilla (versiosta 4.4 alkaen) ja Linuxilla yleensä Luottamus on ankkuroitu puun juurihajautukseen, joka on allekirjoitettu ja validoitu suojatussa paikassa (esim. käynnistysosiossa tai Secure Boot -allekirjoitetussa UKI:ssa) sijaitsevalla julkisella avaimella. Minkä tahansa lohkon murtaminen edellyttäisi alla olevan kryptografisen tiivisteen murtamista.
Vahvistus tehdään lohkoittain ja pyynnöstä: Lisätty latenssi on minimaalinen verrattuna I/O-kustannuksiinJos tarkistus epäonnistuu, ydin palauttaa I/O-virheen ja tiedostojärjestelmä näyttää vioittuneelta, mikä on odotettavissa, kun tiedot ovat epäluotettavia. Sovellukset voivat päättää, jatkavatko ne vai eivät, vikasietoisuutensa perusteella.
Kuinka vahvistuspuu toimii sisäisesti
Vahvistuspuu on rakennettu kerroksittain. Kerros 0 on laitteen raakadata, joka on jaettu 4 kt:n lohkoihin; jokaiselle lohkolle lasketaan SHA-256 (suolattu) tiiviste. Nämä tiivisteet ketjutetaan sitten kerroksen 1 muodostamiseksi. Kerros 1 ryhmitellään sitten lohkoihin ja tiivistetään uudelleen kerroksen 2 muodostamiseksi, ja niin edelleen, kunnes kaikki mahtuu yhteen lohkoon: tämä lohko tuottaa tiivistettäessä juuritiivisteen.
Jos jokin kerros ei täysin täydennä lohkoa, Se täytetään nollilla, kunnes se saavuttaa 4K:n epäselvyyksien välttämiseksi. Puun kokonaiskoko riippuu tarkistettavan osion koosta; käytännössä se on yleensä alle 30 Mt tyypillisillä järjestelmäosioilla.
Yleinen prosessi on: valitse satunnainen suola, hajauta 4K:ksi, laske SHA-256 lohkokohtaisilla suola-arvoilla, ketjuttaa yhteen tasojen muodostamiseksi, täyttää lohkon reunan nollilla ja toistaa edellisen tason kanssa, kunnes jäljelle jää yksi juuritiiviste. Tämä juuritiiviste ja käytetty suola syöttävät dm-verity-taulukkoa ja allekirjoitusta.
Levymuotoversiot ja algoritmi
Levyllä olevien hajautuslohkojen muodolla on versio. Versio 0 oli alkuperäinen Chromium OS:ssä käytetty versio.Suola lisätään hajautusprosessin lopussa, tiivisteet tallennetaan jatkuvasti ja loput lohkosta täytetään nollilla.
La Versiota 1 suositellaan uusille laitteilleSuola (salli) lisätään tiivisteen alkuun, ja jokainen tiiviste täytetään nollilla kahden potensseihin asti, mikä parantaa kohdistusta ja kestävyyttä. dm-verity-taulukko määrittää myös algoritmin (esim. sha1 tai sha256), vaikka nykyisen turvallisuuden takaamiseksi käytetäänkin sha256:ta.
dm-verity-taulukko ja keskeiset parametrit
Kohdetaulukko dm-verity kuvaa missä data on, missä hajautuspuu on ja miten se tarkistetaanTyypilliset taulukon kentät:
- dev: laite, jolla on vahvistettavat tiedot (polkutyyppi /dev/sdXN tai suurempi:pienempi).
- hash_dev: laite, jolla on hajautuspuu (voi olla sama; jos on, hash_start-arvon on oltava tarkastetun alueen ulkopuolella).
- datalohkon_koko: datalohkon koko tavuina (esim. 4096).
- hash_block_size: hajautuslohkon koko tavuina.
- datalohkojen_määrä: todennettavien datalohkojen lukumäärä.
- hash_aloituslohko: offset (hash_block_size-lohkoina) puun juurilohkoon nähden.
- algoritmihajautusalgoritmi (esim. sha256).
- sulattaa: juurilohkon tiivisteen heksadesimaalikoodaus (mukaan lukien suola muotoversion mukaan); tähän arvoon kannattaa luottaa.
- suolaa: heksadesimaalimuotoinen suola.
Lisäksi on olemassa valinnaiset parametrit erittäin hyödyllinen käyttäytymisen säätämiseen:
- ignore_corruption: Tallentaa vioittuneet lohkot, mutta sallii lukemisen jatkumisen.
- uudelleenkäynnistys_korruption_tapauksessa: käynnistyy uudelleen vioittumisen havaitsemisen yhteydessä (ei yhteensopiva ignore_corruptionin kanssa ja vaatii käyttäjätilan tuen silmukoiden välttämiseksi).
- paniikkia_korruptiosta: : aiheuttaa paniikkia vioittumista havaittaessa (ei yhteensopiva aiempien versioiden kanssa).
- uudelleenkäynnistys_virheen_tapauksessa y paniikki_virheen_hetkelläsamat reaktiot, mutta I/O-virheille.
- ohita_nolla_lohkoa: ei tarkista lohkoja, joiden odotetaan olevan nollia, ja palauttaa nollia.
- käytä_fec_from_device-tiedostoa + fec_roots + fec_lohkot + fec_start: Ota käyttöön Reed-Solomon (FEC) -testaus, jolla voit palauttaa tiedot vahvistuksen epäonnistuessa; data-, tiiviste- ja FEC-alueet eivät saa olla päällekkäisiä ja lohkojen kokojen on oltava samat.
- tarkista_enintään_kerranTarkistaa jokaisen tietolohkon vain ensimmäisellä lukukerralla (vähentää yleiskustannuksia turvallisuuden kustannuksella reaaliaikaisissa hyökkäyksissä).
- root_hash_sig_key_descViittaus avainnipun avaimeen juurihajautuksen PKCS7-allekirjoituksen validoimiseksi yhdistämismääritystä luotaessa (vaatii asianmukaisen ytimen kokoonpanon ja luotetut avainniput).
- try_verify_in_taskletJos tiivisteet on tallennettu välimuistiin ja I/O-koko sallii, tarkistaa alaosan viiveen pienentämiseksi; säädetään /sys/module/dm_verity/parameters/use_bh_bytes-tiedostolla I/O-luokkaa kohden.
Allekirjoitus, metatiedot ja luottamusankkurointi
Jotta dm-verity olisi luotettava, Juurihajautuksen on oltava luotettava ja yleensä allekirjoitettu.Klassisessa Androidissa käynnistysosioon sisältyy julkinen avain, jonka valmistaja varmentaa ulkoisesti; se validoi juurihajautusallekirjoituksen ja varmistaa, että järjestelmäosiota ei ole muutettu.
Verity-metatiedot lisäävät rakennetta ja versionhallintaa. Metatietolohko sisältää taikanumeron 0xb001b001 (tavua b0 01 b0 01), versio (tällä hetkellä 0), taulukon allekirjoitus PKCS1.5:ssä (tyypillisesti 256 tavua RSA-2048:lle), taulukon pituus, itse taulukko ja nolla täyttöä 32 kilotavuun asti.
Android-toteutuksissa vahvistus perustuu fs_mgr ja fstab: Lisätään valintamerkki vastaavaan merkintään ja sijoitetaan avain kansioon /boot/verity_key. Jos taikanumero ei ole oikealla paikallaan, vahvistus keskeytetään, jotta vältetään väärän asian tarkistaminen.
Aloitustoiminto vahvistettu
Suojaus sijaitsee ytimessä: Jos hyökkääjä vaarantuu ennen ytimen käynnistymistä, hän säilyttää hallinnanSiksi valmistajat yleensä validoivat jokaisen vaiheen tiukasti: laitteeseen poltettu avain vahvistaa ensimmäisen käynnistyslataimen, joka puolestaan vahvistaa seuraavan, sovelluksen käynnistyslataimen ja lopuksi ytimen.
Kun ydin on vahvistettu, dm-verity on käytössä, kun varmennettua lohkolaitetta asennetaanSen sijaan, että koko laite tiivistettäisiin (hash-menetelmällä, mikä olisi hidasta ja tuhlaisi energiaa), se tarkistetaan lohko lohkolta sitä mukaa, kun sitä käytetään. Virhe aiheuttaa I/O-virheen, ja palvelut ja sovellukset reagoivat sietokykynsä mukaan: joko jatkavat ilman kyseisiä tietoja tai kaatuvat kokonaan.
Eteenpäin suuntautuva virheenkorjaus (FEC)
Android 7.0:sta lähtien FEC (Reed–Solomon) on yhdistetty lomitustekniikoihin vähentääkseen tilaa ja parantaakseen vaurioituneiden lohkojen palautuskykyä. Tämä toimii yhdessä dm-verityn kanssa: jos tarkistus epäonnistuu, alijärjestelmä voi yrittää korjata sen ennen kuin julistaa sen palautumattomaksi.
Suorituskyky ja optimointi
Vaikutuksen vähentämiseksi: Ota käyttöön NEONin SHA-2-kiihdytys ARMv7:ssä ja SHA-2-laajennukset ARMv8:ssa ytimestä. Säädä laitteistosi read-ahead- ja prefetch_cluster-parametreja; lohkokohtainen tarkistus ei yleensä lisää I/O-kustannuksia juurikaan, mutta näillä asetuksilla on merkitystä.
Aloittaminen Linuxissa (systemd, veritysetup) ja Androidissa
Nykyaikaisessa Linuxissa, jossa on systemd, dm-verity sallii varmennetun vain luku -rootin käyttäen veritysetup-komentosarjaa (osa cryptsetup-komentosarjaa), systemd-veritysetup.generator-komentosarjaa ja systemd-veritysetup@.service-komentosarjaa. On suositeltavaa sisällyttää Secure Boot ja allekirjoitettu UKI (unified kernel image), vaikka ne eivät olekaan ehdottoman välttämättömiä.
Valmistelu ja suositeltu osiointi
Osa toimivaa ja säädettyä järjestelmää. Varaa taltio hash-puulle (8–10 % root-kansion koosta on yleensä riittävästi) ja harkitse /home- ja /var-osioiden erottamista, jos sinun on kirjoitettava. Tyypillinen osio sisältää: ESP:n (käynnistyslataajaa varten), XBOOTLDR:n (UKI:ta varten), rootin (salauksella tai ilman), VERITY-osion ja valinnaisesti /home- ja /var-osiot.
Juurena EROFS on erittäin mielenkiintoinen vaihtoehto ext4:lle tai squashfs:lleSe on rakenteensa puolesta vain luku -tilassa, toimii erittäin hyvin flash-/SSD-levyillä, käyttää oletuksena lz4-pakkausta ja on laajalti käytössä Android-puhelimissa, joissa on dm-verity.
Tiedostot, joiden on oltava kirjoitettavissa
Pääkäyttäjän ro-käyttäjän kohdalla jotkin ohjelmat odottavat kirjoittavansa /etc tai initin aikanaVoit siirtää sen kansioon /var/etc ja luoda symbolisen linkin kaikkiin muutoksiin (esim. NetworkManager-yhteydet kansioon /etc/NetworkManager/system-connections). Huomaa, että systemd-journald vaatii, että /etc/machine-id on juurihakemistossa (ei symbolisena linkkinä), jotta vältetään käynnistysten katkaiseminen alkuvaiheessa.
Saadaksesi selville, mitä muutoksia toteutuksessa tapahtuu, käytä dracut-overlayroot-komentoa: asettaa tmpfs-komennon pääkansion päälle, ja kaikki kirjoitettu näkyy tiedostossa /run/overlayroot/u. Lisää moduuli tiedostoon /usr/lib/dracut/modules.d/, sisällytä overlayroot dracut-kansioon ja aseta overlayroot=1 ytimen riville; tällä tavoin näet, mitä siirretään /var-kansioon.
Hyödyllisiä esimerkkejä: pacman ja NetworkManager
Archissa se on kätevää Siirrä Pacman-tietokanta hakemistoon /usr/lib/pacman jotta rootfs peilaa aina asennetut paketit. Ohjaa sitten välimuisti hakemistoon /var/lib/pacman ja linkitä. Jos haluat muuttaa peililuetteloa koskematta juureen, siirrä se hakemistoon /var/etc ja linkitä se joka tapauksessa.
NetworkManagerin avulla siirrä järjestelmäyhteydet kansioon /var/etc/NetworkManager ja linkki tiedostosta /etc/NetworkManager/system-connections. Tämä pitää pääkäyttäjän muuttumattomana ja kokoonpanon siellä, missä sen pitäisi olla kirjoitettavissa.
Todellisuuden rakentaminen ja testaus
Live-tiedostosta, jossa kaikki on täydellistä ja asennettu ro-järjestelmään, luo puu ja roothash-tiedosto veritysetup-muotoSuoritettaessa se tulostaa Root Hash -rivin, jonka voit tallentaa tiedostoon roothash.txt. Suorita se testausta varten komennolla veritysetup open root-device root verity-device $(cat roothash.txt) ja mount /dev/mapper/root.
Jos sinä suosit, luo ensin puun tiedostoon (verity.bin) ja kirjoita se sitten VERITY-osioon. Tuloksena on: juurikuva, verity-puu ja juurihajautus, jonka kiinnität käynnistyksen yhteydessä.
Määritä ytimen rivi
Lisää nämä parametrit: systemd.verity=1, roothash=contents_of_roothash.txt, systemd.verity_root_data=ROOT-PATH (esim. LABEL=OS) ja systemd.verity_root_hash=VERITY-PATH (esim. LABEL=VERITY). Aseta systemd.verity_root_options arvoon restart-on-corruption tai panic-on-corruption tiukkojen käytäntöjen käyttämiseksi.
Muita suositeltuja vaihtoehtoja: ro (jos et käytä EROFS/squashfs-funktiota), rd.emergency=reboot y rd.shell=0 (estä luvattomat shellit, jos käynnistys epäonnistuu), ja sulkutila = luottamuksellisuus suojaamaan ytimen muistia käytöltä.
Lisäosioita totuudenmukaisesti
Ei vain juuri: Voit määrittää muita määrityksiä tiedostossa /etc/veritytab ja systemd-veritysetup@.service kokoaa ne käynnistyksen yhteydessä. Muista: on helpompi liittää RW:llä ei-root-osio, ja root-käyttäjä voi poistaa Verityn käytöstä näillä osioilla, joten niiden suojausarvo on alhaisempi.
Tietoturva: Secure Boot, UKI ja allekirjoitetut moduulit
dm-verity ei ole ihmelääke. Allekirjoita UKI ja ota käyttöön Secure Boot omilla avaimillasi estääkseen ketään ohittamasta kernel/initramfs/cmdline-komentoa (joka sisältää juuritason hajautusarvon). Työkalut, kuten sbupdate-git tai sbctl, auttavat pitämään levykuvat allekirjoitettuina ja käynnistysketjun ehjänä.
Jos otat käyttöön ytimen lukituksen tai moduulin allekirjoituksen varmennuksen, DKMS- tai puusta ulkopuoliset moduulit on allekirjoitettava tai ne eivät lataudu. Harkitse mukautettua ydintä, joka tukee allekirjoitusta putkellesi (katso allekirjoitetut ytimen moduulit).
Salaus, TPM ja mittaus
dm-verity suojaa eheyttä, ei-luottamuksellinenVoit jättää rootin salaamattomaksi, jos se ei sisällä salaisuuksia ja käynnistysketju on suojattu. Jos käytät rootin avaintiedostoja muiden taltioiden lukituksen avaamiseen, se on hyvä salata.
TPM 2.0:n kanssa systemd-cryptenroll sallii avainten sitomisen PCR-koodeihin 0, 1, 5 ja 7 (laiteohjelmisto, asetukset, GPT, suojatun käynnistyksen tila). Lisää rd.luks.options=LUKS_UUID=tpm2-device=auto ja varmista, että initramfs sisältää TPM2-tuen. systemd-boot mittaa kernel.efi-tiedoston PCR4:ssä, mikä on hyödyllinen avainten mitätöimiseen, jos UKI tai sen komentorivi muuttuu.
Päivitykset ja käyttöönottomallit
Vahvistettu vain luku -juuri Sitä ei päivitetä paketinhallintaohjelmalla perinteisellä tavalla.Ihanteellista on rakentaa uusia kuvia työkaluilla, kuten Yocto-projekti ja julkaise ne. systemd:ssä on systemd-sysupdate ja systemd-repart luotettavaa levykuvien latausta ja flash-päivitystä varten.
Toinen strategia on A/B-järjestelmäSäilytät kaksi juurta ja kaksi verityä. Kopioi aktiivinen juuri passiiviseen juureen, ota muutokset käyttöön ja tee verity uudelleen. Vaihda takaisin seuraavan käynnistyksen yhteydessä. Jos käytät UKI:ta, muista päivittää juuritason tiiviste cmd-rivillä tai rakentaa allekirjoitettu UKI uudelleen.
Valinnaista pysyvyyttä varten käytä OverlayFS:ää varmennetussa juuressa ylätunnisteella tmpfs- tai disk-tiedostossa. Voit myös välittää systemd.volatile=overlay-määrityksen väliaikaista säilyvyyttä varten. Flatpak helpottaa sovellusten asentamista hakemistoihin /var ja /home koskematta /-kansioon.
On olemassa automatisoituja paketteja (esim. verity-squash-root AUR:ssa), jotka rakentavat squashfs-juuren ja allekirjoita juurihajautus kernelillä ja initramfs:llä, jolloin voit valita pysyvän tai lyhytaikaisen tilan välillä ja säilyttää uusimmat rootfs-tiedostot varmuuskopiona. Huomaa: pysyvyyden lisääminen vahvistettuun juureen on rajoitettuja käyttötapauksia; kokeile sovellustietojen säilyttämistä erillisillä osioilla.
Android: järjestelmä root-käyttäjänä, AVB ja toimittajan päällekkäistiedostot
Android 10:sta lähtien RootFS lakkaa toimimasta RAM-levyllä ja integroituu system.img-tiedostoon. (järjestelmä pääkäyttäjänä). Android 10:llä käynnistyvät laitteet käyttävät aina tätä järjestelmää ja vaativat dm-linearille ram-levyn. BOARD_BUILD_SYSTEM_ROOT_IMAGE on tässä kokoonpanossa asetettu arvoon false, jotta voidaan erottaa ram-levyn käyttö system.img-tiedoston suorasta aktivoinnista.
Android 10 sisältää dynaamiset osiot ja ensimmäisen vaiheen init joka aktivoi loogisen järjestelmäosion; ydin ei enää liitä sitä suoraan. Vain järjestelmään tarkoitetut OTA:t vaativat järjestelmän pääkäyttäjänä (system-as-root) -suunnittelun, joka on pakollinen Android 10 -laitteissa.
Ei A/B-tilanteessa pidä palautus erillään käynnistyksestäToisin kuin A/B-tilassa, ei ole boot_a/boot_b-varmuuskopiota, joten palautustilan poistaminen muusta kuin A/B-tilasta voi johtaa siihen, että et käytä palautustilaa, jos käynnistyspäivitys epäonnistuu.
Ydin liittää system.img-tiedoston /converity-hakemistoon kahta polkua pitkin: vboot 1.0 (korjauspäivitykset ytimelle, joka jäsentää Android-metatiedot /system-hakemistossa ja johtaa dm-verity-parametrit; cmdline-komennossa on root=/dev/dm-0, skip_initramfs ja init=/init sekä dm=…) tai vboot 2.0/AVB, jossa käynnistyslataaja integroi libavb:n, lukee hashtree-deskriptorin (tiedostossa vbmeta tai system), muodostaa parametrit ja välittää ne ytimelle cmdline-komennolla FEC-tuella ja merkinnöillä, kuten restart_on_corruption.
Järjestelmä root-käyttäjänä Älä käytä BOARD_ROOT_EXTRA_FOLDERS-kansiota laitekohtaisille juurikansioille: nämä katoavat, kun GSI flashataan. Määritä tietyt liittimet kohdassa /mnt/vendor/ , jotka fs_mgr luo automaattisesti, ja viittaa niihin laitepuun fstab-tiedostossa.
Android mahdollistaa toimittajan peittokuva osoitteesta /product/vendor_overlay/init liittää /vendor-hakemistoon alihakemistot, jotka täyttävät SELinux-kontekstin vaatimukset ja edellyttävät /vendor/-hakemiston olemassaoloa. Vaatii CONFIG_OVERLAY_FS=yy:n, vanhemmissa ytimissä override_creds=off -korjauksen.
Tyypillinen toteutus: asentaa esikäänännettyjä tiedostoja laitteeseen/ / /toimittajan_peittokuva/, lisää ne PRODUCT_COPY_FILES-tiedostoon find-copy-subdir-files-komennolla tiedostoon $(TARGET_COPY_OUT_PRODUCT)/vendor_overlay, määritä kontekstit file_contexts-tiedostossa etc:lle ja app:lle (esim. vendor_configs_file ja vendor_app_file) ja salli mounton-komento näille konteksteille init.te-tiedostossa. Testaa atest vfs_mgr_vendor_overlay_test -komennolla userdebug-tiedostossa.
Vianmääritys: dm-verity-virheilmoitus Androidilla
Laitteissa, joissa on A/B-paikat, vaihda paikkaa tai Vbmeta/boot-tiedoston flashaus ilman johdonmukaisuutta roothash-tiedoston kanssa Tämä voi laukaista varoituksen: dm-verity korruptio, laitteeseesi ei luoteta. Komennot, kuten fastboot flash –disable-verity –disable-verification vbmeta vbmeta.img, poistavat vahvistuksen käytöstä, mutta jättävät järjestelmän ilman mitään takeita eheydestä.
Jotkin käynnistyslataimet tukevat pikakäynnistys oem disable_dm_verity ja sen vastakohta, enable_dm_verity. Se toimii joissakin malleissa, mutta ei toisissa; ja se saattaa vaatia ytimen/magiskin säädetyillä asetuksilla. Käytä omalla vastuullasi: järkevä toimintatapa on yhdenmukaista käynnistys, vbmeta ja järjestelmä, allekirjoita tai luo puu uudelleen ja varmista, että odotettu juurihajautus vastaa määritettyä.
Jos varoituksen jälkeen voit jatkaa virtapainikkeen painamista, järjestelmä käynnistyy, mutta sinulla ei ole enää ehjää luottamusketjuaVoit poistaa viestin tinkimättä turvallisuudesta palauttamalla alkuperäiset allekirjoitetut kuvat tai rakentamalla vbmeta-koodin uudelleen/verifioimalla sen sijaan, että poistaisit verity-koodin käytöstä.
i.MX- ja OpenWrt-alustat
i.MX6:ssa (esim. sabresd) määritä ydin DM_VERITY- ja FEC-tuella, luo puu veritysetup-komennolla, tallenna juurihajautus turvallisesti ja välitä asianmukaiset parametrit cmd-rivillä tai integroi initramfs:n kautta systemd-veritysetup-komennolla. Jos et käytä dm-crypt-komentoa, et tarvitse CAAM-komentoa veritylle; painopiste on eheydessä.
OpenWrt:ssä ja sulautetut Linux-järjestelmät OpenEmbedded-ominaisuudella, Dm-verityn ja SELinuxin integroimiseksi on tehty ponnisteluja. (Bootlin-töitä on tarkistettu tuen sisällyttämiseksi). Se on luonnollinen ratkaisu: reitittimet ja verkkolaitteet hyötyvät muuttumattomasta, varmennetusta ja MAC-koodatusta juuresta.
Manuaalinen puun ja metatietojen rakentaminen (yksityiskohtainen näkymä)
cryptsetup voi luoda puun puolestasi, mutta jos haluat ymmärtää muotoa, kompakti taulukon rivimääritelmä sisältää: nimen, datalaitteen, datalohkon ja tiivistekokojen sekä kuvan koon yhdistäminen lohkoissa, hash_start-position (lohkon kuva + 8, jos ketjutettu), juurihash ja suola. Kun olet luonut ketjutetut kerrokset (ylhäältä alas, pois lukien kerros 0), kirjoitat puun levylle.
Pakkaamaan kaiken, muodosta dm-verity-taulukko, allekirjoita se (tyypillinen RSA-2048) ja ryhmittele signature+table metatietoihin versioidulla otsikolla ja taikanumerolla. Sitten se yhdistää järjestelmäkuvan, verity-metatiedot ja hajautuspuun. fstab-tiedostossa se merkitsee fs_mgr:n verify-arvoksi ja sijoittaa julkisen avaimen /boot/verity_key-hakemistoon allekirjoituksen validoimiseksi.
Optimoi SHA-2-kiihdytyksiä suorittimellesi ja säädä read-ahead/prefetch_cluster-arvoa. ARM-laitteistossa NEON SHA-2 (ARMv7) ja SHA-2-laajennukset (ARMv8) vähentävät merkittävästi varmennustyötä.
Muista missä tahansa käyttöönotossa, että juurihajautusarvo on suojattava: joko käännettynä allekirjoitettuun UKI:hin, allekirjoitettuun käynnistysosioon tai käynnistyslataimen AVB:n avulla validoimana. Kaikki sen jälkeen perii tämän luottamuksen.
Kun kaikki edellä mainittu on kohdallaan, dm-veritystä tulee vankka perusta muuttumattomille, mobiili- ja sulautetuille järjestelmille, tukemalla transaktiopäivityksiä, määrityskerrostumia ja modernia suojausmallia, joka pienentää hyökkäyspintaa ja estää pysyvyyden tinkimättä suorituskyvystä.


