<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Flipper zero - Hard Wired</title>
	<atom:link href="https://www.hardwired.dev/tag/flipper-zero/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hardwired.dev</link>
	<description></description>
	<lastBuildDate>Tue, 27 Oct 2026 21:00:01 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.hardwired.dev/wp-content/uploads/2022/10/android-chrome-256x256-1-150x150.png</url>
	<title>Flipper zero - Hard Wired</title>
	<link>https://www.hardwired.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Rozbor reálného DESFire dumpu: co Flipper vyčte a co ne</title>
		<link>https://www.hardwired.dev/2026/10/27/rozbor-realneho-desfire-dumpu-co-flipper-vycte-a-co-ne/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Tue, 27 Oct 2026 21:00:01 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[desfire]]></category>
		<category><![CDATA[flipper]]></category>
		<category><![CDATA[Flipper zero]]></category>
		<category><![CDATA[nfc]]></category>
		<category><![CDATA[rfid]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3131</guid>

					<description><![CDATA[<p>Třetí díl série o klonování DESFiru. V prvních dvou jsme rozebrali teorii a praxi zálohy. Teď je na stole skutečný dump pravé Mifare &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/10/27/rozbor-realneho-desfire-dumpu-co-flipper-vycte-a-co-ne/">Rozbor reálného DESFire dumpu: co Flipper vyčte a co ne</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p><em>Třetí díl série o klonování DESFiru. V prvních dvou jsme rozebrali teorii a praxi zálohy. Teď je na stole skutečný dump pravé Mifare DESFire karty z Flipper Zero a projdeme ho řádek po řádku: co z karty vypadlo, kde se čtečka zastavila a co o zabezpečení systému prozradí i to málo, co jde přečíst bez klíče. A protože Flipper umí DESFire i víc než jen přečíst obálku, přidávám detailní rozbor a návod k aplikaci DFC. UID v ukázce je anonymizovaný, změnil jsem jeho poslední bajt.</em></p>
<p>Teoretický rozbor je jedna věc, reálný výpis z karty druhá. Vzal jsem pravou DESFire kartu, ke které mám přístup, přiložil ji na Flipper Zero a nechal ji přečíst. Výsledkem je soubor <code>.nfc</code>, který se vejde na jednu obrazovku a který ilustruje obě předchozí části líp než jakýkoli diagram.</p>
<p>Ukazuje totiž přesně to rozhraní, o kterém byla celou dobu řeč: hranici mezi tím, co z DESFiru dostaneš zadarmo, a tím, co je zamčené za kryptografií.</p>
<p>Rozeberme ho.</p>
<h2>Co máme na stole</h2>
<p>Tady je celý dump. UID jsem anonymizoval změnou posledního bajtu, jinak je přesně takový, jak ho Flipper vyčetl.</p>
<pre><code>Filetype: Flipper NFC device
Version: 4
# Device type can be ISO14443-3A, ISO14443-3B, ISO14443-4A, ISO14443-4B, ISO15693-3, FeliCa, NTAG/Ultralight, Mifare Classic, Mifare Plus, Mifare DESFire, SLIX, ST25TB, NTAG4xx, Type 4 Tag, EMV
Device type: Mifare DESFire
# UID is common for all formats
UID: 04 80 C4 1A 28 25 00
# ISO14443-3A specific data
ATQA: 03 44
SAK: 20
# ISO14443-4A specific data
T0: 75
TA(1): 77
TB(1): 81
TC(1): 02
T1...Tk: 80
# Mifare DESFire specific data
PICC Version: 04 01 01 33 00 1A 05 04 01 01 03 00 1A 05 04 80 C4 1A 28 25 00 21 52 59 30 30 91 26
PICC Free Memory: 8032
PICC Change Key ID: 00
PICC Config Changeable: true
PICC Free Create Delete: true
PICC Free Directory List: true
PICC Key Changeable: true
PICC Flags: 00
PICC Max Keys: 01
PICC Key 0 Version: 00
Application Count: 1
Application IDs: A1 70 F4
Application a170f4 Change Key ID: 00
Application a170f4 Config Changeable: false
Application a170f4 Free Create Delete: false
Application a170f4 Free Directory List: false
Application a170f4 Key Changeable: false
Application a170f4 Flags: 00
Application a170f4 Max Keys: 00</code></pre>
<p>Na první pohled nic dramatického. Na druhý pohled učebnice.</p>
<h2>Co karta prozradila o sobě</h2>
<p>Než se dostaneme k tomu, co Flipper nepřečetl, projděme to, co přečetl. Už z hlaviček se dá karta přesně zařadit.</p>
<p><code>Device type: Mifare DESFire</code> potvrzuje, že jde o pravou DESFire, ne o magic kartu, která by se za Classic jen vydávala. <code>UID: 04 80 C4 1A 28 25 00</code> je sedmibajtové a začíná bajtem <code>04</code>, což je výrobní kód NXP. UID je pevné a čitelné, takže Random ID tahle karta zapnuté nemá a je sledovatelná podle svého čísla.</p>
<p><code>SAK: 20</code> je drobnost, na které stojí půlka prvního článku. Hodnota <code>0x20</code> znamená, že karta podporuje ISO 14443-4, tedy že jede přes RATS a ATS do přenosového protokolu T=CL, a ne jen přes antikolizi jako Mifare Classic. Řádky ATS pod tím (<code>T0: 75</code>, <code>TA(1): 77</code> a dál) jsou právě ta odpověď na RATS, kde se dohodne rámcování a rychlost. Tohle je ta vrstva -4 černé na bílém.</p>
<p>Z <code>PICC Version</code> se dá vyčíst generace a velikost. Bajt velikosti úložiště <code>1A</code> odpovídá osmi kilobajtům, což sedí na <code>PICC Free Memory: 8032</code>. Hlavní verze hardwaru <code>33</code> ukazuje na generaci EV3 (0x01 je EV1, 0x12 EV2, 0x33 EV3); pro stoprocentní jistotu stačí kartu hodit do NXP TagInfo, ale vychází to na EV3. Konec řetězce <code>Version</code> nese UID znovu a za ním výrobní dávku a datum.</p>
<p>Shrnuto: osmikilová DESFire EV3 od NXP, bez Random ID.</p>
<p>To všechno Flipper zjistil, aniž by znal jediný klíč.</p>
<h2>Kde se Flipper zastavil</h2>
<p>A tady přichází pointa.</p>
<p>Všimni si, kde výpis končí.</p>
<pre><code>Application IDs: A1 70 F4
Application a170f4 Config Changeable: false
Application a170f4 Free Create Delete: false
Application a170f4 Free Directory List: false
Application a170f4 Key Changeable: false
Application a170f4 Max Keys: 00</code></pre>
<p>Seznam aplikací Flipper dostal, je tam jedna s AID <code>a170f4</code>. Ale uvnitř té aplikace nevidíš nic. Žádné soubory, žádný obsah, žádné klíče. <code>Max Keys: 00</code> neznamená, že aplikace nemá klíče, ale že se k nim Flipper nedostal. Narazil na hranici aplikace a bez autentizačního klíče neprošel.</p>
<p>Proč vůbec dostal ten seznam aplikací? Kvůli jednomu nastavení o pár řádků výš, <code>PICC Free Directory List: true</code>, které listing aplikací bez autentizace povoluje. Kdyby bylo <code>false</code>, neviděl by ani AID.</p>
<p>A přesně tohle je závěr druhého článku na živém vzorku. Stock NFC aplikace přečetla obálku, dovnitř dopisu se nepodívala. Soubor <code>.nfc</code> není klon a funkčním klonem se nestane. Kdybys to UID zapsal na sedmibajtovou magic kartu, projdeš jedině u systému, který věří pouhému UID a nic neověřuje. U skutečné DESFire autentizace magic karta mlčí, protože nemá čím odpovědět na výzvu.</p>
<h2>Co z toho čte bezpečák</h2>
<p>Teď to zajímavé, protože i ta neautentizovaná hlavička dokáže o nasazení hodně napovědět. Podívej na nastavení na úrovni celé karty.</p>
<pre><code>PICC Key 0 Version:       00
PICC Config Changeable:   true
PICC Free Create Delete:  true
PICC Free Directory List: true
PICC Key Changeable:      true</code></pre>
<p>Nejsilnější signál je verze master klíče. <code>PICC Key 0 Version: 00</code> skoro vždy znamená, že master klíč nikdo nerotoval a sedí tam pořád výchozí hodnota, tedy samé nuly. K tomu <code>Free Create Delete: true</code>, což dovoluje zakládat a mazat aplikace bez autentizace master klíčem. Dohromady je úroveň PICC měkká: výchozí master klíč a volná správa aplikací. Kdo se autentizuje tím výchozím klíčem, může na kartě aplikace přidávat nebo rovnou mazat. Data v uzamčené aplikaci <code>a170f4</code> sice nepřečte, na to potřebuje aplikační klíč, ale integrita a dostupnost celé karty na tom stojí vratce.</p>
<p>Kontrast se samotnou aplikací je přitom poučný. Aplikace <code>a170f4</code> je zamčená slušně:</p>
<pre><code>Application a170f4 Config Changeable:  false
Application a170f4 Free Create Delete:  false
Application a170f4 Free Directory List: false
Application a170f4 Key Changeable:      false</code></pre>
<p>Config neměnný, klíče neměnné, listing i create/delete zakázané. Kdo tu aplikaci personalizoval, udělal na její úrovni hygienu správně. Jenže PICC kolem ní nechal rozvolněný. A to je přesně ten mismatch z prvního dílu: kryptografie čipu drží, slabina je v personalizaci, ne v křemíku.</p>
<p>DESFire tady nechybuje. Obrany, které karta nabízí, musí někdo zapnout a nastavit. Random ID je vypnuté, master klíč nerotovaný, správa aplikací volná. Žádná z těch věcí není porucha karty, všechny jsou rozhodnutím při nasazení.</p>
<h2>Jenže Flipper umí DESFire i víc: aplikace DFC</h2>
<p>Dump výš vylezl ze stock NFC aplikace, která se u DESFiru zastaví na obálce. To ale není poslední slovo Flipperu. V katalogu je komunitní aplikace DFC (DESFire-compatible) od autora cindersocket, fork <code>seos_compatible</code> od Erica Bettse, která mluví nativním DESFire command setem a jde dál. S jedním velkým ale, na které si dej pozor, než si z toho uděláš falešný obrázek.</p>
<p>DFC neláme. Nerecovruje klíče, nekrákuje AES, žádný nested útok jako u Classic. Klíč si musíš přinést. Buď ho máš, protože čteš svou kartu, nebo credential napíšeš ručně ze známých klíčů. Emulace jede výhradně s klíči, které do credentialu vložíš. Je to nástroj pro práci s vlastními kartami, ne bypass cizích, a na kartu bez klíče se nedostane o nic víc než stock appka. Na náš uzamčený <code>a170f4</code> by si DFC bez jeho klíče taky vylámal zuby.</p>
<p>Co tedy DFC s klíči umí:</p>
<ul>
<li><strong>Čte</strong> DESFire karty. Autentizuje se v režimech legacy DES, ISO 3DES, AES i EV2 a na straně čtečky sáhne klíčem 0 do primární aplikace a přečte její nakonfigurované soubory.</li>
<li><strong>Emuluje</strong> uloženou credential, takže se Flipper vydává za DESFire kartu. K emulaci použije jen klíče uložené přímo v té credentialu.</li>
<li><strong>Emuluje prázdný DESFire</strong> (režim Blank Card). Když do něj čtečka při zápisu něco pošle, po odchodu z emulace tě to vyzve uložit zachycená data jako credential.</li>
</ul>
<p>Credential je textový soubor <code>.dfc</code> (nebo předkompilovaný binární <code>.dfcb</code>) a nese UID, AID, key settings, autentizační mód a klíče i soubory po slotech. To je přesně ta logická struktura z druhého dílu, jen v jiném kabátě: místo abys obsah zapsal zpět na prázdnou kartu, necháš ho emulovat Flipper.</p>
<p>Tím se zpřesňuje jedna věta z celé série. Psal jsem ve smyslu „Flipper DESFire nedá“. Teď přesněji: <strong>Flipper DESFire nenaláme, ale s aplikací DFC a se znalostí klíčů ho přečte i emuluje.</strong> Hranice se neposunula o kousek dál k prolomení, posunula se jen o to, co dovede handheld, když klíče už máš v ruce. Jedno upozornění k aktuálnosti: DFC staví na EV1 a EV2 příkazech, pokrytí EV2 a EV3 hardwaru se teprve ověřuje na fyzických čtečkách a radiová kompatibilita není zaručená. Není to oficiální nástroj NXP a autor sám nedává záruku funkčnosti.</p>
<h2>DFC krok za krokem</h2>
<p>Takhle s tím zacházíš, když chceš číst nebo emulovat vlastní kartu.</p>
<p><strong>Instalace.</strong> Nejjednodušší je nainstalovat DFC přímo z katalogu přes Flipper Lab (<code>lab.flipper.net/apps/dfc</code>). Kdo chce stavět ze zdrojáku, naklonuje repozitář, dotáhne submoduly a sestaví přes <code>ufbt</code>:</p>
<pre><code>git submodule sync --recursive
git submodule update --init --recursive
ufbt</code></pre>
<p><strong>Čtení vlastní karty.</strong> Přilož kartu na Flipper a nech DFC přečíst primární aplikaci. Aplikace se autentizuje klíčem 0 a stáhne nakonfigurované soubory. Přečtená karta se uloží jako credential i se svým AID, key settings, autentizačním módem a klíči a soubory po slotech. Soubory credentialů patří na kartu do <code>SD Card/apps_data/dfc/</code>.</p>
<p><strong>Emulace.</strong> Vyber uloženou credential a Flipper se začne vydávat za tu kartu. K autentizaci vůči čtečce použije jen klíče, které credential obsahuje; žádné jiné nemá odkud vzít. Tohle je ten „funkční klon“, který na magic kartě z principu nejde, ale na emulátoru se správnými klíči ano.</p>
<p><strong>Blank Card.</strong> Když chceš vidět, co ti do karty zapíše cizí čtečka, zvol Blank Card. Flipper bude emulovat zapisovatelný prázdný DESFire (ve výchozím stavu s nulovým DES klíčem na úrovni PICC, AID <code>00 00 00</code>). Pokud čtečka během emulace zapíše data, po odchodu z emulačního okna tě to vyzve uložit je jako <code>.dfc</code>.</p>
<p><strong>Formát a limity credentialu.</strong> Textový <code>.dfc</code> se při načtení zkompiluje do binárního tvaru, případně rovnou podáš <code>.dfcb</code>. UID musí mít 7 bajtů a začínat <code>04</code>. Jedna credential pojme nejvýš 4 aplikace, 16 souborů, 3 KiB dat celkem, 2 KiB v jednom souboru a 512 bajtů na klíče; samotný soubor <code>.dfc</code> nebo <code>.dfcb</code> nesmí přesáhnout 16 KiB. U velkých textových credentialů hrozí, že kompilace na zařízení vyčerpá heap, takže je zkompiluj radši na počítači:</p>
<pre><code>python3 tests/compile_dfcb.py path/to/card.dfc path/to/card.dfcb</code></pre>
<p><strong>Ověření na hostu.</strong> Repozitář má k tomu dva testovací skripty. <code>probe_dfcb.py</code> pustí <code>.dfcb</code> proti virtuální kartě jádra přímo na počítači, nahlásí nepodporované credentials a vypíše APDU odpovědi; netestuje UI, NFC listener ani radiové časování, jen logiku. Výchozí APDU přečtou verzi a seznam aplikací, další hex APDU můžeš doplnit a proběhnou v pořadí v jedné relaci:</p>
<pre><code>python3 tests/probe_dfcb.py path/to/card.dfcb
python3 tests/probe_dfcb.py path/to/card.dfcb 9060000000 90AF000000</code></pre>
<p>Druhý skript, <code>probe_pcsc_mac_read.py</code>, je manuální hardwarová zkouška na macOS s PC/SC čtečkou a vyžaduje pythoní knihovnu <code>cryptography</code>. Nejdřív na Flipperu rozjeď emulaci credentialu, pak probe vybere aplikaci 0, autentizuje se ISO 2K3DES klíčem 1, přečte celý soubor 0 a ověří data i MAC v odpovědi. Aplikaci, soubor, klíč a čtečku přepíšeš přepínači <code>--application</code>, <code>--file</code>, <code>--key</code> a <code>--reader</code>:</p>
<pre><code>python3 tests/probe_pcsc_mac_read.py path/to/card.dfc</code></pre>
<p>Ber to jako experimentální nástroj. U EV2 a EV3 karet si funkčnost ověř na své konkrétní čtečce, protože hardwarové pokrytí se teprve dolaďuje.</p>
<h2>Co si z toho vzít</h2>
<p>Tenhle jeden výpis uzavírá celou sérii, protože v něm je vidět obojí najednou. Pevná část i měkká část DESFiru v jednom souboru.</p>
<p>Pevná část: stock NFC aplikace se k ničemu zabezpečenému nedostala a bez klíčů by aplikaci <code>a170f4</code> neotevřel ani DFC. AES a tříprůchodová autentizace odvedly svoje, zamčená aplikace zůstala zamčená, naklonovat obsah na magic kartu nejde. Pokud systém kontroluje víc než UID, tahle karta je proti nástrojům bez klíčů tichá.</p>
<p>Měkká část: i tak výpis prozradil, že nasazení není dotažené. Verze master klíče <code>00</code> a volné create/delete jsou věci, které si v auditu přístupového systému přečteš jako první, a ani k tomu nepotřebuješ klíče. Útočník je čte stejně snadno jako ty.</p>
<p>A DFC do toho vnáší třetí rovinu. Se svými klíči Flipper DESFire přečte i emuluje, takže patří do výbavy na práci s vlastními kartami vedle Proxmarku a hostových knihoven z druhého dílu. Co nedokáže ani on, je dostat se do karty bez klíče. Přesně v tom je celá pointa série.</p>
<p>Flipper tu kartu nenaklonoval a bez klíčů ji nenaklonuje ani s DFC. Ale přečetl dost na to, aby ukázal, kde by se v nasazení dalo zatlačit, a s DFC zase dost na to, aby se tvoje vlastní karty daly emulovat. Kde končí jedno a začíná druhé, rozhoduje jediná věc: jestli ten klíč máš.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F10%2F27%2Frozbor-realneho-desfire-dumpu-co-flipper-vycte-a-co-ne%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/10/27/rozbor-realneho-desfire-dumpu-co-flipper-vycte-a-co-ne/">Rozbor reálného DESFire dumpu: co Flipper vyčte a co ne</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Jak si zálohovat DESFire kartu a obnovit ji na prázdnou</title>
		<link>https://www.hardwired.dev/2026/10/27/jak-si-zalohovat-desfire-kartu-a-obnovit-ji-na-prazdnou/</link>
		
		<dc:creator><![CDATA[Valentino Hesse OK2HSS]]></dc:creator>
		<pubDate>Tue, 27 Oct 2026 20:07:40 +0000</pubDate>
				<category><![CDATA[Cyber Security]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[desfire]]></category>
		<category><![CDATA[Flipper zero]]></category>
		<category><![CDATA[nfc]]></category>
		<category><![CDATA[proxmark]]></category>
		<category><![CDATA[rfid]]></category>
		<guid isPermaLink="false">https://www.hardwired.dev/?p=3128</guid>

					<description><![CDATA[<p>Navazující díl k rozboru klonování DESFiru. V minulém článku padlo, že funkční kopii dostaneš jedině na prázdnou DESFire kartu, kterou si znovu &#62;&#62;&#62;</p>
<p>The post <a href="https://www.hardwired.dev/2026/10/27/jak-si-zalohovat-desfire-kartu-a-obnovit-ji-na-prazdnou/">Jak si zálohovat DESFire kartu a obnovit ji na prázdnou</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p><em>Navazující díl k rozboru klonování DESFiru. V minulém článku padlo, že funkční kopii dostaneš jedině na prázdnou DESFire kartu, kterou si znovu napersonalizuješ. Tady je přesně ten postup: logický dump přes Proxmark3 a python-desfire, bezpečné odložení klíčů a obnova struktury i dat na čistý čip. Včetně toho, co tahle záloha není a kdy ti nepomůže.</em></p>
<p>Rovnou na úvod: je to runbook na zálohu a obnovu karty, ke které máš klíče, protože je tvoje. Žádné klonování cizích karet. Počítej s hodinou práce u první karty, pak už to jde rychleji. Co budeš na konci umět: přečíst celou strukturu DESFiru, uložit ji i s daty do souboru, založit ji znovu na prázdném čipu a nastavit zpět klíče.</p>
<p>Než se do toho pustíš, přečti si sekci o hranicích. Ušetří ti to zklamání, že „záloha“ nefunguje tam, kde fungovat ani nemůže.</p>
<h2>Co budeš potřebovat</h2>
<p>Hardware: čtečku, která umí ISO 14443-4 a autentizaci k DESFiru, a dvě karty. Zdrojovou DESFire kartu se svými klíči a prázdnou (blank) DESFire kartu stejné nebo vyšší generace a aspoň stejné paměti. Blank znamená kartu ve výrobním stavu, kde jsou všechny klíče na samých nulách; prodávají se jako „DESFire EV1/EV2/EV3 blank“.</p>
<p>Software podle toho, co preferuješ. Buď Proxmark3 s firmwarem Iceman (fork RfidResearchGroup), kde je celá rodina příkazů <code>hf mfdes</code>. Nebo PC/SC čtečku (ACR122U, ACR1252U, Omnikey) a Python s knihovnou python-desfire. Obojí umí jak čtení, tak personalizaci, takže si vyber podle toho, co máš po ruce.</p>
<p>A hlavně klíče. Bez klíčů s právem číst se k obsahu nedostaneš a žádný z dále popsaných kroků nemá smysl. To je vlastnost, ne chyba.</p>
<h2>Hranice, které musíš znát předem</h2>
<p>Záloha DESFiru má tři tvrdá omezení a je lepší je vědět teď než po hodině práce.</p>
<p><strong>UID se nepřenese.</strong> Pravá DESFire karta má sedmibajtové UID zapečené z výroby a nejde přepsat. Prázdná karta má svoje vlastní. Obnovená karta tedy ponese jiné UID než originál, a to nezměníš. Magic DESFire s přepisovatelnou identitou neexistuje, jak padlo v minulém díle.</p>
<p><strong>Systém s diverzifikací klíčů ti obnovenou kartu nevezme.</strong> Pokud přístupový systém odvozuje klíče z UID (diverzifikace podle AN10922), čtečka si pro nové UID spočítá jiný klíč, než jaký má tvoje obnovená karta. Autentizace selže. Obejít to jde jedině tak, že vlastníš site klíč celého systému a dopočítáš diverzifikované klíče pro nové UID, což dává smysl jen u systému, který sám provozuješ. Pro cizí přístupový systém tohle není cesta.</p>
<p><strong>Přečteš jen to, na co máš právo.</strong> Každý soubor má přístupová práva navázaná na konkrétní klíče. Když tvůj klíč smí číst jen některé soubory, zbytek zůstane skrytý, i když kartu „otevřeš“.</p>
<p>Z toho plyne, k čemu záloha reálně slouží: k archivaci obsahu tvé vlastní karty, k migraci nebo havarijní obnově v systému, který si personalizuješ sám, a k laboratorní práci. Ber ji jako zálohu dat a struktury, ne jako výrobu náhradní přístupové karty do cizí budovy.</p>
<p>Jedna věc k bezpečnosti ještě předtím, než začneš sypat příkazy. Klíče drž mimo dump. Data a struktura můžou do obyčejného souboru, klíče patří do šifrovaného trezoru. Dump s klíči v plaintextu je ta nejhorší možná poznámka pod čarou.</p>
<h2>Krok 1: Inventura karty</h2>
<p>Napřed si kartu zmapuj, ať víš, co vůbec zálohuješ. Přilož zdrojovou kartu na Proxmark a projdi ji shora dolů.</p>
<pre><code>hf mfdes info
hf mfdes getuid</code></pre>
<p><code>info</code> vypíše generaci, velikost paměti a volné místo, <code>getuid</code> skutečné UID (u karty se zapnutým Random ID ho vydá až po autentizaci, takže případně přidej secure channel a klíč). Dál si nech vypsat aplikace a soubory:</p>
<pre><code>hf mfdes lsapp --files
hf mfdes lsfiles --aid 123456 -t aes</code></pre>
<p><code>lsapp --files</code> ukáže všechny aplikace podle jejich tříbajtového AID i s jejich soubory. Pokud jsou klíče nestandardní, autentizuj se jimi; <code>--no-auth</code> zkusí listing bez autentizace, pokud to karta v nastavení dovolí. U každého souboru si zjisti jeho nastavení, protože bez něj kartu věrně neobnovíš:</p>
<pre><code>hf mfdes getfilesettings --aid 123456 --fid 01</code></pre>
<p>Zapiš si typ souboru (Standard, Backup, Value, Linear Record, Cyclic Record), komunikační režim (Plain, MACed, plně šifrovaný), přístupová práva a velikost. Tohle je kostra, kterou budeš na prázdné kartě stavět znovu. U Value souboru si navíc poznamenej dolní a horní limit a aktuální hodnotu, u záznamových souborů počet a velikost záznamů.</p>
<p>Když klíče neznáš celé a chceš je dohledat ze slovníku, pomůže detekce, ale u vlastní karty bys klíče měl mít:</p>
<pre><code>hf mfdes detect --save --dict mfdes_default_keys</code></pre>
<h2>Krok 2: Logický dump</h2>
<p>Teď vyčteš obsah. Nejjednodušší je dump po aplikaci:</p>
<pre><code>hf mfdes dump --aid 123456</code></pre>
<p><code>dump</code> projde soubory v aplikaci a vypíše jejich obsah. Pro jednotlivý soubor nebo pro přesnou kontrolu použij <code>read</code> s typem souboru:</p>
<pre><code>hf mfdes read --aid 123456 --fid 01
hf mfdes read --aid 123456 --fid 02 --type record
hf mfdes read --aid 123456 --fid 03 --type value</code></pre>
<p><code>read</code> bez typu se pokusí typ odhadnout, u záznamových a hodnotových souborů ale radši typ uveď. Výstup si ulož do strukturovaného souboru, ideálně JSON, kde každý soubor nese svoje AID, FID, typ, komunikační režim, práva, velikost a surová data v hexu. Klíče do tohohle souboru nepatří, ty jdou zvlášť.</p>
<p>Takhle vznikne tvoje záloha: popis struktury plus obsah. Co s ní uděláš dál, je obnova na prázdný čip.</p>
<h2>Krok 3: Příprava prázdné karty</h2>
<p>Prázdnou kartu uveď do známého stavu. Pokud v ní něco je, naformátuj ji, a pamatuj, že k formátu potřebuješ PICC master klíč (u čisté karty samé nuly):</p>
<pre><code>hf mfdes auth -n 0 -t aes -k 00000000000000000000000000000000
hf mfdes formatpicc</code></pre>
<p>Po formátu máš čistý PICC s jednou prázdnou kořenovou aplikací a výchozími klíči. Na téhle základně postavíš kopii struktury.</p>
<h2>Krok 4: Obnova struktury a dat</h2>
<p>Teď znovu založíš aplikace a soubory podle toho, cos zapsal v kroku 1, a naliješ do nich data z kroku 2. Konkrétní vlajky příkazů <code>createapp</code> a <code>createfile</code> se mezi verzemi firmwaru liší, takže si u své verze vždy ověř přesný tvar přes <code>hf mfdes createapp -h</code> a <code>hf mfdes createfile -h</code>. Orientačně to vypadá takhle:</p>
<pre><code>hf mfdes createapp --aid 123456 --dfname hesse --ks1 0B --ks2 AE
hf mfdes createfile --aid 123456 --fid 01 --amode encrypt --size 000020</code></pre>
<p><code>--ks1</code> a <code>--ks2</code> kódují nastavení klíčů aplikace, tedy počet klíčů, jejich typ a oprávnění; <code>--amode</code> je komunikační režim souboru, <code>--size</code> velikost v bajtech. Hodnoty musí sedět na to, cos vyčetl z originálu, jinak nedostaneš věrnou kopii. Value a záznamové soubory se zakládají vlastními příkazy s limity a počtem záznamů.</p>
<p>Když struktura stojí, zapiš data:</p>
<pre><code>hf mfdes write --aid 123456 --fid 01 -d 0102030405060708...
hf mfdes write --aid 123456 --fid 02 --type record -d 0102030405 --updaterec 0
hf mfdes write --aid 123456 --fid 01 --type data -d 01020304 --commit</code></pre>
<p>U Backup souborů nezapomeň na <code>--commit</code>, bez něj zůstane zápis jen v dočasném bufferu a po odpojení karty se ztratí. U Value souborů se hodnota nenastavuje přímo, ale přes počáteční hodnotu při založení, případně přes credit a debit.</p>
<h2>Krok 5: Nastavení klíčů</h2>
<p>Tohle je nejchoulostivější krok celé obnovy, protože tady si můžeš kartu zamknout. Dokud jsi pracoval s výchozími nulovými klíči, šlo všechno hladce. Teď je vyměníš za ty původní.</p>
<pre><code>hf mfdes changekey --aid 123456 -n 1 -t aes -k 00000000000000000000000000000000 --newkey 00112233445566778899AABBCCDDEEFF --newver 01</code></pre>
<p>Drž se tří pravidel. Klíče měň odspodu, aplikační klíče před aplikačním master klíčem, a aplikační master klíč před PICC master klíčem; jakmile změníš klíč, kterým ses autentizoval, musíš se autentizovat znovu tím novým. Verzi klíče (<code>--newver</code>) nastav na stejnou hodnotu jako na originálu, jinak ti pozdější autentizace nemusí projít. A než přepíšeš poslední master klíč, dvakrát si ověř, že ho máš zapsaný správně, protože špatně zadaný master klíč znamená kartu, do které se už nedostaneš.</p>
<p>Jemnější nuance: změna klíče číslo 0 (master klíč aplikace) používá jiné krypto než změna ostatních klíčů a může zároveň měnit nastavení aplikace. Proto ji nech až úplně nakonec a odděleně.</p>
<h2>Celý cyklus v Pythonu</h2>
<p>Kdo nechce ťukat do Proxmarku ručně, zvládne totéž skriptem přes python-desfire na PC/SC čtečce. Knihovna umí čtení i personalizaci, takže pokryje obě fáze. Čtecí část vypadá v jádru takhle:</p>
<pre><code class="language-python">from desfire import DESFire, PCSCDevice
from smartcard.System import readers

conn = readers()[0].createConnection()
conn.connect()
card = DESFire(PCSCDevice(conn.component))

card.authenticate(0x000000, picc_master_key)   # PICC master
dump = {&quot;uid&quot;: card.get_real_uid(), &quot;apps&quot;: []}

for aid in card.get_application_ids():
    card.select_application(aid)
    card.authenticate(aid, app_keys[aid])
    app = {&quot;aid&quot;: aid, &quot;files&quot;: []}
    for fid in card.get_file_ids():
        settings = card.get_file_settings(fid)
        data = card.read_file_data(fid)
        app[&quot;files&quot;].append({&quot;fid&quot;: fid, &quot;settings&quot;: settings, &quot;data&quot;: data})
    dump[&quot;apps&quot;].append(app)
# dump ulož do JSON; klíče (app_keys) drž mimo tenhle soubor</code></pre>
<p>Obnova na prázdnou kartu je zrcadlový postup. Autentizuješ se výchozím nulovým klíčem, založíš aplikaci, přepneš se do ní, vytvoříš soubory podle uložených nastavení, zapíšeš data a nakonec vyměníš klíče:</p>
<pre><code class="language-python">blank.authenticate(0x000000, default_key)
blank.create_application(aid, key_settings, num_keys, DESFireKeyType.DF_KEY_AES)
blank.select_application(aid)
blank.authenticate(aid, default_app_key)
blank.create_standard_file(fid, comm_mode, access_rights, file_size)
blank.write_file_data(fid, 0, comm_mode, data)
blank.change_key(key_no, new_key, old_key, key_version)</code></pre>
<p>Přesné signatury metod se mezi verzemi knihovny trochu liší, takže si je ověř v její dokumentaci; logika kroků ale zůstává stejná jako u Proxmarku. Knihovna staví na EV1, pro specifické funkce EV2 a EV3 počítej s tím, že je nemusí pokrývat.</p>
<h2>Když něco nefunguje</h2>
<p>Nejčastější zádrhel je selhání autentizace. Zkontroluj tři věci: správný typ klíče (<code>-t des</code>, <code>2tdea</code>, <code>3tdea</code> nebo <code>aes</code>), správné číslo klíče (<code>-n</code>) a správný secure channel (<code>-s d40</code>, <code>ev1</code>, <code>ev2</code>). Když nesedí byť jen jedno, karta tě odmítne, i když máš klíč správně.</p>
<p>Když čtení projde, ale vrátí nesmysl, nejspíš čteš ve špatném komunikačním režimu. Plně šifrovaný soubor čtený jako Plain vrátí šifrovaný balast, ne data. Ověř si režim z nastavení souboru.</p>
<p>Když se obnovená karta tváří hotově, ale originální systém ji nevezme, vrať se k sekci o hranicích. Buď systém diverzifikuje klíče podle UID, které se změnilo, nebo kontroluje jen UID a tvoje nové mu nesedí. Ani jedno nespravíš na straně karty.</p>
<p>A nejbolestivější případ: autentizace k aplikaci najednou nejde ani tobě. Nejspíš sedí špatná verze klíče nebo ses při změně master klíče přepsal. U vlastní testovací karty z toho ven vede jen formát přes PICC master klíč, pokud ho ještě znáš. Pokud ne, karta je pro tebe ztracená. Proto se master klíče mění jako poslední a s rozmyslem.</p>
<h2>Co sis vlastně zazálohoval</h2>
<p>Na konci máš dvě věci. Soubor s popisem struktury a daty, který přežije kartu, a schopnost tu kartu znovu postavit na čistém čipu. Co nemáš, je identický klon s původním UID, protože ten na pravém DESFiru neexistuje.</p>
<p>A přesně v tom je ta záloha užitečná i poctivá zároveň. Archivuje obsah, umožní migraci ve tvém vlastním systému a zachrání tě, když fyzická karta doslouží. Jen si pamatuj, čím tenhle postup je a čím není, a nebudeš čekat zázrak tam, kde ho DESFire z principu neslíbil.</p>

<div class="twitter-share"><a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.hardwired.dev%2F2026%2F10%2F27%2Fjak-si-zalohovat-desfire-kartu-a-obnovit-ji-na-prazdnou%2F&#038;via=hessevalentino&#038;related=hessevalentino%3AValentino%20Hesse%20OK2HSS" class="twitter-share-button">Tweet</a></div><p>The post <a href="https://www.hardwired.dev/2026/10/27/jak-si-zalohovat-desfire-kartu-a-obnovit-ji-na-prazdnou/">Jak si zálohovat DESFire kartu a obnovit ji na prázdnou</a> first appeared on <a href="https://www.hardwired.dev">Hard Wired</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
