Versuch RFID-Kommunikation mitzuschneiden: Unterschied zwischen den Versionen
(→Ueberlegungen) |
|||
Zeile 290: | Zeile 290: | ||
Idee: Wenn man genau einen Seitentraeger herausfiltert, dann kann man die FFT herausoptimieren. Baudline muss das Signal nicht spektral auseinanderbasteln. Die Waveform-Ansicht des Signals sollte die Amplitude des Seitentraegers in hoher Aufloesung wiedergeben. | Idee: Wenn man genau einen Seitentraeger herausfiltert, dann kann man die FFT herausoptimieren. Baudline muss das Signal nicht spektral auseinanderbasteln. Die Waveform-Ansicht des Signals sollte die Amplitude des Seitentraegers in hoher Aufloesung wiedergeben. | ||
+ | Da gibt es nun mehrere Wege der Umsetzung. Zum einen kann man die ZF analog filtern. Fuer entsprechende Versuche muessten die ct' bzw. Elektor-RFID-Detektoren ausreichen. Zum anderen kann man die ZF mit Gnuradio-Modulen digital filtern. | ||
+ | ''' Detektor-Bausaetze benutzen ''' | ||
+ | Die beiden Bausaetze sollen das Feld des Lesegeraetes detektieren. Auf der HF-Seite sind beide Schaltungen etwas anders aufgebaut, aber beide verwenden das selbe Empfaengerkonzept. Die Antennenspannung wird mit einem 8 MHz Oszillatorsignal gemischt. Wenn bei 13.56 MHz ein Traeger ist, dann gibt es in der ZF ein messbares Mischprodukt bei 5.56 MHz. Das wird durch ein Bandpassfilter (Breite: paar hundert Kiloherz) gefiltert. Was vom Filtern uebrig bleibt, wird dann weiterverarbeitet. | ||
+ | |||
+ | Das Oszillatorsignal kann man nun so tunen, dass der Seitentraeger durch das Filter passt. Zum Beispiel: Seitentraeger bei ISO 14443 bei 13.56 + 0.847 MHz = 14.407 MHz. Gesucht ist dann eine Oszillatorfrequenz ''f'', so dass 14.407 MHz - ''f'' = 5.5 MHz. Alternativ laesst sich natuerlich ein anderes Filter einbauen. Es scheint aber zweckmaessiger zu sein, den Oszi zu tauschen oder eine PLL aufzubauen, deren Frequenz eingestellt werden kann. (Vielleicht sollte man Sockel fuer Oszi/Filter aufloeten, dann man nach Bedarf Bauteile wechseln.) | ||
+ | |||
+ | Bisher wurde lediglich die 5.5 MHz-ZF vom ct'-Detektor via usrp und baudline verarbeitet (an Pin 4 vom Mischer, also vor der Filterung). Das funktioniert soweit, nur ist die Signalstaerke etwas schwach. Die Antenne ist sehr klein. | ||
+ | |||
+ | ''' Mit GNU Radio filtern ''' | ||
+ | |||
+ | Das sollte gehen -- wurde aber bisher nicht ausprobiert. | ||
[[Kategorie:RFID]] | [[Kategorie:RFID]] | ||
[[Kategorie:Funk]] | [[Kategorie:Funk]] |
Version vom 6. Mai 2006, 18:00 Uhr
Diese Seite soll die Experimente rund um das Thema Abhoeren von RFID-Kommunikation dokumentieren. Deine Mitarbeit ist ausdruecklich erwuenscht.
Inhaltsverzeichnis
Literatur
Papers
Es gibt mittlerweile ohne Ende Papers, die sich mit Protokollen und Crypto-Foo im Kontext RFID beschaeftigen. Relativ wenige Papers behandeln das Gebiet passives Abhoeren bzw. gehen darauf ein. Vielleicht kann ich auch nur nicht recherchieren. Bitte pflege hier entsprechendes Material ein.
- Thomas Finke, Harald Kelter: Radio Frequency Identification -- Abhörmöglichkeiten der Kommunikation zwischen Lesegerät und Transponder am Beispiel eines ISO14443-Systems, 2004
Dabei handelt es sich um eine Beilage zur BSI Studie Risiken und Chancen des Einsatzes von RFID-Systemen (2004). Die Autoren kommen zu dem Schluss, dass ab einer Entfernung von 3 m bitgenaues Mitlesen schwierig wird. - Yossi Oren, Adi Shamir: Power Analysis of RFID Tags, ca. 2006
- Gerhard Hancke1: A Practical Relay Attack on ISO 14443 Proximity Cards
Artikel
Geraete
Fuer die hier beschriebenen Experimente steht folgende Hardware zur Verfuegung.
- GNU Radio
- Scanner AOR AR8600 MK2
- RFID-Lesegeaete:
- Cardman 5121 Datasheet -- ISO 14443 A und B, ISO 15693
- Megaset RFID-Kit -- ISO 15693
- Antennen:
- Antenne 1: Breitband-Antenne 25 - 1xxx MHz (Herstellerangaben)
- Antenne 2: Teleskopantenne (zum Scanner mitgeliefert)
- Antenne 3: Selbstbau-Omni
- Antenne 4: Selbstbau-Koaxloop
- Antenne 5: Selbstbau-Loop
Zum Ansteuern des Megaset-Readers gibt es hier Perl-Code. Das darin enthaltene Perl-Modul benutzt das im CPAN erhaeltliche Modul Device::SerialPort. Mit einigen seriellen Schnittstellen kommt das nicht so ganz zurecht. Oft hilft dann rausziehen und wieder reinstecken, sofern es sich um ein USB-Dongel handelt.
Allgemeiner Versuchsaufbau
Um die Signale in den Rechner zu bekommen, werden hier zwei verschiedenen Moeglichkeiten benutzt:
Datenakquise mittels GNU Radio
Der ZF-Ausgang des Scanners wird mit einem GNU Radio-Rx-Board verbunden, das GNU Radio mit dem "PC" via USB2.
Der Scanner verfuegt ueber eine ZF-Bandbreite von +- 2 MHz, also einer Spanne von insgesammt 4 MHz. Eine Besonderheit des AR8600 MK2 ist, dass die ZF nur auf den Ausgang geschalten wird, wenn der Scanner im Modus WFM betrieben wird. Nach Angaben des Hersteller kann man den Scanner derart modifizieren dass die ZF in allen Modi rausgeht, allerdings soll es dann qualitative Abstriche geben. Das soll dann mehr "interne Scheinsignale" erzeugen. Soweit ist das aber kein Problem. Man kann dann nicht gleichzeitig das Signal ueber den internen Lautsprecher oder ueber den Kopfhoerer hoeren. Um genau zu sein hoert man nur Rauschen, wenn um die eingestellte Frequenz herum kein richtiges WFM gesendet wird.
Wenn man sich die 4 MHz ZF-Signal (also von 8.7 MHz bis 12.7 MHz) in ganzer Breite ansieht, sieht man, dass die Signalstaerke zu den Raendern hin um diverse dB schwaecher ist als in der Mitte. Bei +-1 MHz Bandbreite bekommmt man dennoch ganz gute Ergebnisse, denn da ist die Abflachung zu den Raendern nicht so gross. Bild 1 soll das illustrieren. Wenn man genau hinsieht, erkennt man die Zerstueckelung des Spektrums rechts. Das ist ein Screenshot-Problem. Zum anderen sieht man einen Peak bei ca. 0.6 MHz. Das ist Muell im Spektrum. Ich wuesse auch gerne welches meiner Geraete diesen Muell verursacht.
Datenakquise mit Soundkarte
Der Audio-Ausgang des Scanners wird mit der Soundkarte des "PCs" verbunden.
Laut Finke und Kelter soll die Signalstaerke der Hilfstraegers 60-80 dB (!) unter dem des Hauptraegers liegen. Das ist sehr wenig. Und zwar so wenig, dass das Signal der Hilfstraeger rein rechnerisch im Rauschen untergehen muss. Wenn man die Versuchsergebnisse weiter unten betrachtet, dann findet man den Traeger auch nicht.
Man kann den Hilfstraeger aber hoerbar machen. Stellt man den Scanner auf einen schmalbandigen Modus (z.B. USB oder CW), kann man Signale empfangen, die nach Datenaustausch klingen. Finke und Kelter haben ihren Empfaenger grob auf den Hilfstraeger getuned und eine Bandbreite von 300 kHz eingestellt.
Wahl der Antenne
Die Antenne ist natuerlich ein entscheidender Faktor. Bei den mir zu Verfuegung stehenden Antennen handelt es sich um Omni-Antennen, also weitgehend stabaehnliche Antennen, die aus fast allen Richtungen empfangen. Im Idealfall verwendet man mehr oder weniger gerichtete Antennen.
Theorie: Allgemein setzt sich die Energie des elektromagnetischen Feldes aus der Energie des elektrischen Feldes und der Energie des magnetischen Feldes zusammen. Physiker benutzen den Begriff Poynting-Vektor (S = E x H), wenn sie den Vektor der elektromagnetischen Leistungsdichte meinen. H und E sind phasengleich. Der Betrag des Poyntingvektors gibt die elektromagnetische Leistungsdichte an. Die Richtung des Vektors ist die Ausbreitungsrichtung der elektromagetischen Welle (zumindest im Fernfeld).
Transponder und Lesegeraet benutzen schleifenfoermige Antenne, also eigentlich Spulen. Ein Merkmal von Spulen ist, das von ihnen Magnetfelder ausgehen, wenn sie von einem sich aendernden Strom durchflossen werden bzw. umgekehrt, dass sich aendernde Magnetfelder Spannungen in Spulen induzieren. Die Magnetfeldkomponente ist also wichtiger als das elektrische Feld.
Fuer den Versuchsaufbau heisst das, dass eine spulenartige Antenne besser geeignet ist, als eine Stabantenne. Fuer einen ordentlichen Empfang muesste also eine "Magnetic Loop" gute Dienste leisten. Magnetische Antennen
- reagieren besser auf die Magnetfeldkomponente,
- sind selektiver, d.h. sie blenden den Muell links und rechts im Spektrum besser aus,
- haben konstruktionsbedingt eine Richtwirkung.
Positionierung der Magnetischen Antennen: Transponder und Lesegeraet werden in die Schleifenmitte gelegt. Erwartungsgemaess liefern die Loops deutlich bessere Empfangsergebnisse.
Positionierung der Omniantennen: Im Normalfall kann man den Haupttraeger gut empfangen, selbst wenn die Antenne weiter vom RFID-Lesegeraet entfernt ist. Bei einem einfachen nicht wirklich fuer Kurzwelle geeigneten Handscanner in drei Metern Entfernung verschwindet das Rauschen, wenn man der RFID-Leser Daten vom Transponder liesst und auf 13.56 MHz den Haupttraeger ausstrahlt.
Da die Seitentraeger aber sehr schwach sind, wird das Lesegeraet fuer die Versuche nur wenige Zentimeter (< 10cm) von der Antenne entfernt aufgestellt.
Erste Experimente
Ziel der ersten Experimente ist, den Hilfstraeger zu erkennen. Laut Finke und Kelter sollte fuer ISO 14443 der Hilfstraeger bei +- 847 kHz um den Haupttraeger herum zu finden sein, also bei 14.407 bzw. 12.713 MHz. Folgendes Bild aus dem Paper der beiden illustriert das.
Versuch 1
- Antenne 1
- Datenaufnahme mit GNU Radio
- RFID-Lesegeraet: Omnicard
- Display-Freq: 13.56 MHz
Der Haupttraeger ist soweit gut zu sehen, leider ist nirgends der Hilfstraeger. Es wird keine Software zum Ansteuern des RFID-Lesers benutzt. Das Lesegeraet wird lediglich ein- bzw. ausgeschalten. Werden die Hilfstraeger nur aktiviert, wenn Antworten vom Transponder erwartet werden? Oder sind die Hilfstraeger immer an? Oder sind die Antennen fuer so schwache Hilfstraeger nicht geeignet?
Dafuer sind bei ca. +- 1.1 Mhz irgendwelche Peaks.
Versuch 2
Wie Versuch 1, jedoch wird Antenne 2 verwendet. Keine signifikant anderen Ergebnisse.
Versuch 3
- RFID-Lesegeraet von Megaset pollt die ganze Zeit Daten von einem Texas Instruments Transponder mit 64 Bloecken a 4 Byte (Inhalt: der Anfang von /etc/services).
- Antenne 1 im Abstand von 10 cm ueber dem Lesegeraet
- Scanner in einem schmalbanigen Modus (CW)
Der Scanner wird auf 13.556 MHz eingestellt und von dort aus wird durch das Spektrum gescrolled.
- Ist der Scanner auf eine Display-Frequenz von 13.559 MHz gestellt, bekommt man einen NF-Peak von fast genau 1200 Hz. Der Haupttraeger ist als harmonischer kontinuierlicher Ton hoerbar.
- Display-Frequenz 13.5660 MHz -- schwaches Datenknattern und ein noch wahrnehmbares Pfeifen (des Haupttragers) bei etwa 5820 Hz. Entfernt man den Transponder, dann ist etwa alle halbe Sekunde ein Kack zu hoeren. Ist der Transponder in Naehe des Lesers, sind geschaetzte 10 Knackse pro Sekunde hoerbar.
- Display-Frequenz 13.5670 MHz -- deutlich wahrnehmbares Kacken. Bis zu einem Abstand von 10 cm zwischen Transponder und Lesegeraet ist dieses schnelle Knattern hoerbar. Dabei sind Transponder- und Lesegeraet-Antenne parallel. Als Transponer wird eine Karte mit der Aufschrift "www.megaset.com Tag-it HF-I" verwendet. Ein anderer Transponder mit der Aufschrift "www.megaset.com I-Code SLI" im Feld des Lesers fuehrt nicht zu einem schnellen Knattern, sondern klingt so als waere kein Transponder im Feld. Die Software kann den Transponder nicht auslesen. Verschiedene mifare-Transponder bewirken ebenfalls kein schnelleres Knattern. Leider habe ich zum Megaset nur einen auslesbaren Transponder. Wuerde gerne testen wie mehrere Tansponder im Feld klingen.
- Bei 13.580 MHz ist irgendwelcher Schmutz im Hintergrund zu hoeren. Das Knattern ist sehr intensiv. Bei 13.601 MHz irgend ein Traeger, der sich nach deaktivieren des RFID-Lesers als Pfeifen bemerkbar macht.
- Bei 13.640 MHz geht das Knattern langsam in Hintergrundgeraeuschen unter.
- Bei 13.700 MHz ist kein Knattern mehr hoerbar.
- Bei 14.407 ist ein anders klingendes Knattern hoerbar.
Fazit:
Das Knattern stammt ganz offensichtlich vom Datenaustausch. Dabei gibt es zweimal das Knattern:
- Fall 1: Bei 13.580 MHz ist das Knattern 1 am lautesten. Ist der Transponder nicht im Feld des Lesers, ist das Knatten nicht so haeufig. Es taucht aber auf, weil die Software in einer Schleife Datenbloecke abfragt.
- Fall 2: Bei 14.407 MHz ist ein anderes Knattern hoerbar. Es verschwindet vollstaendig, wenn man den Transponder entfernt.
Die folgenden Aufnahme demonstriert das. Das Lesegeraet fragt kontinuierlich Datenblock ab. Am Anfang ist kein Transponder im Feld. Nach ein paar Sekunden wird der Transponder direkt auf das Lesegeraet gelegt. Danach wird der Transponder nach oben bewegt bis er die Antenne beruehrt!
Wenn der Transponder die Antenne im Fall 2 beruehrt, ist das Signal so stark, dass der Line-In der Soundkarte uebersteuert. Ist die Karte auf halber Hoehe, ist das Signal relativ schwach. Im Fall 1 macht es akkustisch keinen merkbaren Unterschied in welcher Hoehe sich der Transponder befindet.
Kann die Sounddaten nicht ins Wiki hochladen ... wird nachgereicht ...
Versuch 4
- RFID-Lesegeraet von Megaset
- Antenne 1 im Abstand von 10 cm ueber dem Lesegeraet
- Scanner an GNU Radio angeschlossen, Display-Frequenz: 13.56 MHz (auf der Frequenzskala entspricht das 0)


Nachtrag zu Versuch 3 und 4
Versuch 3 und 4 wurden mit dem Megaset-Reader durchgefuehrt. Als RFID-Karten kamen ISO 15693-Transponder zum Einsatz.
Es gibt einen signifikaten Unterschied zwischen ISO 14443 und ISO 15693: bei ISO 15693 gibt es keinen Hilfstraeger bei +- 847 kHz! Der Hilfstraeger liegt bei +- 423.75 kHz. Das Lesegeraet kann einen weiteren Hilfstraeger vom Transponder erzeugen lassen. Der befindet sich dann bei +- 484.28 kHz. Insofern zeigen die beiden letzten Bilder von Versuch 4 bereits die beiden Hilfstraeger.
siehe RFID
Versuch 5
- RFID-Reader von Megaset
- Antenne 5
- Display-Frequenz: 13.56 MHz
Mit den im Nachtrag zu Versuch 3 und 4 beschriebenen Hinweisen wird der Versuch wiederholt.

Auswertung:
An dieser Stelle muesste man mal in den Standard schauen und kucken, ob man die Frame-Struktur wiederfindet.
- ISO/IEC 15693-2 - Air interface and Initialisation - FCD Version (Das PDF-Dokument im Zip, ab Sektion 8.5 VICC to VCD frames)
Start of Frame
8.5.2 SOF when using two subcarriers SOF comprises 3 parts: • 27 pulses of 484,28 kHz (fc/28), • 24 pulses of 423,75 kHz (fc/32), • a logic 1 which starts with 9 pulses of 484,28 kHz (fc/28) followed by 8 pulses of 423,75 kHz (fc/32).
passt
End of Frame
8.5.4 EOF when using two subcarriers EOF comprises 3 parts: • a logic 0 which starts with 8 pulses of 423,75 kHz (fc/32) followed by 9 pulses of 484,28 kHz (fc/28), • 24 pulses of 423,75 kHz (fc/32), • 27 pulses of 484,28 kHz (fc/28).
noch nicht geprueft ...
Transponderinhalt
noch nicht geprueft ...
USRP Dumps
- file: [1]
- displayfreq: 13.9000 MHz
- samplerate: 500.000 samples/sec
- baudline-format: le16d, reell
- reader: megaset
- antenna: #5
- tranponder: ISO 15693, megaset.com, i-code, sli
- descr: Transponder data with content 0xcc
- file: [2]
- displayfreq: 13.9000 MHz
- samplerate: 500.000 samples/sec
- baudline-format: le16d, reell
- reader: megaset
- antenna: #5
- tranponder: ISO 15693, megaset.com, tag-it, hf1
- descr: Transponder data with content of /etc/services
- Solldaten:
0000 23 0A 23 20 #.# | 0004 4E 45 54 57 NETW | 0008 4F 52 4B 20 ORK | 000C 53 45 52 56 SERV | 0010 49 43 45 53 ICES | 0014 2C 20 49 4E , IN | 0018 54 45 52 4E TERN | 001C 45 54 20 53 ET S | 0020 54 59 4C 45 TYLE | 0024 0A 23 0A 23 .#.# | 0028 20 4E 4F 54 NOT | 002C 45 20 54 48 E TH | 0030 41 54 20 49 AT I | 0034 54 20 49 53 T IS | 0038 20 50 52 45 PRE | 003C 53 45 4E 54 SENT | 0040 4C 59 20 54 LY T | 0044 48 45 20 50 HE P | 0048 4F 4C 49 43 OLIC | 004C 59 20 4F 46 Y OF | 0050 20 49 41 4E IAN | 0054 41 20 54 4F A TO | 0058 20 41 53 53 ASS | 005C 49 47 4E 20 IGN | 0060 41 20 53 49 A SI | 0064 4E 47 4C 45 NGLE | 0068 20 57 45 4C WEL | 006C 4C 2D 4B 4E L-KN |
- file: [3]
- displayfreq: 14.0140 MHz
- samplerate: 1.000.000 samples/sec
- baudline-format: le32, complex
- reader: megaset
- antenna: #5
- tranponder: ISO 15693, megaset.com, i-code, sli
- descr: Transponder data with content 0xcc
Ueberlegungen
Die letzten Experimente funktionierten im wesentlichen nach diesem Schema: Der Scanner nimmt die Antennenspannung auf, verarbeitet sie und gibt das ZF-Signal heraus. Das usrp-Board digitalisiert die ZF weg. Mit Baudline visualisiert man die Signale in einem Wasserfalldiagramm. Geeignete Sampleraten liegen so bei 1 bis 4 MSamples/Sekunde. Brauchbare Einstellungen fuer die FFT sind N=1024 und die Gaussche Fensterfunktion (Wert ca. 10).
Was kann man sehen?
Deutlich fruehere Versuche die Seitentraeger abzugreifen wurden mit einer einfachen live-FFT Darstellung durchgefuehrt. Damit konnte man aber keine Seitentraeger erkennen, denn deren Signal ist so kurz, dass man sie nicht mit einer live-FFT wahrnehmen kann. Insofern bietet das Wasserfalldiagramm deutliche Vorteile, denn es stellt auch zeitliche Informationen dar. Im letzten Bild von Versuch 5 kann man dann schon ganz ordentlich die Daten des ISO 15693-Transponders sehen. Die vergroesserte Darstellung zeigt ferner ganz kleine horizontale Striche an den Seitentraegern. Z.B. im Fall logische 0 bei zwei Seitentraegern werden zuerst acht Pulse auf 423 kHz und dann 9 Pulse auf 848 kHz gesendet. Moeglicherweise hinterlassen diese Pulse Zacken im Wasserfalldiagramm. Man kann aber nur einige Pulse erkennen.
Bisher hat das Darstellen von ISO 14443-Transponderdaten noch nicht funktioniert. Man sieht zwar die Seitentraeger, aber die zeitliche Aufloesung reicht nicht aus, um Bits zu sehen.
Zeitliche Aufloesung und FFT-Parameter
Mit dem usrp kann man zwar bis zu 16 komplexwertige Megasamples pro Sekunde aufnehmen, nur man bekommt das nicht mehr richtig visualisiert. Man kann nun mit den verschiedenen Einstellungen herumspielen, aber entweder sind die Haupttraeger-Bins zu dicht neben den Seitentraeger-Bins und vermischen sich in der Darstellung oder die Seitentraegersignale sind zu verwischt, um da noch irgendwas zu erkennen.
Mehr Samplerate bringt nicht zwangslaeufig bessere Ergebnisse. Zumindest wenn man sich das Spektrum mit baudline ansieht!
Filtern
Idee: Wenn man genau einen Seitentraeger herausfiltert, dann kann man die FFT herausoptimieren. Baudline muss das Signal nicht spektral auseinanderbasteln. Die Waveform-Ansicht des Signals sollte die Amplitude des Seitentraegers in hoher Aufloesung wiedergeben.
Da gibt es nun mehrere Wege der Umsetzung. Zum einen kann man die ZF analog filtern. Fuer entsprechende Versuche muessten die ct' bzw. Elektor-RFID-Detektoren ausreichen. Zum anderen kann man die ZF mit Gnuradio-Modulen digital filtern.
Detektor-Bausaetze benutzen
Die beiden Bausaetze sollen das Feld des Lesegeraetes detektieren. Auf der HF-Seite sind beide Schaltungen etwas anders aufgebaut, aber beide verwenden das selbe Empfaengerkonzept. Die Antennenspannung wird mit einem 8 MHz Oszillatorsignal gemischt. Wenn bei 13.56 MHz ein Traeger ist, dann gibt es in der ZF ein messbares Mischprodukt bei 5.56 MHz. Das wird durch ein Bandpassfilter (Breite: paar hundert Kiloherz) gefiltert. Was vom Filtern uebrig bleibt, wird dann weiterverarbeitet.
Das Oszillatorsignal kann man nun so tunen, dass der Seitentraeger durch das Filter passt. Zum Beispiel: Seitentraeger bei ISO 14443 bei 13.56 + 0.847 MHz = 14.407 MHz. Gesucht ist dann eine Oszillatorfrequenz f, so dass 14.407 MHz - f = 5.5 MHz. Alternativ laesst sich natuerlich ein anderes Filter einbauen. Es scheint aber zweckmaessiger zu sein, den Oszi zu tauschen oder eine PLL aufzubauen, deren Frequenz eingestellt werden kann. (Vielleicht sollte man Sockel fuer Oszi/Filter aufloeten, dann man nach Bedarf Bauteile wechseln.)
Bisher wurde lediglich die 5.5 MHz-ZF vom ct'-Detektor via usrp und baudline verarbeitet (an Pin 4 vom Mischer, also vor der Filterung). Das funktioniert soweit, nur ist die Signalstaerke etwas schwach. Die Antenne ist sehr klein.
Mit GNU Radio filtern
Das sollte gehen -- wurde aber bisher nicht ausprobiert.