Forum: Mikrocontroller und Digitale Elektronik Uhrzeit verschlüsseln und entschlüsseln


von Alex D. (dreamdancer)


Lesenswert?

Hallo zusammen,

für ein Spiel benötige ich eine zündende Idee:

Irgendwo soll ein Gerät versteckt werden wo eine Funkuhr drin tickert. 
Ob die nun Marke Eigenbau ist oder gekauft ist egal. Hauptsache irgendwo 
kommt ein Datums- und Uhrzeitsignal an. Per Knopfdruck soll nun das 
aktuelle Datum und die aktuelle Uhrzeit in einen Zahlencode codiert 
werden und der Code sollte über ein Display ausgegeben werden. Der 
Spieler macht sich mit dem Code dann auf zur zweiten Station.

In der 2. Station sollte ebenfalls eine Zeitschaltuhr drin tickern. Die 
Kiste verfügt über ein Eingabefeld (0-9, #, *). Hier muss dann der Code 
eingegeben werden welcher im Gerät entschlüsselt und mit der aktuellen 
Uhrzeit verglichen wird. Hat die Person weniger als 2 Stunden gebraucht 
um von der einen zur anderen Station zu kommen gibt das Gerät über ein 
Display eine Textinfo aus. War die Person zu langsam gibts ebenfalls 
eine Textinfo, aber eben eine andere.

Im Idealfall sollten beide Kisten extrem wenig Strom ziehen, da diese in 
der "freien Wildbahn" ausgelegt werden sollen und ich keine Lust habe 
jeden Monat die Baterien zu wechseln.

Kann sich da jemand was vorstellen? Alternativ wäre auch der Einsatz 
einer SD-Karte möglich auf die ein Zeitstempel geschrieben wird oder der 
Einsatz der RFID-Technik denkbar.

von T. (Gast)


Lesenswert?

Hallo.

Und wo liegt nun das Problem, sowas zu bauen oder zu programmieren ?

Gruss,
T.

von ich (Gast)


Lesenswert?

Muss der Spieler sich den Code aufn Zettel schreiben? oder per USB-Stick 
oder per SD-Karte (Beides ein wenig übertrieben finde ich^^)

Ich denke mal dein Problem ist es, die Uhrzeit zu Codieren und 
anzuzeigen?

von Herold (Gast)


Lesenswert?

Denk dir irgendeinen Code aus!

Nimm die Zeit und addiere irgendwas zu jeder Zahl dazu, oder so...kannst 
ja auch mehrere Verschlüsselungen erfinden - dann schickste einen Code 
mehr mit, welcher beeinhaltet, was du für einen Code verwendet hast.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> für ein Spiel benötige ich eine zündende Idee:

Hoffentlich nicht. Bei uns hier reagieren die Oberen ganz nervös auf 
herrenlos herumliegende tickende Kästchen :-)

von Edding (Gast)


Lesenswert?

T. schrieb:
> Und wo liegt nun das Problem, sowas zu bauen oder zu programmieren ?

Vermutlich darin, die Zahlenkombi kurz genug zu halten.

Kaum ein "Spieler" wird Freude daran haben, einen MD5-Hash einzutippen.

Also: Zeit in kompaktes Format umrechnen, z.B. "Anzahl der verstrichenen 
Viertelstunden seit dem 1.1. 00:00".
Passt so noch in einen uint16 . Wiederholt sich zwar jedes Jahr, das ist 
aber vermutlich egal. (ggfs: Wiederholung jeden Monat, je nachdem für 
wie Geduldig du deine Spieler hältst)

XOR mit irgendwas, um fortlaufende Zahlen zu vermeiden, dann davon 
CRC/Quersumme/... und hinten dran hängen.

ggfs crc nicht von dem timestamp sondern von "timestamp + key"...

Sollte sicher genug sein, solange keine Hobby-Cryptoanalytiker 
mitspielen... und auch die brauchen viel, viel Geduld, da ja nur alle 15 
Minuten ein neuer Datensatz zur Analyse anfällt.

von ich (Gast)


Lesenswert?

Kannst auch die Sekunden seit den 1.1. "Zählen" (also [Unixtime] - 
[Unixtime vom 1.1.2011]) und dann einen Cäsar-Code verwenden.. Also 
Jetzt wären 2299680 Sekunden vergangen. Eine kleine Tabelle:
0 -> AF
1 -> GT
2 -> KL
3 -> RB
4 -> JQ
5 -> CD
6 -> YE
7 -> MX
8 -> IZ
9 -> PS

Also wäre der Code: KLKLPSPSYEIZAF - KL KL PS PS YE IZ AF

Denke da gibts tausen Möglichkeiten. Darf blos keiner Wissen, wie es 
geht.

Edding schrieb:
> Kaum ein "Spieler" wird Freude daran haben, einen MD5-Hash einzutippen.

Und kaum ein µC wird es schaffen, den wieder zurückzu-hashen ;)

von Nnaturbursche (Gast)


Lesenswert?

das Problem wird ein µC sein, der mehrere Wochen/Monate mit einem Akku 
betrieben werden kann!

evt. ein MSP430 der mit einem externen Quarz langsam das Datum 
ermittelt.
ein MSP430 benötigt lt. Datenblatt bei 1MHz 330µA, bei 1 KHz wird es 
sicherlich nochmal deutlich darunter liegen!

Dazu nen alten LiIo-Akku aus dem Handy!

Das Dispaly wird auch "problematisch", evt. eine 7-Segmentanzeige die 
Deinen Ausgabecode durchtaktet.
Also 1x auf den Taster drücken und die Anzeige schält ein und bringt 
jede Sekunden eine Zahl, bis der code komplett durch ist.
..oder Flüssigkristall, ist aber Wetterempfindlich!

Ist für Geocaching, richtig ;-)

von Vlad T. (vlad_tepesch)


Lesenswert?

urhzeit in einen Satz umwandeln
nullsechsvierfünf   6:45
und per sms-tastatur in Zahlen codiert wird.
damits immer gleich lang wird die Zahlwörter auf länge 4 festlegen 
(längere abschneiden)->
"nullsechvierfünf"
 6855732484973863

wahlweise noch die stellen verwürfeln, immer abwechelnd

nsvfueiülcenlhrf
6783834652965473

muss halt schaun, ob die dekodierung eindeutig wäre:
null  6855
eins  3467
zwei  9934
drei  3734
vier  8437
fünf  3868
sech  7324
sieb  7437
acht  2248
neun  6386

sind eindeutig, wobei die zuordnung beliebig ist.
man könnte natürlich noch die Sekunden dazumachen


Das ganze ist zwar nicht sicher, aber jemand der das knackt, hat es auch 
verdient (den nächsten Cache zu finden?)

von Martin (Gast)


Lesenswert?

Das ist mein Ansatz:

Der Spieler der zum Kontrollpunkt, drückt eine Taste und erhält vier 
Ziffern, die seine Ankunftszeit (auf die Minute genau) darstellen.

Im Controller sind eine Reihe von 4stelligen (echten) Zufallszahlen 
abgelegt. Die gleichen Zufallszahlen sind in der 2. Station abgelegt. 
Die Zufallszahlen werden mit der Uhrzeit verexklusivodert.

Es ist auch möglich, dass jeder Spieler eine 4stell. Zahl eingibt, die 
ebenfalls mit verexklusivodert wird.

Uhrzeit             1 2 0 1
Zufallszahl         3 4 5 7
Spielerkennung      0 0 7 0
                   ---------
Ergebnis
                   =========

Das Ergebnis lasse ich zur Übung frei.

von Vlad T. (vlad_tepesch)


Lesenswert?

Nnaturbursche schrieb:
> ein MSP430 benötigt lt. Datenblatt bei 1MHz 330µA, bei 1 KHz wird es
> sicherlich nochmal deutlich darunter liegen!

im powerdown ist der im nano-Bereich, wennich mich nicht täusche, mehr 
sorgen würde ich mir um den DCF777 dekoder machen.
wobei das eventuell gar nicht notwendig ist:

- kleine Platine mit RTC und Batterie CR2032 - Lebensdauer: rund 5 Jahre
- kleiner Controller, der nur bei Tastendruck mit Strom (seperater Akku) 
versorgt wird, die RTC-ausließt und auf dem Display ausgiebt

Die uhren müssen ja nichtmal richtig gehen, solange sie gleich laufen.

man könnte auch eine Selbsterhaltungsschaltung dran bauen, die der Knopf 
auslöst.
Der µC zeigt alles an und schaltet sich selbst wieder ab.

die RTC lässt man ebenfalls diese schaltung mit einem Interupt 
aktivieren, so dass der µC einmal am Tag über ein DCF-Modul die Zeit 
holen kann.

von Peter D. (peda)


Lesenswert?

Wozu extra RTC?

Nen ATmega48P und 32kHz Quarz dranpappen, fertig.
Benötigt im Power-save nur 0,8µA!
Hält also ewig.

Dann bei Tastendruck mit Pin-Change aufwachen.
Unter Vollast braucht er dabei 600µA (3V/1MHz).
Und nach ner Weile wieder in Power-save und nur die 32kHz zählen.


Peter

von Alex D. (dreamdancer)


Lesenswert?

Vielen Dank für Eure Ideen. Jetzt bin ich schon mal etwas weiter.

Wie einige richtig erkannt haben ist es fürs Geocaching.

Der Code sollte nicht länger als 10 Stellen sein.

Sekunden sind nicht so wichtig.

Das Einzige was nicht sein darf, ist das jemand durch logisches 
Schlussfolgern schnell dahinterkommt wie der Code generiert wird. D.h. 
fortlaufende Zahlen sind tabu. Wenn man es nach ner Stunde rausbekommt 
wie der Code generiert wird ist mir das relativ egal.

von Vlad T. (vlad_tepesch)


Lesenswert?

Peter Dannegger schrieb:
> Wozu extra RTC?

stimmt.
wieder zu kompliziert gedacht

von Vlad T. (vlad_tepesch)


Lesenswert?

irgendwie müsste aber auch noch das Datum rein, oder?

von Naturbursche (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Wozu extra RTC?
>
> Nen ATmega48P und 32kHz Quarz dranpappen, fertig.
> Benötigt im Power-save nur 0,8µA!
> Hält also ewig.
>
> Dann bei Tastendruck mit Pin-Change aufwachen.
> Unter Vollast braucht er dabei 600µA (3V/1MHz).
> Und nach ner Weile wieder in Power-save und nur die 32kHz zählen.
>
>
> Peter

läuft die Uhrzeit im Power-save den weiter?, der MSP ist im Power-save 
auch bei 1,5µA, nur dachte ich dass er im Powersave auch den timer nicht 
mehr weiter zählt!

Ich fände ein Lösung mit einem time-chip wie den DS2417 eigentlich auch 
nicht schlecht, µC im Power-down und der DS2417 saugt so um die 200nA 
(nano!!, nicht milli!)

Dann hält der Akku wirklich ewig!

von Alex D. (dreamdancer)


Lesenswert?

Die Uhrzeit sollte korrekt sein und zumindest der Tag sollte mit rein. 
Wenn sich die Codes jeden Monat wiederholen tut das nicht weh. Aber ich 
hab mal gelesen, dass man die Uhrzeit und das Datum aus einem gekauften 
Funkwecker ziehen kann. Die halten doch normalerweise ewig und die 
dahinterhängende Technik müsste ja nur auf Knopfdruck anspringen und 
könnte dann über eine 2. Baterie versorgt werden.

Sekunden sind nicht so wichtig.

Das Einzige was nicht sein darf, ist das jemand durch logisches 
Schlussfolgern schnell dahinterkommt wie der Code generiert wird. D.h. 
fortlaufende Zahlen sind tabu. Wenn man es nach ner Stunde rausbekommt 
wie der Code generiert wird ist mir das relativ egal.

Wenn ich jetzt mal weiterfrage... Gibt es wen, der sich zutraut sowas zu 
basteln oder jemanden der mir eine Anleitung, Teileliste, etc. erstellen 
könnte oder der mir den Krams sogar basteln würde? Natürlich komme ich 
für die Materialkosten auf und würde noch ein kleines Trinkgeld 
drauflegen. Im Idealfall sollte derjenige aus dem Großraum Köln kommen 
und ebenfalls Cacher sein. Bei interesse bitte PN an mich. Ich hab bis 
jetzt nur mit so kleinen Attiny13V rumgespielt und mir einige 
Reaktivlichter gebastelt. Das hat auch super gefunzt. Aber für ein 
Projekt dieser Größe fehlt mir die Hardware (ich gehe nicht davon aus, 
dass man das mit einem Attiny13V realisieren kann) und der nötige 
Sachverstand.

von Peter D. (peda)


Lesenswert?

Naturbursche schrieb:
> läuft die Uhrzeit im Power-save den weiter?

Ja.
Allerdings muß die CPU alle 8s kurz mal aufwachen, um die höherwertigen 
Bytes zu zählen.
32kHz / 1024 (Vorteiler) / 256 (Timer 8Bit)


Peter

von ich (Gast)


Lesenswert?

Alex David schrieb:
> Der Code sollte nicht länger als 10 Stellen sein.
>
> Sekunden sind nicht so wichtig.
>
> Das Einzige was nicht sein darf, ist das jemand durch logisches
> Schlussfolgern schnell dahinterkommt wie der Code generiert wird. D.h.
> fortlaufende Zahlen sind tabu. Wenn man es nach ner Stunde rausbekommt
> wie der Code generiert wird ist mir das relativ egal.

Also wenn du bei meinem Vorschlag die Unixtime durch 60 teilst, hast du 
am Ende des Jahres (größte Zahl) eine 6-Stellige Zahl und somit 12 
Buchstaben (bei 2 Buchstaben pro Zahl). Es könnte theoretisch nur jemand 
dahinterkommen, der weiß, dass du die ZeitDIFFERENZ zum Jahresanfang 
nimmst, davon nur Minuten (/60) und welche Buchstaben du für welche Zahl 
nimmst. Selbst wenn er (wie auch immer) sagen kann, das in meinem Fall 
AF der 0 entspricht und das IZ der 8, muss er immernoch wissen, was die 
Zahl zu bedeuten hat. Ich habe jedenfalls keine Freunde, die das ohne 
weiteres machen würden.

von Matthias L. (Gast)


Lesenswert?

Bis wann muss das denn fertig sein?

von Vlad T. (vlad_tepesch)


Lesenswert?

ich schrieb:
> Also wenn du bei meinem Vorschlag die Unixtime durch 60 teilst,

auf jeden Fall müssen die stellen gemixt werden, damit sich nicht nur 
die letzte ändert.
Das könnte man auch abhängig von der Quersumme machen, damit sich immer 
andere Stellen ändern.
man nehme die unteren 3 (oder 4) bit der Quersumme und baue 8 (16) 
verschiedene mappingvorschriften

von Alex D. (dreamdancer)


Lesenswert?

Matthias Lipinsky schrieb:
> Bis wann muss das denn fertig sein?

So in den nächsten 2-3 Wochen hab ich gedacht...

Das mit der Unixzeit klingt ganz gut

von Matthias L. (Gast)


Lesenswert?

>So in den nächsten 2-3 Wochen hab ich gedacht...

Da bin ich raus... (Mind) Solange würde ich allein für den Entwurf und 
das Layout der (zwei) Hardwares brauchen...

von Alex D. (dreamdancer)


Lesenswert?

Matthias Lipinsky schrieb:
>>So in den nächsten 2-3 Wochen hab ich gedacht...
>
> Da bin ich raus... (Mind) Solange würde ich allein für den Entwurf und
> das Layout der (zwei) Hardwares brauchen...

Schade. Aber ich hab auch nicht wirklich ne Vorstellung davon, wie 
aufwendig sowas ist. Wenn das so ein imenser Aufwand ist dann müsste ich 
mir doch was anderes ausdenken....

von Vlad T. (vlad_tepesch)


Lesenswert?

naja, die Hardware hat man aber auch an 1 bis 2 Abenden auf lochraster 
aufgebaut, vorausgesetzt, man hat alle Teile.
Gehäuse wird schon wieder schwieriger.

Aber will man sowas dann wirklich in der Wildnis liegen lassen?
kannmir nicht vorstellen, dass das nicht doch irgendeiner mitnimmt.

Was mir noch einfällt:
man müsste eine art Checksumme über die Zeit bilden, damit man nicht 
durch wahlloses probieren eine gültige Zeit bekommt.

von Martin H. (Gast)


Lesenswert?

Man kann sowas schon in 2-3 Wochen bauen (inkl. debuggen) dann muss aber 
bissl Geld rausspringen. Wer macht sich denn schon in seiner Freizeit 
Stress?
Aber mal ganz ehrlich, wenn das Ding Monate lang halten soll, dann wirds 
auch Monate/Jahre lang liegen und dann kommts auf 1-2 Monate früher oder 
Später nicht mehr an!

Um den Spaß einfach, billig, und leicht herstellbar zu halten würd ich 
nen Mega48 mit möglichst langam taktendem Uhrenquarz laufen lassen, ein 
3€uronen schweres Display von eGay nehmen, dieses abschaltbar (mittels 
FET) an den Mega klatschen, einen Taster ran und gut ists.

Das ganze dann mit 2 Uhrenbatterien betreiben, oder wenn platz ist, auch 
mit was größerem und fertig!

Die Zeit würde ich dann nicht soo wild verschlüsseln.
Im Mega läuft eine UNIX-Zeit, aus der werden dann die Minuten seit 
beginn des aktuellen Jahres errechnet, das ganze mit einem "key" verXORt 
und schließlich die zahl auf 4 Stellen reduziert. [A-F,0-9] als 
4-stellige "Zahl" reichen für die minuten eines ganzen jahres ( 
26+10=36, 36^4=1679616, 365*34*60=525600 => reicht für 3 Jahre!) und der 
Nutzer muss sich 4 Stellen merken.
nur mit dem key muss man aufpassen, dass man beim XORen nicht eine Zahl 
größer 36^4 generiert...
Den Rest würd ich als level 3 nach LED-zum-blinken-bringen einstufen.

Und wenn alles getestet ist und funktioniert kannst den Spaß auch noch 
in Kunstharz eingießen und alles wird wetterfest. Das Display und der 
Schalter sollten halt noch rausstehen.

von Martin H. (Gast)


Lesenswert?

Vlad Tepesch schrieb:
> damit man nicht durch wahlloses probieren eine gültige
> Zeit bekommt.

Also bei 1679616 Möglichkeiten (wie ich vorschlug) sind dann in 2 
Stunden 120 gültige dabei. => Trefferwahrscheinlichkeit 7,144*10^-5 oder 
0,007144%
afaik ist das in etwa die Trefferwahrscheinlichkeit eines 
Lotto-Jackpots!

von Martin H. (Gast)


Lesenswert?

Sorry für meinen 3. Post.

Am Display konnte man dann auch noch eine Meldung ausgeben, wenn die 
Batteriespannung gering wird (ADC ist ja im MEGA48 drin), sodass ein 
Finder sich bei dir melden kann und dir mitteilen kann, dass die 
Batterie leer ist.
Und dazu eine Akku-kontroll-LED, dass keiner aus Frust das Ding kaputt 
macht weil er nur nicht weiß, dass nur der Akku leer ist.

Soweit mir bekannt, sind die Geocacher ja eine recht vertrauliche 
Gemeinde.

von Horst H. (horha)


Lesenswert?

Hallo,

Da ist was durcheinandergeraten.
Martin H. schrieb:
> [A-F,0-9] als
> 4-stellige "Zahl" reichen für die minuten eines ganzen jahres (
> 26+10=36, 36^4=1679616, 365*34*60=525600 => reicht für 3 Jahre!)
[A-Z,0-9] ist gemeint.
XOR ändert nur minimal in aufeinanderfolgenden Minuten.

Ich würde zwecks Eingabe auch bei [0..9] bleiben wollen.
Das Jahr hat 365*24*60 = 525600 min oder fünfstellig alle 10 min (87600 
a 10 min)
Es gibt 120 Permutationen von 5 stellen, wenn man nur 100 benutzt 
braucht man nur 2 Stellen mehr dafür.
Damit könnte man zusätzlich eine Zahl aus 10 auswählen, die man darauf 
addiert.

Konstante
Perm0 = (3,5,3,1,2) // Ausgangspermutation
nur einmal zu Beginn, sollte im EeProm sein.
P = Permutationsnummer = 0.


MinJahr = die Minuten des Jahres berechnen.
Aus P eine Zahl zwischen 0..9 errechen und eine Zahl Delta aus einer 
Tabelle auswählen.
AusgabeZahl = MinJahr + Delta,
Solange AusgabeZahl >99999
  AusgabeZahl = AusgabeZahl- 100000
P = (p+k) modulus 100 (Hauptsache 100 und k sind teilerfremd)
Perm = Perm0
Bestimme die p.te Permutation von Perm ( nicht schwer 5 Tauschungen )
ordne die Ziffern der Ausgabezahl Perm entsprechend.
setze p zweistellig voran oder dahinter oder schieb sie an Pos 3 und 5 
oder sonstwas

die Umkehrung
p ermitteln-> Ausgabezahl,Perm berechnen -> Ausgangszahl umsortieren
aus p Delta bestimmen und abziehen, ist sie kleiner 0 dann 100000 
addieren
dann erhält man minJahr.

von Alex David (Gast)


Angehängte Dateien:

Lesenswert?

So. Ich wollte dieses Thema noch mal hervorkramen. Ich hab nun folgendes 
vor:

Es gibt 288 5-Minuten-Intervalle am Tag. Hierfür ist eine Tabelle im IC 
hinterlegt. Zu jeder Uhrzeit gehört eine feste 5-Stellige Zahl.

Um besser zu verdeutlichen was passieren soll hab ich eine Excel-Tabelle 
(ohne Makros) beigefügt. Meint ihr sowas ist mit weniger aufwand zu 
realisieren? Um den Einsatz eines Funkuhrmoduls wird man dennoch nicht 
drumherum kommen.

Auf den Einbezug des aktuellen Datums habe ich vollkommen verzichtet. 
Immerhin geht es hier nur um ein Spiel und nicht um einen Bank-Tresor.

von Harald Wilhelms (Gast)


Lesenswert?

Stefan B. schrieb:

>> für ein Spiel benötige ich eine zündende Idee:

> Hoffentlich nicht. Bei uns hier reagieren die Oberen ganz nervös auf
> herrenlos herumliegende tickende Kästchen :-)

Du meinst Kästchen, die erst ticken und dann zünden?
SCNR
Harald

von Harald Wilhelms (Gast)


Lesenswert?

Alex David schrieb:
> Hallo zusammen,
>
> für ein Spiel benötige ich eine zündende Idee:
>
> Irgendwo soll ein Gerät versteckt werden wo eine Funkuhr drin tickert.
> Ob die nun Marke Eigenbau ist oder gekauft ist egal. Hauptsache irgendwo
> kommt ein Datums- und Uhrzeitsignal an. Per Knopfdruck soll nun das
> aktuelle Datum und die aktuelle Uhrzeit in einen Zahlencode codiert
> werden und der Code sollte über ein Display ausgegeben werden. Der
> Spieler macht sich mit dem Code dann auf zur zweiten Station.

Nimm als Code doch einfach das originale DCF-Signal. Dafür gibts
massenhaft Software zur Entschlüsselung und andererseits nur wenig
Menschen, die diesen Code auswendig wissen.
Gruss
Harald

von Alex David (Gast)


Lesenswert?

Auch ne Möglichkeit. Allerdings m.M.n. schon wieder zu aufwendig.

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.