
Sisteminizin bütünlüğü konusunda endişeleriniz varsa, dm-verity, Linux ekosisteminin temel parçalarından biridir Güvenli bir şekilde önyükleme yapmak ve depolama alanındaki müdahaleleri tespit etmek için. Çekirdeğin aygıt eşleyicisinin bir parçası olarak ortaya çıktı ve artık Android, OpenWrt ve gelişmiş güvenlik arayan dağıtımlarda doğrulanmış önyüklemenin temelini oluşturuyor.
Soyut bir kavram olmaktan uzak, dm-verity, veritysetup ve systemd-veritysetup gibi gerçek araçlarla yapılandırılır ve kullanılırBlokları anında karma ağaçları kullanarak doğrular ve olayı kaydetmekten sistemi yeniden başlatmaya veya çökertmeye kadar uzanan politikalarla bozulmalara tepki verebilir. Hiçbir ayrıntıyı atlamadan daha yakından bakalım.
dm-verity nedir ve neden önemseyebilirsiniz?
dm-verity, çekirdekte bulunan bir aygıt eşleyici hedefidir veriler okunurken bir blok aygıtının bütünlüğünü doğrularGenellikle 4K olan her bloğun karma değerlerini önceden hesaplanmış bir karma ağacına göre hesaplayıp doğrulayarak çalışır; tipik olarak SHA-256 kullanılır.
Bu tasarım şunu sağlar: Dosyalar yeniden başlatmalar arasında veya yürütme sırasında sessizce değiştirilemezİşletim sistemine yönelik güven önyükleme zincirini genişletmek, kötü amaçlı yazılımların kalıcılığını sınırlamak, güvenlik politikalarını güçlendirmek ve önyükleme sırasında şifreleme ve MAC mekanizmalarını sağlamak için önemlidir.
Android'de (4.4'ten beri) ve genel olarak Linux'ta, Güven, ağacın kök karma değerine dayanır, korumalı bir konumda (örneğin, önyükleme bölümünde veya Güvenli Önyükleme imzalı UKI'de) bulunan genel bir anahtarla imzalanmış ve doğrulanmıştır. Herhangi bir bloğu kırmak, altta yatan kriptografik karmanın kırılmasını gerektirir.
Doğrulama blok halinde ve talep üzerine yapılır: Eklenen gecikme, G/Ç maliyetine kıyasla minimum düzeydedirBir kontrol başarısız olursa, çekirdek bir G/Ç hatası döndürür ve dosya sistemi bozuk görünür; bu, verilerin güvenilir olmadığı durumlarda beklenen bir durumdur. Uygulamalar, hata toleranslarına göre devam edip etmemeye karar verebilir.
Doğrulama ağacı dahili olarak nasıl çalışır?
Doğrulama ağacı katmanlar halinde oluşturulmuştur. Katman 0, cihazdan gelen ham verilerdir ve 4K bloklara bölünmüştür; her blok için bir SHA-256 (tuzlanmış) karması hesaplanır. Bu karmalar daha sonra bir araya getirilerek 1. katman oluşturulur. 1. katman daha sonra bloklar halinde gruplandırılır ve 2. katmanı oluşturmak için yeniden karma işlemine tabi tutulur ve her şey tek bir bloğa sığana kadar bu şekilde devam edilir: bu blok, karma işlemine tabi tutulduğunda kök karmasını üretir.
Herhangi bir katman bloğu tam olarak tamamlayamazsa, 4K'ya ulaşana kadar sıfırlarla doldurulur Belirsizliği önlemek için. Ağacın toplam boyutu, kontrol edilen bölümün boyutuna bağlıdır; pratikte, tipik sistem bölümleri için genellikle 30 MB'tan azdır.
Genel süreç şu şekildedir: rastgele bir tuz seçin, 4K'ya kadar karma yapın, blok başına tuzla SHA-256'yı hesaplayın, seviyeleri oluşturmak için birleştirir, blok sınırını sıfırlarla doldurur ve tek bir kök karma değeri kalana kadar önceki seviyeyle tekrar eder. Bu kök karma değeri, kullanılan tuzla birlikte, dm-verity tablosunu ve imzayı besler.
Disk formatı sürümleri ve algoritması
Disk üzerindeki hash bloklarının formatının bir versiyonu vardır. Sürüm 0, Chromium OS'de kullanılan orijinal sürümdü: Tuz, karma işleminin sonunda eklenir, özetler sürekli olarak saklanır ve bloğun geri kalanı sıfırlarla doldurulur.
La Yeni cihazlar için Sürüm 1 önerilir: Tuz, karma değere eklenir ve her özet, hizalamayı ve sağlamlığı artırmak için ikiye kadar sıfırlarla doldurulur. dm-verity tablosu ayrıca algoritmayı da belirtir (örneğin, sha1 veya sha256), ancak mevcut güvenlik için sha256 kullanılır.
dm-verity tablosu ve temel parametreler
dm-verity'nin tanımladığı hedef tablo verilerin nerede olduğu, karma ağacının nerede olduğu ve bunların nasıl doğrulanacağıTipik tablo alanları:
- dev: doğrulanacak verilerin bulunduğu cihaz (yol türü /dev/sdXN veya greater:lesser).
- hash_dev: karma ağacına sahip cihaz (aynı olabilir; eğer öyleyse, hash_start işaretlenen aralığın dışında olmalıdır).
- veri_blok_boyutu: veri bloğu boyutu (bayt cinsinden) (örn. 4096).
- hash_block_size: hash bloğu boyutu (bayt cinsinden).
- veri_blok_sayısı: doğrulanabilir veri bloklarının sayısı.
- hash_start_block: ağacın kök bloğuna (hash_block_size bloklar halinde) ofset.
- algoritma: karma algoritması (örn. sha256).
- özet: kök blok karmasının onaltılık kodlaması (biçim sürümüne göre tuz dahil); bu değere güvenilmelidir.
- tuz: onaltılık tuz.
Ek olarak, var isteğe bağlı parametreler Davranışı ayarlamak için çok faydalıdır:
- bozulmayı_yoksay: Bozuk blokları kaydeder, ancak okumaya devam edilmesine izin verir.
- bozulma_durumunda_yeniden_başlat: bozulma tespit edildiğinde yeniden başlat (ignore_corruption ile uyumlu değildir ve döngülerden kaçınmak için kullanıcı alanı desteği gerektirir).
- yolsuzluk_panik: : bozulma tespit edildiğinde panik yaratıyor (önceki sürümlerle uyumlu değil).
- yeniden_on_error y panik_hata: aynı tepkiler ancak G/Ç hataları için.
- sıfır_blokları_yoksay: sıfır olarak beklenen blokları kontrol etmez ve sıfır döndürür.
- use_fec_from_device + fec_kökleri + fec_blokları + fec_başlangıç: Doğrulama başarısız olduğunda verileri kurtarmak için Reed–Solomon'u (FEC) etkinleştirin; veri, karma ve FEC alanları çakışmamalı ve blok boyutları eşleşmelidir.
- en_az_bir_kez_kontrol_edin: Her veri bloğunu yalnızca ilk okunduğunda kontrol eder (canlı saldırılarda güvenlik pahasına genel giderleri azaltır).
- kök_hash_imza_anahtar_açıklaması: Eşleme oluşturulurken kök karma değerinin PKCS7 imzasını doğrulamak için anahtarlıktaki bir anahtara başvuru (uygun çekirdek yapılandırması ve güvenilir anahtarlıklar gerektirir).
- görevde_doğrulamayı_dene: Eğer karmalar önbelleğe alınmışsa ve G/Ç boyutu izin veriyorsa, gecikmeyi azaltmak için alt yarıyı kontrol eder; G/Ç sınıfı başına /sys/module/dm_verity/parameters/use_bh_bytes ile ayarlanır.
İmza, meta veri ve güven sabitleme
dm-verity'nin güvenilir olması için, Kök karma güvenilir olmalı ve genellikle imzalanmalıdırKlasik Android'de, önyükleme bölümüne üretici tarafından harici olarak doğrulanan bir genel anahtar eklenir; bu anahtar kök karma imzasını doğrular ve sistem bölümünün değiştirilmediğinden emin olur.
Verity meta verileri yapı ve sürüm kontrolü ekler. Meta veri bloğu 0xb001b001 sihirli numarasını içerir (bayt b0 01 b0 01), sürüm (şu anda 0), PKCS1.5'teki tablo imzası (RSA-2048 için genellikle 256 bayt), tablo uzunluğu, tablonun kendisi ve 32K'ya kadar sıfır dolgusu.
Android uygulamalarında doğrulama şunlara dayanır: fs_mgr ve fstab: İlgili girdiye bir onay işareti eklenip anahtar /boot/verity_key dizinine yerleştiriliyor. Sihirli sayı olması gereken yerde değilse, yanlış bir şeyi kontrol etmekten kaçınmak için doğrulama işlemi durdurulur.
Başlatma işlemi doğrulandı
Koruma çekirdekte yaşar: Çekirdek başlatılmadan önce tehlikeye atılırsa saldırgan kontrolü elinde tutarBu nedenle üreticiler genellikle her aşamayı sıkı bir şekilde doğrular: Cihaza yazılan bir anahtar ilk önyükleyiciyi doğrular, bu da bir sonrakini, yani uygulama önyükleyicisini ve son olarak çekirdeği doğrular.
Çekirdek doğrulandıktan sonra, Doğrulanmış blok aygıtı bağlanırken dm-verity etkinleştirilirTüm cihazın karma işlemine tabi tutulması yerine (ki bu yavaş ve enerji israfı olurdu), erişim sırasında blok blok doğrulanır. Bir arıza bir G/Ç hatasına neden olur ve hizmetler ile uygulamalar toleranslarına göre tepki verir: ya bu veriler olmadan çalışmaya devam eder ya da tamamen çöker.
İleri Hata Düzeltme (FEC)
Android 7.0'ten bu yana, FEC (Reed-Solomon) iç içe geçme teknikleriyle birleştirilmiştir Alanı azaltmak ve hasarlı blokları kurtarma yeteneğini artırmak için. Bu, dm-verity ile birlikte çalışır: Bir kontrol başarısız olursa, alt sistem kurtarılamaz ilan etmeden önce düzeltmeyi deneyebilir.
Performans ve optimizasyon
Etkisini azaltmak için: ARMv7'de NEON ile SHA-2 hızlandırmayı ve ARMv8'de SHA-2 uzantılarını etkinleştirin Çekirdekten. Donanımınız için önceden okuma ve prefetch_cluster parametrelerini ayarlayın; blok başına doğrulama genellikle G/Ç maliyetine çok az katkıda bulunur, ancak bu ayarlar fark yaratır.
Linux (systemd, veritysetup) ve Android'e başlarken
Systemd'li modern bir Linux'ta, dm-verity, doğrulanmış salt okunur bir köke izin verir veritysetup (cryptsetup'ın bir parçası), systemd-veritysetup.generator ve systemd-veritysetup@.service'i kullanarak. Güvenli Önyükleme ve imzalı bir UKI (birleşik çekirdek görüntüsü) eklemeniz önerilir, ancak bunlar kesinlikle gerekli değildir.
Hazırlık ve önerilen bölümlendirme
İşlevsel ve ayarlanmış bir sistemin parçası. Karma ağacı için bir birim ayırın (Kök boyutunun %8-10'u genellikle yeterlidir) ve yazmanız gerekiyorsa /home ve /var'ı ayırmayı düşünün. Tipik bir şema şunları içerir: ESP (önyükleyici için), XBOOTLDR (UKI'ler için), root (şifrelemeli veya şifrelemesiz), VERITY bölümü ve isteğe bağlı olarak /home ve /var.
Kök olarak, EROFS, ext4 veya squashfs'e çok ilginç bir alternatiftir: Tasarımı gereği salt okunurdur, flash/SSD'de çok iyi performans gösterir, varsayılan olarak lz4 sıkıştırması vardır ve dm-verity'li Android telefonlarda yaygın olarak kullanılır.
Yazılabilir olması gereken dosyalar
Kök ro ile bazı programlar yazmayı bekler /etc veya başlatma sırasındaBunu /var/etc dizinine taşıyabilir ve değişmesi gereken her şeyi sembolik bağlantı olarak kullanabilirsiniz (örneğin, /etc/NetworkManager/system-connections dizinindeki NetworkManager bağlantıları). Erken başlatmaların bozulmaması için systemd-journald dizininin kök dizinde bulunması gerektiğini (sembolik bağlantı değil) unutmayın.
Uygulamada hangi değişikliklerin olduğunu öğrenmek için, dracut-overlayroot'u kullanın: kök dizinin üzerine bir tmpfs yerleştirir ve yazılan her şey /run/overlayroot/u dizininde görünür. Modülü /usr/lib/dracut/modules.d/ dizinine ekleyin, overlayroot'u dracut dizinine ekleyin ve çekirdek satırında overlayroot=1 değerini ayarlayın; bu şekilde /var dizinine neleri taşıyacağınızı görebilirsiniz.
Yararlı örnekler: pacman ve NetworkManager
Arch'ta kullanışlıdır Pacman veritabanını /usr/lib/pacman'a taşıyın Böylece rootfs her zaman yüklü paketleri yansıtır. Ardından, önbelleği /var/lib/pacman dizinine yönlendirin ve bağlayın. Ayna listesini kök dizine dokunmadan değiştirmek için, /var/etc dizinine taşıyın ve yine de bağlayın.
NetworkManager ile, sistem bağlantılarını /var/etc/NetworkManager'a taşı ve /etc/NetworkManager/system-connections'dan bağlantı kurun. Bu, kök dizinin değiştirilemez kalmasını ve yapılandırmanın yazılabilir olması gereken yerde kalmasını sağlar.
Doğruluk ve testin inşası
Canlı ve her şeyin mükemmel ve ro'ya monte edilmiş haliyle, ağacı ve kök karmasını yaratın veritysetup formatı: Çalıştırıldığında roothash.txt dosyasına kaydedebileceğiniz Root Hash satırını yazdırır. Test için veritysetup ile çalıştırın, open root-device root verity-device $(cat roothash.txt) ve mount /dev/mapper/root.
Eğer tercih edersen, önce ağacı bir dosyaya oluşturur (verity.bin) ve ardından VERITY bölümüne yazın. Ortaya çıkan küme: kök imaj, verity ağacı ve önyüklemede sabitleyeceğiniz kök karma değeridir.
Çekirdek satırını yapılandırın
Şu parametreleri ekleyin: sistemd.verity=1, roothash=contents_of_roothash.txt, systemd.verity_root_data=ROOT-PATH (örneğin LABEL=OS) ve systemd.verity_root_hash=VERITY-PATH (örneğin LABEL=VERITY). Sıkı politikalar için systemd.verity_root_options'ı restart-on-corruption veya panic-on-corruption olarak ayarlayın.
Diğer önerilen seçenekler: ro (EROFS/squashfs kullanmıyorsanız), rd.emergency=yeniden başlatma y rd.shell=0 (önyükleme başarısız olursa yetkisiz kabukları önle) ve kilitlenme=gizlilik çekirdek belleğini erişime karşı korumak için.
Verity ile ek bölümler
Sadece kök değil: /etc/veritytab'da diğer eşlemeleri tanımlayabilirsiniz ve systemd-veritysetup@.service bunları önyükleme sırasında birleştirecektir. Unutmayın: Kök olmayan bir bölümü RW ile bağlamak daha kolaydır ve bir kök kullanıcı bu bölümlerde Verity'yi devre dışı bırakabilir, bu nedenle buradaki güvenlik değeri daha düşüktür.
Güvenlik: Güvenli Önyükleme, UKI ve imzalı modüller
dm-verity tek başına çözüm değil. UKI'yi imzalayın ve kendi anahtarlarınızla Güvenli Önyüklemeyi etkinleştirin Herhangi birinin kernel/initramfs/cmdline'ı (kök karma değerini de içerir) geçersiz kılmasını önlemek için sbupdate-git veya sbctl gibi araçlar imzalı imajların ve önyükleme zincirinin bozulmadan kalmasına yardımcı olur.
Çekirdek kilitlemeyi veya modül imza doğrulamasını etkinleştirirseniz, DKMS veya ağaç dışı modüller imzalanmalıdır veya yüklenmezler. Boru hattınız için imzalama desteği olan özel bir çekirdek düşünün (imzalı çekirdek modüllerine bakın).
Şifreleme, TPM ve ölçüm
dm-verity bütünlüğü korur, gizlilik dışıHerhangi bir sır içermiyorsa ve önyükleme zinciri korunuyorsa, kök dizini şifrelenmemiş olarak bırakabilirsiniz. Diğer birimlerin kilidini açmak için kök dizinin anahtar dosyalarını kullanıyorsanız, şifrelemek iyi bir fikirdir.
TPM 2.0 ile, systemd-cryptenroll, anahtarların 0,1,5,7 PCR'lerine bağlanmasına izin verir (donanım yazılımı, seçenekler, GPT, güvenli önyükleme durumu). rd.luks.options=LUKS_UUID=tpm2-device=auto ekleyin ve initramfs'ye TPM2 desteğini eklediğinizden emin olun. systemd-boot, PCR4'teki kernel.efi'yi ölçer ve UKI veya komut satırı değişirse anahtarları geçersiz kılmak için kullanışlıdır.
Güncellemeler ve dağıtım modelleri
Doğrulanmış salt okunur bir kök Geleneksel yöntemle paket yöneticisiyle güncellenmiyorİdeal olan, yeni görselleri şu araçlarla oluşturmaktır: Yocto projesi ve bunları yayınlayın. systemd, sağlam görüntü indirme ve flaşlama için systemd-sysupdate ve systemd-repart'a sahiptir.
Diğer bir strateji ise A/B şeması: İki kök ve iki doğrulama tutarsınız. Etkin kökü etkin olmayan köke kopyalayın, değişiklikleri uygulayın ve doğrulamayı yeniden yapın. Bir sonraki önyüklemede tekrar geçiş yapın. UKI kullanıyorsanız, cmd satırındaki kök karma değerini güncellemeyi veya imzalanmış UKI'yi yeniden oluşturmayı unutmayın.
İsteğe bağlı kalıcılık için, doğrulanmış kökte OverlayFS kullanın tmpfs veya disk'te upper ile. Geçici kalıcılık için systemd.volatile=overlay'i de kullanabilirsiniz. Flatpak, /var ve /home'a / dizinine dokunmadan uygulama yüklemeyi kolaylaştırır.
Squashfs kökü oluşturan ve otomatik paketler (örneğin AUR'deki verity-squash-root) vardır. roothash'i çekirdek ve initramfs ile imzalayın, kalıcı veya geçici mod arasında seçim yapmanıza ve en son rootfs'yi yedek olarak saklamanıza olanak tanır. Not: Doğrulanmış bir köke kalıcılık eklemenin kullanım alanları sınırlıdır; uygulama verilerini ayrı bölümlerde kalıcı hale getirmeyi deneyin.
Android: sistem-kökü, AVB ve satıcı katmanları
Android 10'ten bu yana, RootFS RAM diskte çalışmayı durdurur ve system.img ile bütünleşir. (system-as-root). Android 10 ile piyasaya sürülen cihazlar her zaman bu şemayı kullanır ve dm-linear için bir ramdisk gerektirir. Bu sürümde, ramdisk kullanımı ile system.img'yi doğrudan etkinleştirme arasında ayrım yapmak için BOARD_BUILD_SYSTEM_ROOT_IMAGE false olarak ayarlanmıştır.
Android 10 içerir dinamik bölümler ve birinci aşama başlatma Mantıksal sistem bölümünü etkinleştirir; çekirdek artık bunu doğrudan bağlamaz. Yalnızca sistem tabanlı OTA'lar, Android 10 cihazlarda zorunlu olan sistem-kök tasarımını gerektirir.
Hiçbir A/B'de, kurtarmayı önyüklemeden ayrı tutunA/B'den farklı olarak boot_a/boot_b yedeği yoktur, dolayısıyla A/B dışındaki kurtarmayı kaldırmak, önyükleme güncellemesi başarısız olursa kurtarma modundan mahrum kalmanıza neden olabilir.
Çekirdek, system.img'yi /converity'ye iki yol üzerinden bağlar: vboot 1.0 (Çekirdek için Android meta verilerini /system'de ayrıştırmak ve dm-verity parametrelerini türetmek için yamalar; komut satırı root=/dev/dm-0, skip_initramfs ve init=/init ile dm=… içerir) veya vboot 2.0/AVB, önyükleyicinin libavb'yi entegre ettiği, hashtree tanımlayıcısını (vbmeta veya system'de) okuduğu, parametreleri oluşturduğu ve bunları komut satırında çekirdeğe ilettiği, FEC desteği ve restart_on_corruption gibi bayraklarla birlikte.
Sistem-kök olarak, BOARD_ROOT_EXTRA_FOLDERS kullanmayın Cihaza özgü kök klasörler için: bunlar GSI flaşlandığında kaybolacaktır. /mnt/vendor/ altında belirli bağlamaları tanımlayın fs_mgr'nin otomatik olarak oluşturduğu ve cihaz ağacının fstab dosyasında bunlara referans veren.
Android bir /product/vendor_overlay/ adresinden satıcı kaplaması: init, SELinux bağlam gereksinimlerini karşılayan ve /vendor/ dizininin varlığını sağlayan alt dizinleri /vendor dizinine bağlayacaktır . CONFIG_OVERLAY_FS=yy gerektirir, eski çekirdeklerde override_creds=off yaması gerekir.
Tipik uygulama: önceden derlenmiş dosyaları device/ dizinine yükler / /satıcı_yer_paylaşımı/, bunları find-copy-subdir-files ile $(TARGET_COPY_OUT_PRODUCT)/vendor_overlay'e PRODUCT_COPY_FILES'a ekleyin, file_contexts'te etc ve app için bağlamları tanımlayın (örn. vendor_configs_file ve vendor_app_file) ve init.te'de bu bağlamlarda mounton'a izin verin. Userdebug'da atest vfs_mgr_vendor_overlay_test ile test edin.
Sorun giderme: Android'de dm-verity bozulma mesajı
A/B yuvaları olan cihazlarda yuvaları değiştirin veya Roothash ile tutarlılık olmadan vbmeta/boot'u flaş etmek Bu, şu uyarıyı tetikleyebilir: dm-verity bozulması, cihazınıza güvenilmiyor. fastboot flash –disable-verity –disable-verification vbmeta vbmeta.img gibi komutlar doğrulamayı devre dışı bırakır, ancak sistemin bütünlüğünü garanti altına almaz.
Bazı önyükleyiciler destekler fastboot oem disable_dm_verity ve bunun tersi olan enable_dm_verity. Bazı modellerde çalışır, ancak bazılarında çalışmaz; ayrıca ayarlanmış bayraklara sahip çekirdek/magisk gerektirebilir. Kullanım kendi sorumluluğunuzdadır: ihtiyatlı hareket tarzı önyüklemeyi, vbmeta'yı ve sistemi hizala, ağacı imzalayın veya yeniden oluşturun ve beklenen kök karma değerinin yapılandırılan değerle eşleştiğinden emin olun.
Uyarıdan sonra güç tuşuna basmaya devam edebiliyorsanız sistem başlar, ancak artık sağlam bir güven zinciriniz yokGüvenlikten ödün vermeden mesajı kaldırmak için, verity'yi devre dışı bırakmak yerine orijinal imzalı görüntüleri geri yükleyin veya vbmeta'yı doğru hashtree ile yeniden oluşturun/doğrulayın.
i.MX ve OpenWrt platformları
i.MX6'da (örneğin sabesd), Çekirdeği DM_VERITY ve FEC desteğiyle yapılandırın, ağacı veritysetup ile oluşturun, kök karmasını güvenli bir şekilde saklayın ve uygun parametreleri cmd satırına geçirin veya systemd-veritysetup ile initramfs aracılığıyla entegre edin. dm-crypt kullanmıyorsanız, verity için CAAM'a ihtiyacınız yoktur; odak noktası bütünlüktür.
OpenWrt'de ve OpenEmbedded ile gömülü Linux sistemleri, dm-verity ve SELinux'u entegre etme çabaları var (Bootlin işleri, desteğin dahil edilmesi amacıyla revize edildi.) Bu doğal bir uyumdur: yönlendiriciler ve ağ ekipmanları, değiştirilemez, doğrulanmış ve MAC ile güçlendirilmiş bir kökten faydalanır.
Manuel ağaç ve meta veri oluşturma (ayrıntılı görünüm)
cryptsetup sizin için ağacı oluşturabilir, ancak formatı anlamak istiyorsanız, kompakt tablo satırı tanımı şunları içerir: eşleme adı, veri aygıtı, veri bloğu ve karma boyutları, bloklardaki görüntü boyutu, hash_start konumu (blok görüntüsü + birleştirilmişse 8), kök karma ve tuz. Birleştirilmiş katmanları oluşturduktan sonra (üstten alta, 0. katman hariç), ağacı diske yazarsınız.
Her şeyi paketlemek için, dm-verity tablosunu oluşturun, imzalayın (tipik RSA-2048) ve meta verilerde imza+tabloyu gruplayın Sürümlü bir başlık ve sihirli bir sayı ile. Ardından, sistem görüntüsünü, verity meta verilerini ve karma ağacını birleştirir. fstab'da, fs_mgr'yi doğrulama olarak işaretler ve imzayı doğrulamak için genel anahtarı /boot/verity_key dizinine yerleştirir.
İle optimize edin CPU'nuz için SHA-2 hızlandırmaları ve önceden okuma/önceden getirme kümesini ayarlayın. ARM donanımında, NEON SHA-2 (ARMv7) ve SHA-2 uzantıları (ARMv8), doğrulama yükünü önemli ölçüde azaltır.
Herhangi bir dağıtımda şunu unutmayın: kök karma değeri korunmalıdır: İster imzalı bir UKI'ye derlenmiş olsun, ister imzalı önyükleme bölümüne derlenmiş olsun, isterse AVB kullanılarak önyükleyici tarafından doğrulanmış olsun. Bu noktadan sonraki her şey bu güveni devralır.
Yukarıdakilerin hepsi sağlandığında, dm-verity şu hale gelir: değiştirilemez, mobil ve gömülü sistemler için sağlam bir temel, işlemsel güncellemeleri, yapılandırma katmanlarını ve saldırı yüzeyini azaltan ve performanstan ödün vermeden kalıcılığı önleyen modern bir güvenlik modelini destekler.


