Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Realdaten konsistent verwürfeln? (https://www.delphipraxis.net/190074-realdaten-konsistent-verwuerfeln.html)

mensch72 27. Aug 2016 16:15

AW: Realdaten konsistent verwürfeln?
 
im einfachsten Fall exportiere man Namensdaten aus einer Telefonbuch CD.
Dann jeweils die Datensatznummerm von Vornamen und Nachnamen gegenläufig indiziert wieder zusammensetzen.. vola, fertig ist eine braucbar lesbare Namensliste mit zufälliger Kombination aus Vor- & Nachnamen.

Sagen wir das ergibt 65536 Datensätze mit "Demo-Namen"... dann rechne ich über die zu anonymisierenden Teile (oder einem HASH davon) meiner sagen wir 10000 org. Daten einen CRC16 und nutze diesen als Index auf meine 65536 DemoDatensätze. Da lässt sich nix per Wörterbüchern oder CRC16/MD5 Revers eineindeutig zurückrechnen, also es lässt sich so definitiv nicht wieder deanonymisieren:)

Mavarik 28. Aug 2016 01:58

AW: Realdaten konsistent verwürfeln?
 
Zitat:

Zitat von mensch72 (Beitrag 1345902)
Sagen wir das ergibt 65536 Datensätze mit "Demo-Namen"... dann rechne ich über die zu anonymisierenden Teile (oder einem HASH davon) meiner sagen wir 10000 org. Daten einen CRC16 und nutze diesen als Index auf meine 65536 DemoDatensätze. Da lässt sich nix per Wörterbüchern oder CRC16/MD5 Revers eineindeutig zurückrechnen, also es lässt sich so definitiv nicht wieder deanonymisieren:)

Vergiss doch mal den Hash quatsch... Darum geht es doch überhaupt nicht...

mensch72 28. Aug 2016 10:31

AW: Realdaten konsistent verwürfeln?
 
Zitat:

Zitat von Mavarik (Beitrag 1345918)

Vergiss doch mal den Hash quatsch... Darum geht es doch überhaupt nicht...

Hier im Post 1 steht, das:
..."Dazu müsste pro Datei ein Schlüsselfeld angegeben werden und es müsste für jeden Monat konsistent aus original
"KdNr";"Vorname";"Nachname";"KontoNr"
"01";"Klaus";"Müller";"2222"
nun
"01";"Gerhard";"Lehmann";"4444"
Erst wenn Klaus Müller wegen Heirat Klaus Maier heisst, sollte auch der Demo-Nachname geändert werden."...

Es geht also nach meinem Verstädnis nicht nur um x-beliebige Zuordnung von puren Zufallsdatensätzen.
=> Ich würde deshalb speziell bei/wegen dieser Anforderung vorschlagen, eine Hash oder CRC basierte Indexauswahl von konstanten Listen mit zufälligen Werten zu verwenden, denn damit bleibt die "zufällige" Zuordnung solange gleich, bis sich im Ausgangswert(Namen) etwas ändert.

fillibuster 29. Aug 2016 08:25

AW: Realdaten konsistent verwürfeln?
 
Hallo,

wenn es PHP sein darf - für die Erstellung von Demodaten nutze ich immer Faker. Das Script sollte locker deine Anforderungen erfüllen.

Viele Grüße ...

bernau 29. Aug 2016 08:52

AW: Realdaten konsistent verwürfeln?
 
Zitat:

Zitat von mensch72 (Beitrag 1345936)
Zitat:

Zitat von Mavarik (Beitrag 1345918)

Vergiss doch mal den Hash quatsch... Darum geht es doch überhaupt nicht...

Hier im Post 1 steht, das:
..."Dazu müsste pro Datei ein Schlüsselfeld angegeben werden und es müsste für jeden Monat konsistent aus original
"KdNr";"Vorname";"Nachname";"KontoNr"
"01";"Klaus";"Müller";"2222"
nun
"01";"Gerhard";"Lehmann";"4444"
Erst wenn Klaus Müller wegen Heirat Klaus Maier heißt, sollte auch der Demo-Nachname geändert werden."...

Es geht also nach meinem Verständis nicht nur um x-beliebige Zuordnung von puren Zufallsdatensätzen.
=> Ich würde deshalb speziell bei/wegen dieser Anforderung vorschlagen, eine Hash oder CRC basierte Indexauswahl von konstanten Listen mit zufälligen Werten zu verwenden, denn damit bleibt die "zufällige" Zuordnung solange gleich, bis sich im Ausgangswert(Namen) etwas ändert.

Nicht wirklich gut von Stahli beschrieben. Demodaten aus original Daten zu erstellen, ohne diese im Unfang noch einzuschmelzen finde ich kritisch. Aber darum geht es anscheinend auch nicht.

Mich würde interessieren, wiso die Zuordnung stattfinden muss.
  • Sollen die Demodaten in Originaldaten zurück gerechnet werden?
  • Soll mit den Demodaten richtig gearbeitet werden?
  • Vileicht sind es auch nur konvertierte Daten aus einer Konkurenz-Software, die erst mal getestet werden sollen.

Mit mehr Input könnte man ggf. die passende Lösung finden.

bra 29. Aug 2016 10:11

AW: Realdaten konsistent verwürfeln?
 
Zitat:

Zitat von Mavarik (Beitrag 1345853)
Leg dir einfach eine Liste mit Vornamen und Nachnamen an und stelle diese per Random zu neuen Namen zusammen...

Original

[0] Petra;Putzig;Gartenstraße 7;53111; Bonn
[1] Rudi;Rastlos;Hofgarten 42;52223 Stolberg;

Daraus 5 Listen machen

Dann 5x Random; Randomwerte 1-5 müssen unterschiedlich sein.
Randomwert verbraucht, aus der Liste werfen..

So hast Du n Adressen aber keine ist real...

Das halte ich aber für alles andere als sauber. Man hat immer noch die reellen Namen und Daten, nur in gequirlter Zuordnung. Datentechnisch halte ich das für nicht unbedenklich.

stahli 29. Aug 2016 11:37

AW: Realdaten konsistent verwürfeln?
 
Sorry, ich habe das etwas unscharf beschrieben, aber andererseits will ich mich nicht nur auf meinen Spezialfall beschränken. Vielleicht kann man das gleich etwas allgemeiner betrachten.

Grundsatz:
- Es sollen Testdaten für Entwickler erzeugt werden, die nach Struktur und Umfang Realdaten entsprechen, aber keinen Bezug auf reale Personen- oder Firmendaten (Namen, Adressen, Kontonummern, Schulden) zulassen.
- "Max Mustermann"-Datensätze sind unerwünscht, um Grenzfälle ausreichend testen zu können.

Spezialfall:
Bei uns liegen pro Monat mehrere Importdateien als csv vor, die monatlich in das Hauptprojekt importiert wurden.
Die Dateien bilden untereinander relationale Beziehungen ab und monatlich chronologische Änderungen der Importdaten.

allgemeines Problem:
Für eine Neuerstellung des Hauptprojektes sollen anonyme Demodaten zur Verfügung gestellt werden.
Einmalig im Hauptprojekt die Kundennamen und Adressen zu verwürfeln wäre kein sehr großes Problem. Allerdings wären dann beispielhaft z.B. Rechnungsnummern und Auftragsnummern noch original. Gut, das könnte man vielleicht so hinnehmen.

spezielles Problem:
Vorliegend sollen aber auch die gesamten Importfiles in Demodaten umgewandelt werden, also je alle 6 csv´s über mehrere Monate (ggf. auch über alle Jahre).

Das Tool müsste also erfahren, welche "Spalte" in welcher csv wie zu ändern ist.
Wenn Kunde Id=10, Name=Müller z.B. umgewandelt wurde in Kunde=10, Name=Meier müsste das in allen späteren Konvertierungen gleichermaßen gemacht werden.
Wenn gleichzeitig die Id geändert wird (Kunde Id=10, Name=Müller in Kunde=999, Name=Meier) geändert würde, müsste auch in Rechnungsdaten die KundenId angepasst werden.

Auch wäre sinnvoll, eMail-Adressen, Telefonnummern und Kontonummern zu verfälschen und künftig auch immer diese verfälschte Nummer wieder zu verwenden. Also wirklich über ein Dictionary.

Tool:
Ich habe schon eine Vorstellung, wie ich unsere Daten entsprechend umstellen könnte, wollte aber mal generelle Meinungen (zu Bedarfen und Lösungen) hören.
Ich werde mal ein Tool erstellen. Vielleicht kann man das ja dann allgemein einsetzen (wobei unser eigener Anwendungsfall vermutlich schon sehr speziell ist).


PS:
Danke für den Heise-Artikel. Habe ich mir gekauft.
Danke auch für das PHP-Tool. Das scheint aber nicht ganz zu passen, soweit ich das nachvollziehen kann.

himitsu 29. Aug 2016 12:33

AW: Realdaten konsistent verwürfeln?
 
Du hast doch eine Datenbank, wo die Spalten auch untereinander ordentlich verbunden sind.
Wozu also in den CSV das nochmal versuchen zu verknubbeln?

Importiere die Daten in eine leere/neue Datenbank, verändere dort die Namen und die Abhängigkeiten sollten sich dann alle von Alleine anpassen.
REFERENCES ON UPDATE CASCADE
Und so Dinge, wie "ausversehn" doppelte Namen, welche ausversehn entstehen könnten, sollten sich ebenfalls mit den passenden CHECK-CONSTRAINTS verhindern lassen.

Und dann kann man das gern wieder als CSV exportieren.

stahli 29. Aug 2016 13:28

AW: Realdaten konsistent verwürfeln?
 
Es geht bei uns auch darum, den regelmäßigen Datenimport neu zu realisieren.
Deshalb ist es nicht ausreichend, die Datenbanken umzustellen.
Wir benötigen auch über einen größeren Zeitraum passende umgestellte Demodaten für den Import-Test.

Aber ich sehe schon, das wird eher ein Sonderfall sein.

nahpets 29. Aug 2016 16:13

AW: Realdaten konsistent verwürfeln?
 
Ich versuche mal die Aufgabenstellung etwas flacher darzustellen:

Ich bekommt irgendwann mal die Daten für:

Peter Müller, KundenID = 4711, Kontonummer = 4812 bei der Postbank.

Daraus sollen nun Testdaten werden, bei denen nicht mehr nachvollziehbar ist, welcher Person sie ursprünglich zugehörig waren.

Also wird aus o. g. Person nunmehr durch "irgendeinen Zufall" für die Testdaten:

Hansi Meier, KundenID = 1234, Kontonummer = 9876 bei der Targo-Bank.

Bei einer einmaligen Datenlieferung wäre das ok.

Nun kommt aber zu einem späteren Zeitpunkt mal wieder was an Daten für Peter Müller.
Bei den Originaldaten ist eine Zuordnung kein Problem.

Für die Testdaten muss der o. g. "irgendeinen Zufall" aber die Daten wiederum korrekt dem zufällig entstandenen Hansi Meier zugeordnet werden.

Letztlich wird hier also ein "reproduzierbarer Zufall" benötigt. Damit ist es aber letztlich keiner mehr.

Was meiner Meinung nach gehen müsste wäre:

Über die Originaldaten wird pro Satz irgendein Wert (Hash, MD5 ...) ermittelt und gespeichert.

Dieser Wert wird mit der eindeutigen ID der Testdaten verbunden.
  • Zuordnung Original zu Testdaten
  • Hashwert
  • TestdatenID
Nun kann man beim Eintreffen neuer Daten in der Tabelle den Wert des Originals suchen und die zu den Testdaten gehörige TestdatenID finden und damit eine entsprechende Zuordnung machen.

Über diese Tabelle wird aber immer ein Rückschluss von den Testdaten auf die Originaldaten möglich sein, es sei denn:

Den Algorithmus zur Ermmittlung des Hashwertes macht man nicht bekannt.

Aus dem MD5-Wert kann man z. B. nicht zurückschließen, wie der Originalwert war. Bei ihm ist die Eindeutigkeit aber nicht sichergestellt.
Aber: MD5 über Vorname + MD5 über Nachname + MD5 über KundenID sollten sicher reichen.

Eine "Rückwärtssuche" über die TestdatenID in dieser Tabelle und dann diese drei MD5-Werte ermitteln, um ans Original zu kommen, dürfte schon etwas "umfangreicher" werden, da für alle Originaldaten geprüft werden muss, ob sie den entsprechenden Wert ergeben. Ist der Algorithmus nicht bekann, dürfte es sehr schwierig werden.

Wenn sichergestellt ist, dass die Entwickler ... keinen Zugriff auf diese Tabelle bekommen, dürfte ein ausreichend sicherer Schutz der Originaldaten gegeben sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz