2016-05-13 9 views
1

Problem:Der beste Weg Passwort zu handhaben, wenn für encrypt verwendet Ändern/entschlüsseln

Ich brauche eine Menge Daten zu verschlüsseln/entschlüsseln. Diese Daten werden mit einem Passwort verschlüsselt/entschlüsselt (genauer gesagt mit RNCrytor lib). Man sollte in der Lage sein, dieses Passwort zu ändern.

Meine Frage ist, wie dies am effizientesten getan werden kann?

Meine nicht so große Lösung:

Es muss über alle Daten eine bessere Methode anders als Looping und es zu entschlüsseln. Um es dann erneut mit einem neuen Passwort zu verschlüsseln.

Antwort

5

Dies ist eines der vielen Probleme, die durch Hinzufügen einer indirekten Schicht gelöst werden. Generieren Sie einen zufälligen Schlüssel, verwenden Sie diesen Schlüssel zum Verschlüsseln der Daten und speichern Sie den Schlüssel in einer Datei (oder Datenbankspalte oder was auch immer), die selbst mit einem aus einem Kennwort abgeleiteten Schlüssel verschlüsselt ist.

So etwas wie (Vorsicht, ich weiß nicht, Swift):

// Generation of the data keys 
let dek = RNCryptor.randomDataOfLength(RNCryptor.FormatV3.keySize) 
let dak = RNCryptor.randomDataOfLength(RNCryptor.FormatV3.keySize) 

// Use these to work on the data 
let encryptor = RNCryptor.EncryptorV3(encryptionKey: dek, hmacKey: dak) 
let decryptor = RNCryptor.DecryptorV3(encryptionKey: dek, hmacKey: dak) 

// Save the data keys encrypted with the password 
let dek_file = RNCryptor.encryptData(dek, password: password) 
let dak_file = RNCryptor.encryptData(dek, password: password) 
// Store both dek_file and dak_file somewhere 

// Next time, load dek_file and dak_file from where you stored them 
let dek = RNCryptor.decryptData(dek_file, password: password) 
let dak = RNCryptor.decryptData(dek_file, password: password) 
+0

Das ist viel besser dank :) – Mat0

+0

Noch besser wäre es, das nicht selbst tun: Verwenden Sie GPG oder andere gut getestete Lösung. –