# Blom-Verfahren

Das Verfahren von Blom ist ein kryptographisches Protokoll zum Austausch symmetrischer Schlüssel mit Hilfe einer vertrauenswürdigen Partei. Das Verfahren ist wesentlich schneller als ein asymmetrisches Verfahren. Somit läuft es auch auf leistungsschwachen Mikrochips. Es wird derzeit im HDCP-Protokoll (dem Kopierschutzverfahren des HDTV) eingesetzt.

## Das Protokoll

Der Schlüsselaustausch erfordert eine vertrauenswürdige Partei (Trent) und $n$ Benutzer (neue Benutzer können auch nachträglich bequem hinzugefügt werden). Die vertrauenswürdige Partei gibt dabei jedem der $n$ Teilnehmer einen geheimen privaten Schlüssel sowie eine öffentliche Identifikationsnummer. Mit diesen Daten kann jeder Protokollteilnehmer mit jedem anderen Teilnehmer mit Hilfe einfacher Berechnungen (nur lineare Algebra) einen symmetrischen Schlüssel austauschen.
Wenn $k$ oder mehr kompromittierte Benutzer zusammenarbeiten sollten, können sie das Verfahren knacken (d. h., sie können den Master-Schlüssel der o. g. vertrauenswürdigen Partei berechnen). Weniger als $k$ Benutzer können (bei optimaler Parameterwahl) nichts ausrichten. Es handelt sich dabei um ein Schwellwertverfahren (englisch threshold scheme).
Alice und Bob seien im Folgenden zwei Benutzer.

### Protokoll-Vorbereitung

Die vertrauenswürdige Partei Trent wählt als Master-Schlüssel eine geheime, zufällige und symmetrische $k\times k$-Matrix $D$ über $GF(p)$, wobei $p$ eine Primzahl sein muss. Diese Matrix muss zum Hinzufügen eines neuen Benutzers bekannt sein.
D sei zum Beispiel ($p=17$): ${\begin{pmatrix}1&6&2\\6&3&8\\2&8&2\end{pmatrix}}\mod 17$

### Hinzufügen eines neuen Teilnehmers

Ein neuer Benutzer Alice möchte der Schlüsselaustausch-Gruppe beitreten. Trent wählt für Alice eine öffentliche Benutzerkennung (am besten abhängig von ihrem Namen). Dies ist hier mathematisch gesehen ein Vektor $I_{A}$ mit $k$ Komponenten aus $GF(p)$.
Anschließend berechnet Trent den privaten Schlüssel von Alice: $g_{A}=(D*I)$ Der private Schlüssel kann nun von Alice verwendet werden, um einen gemeinsamen Schlüssel mit einem beliebigen anderen Gruppenteilnehmer zu berechnen.
$I_{A}={\begin{pmatrix}3\\10\\11\end{pmatrix}}$, dann ist $g_{A}={\begin{pmatrix}1&6&2\\6&3&8\\2&8&2\end{pmatrix}}\cdot {\begin{pmatrix}3\\10\\11\end{pmatrix}}={\begin{pmatrix}0\\0\\6\end{pmatrix}}\mod 17$
$I_{B}={\begin{pmatrix}1\\3\\15\end{pmatrix}}$, dann ist $g_{B}={\begin{pmatrix}1&6&2\\6&3&8\\2&8&2\end{pmatrix}}\cdot {\begin{pmatrix}1\\3\\15\end{pmatrix}}={\begin{pmatrix}15\\16\\5\end{pmatrix}}\mod 17$

### Berechnung eines gemeinsamen Schlüssels zwischen Alice und Bob

Nun möchte Alice mit Bob kommunizieren. Alice kennt hierzu Bobs Identifikation (nämlich den Vektor $I_{B}$) und den eigenen privaten Schlüssel $g_{A}$.
Sie berechnet nun das Produkt daraus: $k_{AB}=g_{A}^{T}\cdot I_{B}$ ($T$ bedeutet transponiert)
Bob kann dasselbe machen (aber natürlich mit seinem privaten Schlüssel und Alices Identifikationsvektor).
Beispiele:
$k_{AB}={\begin{pmatrix}0\\0\\6\end{pmatrix}}^{T}\cdot {\begin{pmatrix}1\\3\\15\end{pmatrix}}=0\cdot 1+0\cdot 3+6\cdot 15=5\mod 17$
$k_{BA}={\begin{pmatrix}15\\16\\5\end{pmatrix}}^{T}\cdot {\begin{pmatrix}3\\10\\11\end{pmatrix}}=15\cdot 3+16\cdot 10+5\cdot 11=5\mod 17$

## Bemerkungen

Damit erst $k$ oder mehr korrumpierte Benutzer das System knacken können, müssen ihre Benutzerkennungen (also die Vektoren $I_{Benutzer}$) in $k$ Gruppen linear unabhängig sein, d. h., jede Auswahl von $k$ Vektoren ist linear unabhängig. Dies kann dadurch erreicht werden, dass die durch alle Benutzervektoren aufgespannte Matrix einen MDS-Code darstellt (Maximum-Distance-Separable-Fehlerkorrekturcode). Die Benutzerkennungen sind dabei die Spalten dieser Matrix.

## Quellen

* A. Menezes, P. van Oorschot, S. Vanstone: Handbook of applied cryptography, CRC Press, 1996
* R. Blom, "An optimal class of symmetric key generation systems" (PDF; 158 kB)
* IACR-Seite zur Publikation