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

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