2010-12-31 13 views
2

Ich habe eine C++ - Client/Server-Anwendung, wo der Client und der Server meine ausführbare Datei sind. Jedes Mal, wenn eine Verbindung zwischen dem Client und dem Server hergestellt wird, erzeuge ich einen neuen Verschlüsselungsschlüssel für diese Sitzung und möchte diesen Sitzungsschlüssel übertragen und diesen Sitzungsschlüssel mit einem statischen Schlüssel verschlüsseln, der sowohl im Client als auch im Server integriert ist.Wie Tasten in der Anwendung zu verbergen?

Allerdings zeigt die Ausführung von Strings auf meiner ausführbaren Datei den statischen Schlüssel.

Wie kann ich den eingebetteten statischen Schlüssel in meiner Client- und Server-Anwendung ausblenden, so dass sie nicht einfach extrahiert werden und damit jemand meinen Sitzungsschlüssel dekodieren kann.

+0

Verwenden Sie einfach SSH ... –

Antwort

5

Seine Methode des Austausches von Schlüsseln "sichert" den Kunden ist gültig und kein Betrüger. Nur Schlüssel mit D-H sicher auszutauschen, wird das nicht tun. Um die gleiche Funktionalität zu erhalten, muss er ein PKI-System implementieren. SSL/TLS wurde für diesen Zweck gebaut, der darunter tun wird, was er braucht.

Sie müssen eine Zertifizierungsstelle für Ihren Server erstellen und Clientzertifikate signieren, um sicherzustellen, dass sie genau das sind, was sie sagen.

+0

+1 für Hinweis D-H ist anfällig für MITM und schlägt PKI vor. – jweyrich

+0

Ich mag nicht die "sorgt" ... seine Methode ist gebrochen Kryptographie, aber ich weiß, was du meinst, die Methode, die er * will * ist eine, die Widerstand gegen MITM, also +1 von mir auch gewährleistet. –

+0

@Ninefingers Ich stimme zu, das ist, warum ich in Qoutes sorgt. Ich sollte es anders formulieren, um seine Absicht zu zeigen, anstatt was tatsächlich passieren wird. Ich schätze die + 1s. –

5

Es gibt Lösungen für dieses Problem, bei denen nicht versucht wird, Schlüssel zu verstecken (was im Allgemeinen unmöglich ist). Zum Beispiel ermöglicht Diffie-Hellman key exchange dem Client und dem Server, einen neuen geheimen Sitzungsschlüssel auszuhandeln, ohne ihn jemals über die Leitung zu senden.

0

Also, Sie planen, Ihr Geheimnis (der Schlüssel in der ausführbaren Datei) mit einer besonders schwer rückgängig zu machen Methode, die nur rückgängig gemacht werden kann, wenn Sie das Geheimnis der Methode kennen, die Sie auch mit einem verstecken müssen neue super geheime Methode, die nur rückgängig gemacht werden kann, wenn Sie das Geheimnis dieser Methode kennen, die wir mit einer anderen geheimen Methode verstecken müssen, die ein anderes Geheimnis erfordert, das wir verstecken müssen ...

Dies ist ein "Problemüberlauf". Ich hoffe, du kannst sehen, dass du es auf diese Weise nicht lösen wirst. Erzeugen Sie die Schlüssel pro Computer (ssh/sshd tut dies) und schützen Sie diese. Das gleiche Problem oben gilt tatsächlich, denn wenn ich diesen Schlüssel bekomme, ist es immer noch ein Spiel, aber auf diese Art und Weise wirst du es nicht hart in deine Lösung einprogrammieren, was bedeutet, dass das Korrigieren eines kompromittierten Schlüssels viel einfacher ist.