4 Integrität und Authentizität

4.1 MACs
4.2 Signaturen

Um die Integrität einer Nachricht zu schützen wendet man typischerweise entweder Message Authentication Codes (MACs) oder aber digitale Signaturen an43. Erstere sind mit symmetrischen Verfahren verbunden, letztere im Sprachgebrauch fast immer auf asymmetrische Algorithmen bezogen44. Praktisch wird bei einer Integritätsprüfung (in den meisten Fällen) gleichzeitig die Authentizität der Nachricht mit Bezug auf den Absender verifiziert.

4.1 MACs

Die gebräuchlichsten Verfahren der Generierung von MACs sind mittlerweile standardisiert, z. B. in [31]. Dabei handelt es sich um den CBC-MAC und den HMAC mit kryptographischen Hashfunktionen wie MD5, SHA-1 oder RIPEMD-160.

4.1.1 CBC-MAC

Beim CBC-MAC handelt es sich um ein schon relativ lange in Benutzung befindliches Verfahren zur Erzeugung von MACs [32]. Dabei wird eine Blockchiffre im CBC-Modus genutzt, deren Zwischenergebnisse jedoch nicht weiterverwendet. Statt dessen wird nur das Resultat der letzten Verschlüsselung (immer mit dem Schlüssel 𝐾) als kryptographische Prüfsumme (MAC) über die Nachricht 𝑀 interpretiert. Folgende Formel beschreibt jeden Einzelschritt:

𝑐𝑖 = 𝐸 𝐾(𝑐𝑖−1 ⊕ 𝑚𝑖)mit 𝑐− 1 = 𝐼𝑉.

Abbildung 18 stellt das gesamte Verfahren anschaulich dar. Erwähnt werden soll noch, daß

PIC
Abbildung 18: Generierung des CBC-MAC
4.1.2 XCBC-MAC

Der XCBC-MAC (Extended MAC) geht im Original auf [10] zurück, hat seine Popularität aber wahrscheinlich IPSec zu verdanken [18]. Er behebt eine Schwachstelle des CBC-MAC, die nur bei Nachrichten variabler Länge in Erscheinung tritt [39, Example 9.62]. Die Bildungsvorschrift entspricht weitestgehend dem CBC-MAC, unterscheidet sich jedoch wesentlich bei der Behandlung des letzten Blocks (siehe Abbildung 19).

PIC (a) ohne Padding PIC (b) mit Padding
Abbildung 19: Generierung des XCBC-MAC

Die Einzelschritte sind:

  1. Aus dem Schlüssel 𝐾 werden durch Verschlüsselung drei neue Schlüssel erzeugt.

    pict
  2. Mit dem Schlüssel 𝐾1 wird, abgesehen vom letzten Block, ein CBC-MAC nach Abschnitt 4.1.1 gebildet.
  3. Die Verarbeitung des letzten Blocks wird nach Abbildung 19 vorgenommen, wobei das Vorgehen davon abhängt, ob die Länge der Nachricht 𝑀 ein Vielfaches der Blockbreite 𝑛 ist.

    1. Ist die Länge der Nachricht ein Vielfaches der Blockbreite 𝑛, dann wird im letzten Schritt

      MAC  = 𝐸 𝐾1(𝑚 𝑖 ⊕ 𝑐𝑖−1 ⊕ 𝐾2)

      gerechnet.

    2. Sollte jedoch Padding nötig ein, dann wird zuerst ein 1-Bit angehängt und bei Bedarf auf ein Vielfaches von 𝑛 mit Nullen aufgefüllt. Die Berechnung des MAC geht nach Abbildung 19b vor sich:

      MAC   = 𝐸𝐾1(𝑚𝑖||(100...00) ⊕𝑐𝑖−1 ⊕ 𝐾3).
            ︸ˉˉˉˉˉˉˉˉˉˉˉˉˉˉ︷ ︷ˉˉˉˉˉˉˉˉˉˉˉˉˉˉ︸
                  𝑛
4.1.3 Hash-MAC (HMAC)

Der HMAC einer Message 𝑀 wird mittels einer kryptographischen Hashfunktion46 𝐻 berechnet [37, 31, 49]. Dazu geht man in folgenden Schritten vor:

  1. Der geheime Schlüssel 𝐾 wird durch Anhängen von Null-Bytes auf die Blockbreite der Hashfunktion47 gebracht (ANSI-Padding).
  2. Der so verlängerte Schlüssel wird nun mit einer Wiederholung von 36H bitweise Exklusiv-Oder (XOR) verknüpft.
  3. An diesen ersten Block wird die (zu schützende) Message 𝑀 angehängt und auf die Verkettung unsere Hashfunktion H angewendet. Als Resultat erhält man: 𝐼(nner) = H[(𝐾||00H00H) ⊕ (36H36H)||𝑀].
  4. Genauso wie in Punkt 1 und 2 wird nun der Schlüssel 𝐾 nocheinmal verarbeitet, nur das die XOR-Operation mit 5CH erfolgt.
  5. An das Ergebnis wird 𝐼(nner) angehängt und darauf erneut die Hash-Funktion H angewendet. Als Ergebnis liegt schlußendlich der HMAC der Message 𝑀 vor48: 𝑂(uter) = H[(𝐾||00H00H) ⊕ (5CH5CH)||𝐼].

Abbildung 20 veranschaulicht das gesamte Verfahren.

PIC

Abbildung 20: Generierung des HMAC

4.2 Signaturen

4.2.1 Einleitung

Elektronische Signaturen dienen der Authentifizierung – im Sinne dessen daß sie (vgl. Signaturgesetz):

Man unterscheidet Signaturen mit „Message Recovery” (siehe z. B.  [29] oder [39]) und Signaturen mit „Appendix”. In der Praxis werden Signaturen mit Anhang nach [23, 58, 47, 8] wohl am häufigsten verwendet. Ihre Bildungsvorschrift kann man wiefolgt skizzieren (siehe auch Abbildung 21):

  1. H(ash): Berechne den Hash (bzw. Message Digest) der Nachricht 𝑀.
  2. C(oding): Kodiere das Ergebnis nach einem dem Kryptoalgorithmus (siehe nächster Punkt) angepaßten Schema.
  3. E(ncrypt): Verschlüssele den so strukturierten Hash mit dem privaten Teil 𝐾priv des Signaturschlüssels.
PIC
Abbildung 21: Signatur mit Anhang

Die Integrität der empfangenen (und möglicherweise veränderten) Nachricht 𝑀kann im weiteren mit Hilfe der Signatur verifiziert werden. Dazu sind auf der Empfängerseite folgende Schritte nötig:

  1. Berechne H(𝑀′) in gleicher Art und Weise wie beim Herausgeber.
  2. Entschlüssele die Signatur mit Hilfe des öffentlichen Teils 𝐾pub des Signaturschlüssels und dekodiere H(𝑀).
  3. Vergleiche H(𝑀) mit H(𝑀′) um die Integrität 𝑀= 𝑀 zu verifizieren.
4.2.2 RSA-Signaturen nach PKCS #1

Die RSA-Signatur über eine Nachricht 𝑚 wird berechnet, indem der Hash-Wert von 𝑚 mit dem privaten RSA-Schlüssel (vgl. Abschnitt 3.1) verschlüsselt wird. Auf der Empfangsseite muß der, mit dem öffentlichen Schlüssel entschlüsselte Hash, mit dem berechneten Wert für die Nachricht übereinstimmen.

RSA hat die für digitale Signaturen wichtige Eigenschaft, daß Ver- und Entschlüsselung vertauschbar sind.

pict
4.2.3 Digital Signature Algorithm

Der Digital Signature Algorithm (DSA) wurde ursprünglich in [50] standardisiert (dessen Nomenklatur hier beibehalten wurde), ist mittlerweile aber in überarbeiteten Fassungen, z. B. [51, S. 4] und [23] zu finden. Auch hierbei wird das Problem des diskreten Logarithmus genutzt, um einen öffentlichen und privaten Schlüssel zu definieren und mit dessen Hilfe eine Signatur zu berechnen bzw. zu verifizieren. Wie bei Signaturen üblich wird der Hash (Digest, Fingerprint) (𝑚) einer Message 𝑚 signiert bzw. verifiziert.

Ansatz Wir wählen im Gegensatz zu der gewohnten Literatur einen etwas universelleren Ansatz, welcher den ECDSA nach [51, 8, 23] gleich mit abdeckt.49 Dazu sei die jeweils typische Einweg-Funktionen Ψ(·) folgendermaßen definiert:

pict

wobei 𝑒 ein Element aus dem jeweiligen Körper 𝐾 (𝐾 := F𝑝 für DSA bzw. 𝐾 := 𝐸 für ECDSA) und 𝑛 einen Skalar (mit 𝑛 < |𝐾|) darstellt.

In beiden Fällen kann man bezüglich einer Operation , mit

Ψ(𝑒,𝑛1)⋄ Ψ(𝑒,𝑛2)= Ψ( 𝑒,𝑛1 + 𝑛2)
(18)

die Eigenschaft der Linearität festhalten. Konkret soll die Operation folgendes bezeichnen:

Außerdem wollen wir noch eine hilfreiche Abbildungsfunktion Λ(𝑒) definieren, welche aus einem Element 𝑒 der jeweiligen Domäne (DLC/ECC) und dem Domain-Parameter 𝑞 < |𝐾| eine Langzahl ableitet.

pict

Das Ergebnis kann dann als eine Komponente der Signatur verwendet werden (Details dazu folgen).

Schlüsselgenerierung Zuerst wird ein privater Schlüssel 𝑥 als Zufallszahl bestimmt. Aus diesem wird dann ein öffentlicher Schlüssel 𝑦 mit Hilfe der Einweg-Funktion Ψ(·) berechnet:

𝑦 = Ψ(𝑔,𝑥).
(19)

Dabei sei 𝑔 ein Basiselement aus dem jeweiligen Körper, dessen Ordnung 𝑞 eine Primzahl sein muß.50 Der private Schlüssel 𝑥 muß im Intervall 0 < 𝑥 < 𝑞 liegen, d. h. 𝑥 entstammt der multiplikativen Gruppe F𝑞.51

Interessanterweise gilt für den öffentlichen Schlüssel folgende Relation:

Ψ( 𝑦,𝑛)= Ψ( 𝑔,𝑛𝑥)
(20)

welche eine wichtige Grundvoraussetzung für die Wirkungsweise des Algorithmus darstellt. Wir wollen Sie schnell noch überprüfen.

pict

Signieren Zum Signieren wählt man eine Zufallszahl 0 < 𝑘 < 𝑞, den privaten „Einmal-Schlüssel” und berechnet damit zwei Zahlen (𝑟,𝑠) nach folgender Vorschrift:52

pict

Die Komponenten (𝑟,𝑠) stellen eine DSA/ECDSA Signatur dar, welche später vom Empfänger verifiziert wird.

Durch die Wahl des Basiselements 𝑔 bzw. die Größe von 𝑞 kann man sehr gut die Länge der Signatur beeinflussen.

Zur Bestimmung des inversen 𝑘 ist das Lösen der Kongruenz 𝑘1𝑘 1 (mod 𝑞) notwendig. Vorteilhaft können sowohl Gleichung 21 als auch 𝑘1 im Voraus (off-line) berechnet werden, falls erlaubt53.

𝑘 = 𝑠−1(ℎ + 𝑥𝑟)mod  𝑞 = 𝑠−1ℎ mod 𝑞 + 𝑠−1𝑟 mod 𝑞 𝑥 (mod 𝑞)
                      ︸ˉˉˉˉˉˉˉˉ︷︷ˉˉˉˉˉˉˉˉ︸  ︸ˉˉˉˉˉˉˉˉ︷︷ˉˉˉˉˉˉˉˉ︸
                          𝑢1          𝑢2

und mit den beiden schon angedeuteten Variablen 𝑢1und 𝑢2 entsprechend [51]:

𝑘 = 𝑢1 + 𝑢2𝑥 mod 𝑞
(23)

Verifizieren Abgesehen von den Wertebereichsprüfungen 0 < ˆ𝑟 < 𝑞 und 0 < ŝ < 𝑞 erfolgt das Verifizieren vor allem mit Hilfe der Formeln 19 und 20. Dies geschieht (siehe z. B. auch [51, Appendix E]) indem zuerst aus der übermittelten Signatur (𝑟ˆ) die Variablen û1 und û2 berechnet werden.

pict

Im nächsten großen Schritt wird dann 𝑣 = Ψ(𝑔,û1) ⋄Ψ(𝑦,û2) berechnet, was nur im Fall û1 = 𝑢1 und û2 = 𝑢2 (bzw. ˆ𝑟 = 𝑟 und ŝ = 𝑠) sowie bei passenden Schlüsseln und Domain-Parametern zu Λ(𝑣) = 𝑟 führt.

pict

In den Einzelschritten wurden dabei die Formeln 20, 18, 23 und 21 angewendet (in genau dieser Reihenfolge).