Das Neue Mix-Paketformat

Wie besprochen auf dem Arbeitstreffen 11.-20.8.2003 in Regensburg

Upstream-Pakete

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
KEY2-UP
16 Bytes
KEY2-DN
16 Bytes
DATA FOR MIX AFTER THE NEXT MIX
930 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
KEY3-UP
16 Bytes
KEY3-DN
16 Bytes
DATA FOR MIX AFTER THE NEXT MIX
898 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

Bedeutung der einzelnen Felder

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

 

Algorithmus: Verarbeitung vom vorletzten Mix ankommender Upstream-Pakete im letzten Mix:

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
    }
  }
}

 

Aufbau der Kanal-Tabelle im letzten Mix

VERK Socket KEY-UP KEY-DN CHAN (Channel-ID) DownstreamPacketCounter
.... .... .... .... .... ....

Downstream-Pakete

CHAN
4 Bytes
SEQN
4 Bytes
FLG/LEN
2 Bytes
..................... PAYLOAD .....................
988 Bytes

 

Algorithmus: Verarbeitung der vom Proxy eintreffenden Daten im letzten Mix

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
      }
    }
  }
}

Bastian Voigt
Last modified: Wed Aug 20 15:53:43 CEST 2003