Wie besprochen auf dem Arbeitstreffen 11.-20.8.2003 in Regensburg
Im 1. Mix, nach erfolgter asymmetrischer und symmetrischer Entschlüsselung: | |||||||||||||||||
CHAN 4 Bytes |
KEY1-UP 16 Bytes |
KEY1-DN 16 Bytes |
DATA FOR NEXT MIX (encrypted), 962 Bytes
| ||||||||||||||
Im 2. Mix, nach erfolgter asymmetrischer und symmetrischer Entschlüsselung: | |||||||||||||||||
CHAN 4 Bytes |
KEY2-UP 16 Bytes |
KEY2-DN 16 Bytes |
DATA FOR NEXT MIX (encrypted), 930 Bytes
|
RANDOM 32 Bytes | |||||||||||||
Im n. (letzten) Mix, nach erfolgter asymmetrischer und symmetrischer Entschlüsselung: | |||||||||||||||||
CHAN 4 Bytes |
KEYn-UP 16 Bytes |
KEYn-DN 16 Bytes |
VERK 8 Bytes |
SEQN 4 Bytes |
TYPE 1 Byte |
FLG/LEN 2 Bytes |
..................... PAYLOAD
..................... 979-32n Bytes |
RANDOM 32(n-1) Bytes |
CHAN: 4-Byte Channel-ID, bezeichnet einen Kanal auf dem exakt x (zur Zeit erstmal x=1) Pakete upstream und y Pakete downstream gesendet werden, danach wird die Channel-ID ungültig.
KEYx-UP: Enthält den 128-bit symmetrischen Schlüssel, der zur Verschlüsselung des restlichen Paketes verwendet wurde.
KEYx-DN: Enthält den 128-bit symmetrischen Schlüssel, der zur Verschlüsselung der Downstream-Pakete auf diesem Kanal verwendet werden soll.
VERK: Das Verkettungsmerkmal, anhand dessen der letzte Mix mehrere Kanäle verketten kann, die zusammen eine logische Verbindung bilden
SEQN: Eine Sequenznummer, die die Reihenfolge der auf einer logischen Verbindung gesendeten Pakete festlegt.
TYPE: Typ der Verbindung, verwendetes Protokoll (z.B. HTTP, in Zukunft evtl. auch andere Protokolle
FLG/LEN: Kombiniertes Feld, enthält die tatsächliche Länge des Payload und mehrere Flags. Die folgende Tabelle zeigt den Aufbau des Feldes:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
FLAGS (7 bit) | LEN (9 bit) | ||||||||||||||
RESERVED | RESERVED | RESERVED | RESERVED | OPEN | CLOSE | MORE_DATA | 9 Bit Payload Length (unsigned) |
Bedeutung der Flags:
OPEN kann nur vom JAP gesendet werden und signalisiert den Aufbau einer neuen Surfverbindung (neues Verkettungsmerkmal VERK).
CLOSE kann vom JAP oder vom letzten Mix gesendet werden. Browser ist nicht mehr an Daten interessiert bzw. Verbindung zusammengebrochen/geschlossen
MORE_DATA kann vom letzten Mix oder vom Jap gesendet werden. Bedeutung: Es gibt noch mehr Daten auf der Verbindung bzw. Jap möchte gern noch mehr Daten bekommen
forever { Asymmetrische Entschlüsselung KEYn-UP und KEYn-DN extrahieren Symmetrische Entschlüsselung VERK und FLG/LEN extrahieren if(VERK is in Table) { if( FLAG_CLOSE || FLAG_OPEN ) { remove table entry send CLOSE to JAP } if( FLAG_MORE_DATA ) { send data to proxy update table entry( KEYn-UP, KEYn-DN, CHAN, Packet-Counter) unpark socket } } else { if( (!FLAG_OPEN) || (!connect_to_proxy()==SUCCESS) ) { send CLOSE to JAP } else { send data to proxy put new entry into Table } } }
VERK | Socket | KEY-UP | KEY-DN | CHAN (Channel-ID) | DownstreamPacketCounter |
.... | .... | .... | .... | .... | .... |
CHAN 4 Bytes |
SEQN 4 Bytes |
FLG/LEN 2 Bytes |
..................... PAYLOAD
..................... 988 Bytes |
Hinweis: Dieser Algorithmus ist insoweit vereinfacht, als dass er keinerlei Timeouts berücksichtigt.
forever { poll sockets foreach ( active socket ) { anz = receive(988Bytes from Proxy); if( anz <= 0 ) { send CLOSE to JAP remove VERK from table close socket } else { send Daten to JAP (MORE_DATA Flag gesetzt) if(--DownstreamPacketCounter==0) { socket parken } } } }