Hochladen
This commit is contained in:
parent
b654f2db36
commit
2ec1342d91
129
protokoll.txt
Normal file
129
protokoll.txt
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
Nachrichtaufbau:
|
||||||
|
================
|
||||||
|
|
||||||
|
u32 src_id // inserted by server
|
||||||
|
u32 dest_id // 0: to all
|
||||||
|
u16 size // min: 4
|
||||||
|
u8 payload[size]
|
||||||
|
|
||||||
|
payload[0]: type
|
||||||
|
KEY_LENGTH=32
|
||||||
|
|
||||||
|
Payloads:
|
||||||
|
=========
|
||||||
|
|
||||||
|
0-31 system messages (plaintext)
|
||||||
|
|
||||||
|
0 reserved
|
||||||
|
1 PING
|
||||||
|
size: 4
|
||||||
|
u8 type, pad1, pad2, pad3;
|
||||||
|
2 PONG
|
||||||
|
size: 4
|
||||||
|
u8 type, pad1, pad2, pad3;
|
||||||
|
3 ERROR
|
||||||
|
size: 4+len
|
||||||
|
u8 type, severity;
|
||||||
|
u16 code;
|
||||||
|
u8 msg[len];
|
||||||
|
|
||||||
|
32-63 server side messages (currently plaintext)
|
||||||
|
|
||||||
|
32 INIT // first msg from server to new connection
|
||||||
|
size: 4 + 4*count
|
||||||
|
u8 type, pad1;
|
||||||
|
u16 count; // including own; own id is in dest_id
|
||||||
|
u32 ids[count];
|
||||||
|
33 JOIN // sent by server; joining id is src_id
|
||||||
|
size: 4
|
||||||
|
u8 type, pad1, pad2, pad3;
|
||||||
|
34 EXIT // sent by server; exiting id is src_id
|
||||||
|
size: 4
|
||||||
|
u8 type, pad1, pad2, pad3;
|
||||||
|
|
||||||
|
64-95 initial setup messages (plaintext)
|
||||||
|
|
||||||
|
64 DH_SETUP // setup secure channel client->client
|
||||||
|
size: 4 + ?
|
||||||
|
u8 type, cryptotype, pad2, pad3;
|
||||||
|
remainder impl-dependend
|
||||||
|
65 DH_RETURN
|
||||||
|
size: 4 + ?
|
||||||
|
u8 type, cryptotype, pad2, pad3;
|
||||||
|
remainder impl-dependend
|
||||||
|
|
||||||
|
96-127 client-client setup messages (DH or old KEY encrypted)
|
||||||
|
|
||||||
|
96 AUTHORIZE
|
||||||
|
T.B.D.
|
||||||
|
97 KEY_CURRENT
|
||||||
|
size: 4 + KEY_LENGTH
|
||||||
|
u8 type, pad1, pad2, pad3;
|
||||||
|
u8 key[KEY_LENGTH];
|
||||||
|
98 KEY_NEW
|
||||||
|
size: 4 + KEY_LENGTH
|
||||||
|
u8 type, pad1, pad2, pad3;
|
||||||
|
u8 key[KEY_LENGTH];
|
||||||
|
|
||||||
|
128-159 main messages (shared KEY encrypted)
|
||||||
|
|
||||||
|
128 MSG
|
||||||
|
size: 4 + ?
|
||||||
|
u8 type, pad1;
|
||||||
|
u16 generation; // which key generation is used. Increasing monotonously, until overflow
|
||||||
|
u8 msg[];
|
||||||
|
|
||||||
|
160-255 reserved
|
||||||
|
|
||||||
|
|
||||||
|
Funktionalität:
|
||||||
|
===============
|
||||||
|
|
||||||
|
- Server: Pakete an alle weiterleiten (dest_id==0) bzw. an nur einen Client (dest_id)
|
||||||
|
Bei Verbindungsaufbau: Liste aller Clients (Nummern) und eigene Nr (Zufallszahl), JOIN an alle
|
||||||
|
Bei Verbindungsverlust: EXIT an alle
|
||||||
|
|
||||||
|
- Client: Eigentliche Funktionalität
|
||||||
|
|
||||||
|
|
||||||
|
Funktionsweise:
|
||||||
|
|
||||||
|
Client: Neue Verbindung
|
||||||
|
- warten auf INIT
|
||||||
|
Liste der Clients merken
|
||||||
|
- Jetzt nur Kommunikation mit zufälligem Client
|
||||||
|
- -> DH_SETUP
|
||||||
|
<- DH_RETURN -> client-client DH_KEY
|
||||||
|
<- KEY_CURRENT (mit DH_KEY verschlüsselt)
|
||||||
|
-> KEY_NEW an alle (mit KEY_CURRENT verschlüsselt)
|
||||||
|
- Wenn an irgendeiner Stelle Timeout -> nochmal von vorne mit neuem Client
|
||||||
|
|
||||||
|
Nachrichten:
|
||||||
|
- JOIN
|
||||||
|
Liste der Clients updaten
|
||||||
|
- EXIT
|
||||||
|
Liste der Clients updaten
|
||||||
|
- DH_SETUP
|
||||||
|
siehe oben -> DH_RETURN, KEY_CURRENT
|
||||||
|
- KEY_NEW
|
||||||
|
Alter KEY xor KEY_NEW -> neuer KEY, generation++
|
||||||
|
- MSG
|
||||||
|
generation prüfen, wenn > aktueller, warten auf KEY_NEW etc. (Zwischenspeichern, TODO)
|
||||||
|
entschlüsseln, MAC prüfen, anzeigen
|
||||||
|
- ERROR
|
||||||
|
code + msg ausgeben,
|
||||||
|
severity >= 64 Key neu aushandeln (TODO),
|
||||||
|
>= 96 Verbindung neu aufbauen (TODO),
|
||||||
|
>= 128 Exit
|
||||||
|
|
||||||
|
Nachricht schicken:
|
||||||
|
MSG erstellen, Plaintext mit KEY verschlüsseln + MAC, generation einfügen
|
||||||
|
|
||||||
|
|
||||||
|
Was fehlt / mögliche Fehler und Sicherheitsprobleme:
|
||||||
|
====================================================
|
||||||
|
|
||||||
|
- Keine Authentisierung - jeder kann reingrätschen
|
||||||
|
- server side messages derzeit plaintext
|
||||||
|
- keine Validierung (Zertifikate)
|
||||||
|
- ...
|
Loading…
x
Reference in New Issue
Block a user