P-NP-Problem WS13-14
Inhaltsverzeichnis |
Einleitung
Die Klassen P und NP
NP-Vollständigkeit
Polynomiale Reduktion
NP-schwere Probleme
NP-vollständige Probleme
Nachweis der NP-Vollständigkeit eines Problems
Satz von Steven A. Cook
Das Ramsey-Problem
Vorteile praktischer Unlösbarkeit
Nun kann aber die Unlösbarkeit bestimmter Probleme auch zu unserem Vorteil genutzt werden. Sie findet Anwendung in der Kryptographie, die sich mit Methoden der Geheimhaltung von Daten beschäftigt. Dabei ist die Kryptologie eng mit der Kryptographie verbunden. Sie stellt die Wissenschaft von den (offenen) Geheimschriften dar und bildet mit Hilfe der Kryptoanalyse Vorschriften zur Entzifferung von Code.
In der Praxis greift man auf Ver- und Entschlüsselungsverfahren zurück, die nicht oder nur sehr schwer lösbar sind.
Zur Verschlüsselung wird ein Schlüssel benötigt, der die zu übertragenden Daten codiert. Dieser Schlüssel muss dem Empfänger zur Verfügung gestellt werden, damit die codierten Daten wieder entschlüsselt werden können. Hierbei kann es allerdings zu Schwierigkeiten kommen: erfolgt die Übertragung des Schlüssels unverschlüsselt, kann von außen unbefugt auf gesendete Daten zugegriffen werden, was dem Ziel der Verschlüsselung widerspricht. Zudem können die abgefangenen Informationen manipuliert werden, ohne dass der Empfänger von der potenziellen Gefahr weiß. Wird der Schlüssel allerdings verschlüsselt übertragen, kann keine Decodierung der Daten vorgenommen werden, da der Schlüssel für den Empfänger nicht lesbar ist.
Um dieses Problem bei der Übertragung des Schlüssels zu umgehen, kann man einen öffentlichen Schlüssel verwenden, der zum Beispiel beim RSA-Verfahren zum Einsatz kommt.
RSA-Verfahren
Das RSA-Verfahren ist das erste Public-Key-Kryptosystem und wurde 1977 von Rivest, Shamir und Adleman erfunden.
Der öffentliche Schlüssel C besteht aus den zwei Teilen m und e und wird zur Verschlüsselung einer Nachricht benutzt. Unter Verwendung des privaten Schlüssels D, welcher m und den geheimen Teil d enthält, kann die Nachricht dechiffriert werden.
Schlüsselerzeugung
Wir bestimmen m, indem wir zwei möglichst große Primzahlen p und q wählen und diese miteinander multiplizieren, d.h. m=p \cdot q. Die Primzahlen sollten mehr als 200 Stellen haben. Danach ermitteln wir \varphi(m), welches die Anzahl der Zahlen von 1,...,m-1, die zu m teilerfremd sind, angibt.
Dabei gilt für Primzahlen p\neqq''':''' \varphi(p \cdot q)=(p-1)\cdot(q-1).
Desweiteren wählen wir eine zufällige Zahl e, sodass ggT(\varphi(m),e)=1 eintritt. Dadurch können wir den geheimen Teil d=e^{-1} \bmod \varphi(m) berechnen.
Beispiel
p=17 q=19 m=p \cdot q=17 \cdot 19=323 \varphi(m)=(p-1)\cdot(q-1)=16 \cdot 18=288 zufällig: e=5 d=e^{-1} \bmod \varphi(m)=5^{-1} \bmod 288=173 öffentlich: (323,5) geheim: (323,173)
Bemerkung: Der geheime Teil d kann mit Hilfe des Euklidischen Verfahrens berechnet werden.
Für die Codierung bzw. Decodierung benutzen wir folgende Vorschriften:
- Verschlüsselung: x \longmapsto x^{e} \bmod m
- Entschlüsselung: y \longmapsto y^{d} \bmod m
Analog zu unserem Beispiel wählen wir für den zu verschlüsselnden Klartext den Wert x=13.
y=13^{5} \bmod 323=166 x=166^{173} \bmod 323=13
Übungen
Literaturverzeichnis
- Wagenknecht, Christian: Algorithmen und Komplexität, Fachbuchverlag Leipzig, 2003
- Cormen, Thomas; Leiserson, Charles; Rivest, Ronald; Stein, Clifford: Algorithmen, eine Einführung,Oldenbourg Verlag, 2007