52 Stimmen

Wie kann man geheime Schlüssel in einem Code verstecken?

Ich habe mich schon seit einiger Zeit gefragt, wie manche Software geheime Schlüssel so versteckt, dass sie nicht auf triviale Weise entdeckt werden können. Nur ein paar Beispiele:

  • DVD-Player-Software versteckt CSS-Tasten
  • Software mit Seriennummern/Registrierungscodes verbirgt Schlüssel/Hashes, die zur Validierung der Seriennummern verwendet werden

Offensichtlich tun diese Programme mehr, als nur den Schlüssel in einem Byte[] zu speichern, denn dann wäre es ein Leichtes, ihre Schlüssel zu stehlen und eigene Seriennummern zu generieren usw.

Welche Strategien werden angewandt, um diese Schlüssel so zu verstecken, dass sie nicht leicht gefunden werden können?

41voto

Michael Punkte 52790

Der Grund, warum diese geheimen Schlüssel so leicht entdeckt werden konnten, ist, dass sie in der Software versteckt waren.

Vermeiden Sie es um jeden Preis, Geheimnisse in Software zu verstecken - Verschleierung bringt Sie nur bedingt weiter. Fragen Sie sich Folgendes: Wie gut kann ich einen Schlüssel in einer Software vor jemandem verstecken, der vollen Zugriff auf die Disassemblierung, die Debugger für den Benutzermodus und den Kernelmodus hat und keinen Tagesjob hat? Es ist nur eine Frage der Zeit, bis er geknackt wird.

13voto

John Smith Punkte 4285

Sie verstecken den Schlüssel einfach irgendwo und entschlüsseln ihn, wenn Sie ihn brauchen. Die "sichere" Verwendung des Schlüssels ist der komplizierte Teil. Cracker könnten einen Haltepunkt an der Stelle setzen, an der Sie den entschlüsselten Schlüssel verwenden, und ihn ausgeben. Sie könnten Ihren Code nach Mustern durchsuchen, die zeigen, dass Sie einen bekannten Verschlüsselungsalgorithmus verwenden (die meisten Algorithmen haben vorberechnete Tabellen). usw. usw.

Deshalb muss man die gesamte ausführbare Software schwer analysierbar machen. Zu diesem Zweck werden Packer für ausführbare Dateien, die Ausführung des Codes in einer virtuellen Maschine, Integritätsprüfungen usw. eingesetzt. All dies soll die Fehlersuche und die Änderung des Codes verlangsamen.

Wie die meisten Leute hier betonen, kann man niemanden aufhalten, sondern nur verlangsamen. Ich würde in ein Cracker-Forum gehen und dort nach Vorschlägen für das Verstecken von Schlüsseln fragen. Sie sind höchstwahrscheinlich hilfsbereit, wenn du nett fragst.

ps. Public Key Crypto wird den Schlüssel nicht besser verstecken, aber es könnte es schwieriger (oder theoretisch unmöglich) machen, einen Schlüsselgenerator zu erstellen, wenn Sie ein Lizenzierungssystem haben.

6voto

Furious Coder Punkte 1150

Die Quintessenz ist, dass Sie das nicht können. Die Gründe dafür finden Sie in einem anderen Kommentar hier. Selbst Verschlüsselungssoftware wie PGP/GPG speichert die Schlüssel in einer Datei und fordert dann nachdrücklich, diese Dateien auf einem Flash-Laufwerk in einem Safe oder an einem anderen sicheren Ort aufzubewahren. Schlüssel, die als Teil von ausführbarem Code gespeichert sind, werden entdeckt.

Wenn Sie versuchen, irgendetwas auf einem Client-Rechner zu verschlüsseln, das vom Client im Rahmen des normalen Betriebs entschlüsselt wird, ist das ebenfalls ein zweifelhaftes Unterfangen. Die Client-Rechner sind von Natur aus unsicher, und Sie können nicht kontrollieren, was sie mit Ihren Daten anstellen können.

Wenn Sie versuchen, sich zu authentifizieren, sollten Sie stattdessen eine internetbasierte Authentifizierung mit Anmeldung bei einem Server oder eine Art von generiertem KeyCode zur Validierung der Software in Betracht ziehen.

Geheime Schlüssel als Teil eines öffentlich-privaten Schlüsselpaares sollten in Dateien aufbewahrt werden, die gesichert werden können. Symmetrische Schlüssel sollten spontan als Sitzungsschlüssel erzeugt und dann verworfen werden. Gehen Sie immer davon aus, dass jeder, der einen geheimen oder Sitzungsschlüssel auf seinem Computer hat, in der Lage sein wird, ihn zu entdecken und gegen Ihre Absichten zu verwenden.

Lesen " Angewandte Kryptographie " von Bruce Schneier für weitere Informationen.

5voto

Promit Punkte 3496

Man kann einen Schlüssel nicht ewig verstecken. Aber man kann es schwer machen, ihn zu finden. Einige Ansätze bestehen darin, den Schlüssel im Speicher zu verschlüsseln, mehrere (vielleicht unterschiedlich verschlüsselte) Kopien aufzubewahren, die gegeneinander geprüft werden, Scheinkopien für den Zugriff zu hinterlassen, den Schlüssel in einem bizarren Format zu speichern usw. Nichts davon wird funktionieren, wenn jemand wirklich Ihren Schlüssel will, aber Sie können zumindest einen gelegentlichen/unerfahrenen Angreifer abschrecken.

3voto

Stephane Grenier Punkte 14946

Sie brauchen nicht immer einen Schlüssel, um eine Lizenz zu validieren.

Aber abgesehen davon kann Ihr Schlüssel auch das Ergebnis einer anderen Funktion sein. Sie speichern keinen bestimmten Schlüsselwert, sondern haben eine Funktion, die den Schlüssel spontan generiert (immer das gleiche Ergebnis). Das ist zwar nicht unmöglich, aber viel schwieriger zu finden, da Sie nicht mehr nach einem Wert suchen, sondern herausfinden müssen, dass es sich um eine Gleichung handelt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X