{"id":433,"date":"2026-11-02T06:38:17","date_gmt":"2026-11-02T14:38:17","guid":{"rendered":"https:\/\/blog.canutethegreat.com\/?p=433"},"modified":"2026-10-26T09:05:14","modified_gmt":"2026-10-26T16:05:14","slug":"flipper-zero-part-2-rfid-nfc-badges","status":"publish","type":"post","link":"https:\/\/blog.canutethegreat.com\/index.php\/2026\/11\/02\/flipper-zero-part-2-rfid-nfc-badges\/","title":{"rendered":"Flipper Zero, part 2: why so many office badges are weaker than they look"},"content":{"rendered":"<p><em>Part 2 of 5 in the Flipper Zero series. Part 1: <a href=\"https:\/\/blog.canutethegreat.com\/?p=427\">what it actually is and what it can&#8217;t do<\/a>.<\/em><\/p>\n<p>Most buildings I have walked into run on one of four card technologies, and the reception desk usually cannot tell you which. That matters, because the four have wildly different security properties and they look identical in a wallet. This part is about the two badge radios on the Flipper Zero, 125 kHz and 13.56 MHz, and what they reveal when you point them at your own cards.<\/p>\n<p>Same rules as part 1: hardware I own, cards I own, and a defender&#8217;s goal. A work badge usually belongs to your employer, so treat it as someone else&#8217;s card and get written permission before testing it. If you are auditing a site, get written permission first.<\/p>\n<h2>Two radios, four families<\/h2>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.canutethegreat.com\/wp-content\/uploads\/2026\/10\/flipper2-diagram.png\" alt=\"Comparison of four badge families (125 kHz proximity, MIFARE Classic, iCLASS Classic, DESFire\/Seos) showing what each card sends, whether it can be copied, and a verdict, with Wiegand versus OSDP Secure Channel underneath\" \/><\/figure>\n<p>The low frequency radio at 125 kHz reads old proximity cards. EM4100 and HID Prox are the common ones. The high frequency radio at 13.56 MHz covers ISO 14443 and the NFC family: MIFARE Classic, MIFARE Ultralight, DESFire and the rest. HID&#8217;s iCLASS also lives at 13.56 MHz, but it is based on ISO 15693 and Flipper handles it separately in its Picopass app. The Flipper&#8217;s main menu sorts the cards under &#8220;125 kHz RFID&#8221; and &#8220;NFC&#8221;, and its read screen tells you which family it found for most of them. That screen is the first step of the audit, not the whole of it.<\/p>\n<h2>125 kHz: an ID, not a credential<\/h2>\n<p>An EM4100 tag transmits a 40 bit value, over and over, to anything that powers it up. There is no key, no challenge and no secret. HID Prox is much the same idea wrapped in the 26 bit Wiegand format called H10301: one parity bit, an 8 bit facility code, a 16 bit card number and a closing parity bit.<\/p>\n<p>You can decode that yourself in a few lines:<\/p>\n<pre class=\"wp-block-code\"><code>def parse_h10301(bits: str):\n    assert len(bits) == 26\n    facility = int(bits[1:9], 2)\n    card = int(bits[9:25], 2)\n    return facility, card\n\nprint(parse_h10301(\"00000001100000000000011111\"))  # (3, 15)<\/code><\/pre>\n<p>Sixteen bits of card number means 65,536 possible values per facility code, and facility codes are 8 bits. Nothing in the card proves it is the original. Copying one to a blank tag takes seconds with a Flipper or a ten dollar reader. I have never seen a reason to defend this technology beyond &#8220;we have not got round to replacing it&#8221;.<\/p>\n<h2>MIFARE Classic: encryption that did not hold<\/h2>\n<p>MIFARE Classic is the long-lived 13.56 MHz card from NXP, and it shipped with a proprietary cipher called Crypto1 and 48 bit keys. In 2008 researchers at Radboud University Nijmegen (Garcia and colleagues) published &#8220;Dismantling MIFARE Classic&#8221; at ESORICS, after Karsten Nohl and Henryk Pl\u00f6tz had reverse engineered the cipher from the chip. In 2009 a nested attack from the same group (IEEE S&amp;P) recovered every key on a card given one known key, and Courtois published a variant that needed none. In 2015 Meijer and Verdult&#8217;s &#8220;hardnested&#8221; attack handled the hardened cards that NXP issued after the first breaks.<\/p>\n<p>In practice the weak point is often not the cipher at all. Many deployments leave sectors on the factory default key, FFFFFFFFFFFF, and many readers only look at the 4 or 7 byte UID. A UID is not a secret, and there are &#8220;magic&#8221; cards sold with a rewritable UID block. If your reader just checks the UID, the cryptography is irrelevant.<\/p>\n<p>You can see what you have without special tools. With libnfc and an ordinary USB reader:<\/p>\n<pre class=\"wp-block-code\"><code>$ nfc-list\nISO\/IEC 14443A (106 kbps) target:\n    ATQA (SENS_RES): 00  04\n       UID (NFCID1): 04  a2  3b  1c\n      SAK (SEL_RES): 08<\/code><\/pre>\n<p>Those values are illustrative, not from a real card, but the SAK byte is real: 0x08 identifies a MIFARE Classic 1K, 0x18 a 4K. A DESFire card answers differently, with a SAK of 0x20 and ISO 14443-4 support. The Flipper shows the same information on its screen without any laptop.<\/p>\n<h2>iCLASS: the shared key problem<\/h2>\n<p>HID&#8217;s original iCLASS (now called iCLASS Classic) used a master key shared across the product line. Milosch Meriac extracted it in 2010, and the 2012 paper &#8220;Dismantling iClass and iClass Elite&#8221; went on to break the Elite key diversification as well. Once a master key is public, every site using the default configuration is exposed, whether it knows or not. HID&#8217;s replacements, iCLASS SE and the Seos credential, moved to modern cryptography.<\/p>\n<h2>What good looks like<\/h2>\n<p>The fix is a card that authenticates with a per-card key, using a standard algorithm, and a reader that actually checks. MIFARE DESFire EV2 and EV3 use AES with mutual authentication, and Seos does too. Whichever you choose, ask your vendor four questions:<\/p>\n<pre class=\"wp-block-code\"><code>1. Does the card use AES, and are keys diversified per card?\n2. Does the reader verify the credential, or only read a UID?\n3. Is the reader-to-controller link OSDP with Secure Channel enabled and a unique key, not Wiegand or the default install key?\n4. Who holds the master keys, and where do they live?<\/code><\/pre>\n<p>The third question is the one people forget. Wiegand sends the card number down a few wires in cleartext, so a tap on the cable behind the reader defeats the best card on the market. OSDP v2 adds an AES-128 secure channel and also lets you supervise the reader, so a pulled or replaced one raises an alarm. I would put reader wiring on the same priority list as the cards.<\/p>\n<p>One caveat, since I like to be straight about limits: even a strong card can be relayed. An attacker who stands near the victim and near the door can pass the radio exchange along in real time, and the crypto will happily succeed. Distance bounding is the research answer. Some cards, DESFire EV2 and EV3 among them, offer a proximity check feature, but I rarely see it switched on. Defend with a second factor at sensitive doors, or camera coverage, rather than assuming the card solves it.<\/p>\n<h2>Migrating without a big bang<\/h2>\n<p>Nobody swaps every card in a weekend. Dual technology readers that accept the old and new credential let you issue new cards gradually, with a cutoff date after which the legacy mode is disabled in the controller. Skipping that last step is the usual failure, so put it in the project plan with a name next to it. I have seen buildings run &#8220;temporary&#8221; legacy support for six years.<\/p>\n<p>Start with the audit. Tap your own badge on a reader that tells you what it is, write down the family, and compare it with the list above. If the answer is 125 kHz or MIFARE Classic, you have your project.<\/p>\n<p>Part 3 moves to Sub-GHz remotes, rolling codes and how gates should be built.<\/p>\n<p><em>Other parts of the Flipper Zero series: <a href=\"https:\/\/blog.canutethegreat.com\/?p=427\">part 1<\/a>, <a href=\"https:\/\/blog.canutethegreat.com\/?p=433\">part 2<\/a>, <a href=\"https:\/\/blog.canutethegreat.com\/?p=449\">part 3<\/a>, <a href=\"https:\/\/blog.canutethegreat.com\/?p=457\">part 4<\/a>, <a href=\"https:\/\/blog.canutethegreat.com\/?p=463\">part 5<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Part 2 of 5 in the Flipper Zero series. Part 1: what it actually is and what it can&#8217;t do. Most buildings I have walked into run on one of four card technologies, and the reception desk usually cannot tell you which. That matters, because the four have wildly different security properties and they look [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":434,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,7],"tags":[312,317,114,314,313],"class_list":["post-433","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-security","category-technology","tag-flipper-zero","tag-flipper-zero-series","tag-key-management","tag-nfc","tag-rfid"],"_links":{"self":[{"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/posts\/433","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/comments?post=433"}],"version-history":[{"count":2,"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/posts\/433\/revisions"}],"predecessor-version":[{"id":471,"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/posts\/433\/revisions\/471"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/media\/434"}],"wp:attachment":[{"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/media?parent=433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/categories?post=433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.canutethegreat.com\/index.php\/wp-json\/wp\/v2\/tags?post=433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}