Hallo,
Original von csde_rats
Wie werden Digitale Signaturen in der Realität implementiert?
Am besten nutz man eine Lib, die das unterstützt. Den Spaß das zu implementieren macht das nicht.
Sonst das simpelste Verfahren:
Annahme: Alle Clients haben den Public Key einer vertrauenswürdigen Partei. Das Cert. enthält dann: Public Key vom Client, Name des Clients, Signatur (Hashwert von Name, Public Key usw. mit dem Private Key der 3. Partei verschlüsselt).
Dann bei der Authentifizierung überprüft der Client die Signatur (Hashwert der Daten vom Zertifikat mit dem public key der 3. Partei verschlüsseln und vergleichen).
Nur musst du dich dann auch um die Ausgabe von Zertifikaten kümmern, schauen dass die User sich dann auch untereinander authentifizieren können usw. Alles gar nicht so einfach.
Hm aber was ginge wäre doch, einen Pseudosicheren Kanal zu haben;
Beispiel:
Zufallsschlüssel wird per Diffie-Hellman erzeugt. Der User gibt dann einen Nummer/Wort whatever ein, dass dann gehasht wird und an den Key angehängt wird.
Sofern beide User sich irgendwie auf ein Wort über einen pseudosicheren Kanal (sprachliche Abmachung oder so, CODEBÜCHER XD) einigen, klappt das.
Ist natürlich nicht so sicher wie mit Certs...
..
Natürlich geht das auch. Man nutzt einen Shared Key, den man zuvor irgendwie ausgetauscht hat, und nutzt diesen + Diffie Hellman um daraus Sitzungsschlüssel abzuleiten.
Man muss eben gucken was für ein System man erstellt. Hat man einen zentralen Server und die Clients sollen sich mit dem verbinden (z.B. ein Online-Backup System), dann lässt sich MITM leicht verhindern. Man gibt einfach jedem Client den Public Key des Servers mit und die Clients nutzen dann diesen zur Authenfizierung.
Weiterhin recht einfach ist es bei einer Client <-> Server <-> Client Architektur (z.B. Skype, ICQ etc.). Jeder Client bekommt den Public Key des Servers integriert und der Schlüsselaustausch geht über Client -> Server -> Client. Gut der Server könnte dann mitlauschen, das wäre aber weiterhin nicht soo schlimm, denn jede vertrauenswürdige dritte Partei kann ihr vertrauen ausnutzen und z.B. gefakte Zertifkate ausstellen. Nur würde man es einem Einbrecher in dem Server es erleichtern, alle Daten des Systems mitzulauschen und er müsste dann nicht diverse MITM Attacken durchführen, was recht schwierig ist.
Problematisch wird es bei Client to Client Verbindungen, bei dem ein Server nicht involviert sein soll. Da muss man dann i.d.R. auf Zertifikate zurückgreifen.
Wie gesagt, am besten ne Lib schnappen die den X.509 Standard implementiert, so dass man dann z.B. Zertifikate mit OpenSSH o.ä. erstellen kann.