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
 

Thallius

Top Contributor
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
 

Ruzmanz

Top Contributor
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.
 

ChristianK

Aktives Mitglied
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 :)
 

crypto

Mitglied
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...
 

Thallius

Top Contributor
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
 

ChristianK

Aktives Mitglied
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.).
 

crypto

Mitglied
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...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 IJVM, ich tue auf meinen Stack 100 und 120 rein, danach subtrahiere ich, macht die Maschine 100-120 oder 120-100? Allgemeine Java-Themen 8
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
B Problem mit meinen Klassen Allgemeine Java-Themen 6
D Compiler-Fehler Ich kann meinen Kompilierer nicht starten. Allgemeine Java-Themen 16
M ireport (Jasper Report) geht nur auf meinen Rechner Allgemeine Java-Themen 3
temi Private statische Hilfsmethoden Allgemeine Java-Themen 33
G Public oder Private oder Protected Sinn Allgemeine Java-Themen 14
J private and arrays Allgemeine Java-Themen 2
Thallius Warum ist meine private porperty public? Allgemeine Java-Themen 7
J private static final String variable Allgemeine Java-Themen 8
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
L Private Key aus KeyDatei extrahieren Allgemeine Java-Themen 2
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
G Testcases mit Junit auf private-Methode Allgemeine Java-Themen 7
S private ignorieren Allgemeine Java-Themen 7
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
P Private und public Allgemeine Java-Themen 2
tfa Unit-Tests für private Methoden Allgemeine Java-Themen 25
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
A Private-Wert eines Objekts auslesen Allgemeine Java-Themen 9
F Javadoc: @value tag nicht für private fields? Allgemeine Java-Themen 11
G per Reflection auf private Klassenattribute zugreifen? Allgemeine Java-Themen 9
M per reflection private attributsnamen auslesen Allgemeine Java-Themen 3
reibi Aufruf eines private Konstruktors Allgemeine Java-Themen 7
J Java Private Edition? Allgemeine Java-Themen 7
M Stärkerer access-modifier als "private"? Allgemeine Java-Themen 17
F Ein interface und private Methoden? Allgemeine Java-Themen 13
S private Vars in abstrakter Klasse nicht in der Unterklasse? Allgemeine Java-Themen 6
S private Instanzvaribalen bei "Innerer-Vererbung" Allgemeine Java-Themen 9
T ungewollter Zugriff auf private Variablen? Allgemeine Java-Themen 3
S private Methoden benutzen Allgemeine Java-Themen 11
G private vs. public JRE Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben