Forum: Projekte & Code RFID-RFM12-Funkmodul


von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

Hallo

Hier mal ein RFID Reader Funkmodul mit dem RFM12. Das Modul beruht zum 
größten Teil auf das Pollin RFID Board. Es wird ein U2270B und ein 
ATtiny2313 und ein RFM12 Funkmodul verwendet.

Die benötigte Lesespule ist selbst gewickelt. Ich erreiche damit eine 
Leseweite von ca. 5cm mit den kleinen Schlüsselanhängern von Pollin.

Funktionsweise:
Das Modul liest nur den Tag ein und sendet diesen per RFM an eine 
Basisstation.

Da das Modul für ein Security-System entwickelt wurde, ist im Modul auch 
der Zustand der Base-Station (Alarm-State) gespeichert. Dieser wird nach 
anlegen der Betriebspannung (12V- !!!) vom RFID-Funk-Modul von der 
Basis-Station angefordert. Dies hört man durch ein kurzes piepen und die 
DUO-LED leuchtet in diesem Moment gelb.

Daraufhin wartet das Modul auf eine Antwort. Gleichzeitig läuft über dem 
Timer ein Timeout. Hat die Base-Station nicht innerhalb des Timeouts 
geantwortet wird der Vorgang (get_status) bis zu 9x wiederholt. Gab es 
bis dahin immer noch keine Antwort, dann wird ca. 8s gewartet um danach 
einen Restart durchzuführen. Während der Wartezeit blinkt die DUO-LED 
gelb. Falls das Modul schon beim Starten sich so verhält dann stimmt 
irgendetwas mit dem Empfang nicht.

Betriebszustand Alarm inaktiv:
Die DUO-LED leuchtet grün in diesem Zustand grün. Hält man jetzt einen 
Tag in das Lesefeld der Spule wird der Tag eingelesen (DUO-LED leuchtet 
gelb und für die Zeit des einlesens ertönt der Piepton), alle 
erforderlichen Sicherheitsabfragen (CRC-Checks) gemacht und wenn alles 
okay ist per RFM der Tag (im ASCII-Format) mit dem Kommando $ 20 + "Tag" 
an die Base-Station geschickt.

Die Base-Station muss nun den Tag auf Gültigkeit prüfen und dem 
RFID-Funk-Modul antworten. Das RFID-Funk-Modul wartet während dessen auf 
eine Antwort der Base-Station.
Diese hat jetzt folgende Möglichkeiten als Antwort: (Kommando)
$18 = False Tag (Tag ist ungültig) -> RFID-Modul ohne Aktion
$19 = ALARM ON (Tag ist gültig) -> RFID-Modul wechselt State: Alarm 
aktiv
$20 = ALARM OFF(Tag ist gültig) -> RFID-Modul wechselt State: Alarm 
inaktiv

Ist der Tag gültig und als Antwort kanm eine $20 zurück wird vom 
RFID-Modul für 3s der Türkontakt geschlossen. Hier kann zum Beispiel ein 
Türöffner angeschlossen werden um mit dem RFID auch eine 
Zutrittskontrolle zu ermöglichen.

Hält man den Tag längere Zeit (ca. 3s) in das Lesefeld der Spule wird 
dies als "scharf schalten des Systems" gewertet. Das RFID-Modul sendet 
daraufhin das Kommando $19 + "Tag" zur Base-Station und wartet wiederum 
auf die Antwort und reagiert dementsprechend.


Betriebszustand Alarm aktiv:
Die DUO-LED leuchtet in diesem Zustand rot. Hält man jetzt einen Tag in 
das Lesefeld der Spule wird der Tag eingelesen (DUO-LED leuchtet gelb 
und für die Zeit des einlesens ertönt der Piepton) und wenn alles okay 
ist per RFM der Tag (im ASCII-Format) mit dem Kommando $20 + "Tag" an 
die Base-Station geschickt. Nun wird wieder auf die Antwort gewartet und 
demensprechend reagiert. Ist der Tag gültig und als Antwort kanm eine 
$20 zurück wird vom RFID-Modul wieder für 3s der Türkontakt geschlossen.

Fehlerbehandlung:
Sollte bei allen Aktionen keine Antwort (Timeout) oder eine ungültige 
Antwort empfangen worden sein, wird dies wieder mit gelben leuchten der 
DUO-LED angezeigt und wie beim Start des Moduls mit der Fehlerbehandlung 
begonnen und im Extremfall ein Restart erzwungen.


Es können auch mehrere RFID-Funk-Module in dem Funknetz eingebunden 
werden. Jeder dieser Funkmodule reagiert dann dementsprechend auf eine 
Änderung des Alarmstatus welches durch ein anderes Modul hervorgerufen 
wurde. Sollte dabei der Alarmstatus von aktiv zu inaktiv erfolgen, 
öffnet nur das Modul die Tür mit welchem der Alarm aufgehoben wurde.

Ich habe es bis jetzt nur mit 2 Modulen getestet. Aber mit diesen 
funktioniert es jedenfalls.


Grüße Steffen

von Der Weise (Gast)


Lesenswert?

Und... was passiert, wenn ich mir einen schwarzen Hut aufsetze, mich mit 
RFM12-Empfänger und Laptop in die Nähe der Anlage setze, den vom RFM12 
übertragenen "Tag" Wert mitlese und aufschreibe, in mein eigenes RFID 
einspeichere und damit die Tür öffne? Oder ein beliebiges RFID-Tag vor 
den Reader halte und mit meinem eigenen RFM12-Modul ein $20 sende?

von Steffen H. (avrsteffen)


Lesenswert?

Na sowas..

Naja, deswegen geb ich ja den Code mit bei. Dann kann man sich das alles 
so abändern damit keiner auf solche Ideen kommt der mit dem schwarzen 
Hut ;-)

Nan könnte ja auch die Bytes des Tags nach einem bestimmten Schema 
vertauschen und auswerten.

von Der Weise (Gast)


Lesenswert?

Na das als "Security-System" zu bezeichnen finde ich so gewagt wie das 
Login-Fenster von Windows95, das man einfach schließen konnte, um sich 
"einzuloggen"!
Eine einfache und vermutlich sehr effektive Lösung wäre ein 
One-Time-Pad:
Basestation und Modul erhalten identische komplett mit (echten! -> 
Hardware Random Number generator) Zufallszahlen vollgeschriebene 4GB 
SD-Karten. Das Modul verschlüsselt das Tag beim Senden mit einem 
4byte-Wert von der Karte, und die Basestation sendet zum öffnen einen 
Wert von ihrer Karte, der eben mit dem entsprechenden Wert beim Modul 
übereinstimmen muss. Alle 500.000 Schaltvorgänge muss man die Karten 
dann einmal "neu befüllen", dafür könnte man sich ein Gerät bauen oder 
ein hübsches Programm schreiben.

von Der Weisere (Gast)


Lesenswert?

(echten! -> Hardware Random Number generator)

oho, oho!

von Der Weise (Gast)


Lesenswert?

Ja nun, wenn man einen PRNG verwendet kann man die Tür auch gleich offen 
lassen ;-)
Und sooo schwer ist das wohl auch nicht. Einfacher als einen kompletten 
auf asymmetrischer Kryptographie (RSA oder so) basierenden 
Authentifizierungs-Algorithmus auf Modul+Basisstation zu implementieren, 
vermutlich...

von Cyblord -. (cyblord)


Lesenswert?

Der Weise schrieb:
> Ja nun, wenn man einen PRNG verwendet kann man die Tür auch gleich offen
> lassen ;-)

Dazu muss man aber erstmal den Startwert kennen....

Wenn man auf nummer sicher gehen will kann man diesen mittels ADC und 
Rauschgenerator in regelmäßigen Abständen erzeugen und den PRNG damit 
neu starten. Aber PRNG an sich brauchts schon.

Eine weitere Möglichkeit zur einfachen Kryptographischen Absicherung 
wäre ein Challange/Response verfahren. Das Modul an der Tür sendet die 
Tag-ID und eine Zufallszahl an die Basistation. Die Basistation nimmt 
beide Werte + ein Passwort (welches das Türmodul natürlich auch kennt, 
also einen PSK), hängt alle 3 Werte hintereinander + den Wert für OK 
oder FALSE und jagt alles durch ne Hashfunktion und sendet diesen 
Hashwert.
Das Türmodul macht dasselbe einmal für OK und einmal für FALSE und 
vergleicht die Werte mit dem Empfangenen Hashwert. Somit kann es 
herausfinden was die Basistation geantwortet hat und kann sich sicher 
sein dass das Kommando auch von der Basistation kam (ohne Kentniss des 
Passworts kann kein gültiger Hash erzeugt werden).
Durch die Zufallszahl ist das ganze auch sicher gegen Replay-Angriffe. 
Das wird nicht einfach zu knacken sein.
Diese Methode würde lediglich die Implementierung einer 
(Kryptografischen) Hashfunktion wie MD5 oder SHA1 vorraussetzen und man 
müsste sich nicht mit SD Karten rumschlagen. Der Nachteil ist, man kann 
keine wirklichen Nutzdaten damit übertragen.

gruß cyblord

von Der Weise (Gast)


Lesenswert?

cyblord ---- schrieb:
> Dazu muss man aber erstmal den Startwert kennen....
Ich schätze mal mit etwas Rechnen ist das nicht sonderlich schwierig, 
wenn man genug Übertragungen mitgeschnitten hat... So etwas wie das mit 
dem ADC meinte ich ja mit Hardware-RNG. Aber deine Idee könnte wohl auch 
gehen.

von Cyblord -. (cyblord)


Lesenswert?

Du hast natürlich im Bezug auf den PRNG recht. Für One-Time-Pad muss der 
Schlüssel einfach sehr gut sein. Grundsätzlich reicht hier ein PRNG, der 
nur einige echte Zufallszahlen als Seed hat, nicht aus.

Aber der TE sollte an dieser Stelle noch nachbessern. Ein solches System 
steht und fällt ja mit der Sicherheit. Und diese ist in der aktuellen 
implementierung nicht gegeben. Das wäre also keine Erweiterung sondern 
gehört zu den KERNFUNKTIONEN.
Ein einfaches vertauschen von Bytes (Security-by-Obscurity) sollte man 
lassen.

Die Frage ist halt, wie hoch muss der Aufwand für das Knacken des 
Systems sein. Wird es nur an einer normalen Haustür eingesetzt, ergibt 
sich für einen Einbrecher schon sehr früh dass hier das Einschlagen 
einer Fensterscheibe wohl zielführender ist.

gruß cyblord

von Steffen H. (avrsteffen)


Lesenswert?

Hallo

Aber woher weiß denn hier der Einbrecher das hier ein RFID Modul mit 
Funk arbeitet? Und wenn ja, bei welcher Frequenz arbeitet es? Des 
weiteren, wie sind die gesendeten Daten zuzuordnen?

Diese kleine Applikation sollte ja auch nur ein Beispiel sein. Wer meint 
noch nicht sicher genug zu sein, kann ja all die Verschlüsselungen noch 
mit einbauen. Ich überlege auch schon wie ich eine zusätzliche 
Verschlüsselung der Daten lösen könnte.

Allerdings ist der ATtiny2313 jetzt schon mit 92% Code gefüllt.


Grüße Steffen

von Cyblord -. (cyblord)


Lesenswert?

> Aber woher weiß denn hier der Einbrecher das hier ein RFID Modul mit
> Funk arbeitet? Und wenn ja, bei welcher Frequenz arbeitet es? Des
> weiteren, wie sind die gesendeten Daten zuzuordnen?

Sag ich doch: "Security by Obscurity". Wenn es das ist was du willst. 
Aber sowas ist halt nicht sicher. Wenn du einen komplett ungeschützten 
Türöffner an deinem Haus haben möchstest... Ich würde das nicht so 
machen, aber jeder wie er will.

> Wer meint noch nicht sicher genug zu sein
Naja NOCH sicherer als bisher ist ja nicht besonders schwer.

> Ich überlege auch schon wie ich eine zusätzliche
> Verschlüsselung der Daten lösen könnte.
Gab hier ja jetzt schon einige Vorschläge dazu.

von Der Weise (Gast)


Lesenswert?

Steffen H. schrieb:
> Aber woher weiß denn hier der Einbrecher das hier ein RFID Modul mit
> Funk arbeitet?
Für deine eigene Haustür mag dies sicher genug sein. Sollte jemand auf 
die Idee kommen mit so etwas den Zugang zu einem Unternehmen oder etwas 
anderem, wo sich Sachen/Daten von Wert befinden, zu sichern, könnte sich 
der Aufwand für einen potentiellen Dieb ("Spion") lohnen, Antennen und 
Spektrum-Analyzer in Position zu bringen...

von Horst H. (horha)


Lesenswert?

Hallo,

ich kaufe das Sicherheitszubehör meiner Ferrari-Sammlung ( siku ) immer 
bei Pollin ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.