X-User-ID

From Albasani
Jump to: navigation, search


Seit Juni 2005 werden X-Trace und NNTP-Posting-Host verschlüsselt und der verschlüsselte Username als X-User-ID abgelegt. Die relativ aufwändige Implementierung geht auf den Wunsch von Roman Racine zurück. Außenstehende sollen nicht ohne weiteres feststellen können, ob zwei Postings vom selben Autor stammen.

Ende Dezember 2005 weist Thomas Lahn darauf hin, dass laut Abschnitt 3.4.1 von RFC2980 NNTP-Posting-Host zwar optional ist, aber ansonsten einen definiert Wert hat. Seit dem gibt es ein verschlüsseltes X-NNTP-Posting-Host.

Im Juni 2006 wird auf Anregung von J. Schneider die Mindestanzahl an Zufallszeichen (MIN_PADDING) erhöht und von Crypt::RandPasswd::letters auf Crypt::RandPasswd::chars umgestellt.

Contents

Kollisionen

Symmetrische Verschlüsselung ist im Gegensatz zu einem Hash eindeutig umkehrbar. Hat man zweimal den gleichen Chiffretext vorliegen, dann weiß man, dass zweimal der gleiche Klartext verschlüsselt wurde. Handelt es sich dabei um den Wert von X-User-ID, dann weiß man, dass zwei Postings vom selben Autor stammen.

Um dem entgegen zu wirken, wird der Klartext mit zufälligen Zeichen auf eine runde Länge gestreckt. Dies ist kein garantierter Schutz sondern verringert nur die Wahrscheinlichkeit, zweimal den gleichen Chiffretext zu produzieren. Abhängig ist dies von:

  1. der Qualität des Zufallsgenerators
  2. der Länge der Zufallssequenz
  3. der Anzahl der Verschlüsselungen

Geburtstagsproblem

Nimmt man an, dass der verwendete Zufallsgenerator perfekt gleichverteilt ist, dann hat man ein Geburtstagsproblem.

Wenn der Schlüssel spätestens alle drei Monate gewechselt wird und ein einzelner Benutzer maximal 2000 Postings pro Monat absetzt, ist die Anzahl der Verschlüsselungen 6000 (~ Geburtstagsproblem mit 6000 Personen).

Will man mit einer Wahrscheinlichkeit von 99.9 % ausschließen, dass keine Kollision auftritt (~ niemand am selben Tag Geburtstag hat), ergibt sich daraus die Mindestlänge des Zufallstexts (~ die Anzahl der Tage im Jahr).

Rekursionsformel

Mit dem kleinen Programm auf wikipedia kann man ein verwandtes Problem lösen: Für eine gewünschte Wahrscheinlichkeit und bestimmte Zufallstextlänge errechnet sich die maximale Anzahl der Postings, die mit einem Schlüssel verschickt werden dürfen.

Das Alphabet von Crypt::RandPasswd::chars umfasst 94 Zeichen. Bei einer gewünschten Wahrscheinlichkeit von 99.9 % Prozent ergibt sich folgende Anzahl von Postings:

Zufallstextlänge Kombinationen Postings
4 94 ^ 4 = 78074896 396
5 94 ^ 5 = 7339040224 3833
6 94 ^ 6 = 689869781056 37155

Berechnet wurde das mit diesem adaptierten Programm:

#include <stdio.h>

void one_year(long year)
{
  int n = 1;
  double q = 1;
  while (q > 0.999)
  {
     q *= (year - n + 1) / (double)year;
     n++;
  }
  printf("YEAR=%12ld n=%5d P=%f\n", year, n - 1, 1 - q);
}

int main()
{
  one_year(365);
  one_year(78074896);
  one_year(7339040224);
  one_year(689869781056);
  return 0;
}

Die Ausgabe:

$ gcc -Wall a.c && ./a.out
YEAR=         365 n=    2 P=0.002740
YEAR=    78074896 n=  396 P=0.001001
YEAR=  7339040224 n= 3833 P=0.001000
YEAR=689869781056 n=37155 P=0.001000

Siehe auch

Personal tools