Zunächst ein terminologischer Punkt: Was Sie beschreiben, ist symmetrische Verschlüsselung , und ein Schlüssel, der von den Teilnehmern gemeinsam genutzt wird, wird normalerweise als geheimer Schlüssel bezeichnet. "Privater Schlüssel" bedeutet normalerweise den Teil eines Schlüssels in der Kryptographie mit öffentlichem Schlüssel , den nur ein Teilnehmer kennt.
Es gibt zwei Möglichkeiten, einen geheimen Schlüssel zu verbreiten: Er kann auf physikalisch sichere Weise transportiert werden, oder er kann mit einer anderen Form der Verschlüsselung, der Kryptographie mit allgemeinem Schlüssel, transportiert werden.
Es gibt Möglichkeiten, einen geheimen Schlüssel auszutauschen, für den kein geheimer Kommunikationskanal erforderlich ist. Am beliebtesten ist das Diffie-Hellman-Schlüsselaustauschprotokoll. Das Prinzip von Diffie-Hellman ist, dass jeder Teilnehmer sein eigenes Schlüsselpaar generiert und es eine mathematische Operation gibt, die eine große Zahl aus einem öffentlichen Schlüssel und einem privaten Schlüssel erstellt. Diese mathematische Operation hat eine sehr interessante Eigenschaft: Die große Zahl kann aus dem privaten Schlüssel von Alice und dem öffentlichen Schlüssel von Bob oder aus dem privaten Schlüssel von Bob und dem öffentlichen Schlüssel von Alice konstruiert werden. Sie erhalten die gleiche Nummer so oder so. Alice und Bob tauschen also ihre öffentlichen Schlüssel aus, und beide Parteien kennen die große Nummer, die dann als geheimer Schlüssel verwendet werden kann. Ein Lauscher kann beide öffentlichen Schlüssel herausfinden, es ist jedoch unmöglich, die große Zahl allein aus den öffentlichen Schlüsseln zu ermitteln.
Der Diffie-Hellman-Schlüsselaustausch ermöglicht es zwei Parteien, ein Geheimnis auszutauschen, unabhängig davon, wer zuhört. Es authentifiziert Alice jedoch nicht bei Bob oder umgekehrt. Daher ist es für einen Man-in-the-Middle-Angriff zugänglich : Mallory führt den Schlüsselaustausch mit Alice (die glaubt, dass sie mit Bob spricht) und separat mit Bob (die glaubt, dass er mit Alice spricht) durch und kann so entscheiden oder entscheiden kenne das Geheimnis am wenigsten.
Wenn der Angreifer Nachrichten abfangen und einschleusen kann, ist mehr Kryptografie erforderlich, damit sich die Teilnehmer gegenseitig authentifizieren können. (Ein passiver Angreifer bedeutet effektiv, dass das zugrunde liegende Transportprotokoll eine Authentifizierung bereitstellt.) Auf einfache Weise kann jeder Teilnehmer den öffentlichen Schlüssel des anderen Teilnehmers bereits kennen. Wenn Alice Bobs öffentlichen Schlüssel kennt:
- Alice kann Bob authentifizieren, indem sie ihm eine Abfrage sendet: einen zufälligen Wert (ein Nonce ), der mit Bobs öffentlichem Schlüssel verschlüsselt ist. Wenn Bob diesen Wert entschlüsseln und zurücksenden kann, weiß Alice, dass sie wirklich mit Bob spricht.
- Bob kann sich bei Alice authentifizieren, indem er ihr eine Nachricht sendet, die mit seinem öffentlichen Schlüssel signiert ist. Alice überprüft die Unterschrift, um zu überprüfen, ob sie wirklich mit Bob spricht.
Es gibt viele Varianten, die eine dieser Methoden (oder noch eine andere Variante) in einer Richtung und entweder dieselbe oder eine andere Methode in der anderen Richtung verwenden oder die nur in einer Richtung authentifizieren. Beispielsweise kann SSL / TLS (die Kryptografieschicht für viele -s-Protokolle wie HTTPS, SMTPS, IMAPS usw.) mehrere verschiedene Verschlüsselungskombinationen verwenden und den Server normalerweise gegenüber dem Client authentifizieren, kann jedoch optional auch den Client authentifizieren. Diffie-Hellman ist für diese Anwendung langsam und umständlich. Der am weitesten verbreitete Algorithmus mit öffentlicher Schlüsselverteilung ist RSA .
Natürlich kennen Alice und Bob den öffentlichen Schlüssel des anderen möglicherweise nicht im Voraus. Sie verlassen sich stattdessen auf eine Vertrauenskette: Bob sendet Alice seinen öffentlichen Schlüssel zusammen mit einer signierten Erklärung eines Dritten, die bestätigt, dass dieser Schlüssel wirklich Bobs öffentlicher Schlüssel ist. Diese unterzeichnete Erklärung wird als Zertifikat bezeichnet, und die dritte Partei ist eine Zertifizierungsstelle . Die dritte Partei kann Bob bekannt sein, oder ihre Identität kann von einer vierten Partei bestätigt werden, und so weiter. Schließlich muss diese Vertrauenskette (… steht für Dominique, steht für Charlie, der für Bob steht) eine Partei erreichen, der Ron bereits vertraut, was bedeutet, dass Bob Rons öffentlichen Schlüssel besitzt und Ron vertraut, dass er nur gültige Zertifikate signiert.
Es gibt Protokolle, die nicht auf Kryptografie mit öffentlichen Schlüsseln beruhen. Insbesondere wird das Kerberos- Protokoll sowohl in Unix- als auch in Windows-basierten Netzwerken verwendet, um Verbindungen zwischen einem Client und einem Server herzustellen. Kerberos verwendet einen zentralen Authentifizierungsserver, ein so genanntes Key Distribution Center (KDC). Auf dem KDC muss das Kennwort des Benutzers in einer Datenbank gespeichert sein, und der Client fordert den Benutzer normalerweise zur Eingabe des Kennworts auf. Um die Offenlegung des Kennworts zu vermeiden, verwendet das Protokoll das Kennwort nicht direkt, sondern einen kryptografischen Hash oder allgemeiner eine auf das Kennwort angewendete Schlüsselableitungsfunktion .
Mit diesem gemeinsamen Geheimnis richten der Client und das KDC einen sicheren Kanal ein und das KDC sendet dem Client ein "Ticket". Das Ticket enthält einen Sitzungsschlüssel (dh einen neu generierten geheimen Schlüssel) sowie eine Kopie des Schlüssels, der mit einem anderen symmetrischen Schlüssel verschlüsselt ist, der zwischen dem KDC und dem Server geteilt wird, mit dem der Client Kontakt aufnehmen möchte. Der Client leitet diese verschlüsselte Kopie dann an den Server weiter. Der Server entschlüsselt diese Nachricht, um den Sitzungsschlüssel abzurufen, und generiert eine Nonce, die er mit dem Sitzungsschlüssel verschlüsselt und an den Client zurücksendet. Der Client initiiert dann einen sicheren Kanal mit dem Server, der mit dem Sitzungsschlüssel verschlüsselt ist, und zeigt zunächst an, dass der Nonce entschlüsselt werden kann. Dadurch wird der Client gegenüber dem Server authentifiziert. Ein Kerberos-Sitzungsaufbau ist eine Variante des Needham-Schroeder-Protokolls .
¹ In dem Sinne, dass Kryptografen sich sehr bemüht haben, aber der beste Weg, dies zu tun, erfordert eine unerreichbare Menge an Rechenleistung.