Experiment: Sběr dat z TPM modulu

V rámci laboratoře CRoCS na Fakultě Informatiky provádíme výzkum bezpečnosti kryptografického hardware TPM (Trusted Platform Module), který je nyní umisťován do většiny notebooku a PC. Jedná se de facto o čipovou kartu, která umožňuje mimo jiné generovat a ukládat kryptografické klíče nebo poskytovat základ pro tzv. Trusted boot. Tato stránka popisuje dva základní experimenty, kterými vygenerujete testovací podkladová data z vašeho TPM čipu a umožníte nám jejich výzkumné zpracování.

Pokud budete mít s čímkoli během experimentu problém (např. příkaz vrací divnou chybu, nedaří se mi stáhnout požadovaný program…), neváhejte nám napsat, pomůžeme Vám problém vyřešit.

Příprava experimentu:

  • Je nutné mít TPM čip aktivovaný v BIOSu a inicializovaný v OS (viz. Inicializace a příprava čipu níže)

Data sbíraná v rámci experimentu:

  • Veřejné klíče TPM (Endorsement key, Root Storage key)
  • 1000 veřejných RSA klíčů generovaných na TPM čipu
  • 100MB náhodných dat produkovaných TPM čipem

Pozn. V rámci experimentu nesbíráme žádné vaše privátní klíče. Z principu konstrukce TPM to ani není možné - exportovat lze pouze veřejnou část RSA klíčů.


Je možné že TPM čip již aktivně využíváte (např. pro Bitlocker), ale mnohem pravděpodobněji jej máte ve svém notebooku nebo PC zcela nevyužit a zatím neinicializovaný. V případě, že TPM čip již využíváte nebo máte počítač s více operačnímy systémy (dual boot), kontaktujte nás prosím před dalšími kroky, abyste jste si čip nedopatřením neinicializovali dvakrát.

Incializace se skládá ze dvou kroků:
  1. Povolení TPM čipu v BIOSU
    1. restartujte počítač, vstupte do BIOSu, nalezněte sekci TPM nebo Security chip
    2. TPM se může nacházet ve třech stavech: zcela vypnuto / neaktivní / aktivní. Zvolte možnost aktivní.
  2. Potvrzení “vlastnictví” (ownership) ve vašem operačním systému (viz. návod níže)

V případě, že máte po spuštění tpm.msc aktivní nabídku Actions→Prepare the TPM…, tak čip není zatím inicializován. Klikněte na Prepare the TPM a následujte instrukce (bude vyžadovat potvrzení a reboot počítače). V případě že je nabídka Prepare the TPM šedá, čip již máte inicializován a můžete pokračovat dál.

Připravte si TPM pomocí následujících příkazů:

#!/bin/bash
tpm_takeownership  # zapamatujte si zvolene owner password
tpm_changeownerauth -s -r # nastavi SRK password na specialni hodnotu Well Known Secret (nemusite si pamatovat)

TPM čip umožňuje vygenerovat nový testovací 2048b RSA klíč a exportovat jeho veřejnou část. Pro potřeby experimentu vygenerujeme (a zase hned smažeme) 1000 takových nových klíčů a uložíme si jejich veřejnou část pro analýzu.

Pro generování klíčů lze využít nástroj PCPTool (zdrojové kódy) vyvíjený přímo firmou Microsoft. Pro spuštění jsou potřeba knihovny vc_redist.x86.exe z MS Visual Studia 2015. Pro jednoduchost jsme pro vás všechno připravili v jediném balíku zde: https://www.fi.muni.cz/~xsvenda/PCPTool.zip

  1. Stáhněte a rozbalte si balík PCPTool.zip
  2. Spustťe script gatherKeys1000.bat (očekávaná doba běhu je zhruba 3-7 hodin, můžete generování přerušit a spustit znovu)
  3. Zašlete nám výsledný soubor TPMkeys.txt
PCPTool.exe GetVersion >> TPMkeys.txt
for /l %%x in (1, 1, 10000) do (
 PCPTool.exe CreateKey test >> TPMkeys.txt
 echo 'Key ' %%x ' generated'
)
  1. Spustťe příkazový řádek cmd s administrátorskými právy
  2. Spustťe následující sekvenci příkazů a zašlete nám prosím soubory TPM_EK.txt a EKCert.p7b
PCPTool.exe GetVersion >> TPM_EK.txt
PCPTool.exe GetEK >> TPM_EK.txt
PCPTool.exe GetSRK >> TPM_EK.txt
PCPTool.exe GetEKCert # uložte certifikát do souboru EKCert.p7b včetně všech dalších certifikátů v cestě  (viz. obrázek) 

  1. Nainstalujte si balík simple-tpm-pkcs11: sudo apt install simple-tpm-pkcs11 ( GitHub)
  2. Spustťe v cyklu příkaz stpm-keygen (viz. script níže)
  3. Zašlete nám výsledný soubor TPMkeys.txt
#!/bin/bash
tpm_version >> TPMkeys.txt
for i in `seq 1 1000`; do
  stpm-keygen -o test.key
  cat test.key >> TPMkeys.txt
  echo 'Key ' $i ' generated'
done

TPM modul poskytuje možnost generovat opravdu náhodná data využitelná např. pro tvorbu kryptografických klíčů. Pro otestování jejich kvality na vašem TPM čipu vygenerujeme 100MB dat a následně podrobíme statistickému testování (baterie STS NIST, Dieharder a TestU01).

  1. Spustťe script randomData.bat (očekávaná doba běhu je zhruba 1-2 hodiny)
  2. Zašlete nám výsledný soubor TPM_RNG.txt (100MB, např. prostřednictvím Úschovny ISu)
PCPTool.exe GetVersion >> TPM_RNG.txt
TPMTool.exe RANDOM 100000000 >> TPM_RNG.txt

Připravujeme, vydržte prosím 🙂