Wie verstecke ich meinen private Key am besten im Code?

Thallius

Top Contributor
Hi,

Ich kommuniziere mit einem Webserver. Alle Daten die hin- und hergeschickt werden, werden vorher mit einem 1024bit Key versehen und dann mit hmac gehasht.

Wie würdet ihr diesen Key am besten in den Source Code einbetten, dass er nicht so leicht von einem Hacker gefunden werden kann? Also aufwand und nutzen sollte dabei natürlich passen. Das man keine 100%tige Sicherheit bekommt ist eh klar.

Gruß

Claus
 
Naja, man könnte ja z.B. den Key einfach geshiftet im Source codieren und dann während der Laufzeit an irgendeiner Stelle im Programm erst in die richtige "Form" bringen. Das dürfte schonmal nicht so einfach zu finden sein, wie wenn man das Dingen gleich als String key="xxx" implementiert.

Gruß

Claus
 
Wenn man dannach im Sourcecode sucht, dann ist doch so ein Schlüssel ziemlich auffällig. Es sei denn im Quelltext finden sich deutlich mehr kryptische Strings / byte[]s. Wenn die Variable dann "a1" heißt und dann noch ein paar XOR-Operationen ausgeführt werden, hilft das nicht viel. Den Quelltext kan man schließlich leicht decompilen. Nun könnte man zusätzlich einen Quellcode-Obscurer nutzen. Sobald ich den "verschlüsselten" Key sehe, kann ich die Variable zuordnen und alle Methoden, die darauf zugreifen ... System.out.println() erledigt den Rest.

Java:
public String getA() {
   // unleserliches Zeug zum entschlüsseln der private keys.
   System.out.pritnln(a1);
   return a1;
}

Key auf dem Webserver verschlüsselt abstellen. Applikation holt den verschlüsselten Private Key ab und entschlüsselt den dann in der Applikation ... das wäre mein Gedanke, wobei dir eigentlich nichts helfen wird.
 
Naja, man könnte ja z.B. den Key einfach geshiftet im Source codieren und dann während der Laufzeit an irgendeiner Stelle im Programm erst in die richtige "Form" bringen. Das dürfte schonmal nicht so einfach zu finden sein, wie wenn man das Dingen gleich als String key="xxx" implementiert.

Gruß

Claus

Das gilt jedoch nicht als Argument unter "Experten". Einen Schlüssel im Quelltext geshiftet und drei Mal rotiert zu hinterlegen ist gleichbedeutend mit dem direkten hinterlegen des Schlüssels. Die Zeit, bis du den Schlüssel hast ist messbar in Stunden - mit 2 Händen.

Einen Schlüssel sicher zu hinterlegen ist unmöglich. Für den Idealfall steht dir dabei eine externe Hardware (mit RFID-Card o.ä.) zur Verfügung, die die Verschlüsselung übernimmt oder du lässt den User den Schlüssel eingeben (wobei ein RAM-Dump das auch wieder unnötig macht...).

Teufelskreis würde ich sagen 🙂
 
Also bevor man dir wirklich helfen kann, wär ne präzisere Frage wünschenswert,
Du berechnest den Hashwert der Daten und signierst den mit dem RSA-key oder was heißt "versehen" ???

Den Schlüssel im Sourcecode zu hinterlegen ist eigentlich nie eine gute idee, in compilierten maschinencode nicht und im jvm-bytecode erst recht nicht!
Das probelm (von dem ich glaube dass du es hast) ist der Grund weshalb es Zertifikat-Infastrukturen gibt...

Entscheidende Frage:
Werden die Daten(!) verschlüsselt, oder der Hash der Daten(!) signiert???


PS: Signieren wäre einfach(er) zu lösen...
 
Wie gesagt es geht hier nicht um eine 100%tige Sicherheit. Es geht mehr darum, dass nicht jeder Hobby-Hacker mal eben entschlüsselt wie ich die Daten signiere die ich zum Server schicke. Die Software wird nur Konzernintern von Technikern genutzt. es ist also nicht zu erwarten, dass sich ein Haufen mega Hacker auf die software stürzen.

Gruß

Claus
 
Das hast du bis jetzt noch nicht erwähnt 😉

Dann bleiben dir zwei Varianten:
1. Etwas nach Post #4, was jedoch sinnlos und unnötig kompliziert wird.
2. Deinem Kunden erklären, dass er entweder Sicherheit will (SSL) oder "Alibi-Kiddy-Sicherheit" (siehe 1.).
 
Ich kann ChristianK nur beipflichten!
Viell ein hilfreiches Argument:

Bei schäden durch IT-sabotage / spionage etc. war der täter in über 50 % ein Innentäter...

Außerdem ist das Suchen von Schlüsseln im Quelltext eines der ersten Dinge was ein (Hobby-) Hacker versucht...
 

Zurück
Oben