Ich bin gerade ein wenig am knobeln über ein Problem und wollte mal nach nen paar Meinungen fragen. Ich weiß selber noch nicht so genau die Randbedingungen, die hängen auch ein wenig davon ab, wie das Problem gelöst wird.
Zum Thema:
Ich möchte eine "sichere" History haben. Sicher soll in diesem Kontext so viel heißen wie, nicht manipulierbar. Es geht darum, dass ich die Arbeitsschritte in meinem Programm protokollieren will und dieses Protokoll soll, nach Möglichkeit, nicht manipuliert werden können. Um zu verhindern, dass keine Schritte entfernt oder hinzugefügt werden dachte ich mir, ich bilde über jeden Schritt einen Hash. Jeder nachfolgende Schritt erhält diesen Schritthash über den dann wieder der Hash gebildet werden und dem nachfolgenden Schritt mitgegeben werden kann.
[Protokollschritt[#GenesisHash]]->[Nachfolgeschritt[#ParentHash]]->...
Bsp.: (Hashfunktion hier Quersumme)
[123[0]]->[234[6]]->[345[15]]->[789[27]]->...
somit würde verhindert, dass man ein einzelnes Glied manipulieren kann ohne die gesamte Historie neu zu berechnen. Jetzt bleibt natürlich noch das Problem, dass es mit Kenntnis der Hashfunktion ein leichtes ist die Kette neu zu berechnen. Um dies zu Umgehen wollte ich die Hashes mit einem öffentlichen Schlüssel verschlüsseln. Der private bleibt nat. Geheim und wird nur z.B. auf Serverseite dazu verwendet die Hashes zu entschlüsseln um die History zu überprüfen.
Ich hatte mir auch überlegt, die ganze Datei, in der sich die History befindet, einfach zu verschlüsseln. Ich habe aber vor mit dem Programm die History auch lesen zu können. Damit müsste ich aber die Datei auch wieder im Programm entschlüsseln, hier hätte ich dann auch Angst, dass mir das einer mit Reverse Engineering bricht, die Schlüssel, Passwörter usw rausfummelt.
Hat einer Anmerkungen dazu, sieht starke Schwächen, weiß ne bessere Variante? Ich hab sowas halt noch nie gemacht und wüsste auch nicht wonach ich da bei google suchen sollte. Darum hab ich mir das eben mal so zusammengereimt. Vielleicht gibt es ja ne "Standard Implementierung" für sowas, die ich einfach noch nicht kenne und sie mir hier einer verraten kann.
mfg LordNaikon
//EDIT: beim drüber lesen ist mir schon nen Fehler aufgefallen, ich kann gar nicht die nachfolgenden Hashes berechnen, wenn ich die vorhergehenden schon verschlüsselt habe (ohne sie lokal entschlüsseln zu können) .. mist :/ ...
jemand ne bessere Idee... ?
