2016-11-29 1 views
0

Ich versuche die Client/Server-Kommunikation für eine Anwendung über libsodium einzurichten. Bis jetzt plane ich, die Anwendung mit einem fest codierten öffentlichen Schlüssel zu verteilen. Der Server behält seinen geheimen Schlüssel, ohne ihn jemals zu teilen. Dadurch sollten Benutzer Nachrichten verschlüsseln und an den Server senden können, wo der geheime Schlüssel Nachrichten entschlüsselt.Privater Schlüssel kompromittiert, wie neue öffentliche Schlüssel verteilt werden? Client-Server-Modell über asymmetrische Schlüsselverschlüsselung

Für den Fall, dass der geheime Schlüssel auf dem Server jemals kompromittiert wird (ich bin nicht sicher, wie, aber nur für den Fall) wie könnte man neue öffentliche Schlüssel an alle Clients verteilen? Gibt es eine Möglichkeit, einen neuen geheimen Schlüssel zu generieren, ohne dass neue öffentliche Schlüssel verteilt werden müssen? Etwas wie:

make_new_secret(secret_buffer, previous_public); 

Ich hatte gehofft, für eine sehr einfache Lösung, die komplizierten Algorithmen nicht für sicher Austeilen neuen öffentlichen Schlüssel erfordern würde. Wenn Sie einen neuen privaten Schlüssel erstellen und gleichzeitig einen neuen öffentlichen Schlüssel erstellen müssen, welche Algorithmen können verwendet werden, um öffentliche Schlüssel sicher vom Server an die Clients zu verteilen?

Zusatzinfo (fühlen Sie sich frei überspringen):

Wir lesen here wo Glenn Fiedler (Autor von libyojimbo, die libsodium verwendet) spricht über die Idee der „gerade einen neuen privaten Schlüssel rollen“ .

Wenn es eine Möglichkeit gibt, alte öffentliche Schlüssel wiederzuverwenden und einen neuen privaten Schlüssel mit libsodium zu erstellen, würde ich gerne darüber lesen. Ich habe die Dokumente durchgesehen und muss noch keine Funktionen sehen, um dies zu tun. Daher befürchte ich, dass ich mich in kompliziertere Algorithmen zur sicheren Verteilung neuer öffentlicher Schlüssel vertiefen muss.

Ich habe Diffie Hellman ausgecheckt, aber es scheint, dass beide Parteien mit einer gemeinsamen "Farbe" beginnen müssen. Also nehme ich an, dass meine Frage darin besteht, zu einer neuen vereinbarten Startfarbe zu kommen.

Antwort

0

Die öffentlichen/privaten Schlüssel sind immer pair (mit Ausnahme von EC mit 2 öffentlichen Schlüsseln, die im Wesentlichen die gleiche Sache ist). Wenn also Ihr privater Serverschlüssel kompromittiert ist oder Sie sich für roll entscheiden, müssen Sie den Client kennen, um den neuen öffentlichen Schlüssel Ihres Servers zu kennen.

Die Herausforderung ist real. Wenn Sie es fest codieren, müssen Sie die Anwendung neu kompilieren/verteilen.

Ich verstehe nicht Ihren gesamten Anwendungsfall, aber wenn Sie versuchen, Autorisierung zu tun, schauen Sie bitte in OAUTH2, die Ihnen temporäre (konfigurierbar auf dem Server) Tokens von Ihrem Server zu Ihrem Client ausstellen können. In diesem Fall können Sie das OAUTH-Token widerrufen, wenn entweder der Server oder der Client kompromittiert ist und Sie (Ihr Server) die volle Kontrolle darüber haben.

+0

Okay, es ist gut zu wissen, dass dies ein wirklich herausforderndes Thema ist. Mein Anwendungsfall ist ein Spiel, das über Steam veröffentlicht wurde. In diesem Fall ist es eigentlich kein Problem, neue Binärdateien an Benutzer zu verteilen. Das macht also Sinn! In meinem Fall richte ich einen Broker-Server für NAT-Puncthrough ein, wie einen STUN-Server, aber mit einem benutzerdefinierten Protokoll. – Cecil

+0

Um es klar zu sagen: Ich versuche nur, den STUN-ähnlichen Server selbst zu sichern und habe die Verschlüsselung gelesen. Wie auch immer, danke für die Antwort! – Cecil

Verwandte Themen