
Son yıllarda TPM 2.0 modülleri, bir donanım gizemi olmaktan çıkıp UEFI ve Güvenli Önyükleme özelliğine sahip her modern bilgisayarın ortak bir parçası haline geldi. Bu makalede /dev/tpm0 ve /dev/tpmrm0'ın ne olduğu ve tpm2_pcrread ve tpm2_pcrextend'in nasıl kullanılacağı açıklanmaktadır. (tpm2-tools'daki gerçek komutuyla birlikte) ve bunların Linux'ta ölçülen önyükleme, disk şifreleme ve imzalı PCR politikalarına nasıl uyduğunu açıklamaktadır.
Yararlı dokümanlar mevcut, ancak bunlar systemd man sayfaları, wiki girdileri ve çok yoğun yazılar arasında dağılmış durumda; Burada tüm temel bilgileri (PCR'ler, pratik örnekler, riskler ve savunmalar) bir araya getiriyoruz Böylece TPM uzmanı olmasalar bile teknik kişilerin bu araçlarla, anlaşılması zor ayrıntılarda kaybolmadan çalışabilmeleri sağlanıyor.
TPM 2.0 nedir ve neden önemseyebilirsiniz?
Güvenilir Platform Modülü, anakartınızda (veya fTPM/Intel PTT gibi CPU'nuzun içinde) bulunan ve sistem için güvenli bir depolama, rastgele sayı üreteci ve güven kaynağı görevi gören bir güvenlik yongasıdır. Pasiftir: Kullanmazsanız hiçbir işe yaramaz.Ancak bunu önyükleme akışınıza ve disk şifrelemenize entegre ettiğinizde, bütünlük doğrulaması ve donanımla korunan anahtarlar sağlar.
Pratikte, TPM 2.0 disk şifrelemesinde iki ana kullanım moduna izin verir: a) güçlü bir anahtar oluştur/kaydet ve kullanımını kaba kuvvet önleme kilidi olan bir PIN ile koru; b) ölçülen önyükleme olarak adlandırılan özelliği etkinleştir; Her önyükleme bileşeni PCR kayıtlarında ölçülür, bu nedenle anahtar yalnızca sistem kurcalanmamışsa (ve isteğe bağlı olarak önyükleme öncesi bir PIN ile) "açılır".
/dev/tpm0 ve /dev/tpmrm0: farkları ve her birinin ne zaman kullanılacağı
Linux'ta TPM 2.0 mevcut olduğunda iki karakterli aygıtlar göreceksiniz. /dev/tpm0, TPM'nin "ham" arayüzüdürSüre /dev/tpmrm0 Kaynak Yöneticisi aracılığıyla erişimi açığa çıkarır (müşterileri çoğaltan, oturumları ve kaynakları yöneten bir yönetici), tpm2-tools tarafından çoğu senaryoda önerilen yöneticidir.
Eğer bir TPM'nin var olup olmadığından emin değilseniz, sıcak test yapabilirsiniz. /sys/class/tpm/ boşsa veya wiki komutu hiçbir şey döndürmüyorsa, TPM görünmüyor: Fiziksel olarak mevcut olmayabilir veya donanım yazılımında devre dışı bırakılmış olabilir.
# ¿Hay TPM 2.0?
ls /sys/class/tpm/
cat /sys/class/tpm/tpm*/tpm_version_major
# Dispositivos
ls -l /dev/tpm*
Her iki aygıt düğümü de mevcut olduğunda, tpm2-tools normalde /dev/tpmrm0'ı algılar ve otomatik olarak kullanır. Bir cihazı zorlamanız gerekiyorsa, çoğu araç –tcti'yi kabul eder veya TCTI ortam değişkenlerini kullanın, ancak yaygın görevler için genellikle gerekli değildir.
TPM PCR'leri: Nasıl çalışırlar ve neyi ölçerler?
Platform Yapılandırma Kayıtları, her önyükleme aşamasında kritik bileşenlerin durumunun karma değerlerini (genellikle SHA-256) depolayan kayıtlardır. Güç açma döngüsünde sıfıra ayarlanırlar ve yalnızca "genişletilebilirler": asla yeniden yazmayın veya silmeyin (PCR 16 gibi hata ayıklama durumları hariç).
Temel işlem uzantıdır: yeni_değer = SHA256(geçerli_değer || SHA256(veri))Ölçümler, fırsatçı sıfırlamalara izin vermeden bu şekilde birbirine bağlanır. Bu model, aygıt yazılımı, yapılandırma, Güvenli Önyükleme, çekirdek, initrd ve çekirdek parametreleri gibi diğer parametreleri ölçmek için kullanılır.
Modern ekipmanlarda 24 PCR (0–23) göreceksiniz. UEFI önyüklemesinde systemd ile en alakalı olanlar şunlardır::
– PCR 0: donanım yazılımı kodu.
– PCR 1: aygıt yazılımı yapılandırması (UEFI ayarları).
– PCR 7: Güvenli Önyükleme durumu ve güvendiği sertifikalar.
– PCR 9: çekirdek tarafından ölçülen initrd(ler).
– PCR 11: UKI (Birleşik Çekirdek Görüntüsü) ve systemd-stub/systemd-pcrphase aracılığıyla faz işaretleri.
– PCR 12: çekirdek komut satırı.
tpm2-tools ile PCR'leri okuyun ve genişletin: tpm2_pcrread ve tpm2_pcr_extend
Tpm2-tools'da okuma şu şekilde yapılır: tpm2_pcrread ve uzantısı ile tpm2_pcrextendBazen "tpm2_pcr_extend" ifadesinin kavramsal olarak genişletme işlemi olarak anıldığını göreceksiniz, ancak Gerçek paket komutu tpm2_pcrextend'dir.
PCR'lerin güncel durumunu denetlemek için SHA-256, bu kadar basit:
# Leer PCRs en SHA-256 (ejemplos de índices habituales)
sudo tpm2_pcrread sha256:0,1,7,9,11,12
# O todos los PCRs SHA-256 disponibles
tpm2_pcrread sha256:all
Rastgele verilerin karmasını (pedagojik bir örnek olarak /etc/passwd'nin karmasını) kullanarak bir PCR'yi genişletmek için SHA-256'yı hesaplayın ve genişletin. Unutmayın: TPM devasa veriler almaz, ancak karması, sınırlar ve tasarım gereği.
# 1) Guardar el hash de /etc/passwd
echo -n $(sha256sum /etc/passwd | cut -d' ' -f1) > passwd.sha
# 2) Extender PCR 7 (ejemplo) con el hash previo
sudo tpm2_pcrextend 7:sha256=$(cat passwd.sha)
# 3) Ver el nuevo valor del PCR 7
tpm2_pcrread sha256:7
Uzantı matematiğini TPM dışında yeniden üretmek istiyorsanız, Mevcut PCR değerini (ikili) yeni karma değerle birleştirirsiniz ve sonucu kontrol etmek için SHA-256'yı tekrar uygularsınız.
PCR sıfırlanabilir mi?
Normal şartlarda hayır. Felsefe, PCR'nin yalnızca uzantılarla büyümesidirBir istisna var: PCR 16 genellikle "hata ayıklama" için ayrılmıştır ve belirli akışlarda sıfırlanabilir, ancak politikanızın güvenlik kökü olarak kullanışlı değildir.
Ölçülen Önyükleme, LUKS ve systemd-cryptenroll: Parçaları Birleştirme
TPM'yi disk şifrelemenize entegre ettiğinizde, anahtar kilidini bir dizi PCR'ye "bağlayabilirsiniz". Mevcut önyüklemede bu PCR'ler anahtarı kaydettiğiniz zamankiyle aynı değerlere sahipse, TPM açılır ve LUKS birimi otomatik olarak açılır (yapılandırmanıza bağlı olarak önyükleme öncesi PIN ile veya PIN olmadan).
Bu, systemd-cryptenroll ve systemd-cryptsetup ile çok güzel bir şekilde yapılır. Amaç, biriminizi oluşturmak, TPM anahtarını kaydetmek ve bir kurtarma anahtarı eklemektir. böylece ölçümler değişse bile (örneğin, aygıt yazılımı veya çekirdek güncellendikten sonra) geride kalmazsınız.
# Ejemplo: crear LUKS, matricular TPM y añadir recuperación (pseudoflujo)
# 1) Crear el volumen con contraseña temporal
sudo cryptsetup luksFormat /dev/nvme0n1p2
# 2) Matricular TPM en LUKS usando PCRs concretos y PIN
sudo systemd-cryptenroll \
--tpm2-device=auto \
--tpm2-with-pin=yes \
--tpm2-pcrs=1+2+3+4 \
--wipe-slot=empty \
/dev/nvme0n1p2
# 3) Añadir clave de recuperación aleatoria
sudo systemd-cryptenroll --recovery-key /dev/nvme0n1p2
# 4) Abrir con TPM o con recovery cuando proceda
systemd-cryptsetup attach root /dev/nvme0n1p2 - tpm2-device=auto
Bir tutarsızlığı zorlarsanız (örneğin, PCR 4'ü bilerek uzatıyorsunuz), TPM artık anahtarı serbest bırakmayacak ve kurtarma anahtarını kullanmanız gerekecektir. Daha sonra TPM'yi yeni geçerli değerlerle yeniden kaydedebilirsiniz. –silme-yuvası=tpm2 ve systemd-cryptenroll'un bir başka çalıştırılması.
Hangi PCR'ler seçilmeli ve neden?
Ne kadar çok ilgili PCR'yi birbirine bağlarsanız, o kadar çok yüzey alanını azaltırsınız, ancak meşru değişikliklerden sonra o kadar sık yeniden kayıt yaptırmanız gerekir. Bazı pratik kriterler:
– PCR 7 (Güvenli Önyükleme): Anahtar setiniz değişmezse oldukça kararlı olmalıdır.
– PCR 0/1 (donanım yazılımı ve yapılandırma): Bunlar nadiren değişir; donanım yazılımını güncelledikten veya BIOS/UEFI'yi değiştirdikten sonra yeniden kayıt yaptırmaları gerekir.
– PCR 9/11/12 (çekirdek, initrd, UKI ve cmdline): UKI veya kararlı imza/politika kullanmıyorsanız bunlar sıklıkla değişir.
Bazı ortamlarda, yalnızca PCR 7'yi bağladığı, çekirdeği ve başlatılmış UKI olarak başlatılırsa initrd'yi doğrulayan Güvenli Önyüklemeye güvendiği ve systemd-boot'u kullandığı görülmüştür. SB etkin olduğunda çekirdek parametrelerinin düzenlenmesine izin vermezBu işe yarar, ancak Güvenli Önyüklemeniz üçüncü taraf anahtarlara (Microsoft 3. Taraf gibi) dayanıyorsa, PCR 7'yi koruyan alternatif bir önyükleme düzenlemek daha kolaydır ve bu nedenle En kısıtlayıcı seçenek değil.
UKI ve PCR politikaları imzalandı: Güvenlikten ödün vermeden istikrar
Çekirdeği her güncellediğinizde yeniden kayıt yaptırmaktan kaçınmanın pratik bir çözümü, UKI (Birleşik Çekirdek Görüntüsü) ve imzalanmış bir PCR politikasıBir anahtar çifti oluşturur, kayıt sırasında genel anahtarı TPM'ye bağlar ve her güncellemeden sonra UKI'nizi imzalarsınız. TPM bu imzaya güvenir ve belirli çekirdek karması değişse bile kilidin açılmasına izin verir.
systemd-measure aracı ve systemd-ukify yardımcısı bunu kolaylaştırır: ukify, kernel, initrd ve cmdline'ı UKI'ye paketliyor (genellikle PCR 11 ile ölçülür) ve systemd-measure politikayı imzalar. mkinitcpio ile ukify entegre edilebilir, böylece kurulum sonrası imza kendini yürütür.
# Esquema típico (pseudocomandos)
# 1) Crear claves para política PCR firmada
openssl genpkey -algorithm RSA -out /etc/kernel/pcr-initrd.key.pem -pkeyopt rsa_keygen_bits:3072
openssl req -new -x509 -key /etc/kernel/pcr-initrd.key.pem -out /etc/kernel/pcr-initrd.pub.pem -subj "/CN=UKI PCR Policy"
# 2) Configurar ukify/mkinitcpio para generar UKI y firmar política
# (consultar man ukify y systemd-measure para parámetros)
# 3) Matricular en LUKS atando PCRs y clave pública de la política
sudo systemd-cryptenroll \
--tpm2-device=auto \
--wipe-slot=tpm2 \
--tpm2-with-pin=yes \
--tpm2-pcrs=0+1+2+7 \
--tpm2-public-key=/etc/kernel/pcr-initrd.pub.pem \
--tpm2-public-key-pcrs=11 \
/dev/nvme0n1p2
Bu şekilde, UKI'yi anahtarınızla imzalamaya devam ettiğiniz sürece politikanız çekirdek/initrd değişikliklerine karşı stabil kalır.Şifrenizi yenilemeniz veya PCR setinizi değiştirmeniz durumunda yeniden kayıt yaptırmanız gerekecektir.
systemd ile ölçüm zincirlerine örnekler
Önyükleme sırasında systemd-stub ve systemd-pcrphase belirli zamanlarda PCR'leri genişletir. Örneğin, “enter-initrd” PCR 11'de kaydedilir, bir kilidin yalnızca initrd içinde geçerli olmasına izin verir (bir saldırganın daha sonra anahtarı yeniden kullanmaya çalışması olasılığını azaltır).
UKI'li sistemlerde UKI içeriği PCR 11'de ölçülür; UKI'siz sistemlerde ise çekirdek PCR 9'da initrd'leri ölçer ve önyükleyici PCR 12'deki cmdline'ı ölçebilir. Politikanızda initrd ve cmdline'ı kapsadığınızdan emin olun, aksi takdirde birisi arka kapı kulağı initrd veya önyüklemeyi kötü amaçlı bir cmdline ile yapın başlangıç=/bin/bash.
Gerçek riskler: soğuk başlatma, TPM koklama ve daha fazlası
Neler ters gidebilir? Tehditleri modellerken bilmeniz gereken birkaç şey var. Soğuk önyükleme saldırıları Hala uygulanabilir: Kilit açma tamamen otomatikse, saldırgan sınırsız sayıda denemeyi tekrarlayabilir. Kesin çözüm, başlatma öncesi PIN (PBA) gerektirmek ve bu sayede deneme sayısını güç döngüsü başına bire düşürmektir.
Başka bir kategori ise TPM veri yoluna yapılan koklama saldırılarıCPU anahtarı ister, TPM gönderir; bağlantı dinlenirse anahtar sızdırılabilir. Bu amaçla systemd, alışverişin şifrelenmesi için "parametre şifrelemesi" uygular; alternatif olarak, fTPM/Intel PTT veya şifreli bellek kullanmak, riski azaltır. Büyük marka dizüstü bilgisayarlarda uygulanabilirliğini gösteren, nispeten uygun fiyatlı (mikrodenetleyicilerle bile) halka açık gösteriler mevcuttur.
Akademik ve pratik açıdan da zaaflar mevcuttu: TPM-Başarısız, hataTPM (AMD üzerinde önemli bir etkiye sahip) ve dava bitpixie (CVE-2023-21563)Bu, TPM'nin işe yaramaz olduğu anlamına gelmez; ancak yazılımınızın güncel kalmasını sağlamalı, tehdit modelinizi anlamalı ve ona körü körüne güvenmemelisiniz.
BitLocker'ın bu tehditlere karşı durumu
Windows dünyasında en yaygın kullanılan disk şifrelemesi BitLocker'dır. Artık şunun da farkına varılmıştır: varsayılan yapılandırması (yalnızca TPM ile otomatik kilit açma) Systemd tarzı parametre şifrelemesi uygulamadığı için hem soğuk başlatmaya hem de TPM kanal dinlemeye açık kapı bırakır. Bu durum, bazı kurumsal bilgisayarları dakikalar içinde saldırılara karşı savunmasız hale getirir.
Oradaki öneri, etkinleştirmedir önyükleme öncesi kimlik doğrulaması Politikalar/kayıt defteri veya CLI aracılığıyla, ortalama bir kullanıcıya yeterince açık olmayan bir şey. Ayrıca, kurtarma anahtarının nerede saklandığını kontrol etmeyi unutmayın: genellikle kullanıcının Microsoft hesabında bulunur ve bu da Bu başka bir risk açısıdır kontrol edilmezse.
Saldırgan/Savunma Hilesi: Parolanızı zorlamak için LUKS kök dizinini değiştirin
Önyükleme öncesi kimlik doğrulaması olmadığında ilginç bir durum ortaya çıkar. Bir saldırgan gerçek LUKS bölümünü kopyalayabilir. aynı UUID ve bildiği bir şifreye sahip başka bir LUKS ile değiştirinve bilgisayarı başlatın. PCR ölçümleri eşleştiğinden, TPM anahtarı serbest bırakır, ancak sahte LUKS ile eşleşmez, bu nedenle initrd "kurtarma" anahtarını ister. Saldırganın bildiği parolayı girerek, sisteminiz initrd'de root olarak çalışır ve ardından orijinal anahtarın çalınmasını sağlayabilirsiniz (örneğin, gerçek kopyayı ağ üzerinden bağlayıp systemd-cryptsetup kullanarak).
Net hafifletmeler: önyükleme öncesi kimlik doğrulamasını etkinleştir, systemd-pcrphase'i kullanarak kilidi açmayı kesinlikle initrd aşamasına bağlayın ve hedef LUKS hacmini ölçmeyi/bağlamayı da göz önünde bulundurun (kısır döngülerden kaçınmak için dikkatli bir tasarım gerektirir).
Bölümleme ve ikinci anahtar seçimi: en iyi uygulama
sürdürmek kurtarma anahtarı Zorunludur: TPM veya anakart bozulursa, TPM'ye bağlı anahtarınız işe yaramaz. LUKS birden fazla yuvaya izin verir (TPM birini, kurtarma diğerini kullanır). Ayrıca, / ve /home bölümlerini ayırmanın avantajları vardır: TPM ile sıkı ölçüm ve /home için güçlü bir anahtar veya FIDO2/YubiKey aygıtı kullanın, böylece tek bir mekanizmaya olan genel güven azalır.
Yazılımı veya çekirdeği güncellediğinizde ne olur?
Eğer firmware'i değiştirirseniz veya UEFI seçeneklerine dokunursanız, 0/1 gibi PCR'ler değişecek ve TPM, yeniden kaydolana kadar anahtarı serbest bırakmayacaktır. Için çekirdek ve initrd, değişiklikler sıktırİmzalı bir poliçeye sahip bir UKI kullanmazsanız, her güncelleme sizi kurtarma seçeneğini kullanmaya ve daha sonra yeniden kayıt olmaya zorlayabilir. İmzalı bir UKI ile ise sadece imzalarsınız ve hepsi bu kadar.
Topluluk Notları ve Gözlemleri
Bazı dağıtımların bazı popüler kılavuzlarında önerilmiştir UKI ve systemd-boot kullanırken yalnızca PCR 7'yi bağlayınGüvenli Önyükleme'nin güvenlik önlemlerine ve komut satırının düzenlenememesine güvenerek. Çalışıyor, ancak üçüncü taraflara güvenmek riskli. Geçmişte, kilidi açtıktan sonra Enter tuşuna basıldığında bir kurtarma kabuğunun açıldığı bir hata da belgelenmişti; sürprizlerden kaçınmak için sürümlerinizi güncel tutmanız iyi bir fikirdir.
2025/06'da ilginç yorumlar paylaşıldı: TPM arızası AMD'yi etkilemeye devam ediyor bir dereceye kadar; vikiler imzalı PCR politikaları hakkında özel bölümler ekledi; ve deneysel bir özellik olarak TPM ile FDE sunan bir dağıtımın yükleyicisi, bazı pratik aksaklıklarla (ilk önyüklemede kurtarma gerektirme, anlık görüntülere bağımlılık, çift disk şifrelemesi) test edildi; bu sorun daha derinlemesine bir denetimi hak ediyor.
Windows'ta disk şifrelemesine odaklanan bir takip çalışması 2025/07'de yayınlandı. Genel sonuç, PBA'nın ve TPM kanalının şifrelenmesinin gerekliliğini güçlendirmektedir.ve Güvenli Önyüklemede üçüncü taraf anahtarlara olan bağımlılığı sınırlamak.
tpm2-tools ve systemd ile operasyonel ipuçları
Günlük kullanım için: tpm2-tools ve tpm2-tss'yi yükleyin. Varsayılan olarak /dev/tpmrm0 kullanılırve PCR'leri test etmek ve denemek için tpm2_pcrread/tpm2_pcrextend. Üretim PCR'lerini keyfi verilerle genişletmekten kaçının: bunu laboratuvarlarda yapın veya test için PCR 16 kullanın.
systemd-cryptenroll ile kayıt olurken: –tpm2-cihaz=otomatik TPM'yi algılar; –tpm2-pinli PBA ekler; –tpm2-pcrs=… PCR'lerinizi seçin; –tpm2-public-key=… ve –tpm2-public-key-pcrs=… İmzalı bir PCR politikasını etkinleştirin (örneğin, UKI için PCR 11'e bağlı). Unutmayın –silme yuvası Önceki bir yuvanın temizlenmesini istediğinizde.
TPM'niz yoksa ve systemd önyükleme sırasında beklemenizi sağlıyorsa
Bazen bir güncellemeden sonra, makinenizde görünür olmasa bile bir servis TPM'yi kullanmaya çalışır ve bu da önyüklemede zaman aşımına neden olur. Öncelikle /dev/tpm* ifadesinin görünmediğini kontrol edin /sys/class/tpm'deki girişler de yok.
# Verificación rápida
ls /dev/tpm*
ls /sys/class/tpm/
TPM yoksa /etc/crypttab dosyanızı kontrol edin tpm2-device=auto gibi seçenekler yokVarsa, silin ve initrd'nizi yeniden oluşturun. TPM olmayan bilgisayarlarda ölçüm aşamasını da devre dışı bırakabilirsiniz:
# 1) Eliminar referencias TPM en /etc/crypttab y regenerar initrd
sudo mkinitcpio -P # (o dracut/rebuildinitrd según distro)
# 2) Evitar carga de módulos TPM si el firmware publica algo extraño
echo -e "blacklist tpm\nblacklist tpm_tis\nblacklist tpm_crb" | sudo tee /etc/modprobe.d/no-tpm.conf
# 3) Opcional: evitar pcrphase si te da problemas
sudo systemctl mask systemd-pcrphase.service
Bu sayede ekipmanınızda TPM yoksa gereksiz beklemeler ortadan kalkar. Daha sonra BIOS/UEFI'de TPM'yi etkinleştirirseniz, kara listeyi kaldırın ve ölçümleri kurtarmak için birimin maskesini kaldırın.
İyi uygulamalar ve güven kararları
Bazı insanlar TPM'den, tıpkı kendi kendini şifreleyen diskler gibi bir "kara kutu" olduğu için çekiniyor. Bu makul bir şüphe. Tehdit modelinizi değerlendirin ve kullanılabilirlik, gizlilik ve bakımı dengeler. Birçok kişi için TPM+PBA+imzalı UKI, aşırı sürtüşme olmadan büyük bir güvenlik sıçramasıdır.
Bunu sağlayan donanımda, şunu ekleyin: şifrelenmiş bellek Güvenli Önyükleme'de üçüncü taraf anahtarlara güvenmekten kaçının; zinciri mümkün olduğunca kendi anahtarlarınızla sınırlayın. Yayımlanmış güvenlik açıklarına yönelik önlemleri içerecek şekilde aygıt yazılımını ve çekirdeği güncel tutun.
/dev/tpm0, /dev/tpmrm0 ve tpm2_pcrread/tpm2_pcr_extend işlemlerinde uzmanlaşmak, Linux'ta ölçülü önyükleme ve sağlam disk şifrelemesinin kapısını açar; UKI ve imzalı bir PCR politikasıyla operasyonel istikrara ulaşırsınız ve önyükleme öncesi bir PIN eklemek sizi daha pratik saldırılardan da korur. Önemli olan PCR'leri iyi seçmek, sık sık değişenleri imzalamak ve her zaman iyi bir kurtarma anahtarı bulundurmak..