it-swarm.com.de

Wie versteckt man geheime Schlüssel im Code?

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

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

Offensichtlich haben diese Programme mehr zu tun als nur den Schlüssel in einem Byte [], da dies das Stehlen ihrer Schlüssel und das Generieren eigener Seriennummern usw. vereinfacht.

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

42
TTar

Der Grund, warum diese geheimen Schlüssel so leicht zu entdecken waren, liegt darin, dass sie in Software versteckt waren.

Vermeiden Sie es, Geheimnisse in Software um jeden Preis zu verbergen - Verschleierung bringt Sie nur so weit. Fragen Sie sich folgendes: Wie gut kann ich einen Schlüssel in der Software vor jemandem verbergen, der uneingeschränkten Zugriff auf die Demontage-, Benutzermodus- und Kernelmodus-Debugger hat und keinen Tagesjob hat? Es ist nur eine Frage der Zeit, bis es rissig wird.

35
Michael

Sie verstecken den Schlüssel einfach irgendwo und entschlüsseln ihn, wenn Sie ihn brauchen. Die Verwendung des Schlüssels "sicher" ist das komplizierte Teil. Cracker setzen möglicherweise einen Haltepunkt an die Stelle, an der Sie den entschlüsselten Schlüssel verwenden, und legen ihn ab. Sie können Ihren Code nach Mustern durchsuchen, die zeigen, dass Sie einen bekannten Krypto-Algorithmus verwenden (die meisten Algorithmen verfügen über vorberechnete Tabellen). usw. usw. 

Aus diesem Grund müssen Sie die gesamte Software ausführbar machen, um sie zu analysieren. Dazu verwenden Sie ausführbare Packer, die Ausführung von Code in einer virtuellen Maschine, Integritätsprüfungen usw. All dies dient dazu, das Debuggen zu verlangsamen und Ihren Code zu ändern.

Wie die meisten Leute hier darauf hinweisen, kann man niemanden aufhalten, nur verlangsamen. Ich würde in ein Cracker-Forum gehen und dort nach Vorschlägen zu wichtigen Problematiken fragen. Sie sind höchstwahrscheinlich hilfreich, wenn Sie nett fragen.

ps. Krypto mit öffentlichen Schlüsseln wird den Schlüssel zwar nicht besser verbergen, aber es macht es möglicherweise schwieriger (oder theoretisch unmöglich), einen Schlüsselgenerator zu erstellen, wenn Sie ein Lizenzierungsschema verwenden.

13
John Smith

Die Quintessenz ist, Sie können nicht. Sehen Sie hier einen anderen Kommentar für die Gründe dafür. Sogar Verschlüsselungssoftware wie PGP/GPG speichert die Schlüssel in einer Datei und fordert sie dann strikt auf, sich auf einem Flash-Laufwerk in einem sicheren oder einem anderen sicheren Bereich zu befinden. Schlüssel, die als Teil des ausführbaren Codes gespeichert sind, werden erkannt.

Wenn Sie versuchen, auf einem Client-Computer etwas zu verschlüsseln, das vom Client im Rahmen normaler Vorgänge entschlüsselt wird, handelt es sich dabei auch um eine Narrensache. Die Client-Computer sind von Natur aus unsicher und Sie können nicht steuern, was sie mit Ihren Daten tun können.

Wenn Sie sich authentifizieren möchten, sollten Sie sich stattdessen die internetbasierte Authentifizierung mit Anmeldungen bei einem Server oder eine Art generierten KeyCode ansehen, der zur Überprüfung der Software verwendet wird.

Geheime Schlüssel als Teil eines öffentlich-privaten Schlüsselpaares sollten in Dateien gespeichert werden, die gesichert werden können. Symmetrische Schlüssel sollten sofort als Sitzungsschlüssel generiert und anschließend verworfen werden. Gehen Sie immer davon aus, dass jeder, der einen geheimen Schlüssel oder einen Sitzungsschlüssel auf Ihrem Computer hat, diesen erkennen und gegen Ihre Absichten verwenden kann.

Lesen Sie " Applied Cryptography " von Bruce Schneier für weitere Informationen.

6
Furious Coder

Sie können einen Schlüssel nicht für immer verstecken. Aber Sie können es schwer machen, es zu finden. Einige Ansätze bestehen darin, den Schlüssel im Speicher zu verschlüsseln, mehrere Kopien (die möglicherweise unterschiedlich verschlüsselt sind) miteinander zu überprüfen, Dummy-Kopien für den Zugriff zu lassen, den Schlüssel in einem bizarren Format zu speichern, usw. Keine von ihnen funktioniert, wenn jemand wirklich funktioniert will Ihren Schlüssel, aber Sie können zumindest einen zufälligen/unerfahrenen Angreifer davon abhalten.

5
Promit

Als wir mit der Entwicklung unserer Software begonnen haben, haben wir eine datierte Lizenzdatei erstellt. Dann haben wir festgestellt, dass nicht allzu viele Menschen daran interessiert sind, unsere Software zu kaufen. Dann entschieden wir uns, es kostenlos zu verschenken. Viel mehr Leute begannen sich zumindest darum zu kümmern, unser Meisterwerk auszuprobieren. Schließlich haben wir unsere Software als Open Source bereitgestellt. Viel mehr Benutzer haben damit angefangen. Nun hoffen wir nur, dass eine kleine Anzahl dieser Benutzer zu zahlenden Kunden werden kann (z. B. Kauf von Support oder Forderung nach Anpassung).

Die Quintessenz ist, wenn jemand Ihre Software knacken möchte, wird er es trotzdem tun. Lohnt es sich wirklich, Ihre Zeit damit zu verschwenden, ihn mit diesem versteckten geheimen Schlüssel zu schützen? 

2
Yakov Fain

Sie benötigen nicht immer einen Schlüssel, um eine Lizenz zu überprüfen. 

Wenn Sie diese Tatsache jedoch ignorieren, kann Ihr Schlüssel auch das Ergebnis einer anderen Funktion sein. Sie speichern eigentlich keinen bestimmten Schlüsselwert, stattdessen haben Sie eine Funktion, die den Schlüssel im laufenden Betrieb generiert (immer dasselbe Ergebnis). Obwohl dies nicht unmöglich ist, ist es viel schwieriger zu finden, da Sie nicht mehr nach einem Wert suchen, aber Sie müssen herausfinden, dass es sich um eine Gleichung handelt.

1

Wenn Sie es sich leisten können, speichern Sie den privaten Schlüssel am besten in einem kryptografischen USB-Token. Der Schlüssel ist nur Schreiben, dh Sie können ihn setzen, aber nicht lesen. Das Token führt die kryptographischen Operationen intern in seiner Hardware aus. Das Abrufen des Schlüssels wird sehr kompliziert (wenn für das Token keine bekannte Sicherheitsanfälligkeit bekannt ist, was bei älteren nicht der Fall ist).

1
galinette

Das Ausblenden geheimer Schlüssel im Code wird nicht wirklich sicher sein. Wie Sie vielleicht bemerkt haben, werden DVDs und die meisten Software-Seriennummernregistrierungen täglich gehackt. Wenn Sie wirklich etwas sichern möchten, müssen Sie die Verschlüsselung mit öffentlichen Schlüsseln verwenden.

0
Adam Berent

Sie können nicht, es ist unmöglich. Jeder Angreifer, der Zugriff auf den Zielcomputer hat, kann Ihren Code zerlegen, um ihn zu finden oder die Schlüsseldatei auf dem Zielcomputer zu finden.

Die EINZIGE Möglichkeit, um sicherzustellen, dass der Verschlüsselungsschlüssel sicher ist, besteht darin, dass er manuell vom Benutzer eingegeben wird, wenn er benötigt wird.

0
FNG