Key-File im selben Ordner speichern?

memo1990

Aktives Mitglied
Hallo ihr lieben Java-Coder,

habe eine allgemeine Frage zum Thema Verschlüsselung.

Ich habe ein Programm geschrieben worin man Kundendaten eingeben und als Datei abspeichern kann. Diese werden mit einem AES-Key, den ich ebenfalls als File abspeichere, verschlüsselt. Kann ein fremder die verschlüsselten Kundendaten mit dem Key-File wieder entschlüsseln, ohne das Programm nutzen zu müssen?

MfG
Memo1990
 

Dimax

Top Contributor
wenn das nicht der Fall wäre,hättest du den Besten verschlüsselungs-Algorithmus ausgedacht) Es ist nur die Frage ob sich der Aufwand zum Knacken Lohnt)).Also den Key-File von der Schweizer Bank würde ich keinem vertrauen wenn ich der Bankier wäre))
 

Thallius

Top Contributor
Ein Key sollte niemals irgendwo gespeichert sein außer im kopf des Users. Deshalb solltest du den Key aus dem Passwort des Benutzers erzeugen, welches dieser jedesmal eingeben muss wenn er die Software startet
 

memo1990

Aktives Mitglied
Mein Programm bietet an, sein Benutzer-Passwort ändern zu können. Wenn der Benutzer sein Passwort ändert, muss ich ja alle Kundendaten einlesen, entschlüsseln und mit dem neuen Benutzer-Passwort wieder verschlüsseln.

Außerdem muss ich das Benutzer-Passwort ja auch irgendwo verschlüsselt speichern.
 

Thallius

Top Contributor
Wenn der User sein Passwort ändern, dann verschlüsselst du das alte Passwort mit dem Key des neuen und schon kannst du die Datenbank weiter mit dem alten key entschlüsseln
 

memo1990

Aktives Mitglied
Hallo,

also ich habe mich jetzt mal mit hashen von Passwörtern beschäftigt. Ich wusste bisher nicht wie Passwörter in der Regel abgespeichert werden. Danke an @Wurstkopp.

Wie mach ich das jetzt aber am effizientesten mit der Verschlüsselung der Kundendaten. Ich denke mal am besten ist es, wenn ich den Key, der für die Kundendaten-Verschlüsselung dient, selbst mit dem Benutzer-Passwort verschlüssele.
 

memo1990

Aktives Mitglied
Guten morgen,

ich brauche nochmal eure Hilfe. Ich weiß nicht wie ich das genau umsetzen soll. Denn wenn ich den Key-File (für Kundendaten) mit dem Benutzer-Passwort verschlüssele, habe ich doch wieder ein Key-File den ich abspeichern muss (SecretKeySpec). Das macht ja kein Sinn.
 

Thallius

Top Contributor
Wenn du den Secret key verschlüsselst, indem du das Passwort als Salt für die verschlüsselung benutzt, dann kannst du das Ergebnis ja ruhig speichern. Es kann ja dann keiner entschlüsseln ohne das Passwort zu wissen. Und das muss ja jedesmal eingetippt werden und ist (Hoffentlich) nirgendwo gespeichert.
 
X

Xyz1

Gast
Ich lege meine Passwörter auch immer neben dem Geheimnis ab - viele können trotzdem aber damit nichts anfangen :D :D

(Sorry für diese Antwort ;))
 

Wurstkopp

Bekanntes Mitglied
Also wenn die Daten zu groß sind um sie beim Passwortwechsel neu zu verschlüsseln (Ist technisch wohl erstmal die einfachste Variante) gibt es noch die Möglichkeit einen Zwischenschlüssel zu nutzen. Diesen verschlüsselst du mit deinem Passwort-Hash und kannst ihn einfach neu verschlüsseln bei einer Passwortänderung. Hier ist z.B. ein interessanter Post dazu: https://security.stackexchange.com/...ting-with-passwords-encryption-of-key-vs-data
 

memo1990

Aktives Mitglied
Hallo,

tut mir leid wenn ich da nochmal nachfrage. Wie wird es denn generell gemacht, wenn Daten von der Anwendung verschlüsselt auf dem lokalen Speicher abgelegt werden? Wird der Key einfach nur versteckt auf der Platte abgelegt? Oder wendet man da eine andere Methode an?

Zum verschlüsseln des SecretKeys nochmal. Wie genau mache ich das, mit welcher Klasse?
 
Zuletzt bearbeitet:

memo1990

Aktives Mitglied
Das musst du doch nicht speichern, es sollte ja reichen wenn das ganze im RAM ist.

Wie meinst du das? Der Schlüssel für den Schlüssel muss ich doch auch aufbewahren, sonst kann ich es doch nicht mehr entschlüsseln. Beim nächsten Start der Anwendung habe ich doch wieder einen neuen Schlüssel (im RAM).
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Der Schlüssel für den Schlüssel muss ich doch auch aufbewahren
Nein, das ist doch der Witz an der Sache. Das Prinzip mal ganz langsam:
  1. Du hast Verschlüsselungsmethode crypt(s,d), die gegebene Daten d mit Schlüssel s verschlüsselt.
  2. Du hast einen zufällig gewählten Schlüssel s.
  3. Jetzt wäre es ... ungeschickt, s einfach so auf die Platte zu speichern. Stattdessen nimmst Du das Passwort pw des Benutzers und verschlüsselt mit diesem den Schlüssel s. Damit erhältst Du einen verschlüsselten Schlüssel v (v = crypt(pw, s)), den Du auf die Platte packst.
  4. Startet jetzt die Anwendung neu, kommt sie nicht an die Daten, weil sie nur v aber s nicht kennt. Um an s zu gelangen, muss der Benutzer sein Passwort pw eingeben, dann kannst Du berechnen s = decrypt(pw, v). Jetzt erst kannst Du die verschlüsselten Daten e wieder mit s entschlüsseln d = decrypt(s, e).
  5. Wenn der Benutzer das Passwort ändert, berechnest Du einfach v mit dem geänderten Passwort neu und speicherst v ab.
 

memo1990

Aktives Mitglied
@mihe7 danke für deine Beschreibung. Soweit habe ich das verstanden.

Zu Punkt 3. Mit welcher Klasse/Methode verschlüssele ich den Schlüssel s? Erstelle ich mir dann nochmal ein AES-Key aus dem Benutzer-Passwort? So wie hier gezeigt?
 

memo1990

Aktives Mitglied
Also wenn ich das jetzt richtig versanden habe sollte der Code so ausschauen (den habe ich zum Test mal schnell zusammengeschrieben):

Code:
package main;

import java.io.*;
import java.util.Arrays;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;

public class Test {
    public void encryptKey(SecretKey customerKey, String userPassword) {
        try {
            byte[] passwordHash = MessageDigest.getInstance("SHA-256").digest(userPassword.getBytes()); //Benutzer-Passwort mittel SHA-256 hashen
            byte[] hash128 = Arrays.copyOf(passwordHash, 16); //Davon die ersten 128 Bit (16 x 8 Bit) verwenden
            SecretKey tempKey = new SecretKeySpec(hash128, "AES"); //AES-Schlüssel mit dem Benutzer-Passwort erstellen
       
            Cipher cip = Cipher.getInstance("AES");
            cip.init(Cipher.ENCRYPT_MODE, tempKey);
            CipherOutputStream cipOut = new CipherOutputStream(new FileOutputStream("C:\\NameOfKey.key"), cip);
            cipOut.write(customerKey.getEncoded());
            cipOut.close();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public SecretKey decryptKey(String userPassword) {
        try {
            byte[] passwordHash = MessageDigest.getInstance("SHA-256").digest(userPassword.getBytes());
            byte[] hash128 = Arrays.copyOf(passwordHash, 16);
            SecretKey tempKey = new SecretKeySpec(hash128, "AES");
       
            Cipher cip = Cipher.getInstance("AES");
            cip.init(Cipher.DECRYPT_MODE, tempKey);
            CipherInputStream cipIn = new CipherInputStream(new FileInputStream("C:\\NameOfKey.key"), cip);
            byte[] readKey = cipIn.readAllBytes();
       
            return new SecretKeySpec(readKey, "AES");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
   
        return null;
    }
}

Die Verschlüsselung für den Key der Kundendaten findet lediglich im RAM statt. Sowie @Dukel es bereits erwähnt hat.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H "File too large" - genauere IOException-Behandlung Allgemeine Java-Themen 5
H Sicherer File Tresor Allgemeine Java-Themen 13
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
D Read JSON File Problem Allgemeine Java-Themen 9
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C jar File mehrfach aufrufen (als Windows Dienst) Allgemeine Java-Themen 5
N File Path mit Variablen angeben Allgemeine Java-Themen 1
izoards Zugriff auf gemeinsame Ressource (CSV-File) Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
F jar File ausführen Allgemeine Java-Themen 14
M File Binary Representation Allgemeine Java-Themen 1
N jar File auf Mac mit Doppelklick starten Allgemeine Java-Themen 5
O Input/Output java.io.File beenden Allgemeine Java-Themen 5
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
T Jar File zu exe... Allgemeine Java-Themen 3
M Foreign Memory API / Memory-Mapped File Allgemeine Java-Themen 0
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
S File lesen und schreiben Java 6 Allgemeine Java-Themen 2
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
F Input/Output FileNotFoundException, obwohl File existiert Allgemeine Java-Themen 5
G Excel File öffnen, in Zelle schreiben, abspeichern Allgemeine Java-Themen 6
L JAR-File auf Ilias (LMS) laufen lassen Allgemeine Java-Themen 0
ralfb1105 Classpath Directory fuer Properties File Allgemeine Java-Themen 2
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
A File lesen Codierung Charset Allgemeine Java-Themen 5
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15
I TrueZip add file to archive Allgemeine Java-Themen 10
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
J ftp - delete file ohne appache Allgemeine Java-Themen 8
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
T ImageIO.read -> Can`t read input file Allgemeine Java-Themen 11
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
C Swing File[] als klickbare links in irgendeinem Swing Element Allgemeine Java-Themen 3
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
C Authentifizierung mit java.nio.file? Allgemeine Java-Themen 5
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
G Java/LibGDX File Loading Exception Allgemeine Java-Themen 2
Cromewell JavaFX FXML-File lädt unter Ubuntu nicht Allgemeine Java-Themen 7
D Java Anwendung mit dll File Allgemeine Java-Themen 5
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
thet1983 Input/Output read properties file from classpath Allgemeine Java-Themen 3
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
J Properties file ändern Allgemeine Java-Themen 12
S Executable Jar File startet nicht unter Windows 10 Allgemeine Java-Themen 3
B Objekte anhand von Properties file Allgemeine Java-Themen 41
Dechasa Input/Output Write into File Allgemeine Java-Themen 2
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
H Security Manager (IIOException: Can't read input file!) Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
C Input/Output Problem bei Datei verschiebung mit File.move und Paths.get() Allgemeine Java-Themen 26
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
F Open source file übersetzen Phython -> Java Allgemeine Java-Themen 4
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
M Desktop jar File icon Ändern? Allgemeine Java-Themen 14
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0
Thallius Custom File Chooser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
J Java Download Filedownload File.getFileName Allgemeine Java-Themen 3
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
G SecurityManager/Policy-File/Reflection Allgemeine Java-Themen 0
M pdf File bzw. ausgefüllte pdf Formulare drucken Allgemeine Java-Themen 2
S Input/Output File Not Found FileReader Allgemeine Java-Themen 6
Thallius Serialisiertes File kann auf anderem Rechner nicht geladen werden Allgemeine Java-Themen 12
P Java Dynamic Web Project -> config File Allgemeine Java-Themen 1
S runnable jar file in Verbindung mit itext Allgemeine Java-Themen 3
D Variablen java.io.File zum vergleichen abspeichern Allgemeine Java-Themen 1
M File IO Klasse ... wie einbinden Allgemeine Java-Themen 6
O Freies Tool zum Jar-File obfuscaten gesucht! Allgemeine Java-Themen 5
F File.listFiles ohne .sort Allgemeine Java-Themen 6
B XML File JAXB Allgemeine Java-Themen 0
S Platzverbrauch, File oder String Allgemeine Java-Themen 14
J Runnable jar-File: Fehlermeldung Allgemeine Java-Themen 2
P Kurze Frage: aus einer File die Zeilenanzahl auslesen Allgemeine Java-Themen 9
K Gepacktes Jar-File gibt beim Doppelklick eine Exception aus Allgemeine Java-Themen 4
P java.nio.file unter Java 6 verwenden Allgemeine Java-Themen 4
A TXT File einlesen unterschiedliche Zeilenlänge Allgemeine Java-Themen 9
B Finde letztes veränderte File Allgemeine Java-Themen 4
E Zip-File entpacken: unterschiedlicher Zeitaufwand bei unterschiedlicher Puffergröße Allgemeine Java-Themen 2
Guybrush Threepwood File.canWrite() und UAC Allgemeine Java-Themen 7
N Input/Output Mit Windows 7 erzeugtes zip-File in Java 7 öffnen Allgemeine Java-Themen 5
B Garbage Collection Logfile: Binary File Allgemeine Java-Themen 2
H XML-File mit Java erzeugt Frage Allgemeine Java-Themen 10
V C-Header Datei aus .java File herstellen Allgemeine Java-Themen 10
D File mit Inhalt kopieren und dieses File dann neu erstellen ? Allgemeine Java-Themen 4
T @NotBlank verwendet nicht message aus .property-File Allgemeine Java-Themen 4
G Jar-File soll eignen *.jar Namen ausgeben Allgemeine Java-Themen 10
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
P ganze Zeilen in einem File mit .replace() ändern. Allgemeine Java-Themen 10
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
P Aus einem File Zeilen auslesen. Allgemeine Java-Themen 15
V ProcessBuilder exe file Allgemeine Java-Themen 3
L Variablen IO Exception weil File angeblich nicht exisitert Allgemeine Java-Themen 10
M File einlesen während es beschrieben wird.. Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben