Verschlüsselung- kann man das so machen?

Gast #3968718
Lesenswert?

Hi,
Wie im Betreff zu sehen, möchte ich gern was verschlüsseln.
Und zwar will ich von ne embedded Gerät über HTTP Daten an eine Webseite 
schicken. Das für MICH einfachste ist die GET Methode wobei aber alle 
Werte in Klartext mit der URL übertragen werden. Daher würde ich die 
Daten n bissl verschlüsseln wollen, zumal auch User und PW mit dabei 
sind. Da ich aber nicht so viel Rechenleistung zur Verfügung habe, hab 
ich mir folgendes überlegt:
Statt ...?name=wert&name2=wert2&... Alles nach dem Fragezeichen mit 
einem einfach Algorithmus zu verschlüsseln ( wird gut lang, 23 
Wertepaare )
Der verwendete Schlüssel wird nach der Verschlüsselung an nur Sender und 
Empfänger bekannten Positionen im GET-String untergebracht
Die letzten 10 oder 100? Schlüssel werden von der Webseite nicht mehr 
akzeptiert
Und vor dem Verschlüsseln wird noch eine Checksumme an die zu 
verschlüsselnden Daten angehängt und die erfolgreiche Entschlüsselung zu 
überprüfen.

Irgendwie so hab ich mir das vorgestellt, macht das Sinn oder ist das zu 
schwach?
Wie gesagt es sind zu viele Daten/Zeit und zu wenig Rechenpower für AES.

Für andere Ideen oder Fragen, wär ich auch offen und dankbar.

MfG Hans
Gast #3968740
Lesenswert?

Ui das ging ja fix ;)
Die Hintergedanken waren:
evtl mehrere Geräte an eine Webseite
Durch die wechselnden Schlüssel werden Attacken durch wiederholen 
erkannt
Da Schlüssel und posi wechseln wird es schwerer Muster zu erkennen.
Aber hab grad gesehen, das bei GET laut spec bei 255 Zeichen Schluss 
ist.
Jup, isn mega2560/16mhz an nem wiznet.
#3968747
Lesenswert?

Wenn es nur darum geht Werte zu übertragen und festzustellen ob diese 
verändert wurden dann könnte man auch HMAC 
(http://de.wikipedia.org/wiki/Keyed-Hash_Message_Authentication_Code) 
benutzen. Du hast aber auch noch was von Benutzername und Passwort 
geschrieben. Eventuell kann man hier auch ein einfaches 
Challenge-Response Verfahren benutzen. Für beides braucht man keine 
echte Verschlüsselung sondern nur eine Hash-Funktion.
Gast #3968788
Lesenswert?

Hallo,

Rufus Τ. Firefly schrieb:
> Das dürfte das nicht spezifizierte "embedded Gerät" möglicherweise
> überfordern, könnte ja ein AVR sein ...

Da gibt's doch was (nein, nicht von Ratiopharm):

http://avrcryptolib.das-labor.org/trac/wiki/AES

Keine Ahnung, ob (und wie performant) das funktioniert, aber wenn ich 
mich recht entsinne, war eines der Designziele des AES-Algorithmus ein 
besonders geringer Ressourcenverbrauch, um ihn auch in limitierten 
Umgebungen wie Smartcards einsetzen zu können. Ein weiterer Vorteil 
dieses gebräuchlichen Algorithmus ist, daß es serverseitig fertige 
Entschlüsselungsroutinen gibt.

HTH,
Karl
Gast #3968994
Lesenswert?

> Hans M. schrieb:
> Aber hab grad gesehen, das bei GET laut spec bei 255 Zeichen Schluss
> ist.

Wo denn?
Kenne nur Empfehlungen aber kein hartes Limit.

Wenn du alle beteilgten Parteien unter Kontrolle hast gibt es kein 
Limit, aber dann bräuchtest du wohl keine Verschlüsselung.

Ansonsten eben SSL.
#3969025
Lesenswert?

Rufus Τ. Firefly schrieb:
> NSA schrieb:
>> Und wie lange braucht ein moderner Computer 254 Möglichkeiten
>> durchzuprobieren?
>
> Mit einem 254 Zeichen langen String kann man nur 254 Möglichkeiten
> codieren?
>
> Faszinierend.

Nein, aber man hat nur (254-Schlüssellänge) Positionen, an denen der 
Schlüssel einkodiert sein kann (der OP will ihn ja an einer "geheimen" 
Position mitschicken).


Wenn ich den OP richtig verstanden habe, dann will er Benutzername, 
Passwort und ein paar Messwerte übertragen. In diesem Fall ist eine 
einfache, halb-sichere Methode, den Benutzernamen im Klartext zu 
übertragen und die Messwerte + Checksumme mit dem Passwort symmetrisch 
zu verschlüsseln. Der Server kann dann mit dem hinterlegten Passwort 
entschlüsseln und über die Checksumme feststellen, ob der Schlüssel 
(also das Passwort) korrekt war.

Allerdings hängt auch hier die erreichbare Sicherheit von der Wahl und 
Implementierung des Verschlüsselungsalgorithmus ab (und natürlich von 
dem Passwort, welches möglichst nicht woanders genutzt werden sollte, 
falls sich die Implementierung als anfällig erweist).

Wenn der OP allerdings auf dem Server keine Benutzerverwaltung möchte 
(bzw. keine Passwörter hinterlegen möchte), dann sollte er sich mit den 
Methoden des sicheren Schlüsselaustausches vertraut machen. Um das 
Mithören des Schlüsselaustausches zu verhindern muss dann eine 
asymmetrische Verschlüsselung zumindest für den Schlüsselaustausch 
implementiert werden (wobei hier die Rechenzeit eher kein Problem 
darstellt, da dies ja nur beim ersten Anschluss an den Server ausgeführt 
werden muss).

Schöne Grüße,
Martin
Persönliche Seite #3969030
Lesenswert?

Hans M. schrieb:
> Der verwendete Schlüssel wird nach der Verschlüsselung an nur Sender und
> Empfänger bekannten Positionen im GET-String untergebracht

Also ist dann ja die Position der Schlüssel (da nur diese Geheim ist) 
und vermutlich durch Analyse sehr leicht zu ermitteln.

Außerdem ist dein Verfahren nicht gegen Replay und MITM Attacken 
gesichert.

WENN du das also willst (z.B. für den Zugriff von außen) wäre es wohl 
besser einen SSL-Proxy davorzuschalten der die Verschlüsselung übernimmt 
und die Daten entschlüsselt weiterleitet.

Wobei man sich gerade bei GET auch Gedanken machen muss über so Dinge 
wie Browserhistory etc.
Gast #3969036
Lesenswert?

wie wärs damit?

sender und empfänger haben ein shared secret, z.b. eine bytefolge 
(32byte).
der sender schickt dem empfänger eine zufällige bytefolge (auch 32 
byte), der empfänger concateniert diese 32byte mit den 32byte des shred 
secret und bildet aus den jetzt 64 byte einen hash (sha1-256, je nachdem 
wie breit die nutzdaten sind).
in diesen hash xored der empfänger die daten und schickt das ergebnis 
dem sender zurück, der das entschlüsseln kann.
Gast #3969038
Lesenswert?

Alex W. schrieb:
> Warum bastelst Du dir nicht noch nen kleinen xMega dazu welcher dir den
> String mit AES verschlüsselt?

weil er dann immer noch das gleiche Problem hat - den 
Schlüsselaustausch.

AES sollte auf jeden Atmel möglich sein, wenn es nur um ein paar Bytes 
geht.
#3969039
Lesenswert?

Erstaunlich wie mit den Resource verfahren wird. Eine Verschluesselung 
muss nicht absolut sicher sein, sondern nur so sicher, dass es niemand 
probiert. Oder fast niemand probiert. Wie gut auch immer die Benutzer 
verknuepft sind.

Fuer ein paar nichtssagende Temperaturen sollte ein dynamisch 
generiertes Polynom eine genuegend gute Verschluesselung bieten. Ein 
statisches XOR reicht nicht wenn der Benutzer die Temperaturen, sprich 
des Sensor manipulieren kann.

Dasselbe wie mit dem Baeren, vor dem man wegrennen muss. Man muss nicht 
schneller wie der Baer sein, nur schneller wie der Kollege.
Das Haus muss nicht absolut sicher gegen Einbrecher sein, nur sicherer 
wie das Haus des Nachbarn.

:-)
#3969057
Lesenswert?

Im Zeitalter wo alle nen DynDNS laufen haben, wir wäre es auf der 
Webseite zu prüfen, welche IP in deiner DynDNS hinterlegt ist und diese 
IP mit dem Absender der Daten zu vergleichen?

Dann sendest du zwar immernoch alles im Klartext (wenn es auf einer 
Webseite landet, wird das aber ja eh jeder abrufen können?) aber der 
Server kann immerhin den Absender "überprüfen"... Und Daten von anderen 
IPs kannst du ja einfach ablehnen bzw. so tun als würdest du sie toll 
finden und dann verwerfen - je nachdem ob du überhaupt einen 
Rückgabewert hast...
Gast #3969126
Lesenswert?

Es gibt auch richtige Cipher, die wenig Ressourcen (RAM/Flash) brauchen, 
z.B. XXTEA. Nimm doch den, der hat auch variable Blockgröße, daher ist 
ein mode of operation nicht zwingend erforderlich. Du solltest aber noch 
einen IV/Nonce nutzen und Authentifizierung wäre auch nicht übel. Am 
besten bekannte Verfahren nutzen.

Kryptographie ist äußerst komplex und ohne besondere Kenntnisse sollte 
man nie selbst irgendwelche "Lösungen" entwickeln.
#3969208
Lesenswert?

Solange es nur eine Lösung ist, die 1-2 mal für etwas wenig wichtiges 
genutzt wird, ist Security by Obscurity kombiniert mit etwas trivialem 
wie XOR Verknüpfung gar nicht so schlecht - sogar besser als eine nicht 
mehr zeitgemäßer Standard mit zu geringer Schlüsselbreite.
#3969313
Lesenswert?

Ich habe XTEA mal im Simulator getestet. Damit das ganze verwertbar ist 
muss es mit Base64 codiert werden.

Beispiel:

Key: 1234567812345678
Text: Test 1 2 3 4 5 6 7 8
Base64ChipherText: rnFZJgJ6qL2PCLslL22Fq4vKeYw2V:c;pqRiIf3esCQ=

Bei einem PHP-Skript auf der Seite 
http://www.php-einfach.de/sonstiges_generator_xtea.php#ausgabe kann man 
XTEA mit Base64 ebenfalls ver und entschlüsseln.

Das Ergebnis von einem Bascom-Crypt ist aber nicht dekodierbar 
(umgekehrt auch nicht).

Wo liegt der Fehler?

Ist : rnFZJgJ6qL2PCLslL22Fq4vKeYw2V:c;pqRiIf3esCQ=
Soll: AAQAQ1S5A1gyh1TS0/sFGopLsIplkL2h4kwxO3ukwto=

Wo liegt der Unterschied?
Gast #3974050
Lesenswert?

Hi und wieder da ;)
Sry, war mit lesen und testen der Vorschläge beschäftigt.
Zu Erst einmal vielen Dank für die vielen Antworten!
Nun noch etwas zum Hintergrund:
Zur Webseite sollen ein Arduino ( in C programmiert mit Wiznet Chip ) 
und ein HiLink HLK-RM04 (Openwrt + LUA Script) Verbindung aufbauen und 
Temperaturdaten schicken. Die XTEA Geschichte geht mit dem Mega und php 
ganz gut, XTEA und LUA nicht so. AES CBC mit Mega ( bissl zu langsam 
aber hinnehmbar ) aber mit LUA passt. Nun ist aber das Problem, das PHP 
kein "native" AES256 kann.
Mit Mega und LUA funktioniert AES_enc und AES_dec. Auch untereinander, 
nur in verbindung mit php kommt Mist raus. Die Standart mccrypt macht 
wohl iwie anderes AES... :(
Aber ich bleib dran, iwie klappt das schon ;)
Gast #3974051
Lesenswert?

Ach du und der ursprüngliche Plan war den Schlüssel nicht am Stück mit 
zu schicken, sondern ihn in 8Bit zu zerlegen und im POST_String an dem 
Sender und Empfänger bekannten Positionen zu hinterlegen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren