Mesusa - Der praktische War-jemand-hier-Detektor


Vertrauen ist gut, Kontrolle ist besser. Ein unscheinbares Gerät überwacht abgesicherte Bereiche und liefert den starken Nachweis, dass auch wirklich niemand dran oder drin war, während wir woanders waren. Auch nutzbar als kleine Alarmanlage.







Idee

In mancher Hinsicht noch schlimmer, als der klassische, materiell motivierte Einbruch sind Grundrechtsverstöße, die verdeckt stattfinden. Die Täter verfügen über Nachschlüssel, Lockpicking-Knowhow oder "Wartungscodes" für das Alarmsystem. Beispiele:
Als unverbesserliche Optimisten gehen wir erstmal davon aus, dass keines dieser unliebsamen Ereignisse eintreten wird. Vielleicht haben wir keine Feinde (oder wissen's nur noch nicht...). Vielleicht wähnen wir uns nicht im Fokus von Verfassungsschmutz oder eifersüchtigen Exen. Vielleicht halten wir gar den "neuen Profilzylinder aus'm Baumarkt" oder die "Billig-Alarmanlage von Conrad" für ausreichend sicher, zumal es bei uns nichts zu holen gibt. Doch all die Zuversicht ändert leider nichts daran: Ohne Nachweis keine Gewissheit. Ohne Gewissheit kein Grund zur Beruhigung.

Eine unbestechliche Kontrollmöglichkeit muss her. Erst wenn regelmäßige Kontrollen keinen Grund zur Besorgnis liefern, kann echtes Vertrauen entstehen.


Nach oben | Index


Projekt "Mesusa"

Hier ist er, der wohl erste praxistaugliche Kompromiss zwischen "Haar mit Spucke an Tür und Türrahmen kleben" und "24-Stunden-Objektüberwachung durch die Schweizergarde" ;-)

Einsatz-Szenario:


Techno-Logisches:


Etymologisches:


...und während man am Fraunhofer-Institut tolle neue Smartphone-Äpps für das "intelligente Haus" und seine verblödeten Insassen zusammenbastelt, lösen wir Probleme des Alltags weiterhin wie richtige Menschen, nämlich mit Herz und Verstand!



Nach oben | Index


Bedienung

Funktion 1: "War-jemand-hier-Detektor" (Türwächter)


Sicherheit: Wir werden zu keiner Interaktion gezwungen und könnten die Information auch einfach ignorieren, wenn es die Sicherheitslage zulässt... Niemand muss Sicherheit gegen Freiheit eintauschen!
Die Zuverlässigkeit des War-jemand-hier-Nachweises beruht darauf, dass es nach dem Auslösen des Türkontaktes bedeutend schwieriger ist, den vorherigen Gerätestatus wiederherzustellen, als einen von Tausenden abweichenden Zuständen zuzulassen. Manipulationsversuche am Gerät würden ebenfalls eine Spur legen.

Timeouts: Alle Interaktionen sind auf ca. 1 Minute beschränkt. Auf diese Weise wird vermieden, dass ein defekter Schalter oder eine versehentlich offengelassene Tür die Batterie leerlutscht.
Schließen der Tür oder Timeout leiten immer zum nächsten Betriebszustand über!


Funktion 2: "Alarmgerät"

Sicherheit: Bei der Nutzung als Alarmgerät müssen wir uns logischerweise als Zugangsberechtigter ausweisen. Unser Ticket ist der vor dem Weggehen erzeugte vierstellige Zahlencode, welcher nur für diesen einen Vorgang gültig ist.
Die Wahrscheinlichkeit, dass ein Unbefugter diesen Zugangscode errät und korrekt eingibt, liegt bei Eins zu mehreren Tausend. Ein Durchprobieren zahlreicher Codes erscheint unrealistisch, zumal JEDER Fehlversuch mit einem einminütigen Alarm bedacht wird. Vier Dezimalstellen sollten daher für normale Sicherheitsanforderungen vollkommen ausreichen. (Das ist keine lapschige EC-Karte, wo dieselbe Geheimzahl über Monate oder gar Jahre verwendet wird...)
Sollte ein Angreifer unseren aktuellen Zahlencode irgendwie ausspioniert haben, kann er zwar die Mesusa mit diesem Code ordnungsgemäß entschärfen und sein schändliches Tun scheinbar unbehelligt fortsetzen. Doch damit ist auch der uns bekannte Code ungültig geworden, und das wird uns wiederum auffallen, wenn wir das System entschärfen wollen. Denselben Effekt hätte auch ein Controller-Reset oder eine Unterbrechung der Stromversorgung. Bei ordnungsgemäßer Auslegung der Schaltung ist es jedoch extrem unwahrscheinlich, dass solche Fehler durch "höhere Gewalt" auftreten. Uns als rechtmäßigem Nutzer wird also faktisch kein unberechtigter Zugriff aber auch kein Sabotageversuch entgehen.

Eingabemethode für Zahlencode:
Die Tür wurde geöffnet. Jetzt fordert das Mesusa-Gerät mit einem fröhlich blinkenden Symbol "CodE" dazu auf, den Code zum Entschärfen einzugeben. Nur wie??? Im Grunde ganz einfach:
Man mag diese Methode für etwas gewöhnungsbedürftig halten, aber sie kommt mit einem Minimum an Schaltspielen aus und sie funktionert selbst an trägen Türmechanismen noch recht flüssig. (Alternativ dazu können wir den Türkontakt auch während der Eingabe offen halten und mit einem parallelgeschalteten Taster die Eingabe durchführen.)

Timeout beim Weggehen: Wenn wir nach Anzeige der neuen Codezahl 1 Minute warten, und die Tür erst danach schließen, dann wird der soeben erzeugte Code ganz unbürokratisch verworfen und Mesusa geht ohne weitere akustische Signale in den Schlafmodus. Beim nächsten Tür-Öffnen befindet sie sich wieder im Weggeh-Modus und liefert eine neue Codezahl. Dieses Verhalten ist äußerst praktisch beim Empfang von Besuchern oder Postzustellern an einer Haustür.

Timeout bei Rückkehr: Wenn keine Codezahl eingegeben wird, oder die eingegebene Zahl falsch war, wird der akustische Alarm ausgelöst. Danach wieder Schlafmodus. Die Mindest-Alarmdauer von 1 Minute und die Speicherung dieses Ereignisses ist für den nicht autorisierten Eindringling in keinem Fall umgehbar.
Wird die Tür zu einem späteren Zeitpunkt geöffnet, fordert Mesusa erneut zur Code-Eingabe auf. Wenn wir dann unseren richtigen Code eingeben, bekommen wir außerdem die Information im Klartext, ob und wieviele Alarmereignisse in der Zwischenzeit stattgefunden haben.
Tür-Schließen oder Timeout verändert nichts am Alarmstatus
!



Initialisierung

Direkt nach dem (Wieder)Anlegen der Betriebsspannung, also nach dem Einsetzen der Batterie, oder nach einem sonstwie ausgelösten Controller-Reset wird die Position von Jumper 2 (J2) abgefragt und zur Bestätigung der Betriebsart eine entsprechende Display-Anzeige ausgegeben:
J2 gesetzt = Anzeige "F-1" = Funktion 1 (als Türwächter)     oder
J2 offen = Anzeige "F-2" = Funktion 2 (als Alarmgerät)

Ein Wechsel zwischen den Funktionen ist NUR nach Entfernen und Wiedereinsetzen der Batterie möglich. Wird der Jumper im laufenden Betrieb entfernt oder gesetzt, ändert sich rein gar nichts!
Nach der allerersten Inbetriebnahme gewinnt das Programm im Mikrocontroller aus der allerersten Interaktion mit dem Tür-Schalter einen echten Zufallswert, der für unkalkulierbare Startbedingungen sorgt; die Zahlenreihe beginnt also irgendwo im Wertebereich und es gibt keinen festgelegten "Default", der als Abkürzung für Angriffe genutzt werden könnte. Mehr dazu unter Firmware.


... heeey, was passiert eigentlich, wenn ich meinen Code vergessen habe?

Ganz schlecht!!!
Es ist mir gelungen, einen echten Selbstzerstörungsmechanismus für ATtiny-Mikrocontroller zu finden, der in dieser Anwendung nach dreimaliger Eingabe von falschen Codes ausgelöst wird. Der Chip wird mit einem Schlag unbrauchbar und bringt durch internen Kurzschluss die Batterie zur Explosion...
Aber Spaß beiseite. In der Funktion als Alarmgerät ist es natürlich wünschenswert, wenn wir den Alarmstatus auf einigermaßen praktikable Weise zurücksetzen können, falls wir unseren Code tatsächlich vergessen haben oder dieser ungültig geworden ist. Ein "Master-Code" hätte vielleicht zusätzliche Sicherheitsrisiken bedeutet. Daher ist ein Zurücksetzen des Controllers auch wirklich nur durch Entfernen und Wiedereinsetzen der Batterie (Kaltstart) möglich.
Der damit ausgelöste Reset erlaubt auch den Wechsel der Betriebsart per Jumper 2, wie oben erklärt.

TODO:
Kurzanleitung


Nach oben | Index


Hardware

Schaltung 'Mesusa' Tür-Sensor

Schaltbild 'Mesusa'-Türwächter:
Zu den mit * gekennzeichneten Bauteilen bitte Hinweise im Text und im Arbeitsblatt beachten.


Stromversorgung (X1): An der mit X1 bezeichneten Stelle sind auf der Platine Lötinseln im 5-mm-Abstand vorgesehen. Hier können wir zum Beispiel das Anschlusskabel eines Batteriehalters oder eine Steckverbindung einlöten.
Aus Gründen der Energieeffizienz wird die Batteriespannung nicht weiter stabilisiert oder begrenzt; der Controller könnte noch bis etwa 1,8 V stabil arbeiten. Das rotleuchtende LED-Display wird bei etwa 2 V nicht mehr lesbar sein. Insgesamt ergibt sich eine sehr gute Ausnutzung der Batterien.
Die Summenspannung darf jedoch NIEMALS über 5,5 V gehen. Also 2 oder 3 Alkali-Mangan-Zellen oder 'was auf Lithiumbasis (bei 3 V). Auf richtige Polung achten!
Auf diesem Foto erkennen wir deutlich den Batteriehalter für 20-mm-Lithium-Knopfzellen. Diese sind zum Beispiel als CMOS-Stützbatterie auf PC-Mainboards weit verbreitet und daher auch relativ günstig und leicht zu beschaffen.
Der Ruhestrom der Schaltung beträgt im deaktivierten Zustand gerade einmal 10 Mikroampere. Im aktivierten Zustand mit hell leuchtendem Display entstehen Spitzenwerte um die 15 mA. Zum Energiebedarf habe ich weiter unten noch ein paar Messungen und Beispielrechnungen dokumentiert.

Mikrocontroller (IC1): Der ATtiny2313 hat für diese Anwendung genügend Ports, tolle Energiesparfunktionen, ein paar nützliche Interrupts und vor allem ein günstiges Pinout. Wer programmieren kann, braucht für das bisschen Logik und Siebensegmentzauberei auch keinen ATMega, sondern kommt mit den 2 KB Flashspeicher eines ATtiny2313 spielend aus...
Der ATtiny läuft in dieser Anwendung mit seinem internen Oszillator auf 4 MHz und Taktteilung herunter auf 500 kHz.
Der Chip muss vor dem Einbau in die Schaltung in einem externen Programmiergerät mit den Fuses und der Firmware gebrannt werden, denn das Platinenlayout sieht natürlich keinen ISP-Zugang vor. Im Gegenteil, hier wird sogar die Reset-Leitung dauerhaft auf Vcc gelegt, damit ISP oder Hochvolt-Programmierung innerhalb der Schaltung grundsätzlich nicht funktioniert. Dahinter steckt die Idee, dass der ATtiny2313 direkt eingelötet werden kann; ein Zugriff auf die Firmware oder der Austausch des Chips gestaltet sich dann schon sehr aufwendig.
Sicherheitsbewusste Nutzer können noch einen draufsetzen und die Mesusa-Firmware über restriktive Lockbits und einen passwortgeschützten Bootloader fälschungssicher machen. Für die Kommunikation mit einem Bootloader stehen die Portleitungen PA0 oder PA1 zur freien Verfügung, und sie sind praktischerweise ohnehin über Steckbrücken herausgeführt. Dazu weiter unten noch ein paar Anmerkungen.

Anschluss für externen Tür-Schalter oder Taster (X2):
Der geschlossene Schalter legt PB0/PCINT0 (Pin 12 an IC1) auf Schaltungsmasse (GND) und der Porteingang sieht im Ruhezustand einen sicheren Low-Pegel. Wird der Schalter jedoch geöffnet, liegt also ein "Tür-Ereignis" vor, dann soll die Aktivierung des Controllers erfolgen, also das Aufwecken aus dem Sleep-Modus über Pin-Change-Interrupt. Bei geöffnetem Schalter soll der Porteingang also einen High-Pegel bekommen. Die einzig praktikable Lösung dafür ist ein Pullup-Widerstand. Wir verwenden aber NICHT den internen, per Software zuschaltbaren Pullup. Dieser würde mit nur ca. 20...50 kOhm einen Ruhestrom in der Größenordnung von immerhin ca. 100 µA (0,1 mA) verursachen, was in dieser Anwendung schon an Energieverschwendung grenzt.
Stattdessen kommt ein wesentlich hochohmigerer externer Pullup zum Einsatz, und zwar R9 (470 kOhm). Über ihn fließen gerade einmal 10 µA an permanentem Ruhestrom. Dennoch funktioniert diese Methode im Zusammenhang mit dem Pin-Change-Interrupt ganz hervorragend, weil dieser durch den absoluten Spannungspegel (level-triggered) ausgelöst wird, nicht durch steigende oder fallende Flanken (positive/negative-edge-triggered). Tatsächlich spielt die Flankensteilheit in dieser Anwendung gar keine Rolle. Wir können es uns sogar erlauben, den relativ hochohmigen Eingang durch Parallelschalten eines größeren Folienkondensators C3 (220nF...470nF) vor etwaigen Störungen zu schützen. Damit kein Schaltereignis "verschluckt" wird, sollte der Kondi natürlich auch nicht zu groß sein. Ein günstiger Kompromiss liegt bei einer RC-Konstante in der Größenordnung von etwa einer Zehntelsekunde.
Als externe Tür-Schalter eignen sich konventionelle robuste Schalter, die speziell für diesen Zweck ausgelegt sind, aber insbesondere auch ein Reed-Set aus der Alarmtechnik.
Da X2 im Rastermaß 2,5 mm vorliegt, könnten wir hier ebenfalls einen Jumper setzen, bspw. für Transportzwecke oder beim Testen der Schaltung.
Außerdem können wir parallel zu einem Reed-Schalter einen Taster (normally opened) an X2 anschließen. Der würde die Eingabemethode in der Funktion als Alarmgerät noch etwas benutzerfreundlicher gestalten.

Anschlüsse für interne Reed-Schalter (X2a-d): An allen vier Rändern der Platine sind Stützpunkte zum direkten Anlöten von Reed-Röhrchen vorgesehen, welche dann über einen externen Magneten in der Nähe der jeweiligen Gehäusewand ausgelöst werden. Wir sparen uns jede lästige Verkabelung und die ganze Herausforderung bei "Installation" der Mesusa besteht darin, das Hauptgerät und den Magneten auf möglichst elegante Art und Weise zu befestigen. Da das Reed-Röhrchen im Gerät untergebracht ist, muss es nicht besonders geschützt werden. Vielmehr bietet sich die Gelegenheit, die gesamte Elektronik umfassend vor Angriffen durch Hochfrequenz-Einstrahlung zu schützen, wenn wir ein hochwertiges Gehäuse aus einem Nichteisenmetall (also z.B. Aluminium) verwenden und vor dem Display ein feines Metallnetz einsetzen.
Natürlich müssen wir nur ein einziges Reed-Röhrchen bestücken, sobald die Einbaulage feststeht. Die Freistrecke zwischen Magnet und Reed-Schalter sollte bei geschlossener Tür nicht mehr als ca. 1 cm betragen. Bei Verwendung starker oder größerer Magnete dürfen es auch gern mal 3 cm oder mehr sein. Im Zweifelsfall ein paar Tests durchführen.

Lautsprecher (Bz1): An dieser Stelle ist ein kleiner dynamischer Lautsprecher oder ein Piezo-Schallwandler für die Lötmontage vorgesehen. Diese Komponente ist nicht unbedingt erforderlich, wenn wir keinen Einsatz als Alarmgerät wünschen. Die Türwächter-Funktion lässt sich auch ohne akustische Signale bedienen, da die optischen Rückmeldungen eindeutig sind.
Um im Alarmfall eine hohe Lautstärke zu erzielen, liegt der Schallwandler an den zwei Portleitungen (PD5+PD6), die im Gegentakt angesteuert werden, also mit doppeltem Spannungshub. Der Schutzwiderstand ist eine reine Vorsichtsmaßnahme, die den Spitzenstrom im Kurzschlussfall oder an niederohmigen dynamischen Speakern auf ca. 20 mA begrenzen soll. Mit hochohmigen Piezo-Schallwandlern, deren Resonanzfrequenzen um die 4 kHz liegen, bekommen wir einen überaus unangenehmen, durchdringenden Signalton. Für die Alarmfunktion sollte das Gehäuse natürlich mit Schalllöchern ausgestattet sein.

Siebensegmentanzeigen (Dis1-4):
Dies sind Siebensegmentanzeigen mit 12,5 mm Ziffernhöhe vom Typ SA39-11, die im Multiplex angesteuert werden. Die Vorwiderstände R1-R7 wurden so dimensioniert, dass die hocheffiziente rotleuchtende Variante SA39-11SRWA (high efficiency red) in einem weiten Betriebsspannungsbereich gut funktioniert und dabei eine bestmögliche Ausnutzung der Batterie gewährleistet.
Selbstverständlich kann auch die grüne oder gelbe Variante eingesetzt werden; insbesondere an höherer Batteriespannung (z.B. 4,5 V aus 3x AAA-Zellen).
Wenn die rotleuchtende Variante an höherer Betriebsspannung zu grell rüberkommt, können wir entweder die Vorwiderstände auf ca. 470 Ohm vergrößern, ODER den Energiesparmodus der Firmware nutzen, welcher die Anzeige durch Halbierung des Tastverhältnisses dimmt.
Die LED-Display-Lösung scheint alternativlos zu sein. Wesentlich stromsparendere LCDs für direkte Ansteuerung sind schwer zu beschaffen, schlecht zu multiplexen und diffizil in der Kontaktierung. Reiner Overkill wäre eines dieser LCD-Module mit Anzeigechip (z.B. HD44780-Kompatible). Solche Komponenten hätten das Projekt nicht nur komplizierter, sondern auch intransparent und teuer gemacht.
Wegen der relativ kurzen Einschaltdauer im Verhältnis zu den Ruhephasen fällt der LED-Stromverbrauch gar nicht so sehr ins Gewicht, wie zunächst angenommen. Erfahrungswerte und Berechnungen zur Batterielebensdauer präsentiere ich weiter unten.

IC-Fassungen:
Wenn schon Fassungen, dann einigermaßen Hochwertige. Es ist immer wieder ärgerlich, wenn bei den billigen Fassungen nach dem dritten Rein-Raus-Spiel einzelne Kontaktfedern blockieren und/oder Pins von teuren Bauteilen abreißen. (Alles schon erlebt!)

Jumper und Programmierschnittstelle J1/J2:
Die Portleitungen PA0 und PA1 sind auf Stifte im 2,54-mm-Raster herausgeführt, welche jeweils über einen "Jumper" zu den gegenüberliegenden Stiften an Masse gelegt werden können. Mit diesen 2 Bits besteht die Möglichkeit, insgesamt vier verschiedene Programm-Varianten per Steckbrücke vorzuwählen. Übersichtstabelle unter Firmware!
Des Weiteren bieten sich diese Anschlüsse als Programmier-Interface für einen Bootloader an.

Platine:
Die Platine mit dem vorgeschlagenen Layout im Format 53 x 100 mm passt gut in diverse Standardgehäuse (siehe Stückliste).

Kompromittierende Abstrahlungen: Jede hochfrequent getaktete Elektronik strahlt elektromagnetische Wellen ab, die man mit entsprechender Ausrüstung noch auf einige Entfernung empfangen und möglicherweise auswerten kann.
Im Dornröschenschlaf sind alle Taktquellen des ATtiny2313 abgeschaltet, der Controller ist in diesem Zustand völlig strahlungsfrei. Im aktiven Betrieb generiert die Schaltung aber auch nur sehr wenig Abstrahlungen, da die Takterzeugung on-chip stattfindet und noch heruntergeteilt wird. An die nach außen geführten Leitungen gehen keine besonders hochfrequenten Signale. Die einzige nach außen geführte Leitung, die unfreiwillig als Antenne wirken könnte, wäre die Zuleitung zu einem externen Tür-Schalter. Diese ist auf der Platine über C3 HF-mäßig kurzgeschlossen. Wer der Güte des Folienkondensators nicht traut und ernsthaft mit HF-basierten Angriffen rechnet, kann C3 noch mit einem induktionsarmen 10-nF-Keramikkondensator überbrücken und den ganzen Aufbau HF-dicht ausführen. Dann sind passive oder aktive Angriffe per Hochfrequenz garantiert kein Thema.
Und so bringt die Assemblerprogrammierung auch bezüglich unerwünschter HF-Abstrahlungen einen weiteren Sicherheitsvorteil: hocheffiziente Maschinenbefehle brauchen im Vergleich zu hochsprachlich compiliertem Code mitunter (viel) weniger Taktzyklen. Dieselbe Performance wird dann auch mit einem wesentlich niedrigeren Prozessortakt erreicht. Das wiederum bedeutet in der Regel weniger Abstrahlung von elektromagnetischer Energie und bringt ganz nebenbei einen niedrigeren Energieverbrauch.

Power-Analysis: Schon wegen der Schätzungen zum Energiebedarf habe ich mir natürlich auch mal die Stromschwankungen in den verschiedenen Betriebszuständen angeschaut. Durch Strommessungen lässt sich bei der Mesusa ganz klar zwischen inaktiv, aktiv ohne Display und aktiv mit Display unterscheiden. Innerhalb der verschiedenen Modi wird es dann schon sehr kruschelig. Bei der Code-Anzeige war gerade einmal zwischen "1111", also einer minimalen Anzahl von Segmenten und Anzeigewerten mit eher vielen Segmenten zu unterscheiden. Ich bezweifle, dass Power-Analysis in Bezug auf das Mesusa-Gerät irgendeinen sinnvollen Angriff ermöglichen könnte.


Nach oben | Index



Firmware

Die Firmware ist in reinem Assembler geschrieben. Zuverlässig, kompakt, energieeffizient, transparent und praktisch fehlerfrei ;-) Die wichtigsten Details in Menschensprache:


Ressourcen: Das Programm nutzt intensiv einen Pin-Change-Interrupt, der den Mikrocontroller immer wieder aus dem Power-Down-Zustand (tiefster Schlafmodus) heraus reaktivieren kann. Daneben nutzt das Programm natürlich allerlei Arbeitsregister, ein wenig Stapelspeicher (SRAM) sowie den EEPROM als Fallback für den Sabotagefall.

Fusebits:
Die Fuses sind für eine Taktrate von 500 kHz (RC-Oszillator 4 MHz, Taktteilung durch 8) sowie aktivierten Brown-Out-Detektor auf 1,8 Volt zu setzen. Für verschärften Zugriffsschutz können die Lockbits in Modus 3 gesetzt werden. Bei Verwendung eines Bootloaders muss natürlich auch Self-Programming enabled sein. Mögliche Fusebit-Konfigurationen mit Erläuterungen stehen im Arbeitsblatt.

Jumper: Die Firmware gliedert sich in zwei Hauptprogramme, eines für die Funktion "Türwächter", das andere für die Funktion "Alarmgerät". Welche Betriebsart verwendet wird, bestimmt Jumper 2, welcher aber nur im Rahmen eines Neustarts abgefragt wird. Den dafür erforderlichen internen Pullup-Widerstand schaltet die Firmware immer nur kurz vor der Abfrage auf und nimmt ihn direkt nach Auswertung der Portleitung auch schon wieder weg. Das vermeidet unnötigen Ableitstrom über einen gesetzten Jumper.

MESUSA-Konfiguration
Jumper 1
Jumper 2
Funktion 1
Türwächter normal
gesetzt
gesetzt
Funktion 1
Türwächter Energiesparmodus
 offen
gesetzt
Funktion 2
Alarm normal
gesetzt
offen
Funktion 2
Alarm Energiesparmodus
offen
offen

Pseudozufallsgenerator: In beiden Betriebsarten kommt ein Software-LFSR (Linear Feedback Shift Register) zum Einsatz, das "zufällig" aussehende Codezahlen liefert. Das streng deterministische Verhalten dieser Klasse von sehr einfachen Pseudozufallsgeneratoren bewirkt, dass ein bestimmter Ausgangszustand erst wieder nach einer genau festgelegten Anzahl von weiteren Taktschritten nochmal vorkommt. Das ist für diese Anwendung genau das erwünschte Verhalten!
Das hier verwendete LFSR ist 13 Bit lang und verwendet Fibonacci-Rückführungen von den Positionen 13,4,3 und 1. Es hat die bei 13 Bit maximal erzielbare Lauflänge (maximum length sequence, MLS) von 2^13 - 1 = 8191 Taktschritten. Der aktuelle LFSR-Zustand steht dem Programm als Binärwort im Wertebereich von "00000000:00000001" bis "00011111:11111111" (Highbyte:Lowbyte) zur Verfügung.
Die Binärzahlen werden vom Programm erst in BCDs und dann in Siebensegmentmuster umgerechnet. Auf dem vierstelligen Display ist somit jedem möglichen Zustand des LFSR genau ein bestimmter Anzeigewert zugeordnet, nämlich die Zahlen "0001" bis "8191". Das bedeutet, ein beliebiger Anzeigewert wiederholt sich erst nach 8190 Durchläufen. Selbst für einen geduldigen Angreifer wäre es kaum praktikabel, die Vorrichtung per Hand (Tür-auf/Tür-zu) oder mit einem automatischen Impulsgeber zu "überlisten", da jeder einzelne Zyklus aufgrund der hard- und softwarebedingten Verzögerungen mindestens 10 Sekunden dauert.

Initialisierung und Resets: War die Mesusa erst wenige Wochen oder Monate im Einsatz, dann kommen bei normaler Benutzung höchstens ein paar Hundert Zyklen zusammen. Würde der Pseudozufallsgenerator nach dem Einsetzen der Batterie (Kaltstart) oder nach einem Hardware-Reset (Warmstart) stets mit denselben "Default"-Parametern neu starten, dann hätte ein Angreifer relativ leichtes Spiel: Er müsste nur einen Controller-Reset erzwingen (z.B. durch vorübergehendes Entfernen oder Kurzschließen der Batterie), um danach eine überschaubare Anzahl von Zyklen durchzuführen, bis der gewünschte Zustand vor der letzten Türöffnung wiederhergestellt wäre. Schlecht!
Diese Schwachstelle lässt sich konsequent vermeiden, indem wir bei der allerersten Inbetriebnahme ("frisch geflasht") den echten Zufall mitspielen lassen. Das Programm gewinnt aus ein paar Schaltspielen des Nutzers und aus dem schnelllaufenden Timer1 einen wirklich zufälligen Startwert für das LFSR, sodass die allererste Zahl tatsächlich vollkommen unkalkulierbar wird. In jeder späteren Runde geht es dann rein deterministisch weiter. Die Forderung, dass sich eine beliebige Zahl erst nach Tausenden Zyklen wiederholen darf, wird also immer erfüllt.
Außerdem berechnet das Programm den nächstfolgenden Wert im Vorraus und sichert diesen im nichtflüchtigen EEPROM
-Speicher. Sollten durch Reset, Sabotage oder Kaltstart alle Register gelöscht worden sein, kann das Programm auf die zuletzt gespeicherte Zahl im EEPROM zurückgreifen. Auf diese Weise ist sichergestellt, dass die Mesusa auch bei Resets oder Unterbrechungen der Betriebsspannung keine Zahl zweimal hintereinander anzeigt.

EEPROM-Zugriffe: Eigentlich bräuchten wir im Türwächter-Modus nur zwei EEPROM-Zellen, um den letztmaligen LFSR-Wert zwischenzuspeichern. Laut Datenblatt verkraftet jede einzelne EEPROM-Speicherzelle bis zu 100.000 Schreibzyklen, was in dieser Anwendung problemlos für eine jahrzehntelange Nutzung ausreichen würde.
Aber es wäre schon blöd, falls sich die Angaben zur angeblichen Lebensdauer als Angeberei des Herstellers herausstellten... (Nein, sowas traue ich ATMEL nicht zu, aber andererseits, wer will schon jahrelang immer mit denselben zwei Dingern rummachen, während 126 weitere nur darauf warten, angefasst zu werden!)
Deshalb verteilt das Programm die Schreiblast auf alle 128 Speicherzellen. Pro Runde finden jetzt zwar 4 Schreibzugriffe statt (alte Werte mit $FF überschreiben, neue Werte in die darauffolgenden 2 Bytes packen), aber durch den fortlaufenden Wechsel der Zellen wird jeder Speicherplatz um das 32-fache weniger beansprucht, als bei nur zwei genutzten Zellen. Das bedeutet; die Lebensdauer des EEPROM im Ganzen verlängert sich schlagartig auf etwa 3,2 Millionen Programmierzyklen, was in dieser Anwendung bis zum Ende aller Tage ausreichen dürfte.
Und überhaupt - Ein gut gepflegter EEPROM steigert den Wiederverkaufswert ;-)

Display-Ansteuerung: Die vier Portleitungen PD0 bis PD3 legen die Anode der ausgewählten SA39-11 auf High (Ziffern-Multiplex). Die sieben Portleitungen PB1 bis PB7 ziehen die Kathoden der Segmente a bis g (Dezimalpunkte ungenutzt) wahlweise auf Low, sodass das ausgewählte Segment der ausgewählten Ziffer leuchten kann.
Im normalen Anzeigemodus bleibt jede Ziffer für etwa 1 ms eingeschaltet stehen, das Tastverhältnis beträgt also 1:4 (25%) bei einer Flimmerfrequenz von 250 Hz. Im Schlafmodus des Controllers sind alle Display-Leitungen passiv (hochohmig) geschaltet, um jegliche Leckströme auszuschließen.

Zifferneingabe: Die zusätzliche Nutzung als Alarmgerät war ursprünglich nur eine diffuse Idee und hat erst konkrete Formen angenommen, nachdem sich die eigentliche Mesusa-Funktionalität schon monatelang bewährt hatte. Die Eingabemethode musste also mit dem auskommen, was an Hardware vorhanden war: Display und Tür-Schalter. Die Bedienung ist weiter oben beschrieben. Anzumerken ist noch, dass die Eingaberoutine erst alle vier Ziffern zwischenspeichert, bevor die Codeprüfung stattfindet. Weder durch EM-Abstrahlungen noch über Power-Analysis ist es möglich, schon während der Eingabe festzustellen, ob eine soeben eingegebene Ziffer richtig oder falsch ist.

Energiesparmodus (Jumper 1): Die Energiespar-Funktion wird per Hardware-Steckbrücke J1 konfiguriert. Normalzustand (also kein Energiesparen), ist ein gesetzter J1 (PA1 auf Low). Ein offener J1, also High-Pegel an PA1 aktiviert verschiedene Energiesparmaßnahmen an einigen Stellen des Programms. Insbesondere wird das Tastverhältnis der LED-Ströme nochmals halbiert (Einfügen von 4 ms Dunkeltastung). Die Anzeige erscheint dann nicht mehr ganz so hell, verbraucht aber auch nur noch halb soviel Strom. Bei Verwendung der hocheffizienten roten Siebensegmentanzeigen und unter hoher Versorgungsspannung (4,5...5,5V) lässt sich mit dieser Software-Maßnahme der Anzeigestrom drosseln, ohne dass die Vorwiderstände vergrößert werden müssten.

Aktivierung (Aufwecken):
Das Öffnen des Schalters bewirkt einen High-Pegel auf der Portleitung PB0 und löst einen Pin-Change-Interrupt aus, welcher den Controller in jedem Fall aus dem Schlafmodus aufweckt. Unmittelbar danach schaltet das Programm diese Interruptquelle ab, um unkontrollierte Beeinflussungen durch weitere Schalterspiele oder eingefangene Störimpulse zu vermeiden.

Deaktivierung (Schlafmodus):
Das aktive Programm entscheidet, wann es wieder Pin-Change-Interrupts zulässt und in den Schlafmodus zurückkehrt. Dazu fragt das Programm die Portleitung PB0 per Polling, also auf klassische Weise ab. In der Funktion als Türwächter führt das Schließen des Schalters in der Regel zur (zeitverzögerten) Rückkehr in den Schlafmodus. In der Funktion als Alarmgerät wird der Schalter zunächst für die Bestätigung des Authentifizierungscodes genutzt. Ferner gibt es Timeouts, die ebenfalls nach maximal einer Minute die Rückkehr in den Schlafmodus veranlassen. (Schont die Batterie bei Versagen des Schalters.)

Sicherheit und Schutz der Firmware:
Alle bisherigen Sicherheitsüberlegungen sind selbstmurmelnd davon ausgegangen, dass das System nicht mit vertretbarem Aufwand im Sinne des Angreifers manipuliert werden kann, weder im Vorfeld (Ansprechen verhindern) noch im Nachhinein (bereits registriertes Ereignis löschen und vorherigen Status wiederherstellen).
Zur Sicherheit gegen Manipulationen im Vorfeld wurde weiter oben schon einiges gesagt.
Angriffe auf die Firmware wären aus der Sicht eines Angreifers erforderlich, wenn eine bereits gelegte Spur wieder beseitigt werden soll. Ein Zugriff auf die Firmware eines ATtiny2313 ist nur über die gewöhnliche SPI/ISP-Schnittstelle oder über Hochvoltprogrammierung denkbar. Wenn aber der Controller in der vorgeschlagenen Platine direkt eingelötet ist, sind diese beiden Möglichkeiten bereits technisch blockiert, da die Reset-Leitung dauerhaft an Vcc liegt. Dieser Schutz dürfte für die allermeisten Anwendungszwecke vollkommen ausreichen.
Wer allen Ernstes damit rechnet, dass ein Gegner das Gehäuse aufschrauben und den Controller ziehen oder auslöten würde, der kann natürlich noch zwei Schritte weiter gehen, und die Firmware mit restriktiven Lockbits und einem passwortgeschützten Bootloader fälschungssicher machen. Jede Manipulation, sei es durch Neubeschreiben oder Austausch des Mikrocontrollers, ist mit dieser Ausstattung zu 100 Prozent nachweisbar.
Ein rational denkender Gegner wird vermutlich eher von der Idee des "spurlosen" Zugriffs absehen, als sich auf technische Spielereien einzulassen. Mit weniger diskreten und offen feindseligen Aktionen ist zu rechnen...
Unterschätze nie deine Gegner! Wenn du mit irrsinnigen Kopfschmerzen aufwachst und nicht mehr weißt, wie du nach Hause gekommen bist, geschweige denn, wie deine letzte Codezahl gelautet hat, dann müssen das nicht immer die Nachwirkungen einer geilen Partynacht gewesen sein...



Nach oben | Index


Tipps

Tür-Schalter, allgemein: Der Schalter muss bei geschlossener Türe geschlossen sein. Das ist die in der Alarmtechnik weit verbreitete "NC"-Konfiguration (normally closed), die klassische Ruhestromschleife.
Anscheinend geht als Tür-Schalter alles, was robust genug ist und sicher schaltet. Probleme mit dem sehr niedrigen Schleifenstrom (Mikroamperes) waren in meinen Testaufbauten nie aufgetreten. Auch zeigten diverse Standardschalter keinerlei Sensibilität für Erschütterungen, doch das ist zumindest teilweise auch der gut "entstörten" Eingangsbeschaltung zu verdanken. Im Zweifelsfall ist es aber sicher besser, ein Schaltprinzip zu wählen, das "gekapselt" werden kann. Wie die Variante mit Reed-Schalter und Magnet.


Externe (Reed-)Schalter:
An X2 auf der Mesusa-Platine können wir einen externen Tür-Schalter (oder eine Serienschaltung mehrerer solche Schalter) vorsehen. Die gewöhnlichen Reed-Schalter sind "NO" (normally open), aber der Normalzustand in so einer Tür-Installation ist ja, dass der Magnet anwesend ist und den Reed-Schalter normalerweise schließt. Um weitere Verwirrung wegen NO und NC zu vermeiden: In dieser Anwendung benötigen wir einen Schalter, der geschlossen ist, wenn auch die Tür zu ist.

Reed-Schalter extern - vorgefertigtes Set (Foto: jt)
External Reed door mounting sample (Photo: jt)

Reed-Türschalter: Bei Elektronikversendern oder auf Versteigerungsplattformen gibt's mitunter für wenige Euros komplette Sätze aus Reed-Schalter und Permanentmagnet für den "Alarmanlagenbedarf". Diese sind im Allgemeinen zur Montage an Fenstern oder Türen vorgesehen. Zum Beispiel sowas hier: Reichelt FF50-WS


Handhabung von Reed-Röhrchen:
Die allgemeinen Warnhinweise zum Umgang mit nackten Reed-Röhrchen sind keinesfalls übertrieben. Dreh- und Biegekräfte an den Anschlussenden mögen sie überhaupt nicht. Hat es erst einmal geknirscht, dann ist der Glaskörper wahrscheinlich schon undicht geworden und Luftsauerstoff kann eindringen. Dann altern die Kontaktzungen leider doch und das Teil ist über kurz oder lang hinüber.
Löten: Anschlüsse möglichst lang belassen, Lötstellen weit ans Ende setzen. Anschlüsse beim Biegen dicht vor dem Glaskörper mit einer Flachzange festhalten, damit Torsionskräfte nicht am Glaskörper angreifen.


Versiegeln von selbstkonfektionierten Reed-Schaltern:
Das komplette Umschließen mit einer Vergussmasse macht einen Reed-Schalter witterungsfest und wartungsfrei, zumal bei den niedrigen Strömen keine sonstigen Verschleißerscheinungen zu erwarten sind. Das Versiegeln geht wider Erwarten auch mit Heißkleber. Die Befürchtung, dass das Röhrchen durch die Hitze platzen könnte, war offensichtlich unbegründet. Als bekennendes Weichei trage ich natürlich bei solchen Arbeiten trotzdem immer eine Schutzbrille. Kommt sicher günstiger, als ein neues Auge.


Magnete:
Mit billigen Eisenferrit-Magneten (die Grau-Schwarzen) sollte der Abstand nicht mehr als ca. 1 cm betragen, wenn der Magnet ungefähr gleich groß ist, wie das Reed-Röhrchen.
Mit den viel stärkeren Neodym-Magneten sind Auslöse-Strecken bis zu mehreren Zentimetern möglich. Für optimale Empfindlichkeit sollten wir den Reed-Schalter immer "längs der Feldlinien" anordnen. Schön zu sehen hier.
Auch diverse Magnete "aus der Bastelkiste" (bspw. Voice-Coil-Magnete aus alten 3,5-Zoll-Festplatten) eignen sich ganz vorzüglich für diesen Zweck und erreichen erstaunliche Reichweiten.


Befestigung: Auf glatten Flächen halten Klebelösungen (z.B. 'Powerstrips' eines namhaften Herstellers) echt gut!

Batterielebensdauer:
Der Prototyp lief mit einer bereits gebrauchten LiMn-Zelle (3V, CR2032, alte BIOS-Batterie!) schon ein halbes Jahr, bevor die Anzeige definitiv zu finster wurde.
Die folgenden Beispielrechnungen gehen davon aus, dass die zu überwachende Tür am Tag ungefähr 3 Mal genutzt wird, die Mesusa also 6 Mal aktiviert wird, und zwar unter voller Ausnutzung des Timeout von je 1 Minute. Dabei handelt es sich also eher um ein  Worstcase-Szenario, denn mit einiger Routine wird man selten mehr als 20 Sekunden pro Tür-Aktion brauchen. Wie die Messwerte und Rechnungen zeigen, besteht hier ohnehin noch jede Menge Spielraum.
Der Stromverbrauch im Alarmmodus dürfte sich in derselben Größenordnung bewegen, solange kein Alarm ausgelöst wird. Hauptstromverbraucher ist immer das Display.
Gehen wir mal von 6 Minuten Anzeigedauer pro Tag aus (leichter zu rechnen ;-). Die Verbrauchswerte stellen sich in der Standardschaltung mit 220-Ohm-Widerständen und roten Siebensegmentanzeigen etwa so dar:

Nach oben | Index


Galerie

                                             


Es begann einmal mehr
als Drahtverhau auf dem Steckbrett...
(Nein, das ist keine
perspektivische Verzerrung.
Das da vorn ist die
dicke Leuchtanzeige
vom LED-Uhrenwecker.)

Testschaltung auf Lochraster
(Bestückungsseite)

Testschaltung auf Lochraster
(Rückseite): direkte Vorlage
fürs Layout

Erste Platine mit dem
vorläufigen Layout
(und kleinen Korrekturen)
Erste Platine,
Bestückungsseite

Improvisierte
DIL-10-Fassungen
für die Display-Bausteine


Einbau in Kunststoffgehäuse.
Türmagnet weit ab,
trotzdem sehr zuverlässig.


Einsatz an einer Wohnungstür (gelupft, mit Codeanzeige)



Nach oben | Index


Anmerkungen

Das soll ein Sicherheitssystem sein?

Nein, soll es nicht. Diese Mesusa ist kein echtes Sicherheitssystem, da sie das Verbrechen nicht verhindern kann. Sie kann aber, als unbestechliche Komponente, Teil einer Sicherheitsstrategie in Friedenszeiten sein. Nicht mehr, aber auch nicht weniger.
Wer einen unbefugten Zugriff effektiv vereiteln will, müsste schon zu drastischeren Maßnahmen greifen, als akustische Alarme und Telefonwählgeräte. Schade nur, dass die physisch konkretesten Lösungen, die dann auch einen deutlichen Abschreckungseffekt hätten, in diesem unserem Land kaum genehmigungsfähig sind. (Elektrozäune, Fangnetze, Selbstschussanlagen, Laser-Sperrgitter a la 'Resident Evil'... ;-)


Alternative Anwendungen 


Nachteile dieser Methode


Externe Komponenten

Die Kopplung an externe Sicherheitstechnik ist nicht vorgesehen, zumal das Mesusa-Konzept auf Unabhängigkeit ausgelegt ist.
Die Idee einer Open-Source-Alarmzentrale habe ich vorgemerkt! Das wird ein anderes Projekt.


Haftungsausschluss

Obwohl es sich mal wieder um eine sorgsam ausgearbeitete und getestete Erfindung handelt, liegt die Verantwortung für etwaige Fehlfunktionen, Risiken, materielle oder mentale Schäden ohne Ausnahme beim jeweiligen Nachbauer und Nutzer.


Lizenz

Das Projekt "Mesusa" (Hardware, Firmware, Begleitdokumentation) ist eine Kreation von Julien Thomas, die er der Weltgemeinschaft unter den Bedingungen der Creative Commons - Namensnennung - Weitergabe unter gleichen Bedingungen kostenlos zur Verfügung stellt.
Jedem steht es frei, dieses großartige Konzept in der vorgeschlagenen oder einer abgewandelten Form einzusetzen, weiterzuentwickeln oder sogar kommerziell zu nutzen, solange mit den Lizenzbedingungen vereinbar. Verbesserungsvorschläge nehme ich gern entgegen. Ich behalte mir vor, Spezialversionen des Projektes unter anderslautenden Lizenzen zu veröffentlichen. Bausätze und Platinen wie gehabt nur von Privat an Privat.


Nach oben | Index


Download



Links

  1. Altbewährte Low-tech-Verfahren ... http://www.geo.de/info/11740-bstr-ausspioniert

  2. Wikipedia zu Reed-Schaltern:
    http://de.wikipedia.org/wiki/Reedschalter

  3. Datenblatt zum ATtiny2313:
    http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2543-AVR-ATtiny2313_Datasheet.pdf

  4. Wikipedia zur Mesusa:
    http://de.wikipedia.org/wiki/Mesusa

  5. LED-Siebensegmentanzeige Fa. Kingbright, Datenblatt SA39-11SRWA (high efficiency red):
    http://www.us.kingbright.com/images/catalog/SPEC/SA39-11SRWA.pdf

  6. PDF Xilinx Application Note 052 zu LFSRs - Ein Klassiker, insbesondere Seite 5:
    http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf

  7. Alle Bauteile wurden bei Reichelt beschafft.


Nach oben | Index


07/2015, 01/2016, 07/2017