Schrift
[thread]1590[/thread]

besondere Art einer verschlüsselten Datenbank (Seite 2)

Leser: 2


<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
esskar
 2004-08-05 19:11
#15770 #15770
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Ishka,05.08.2004, 16:45]Die von dir angesprochene Lösung setzt vorraus, daß ich ein Programm hab, was in einer Blackbox läuft und Daten raussendet.[/quote]
deine randbedingungen kenn ich nicht...
im grunde hast du aber keine chance: da ein g(x), mit x nicht in f, ja immer irgendwie berechnet werden muss, und auf Grund der Vorbedingung g(m) = g(n) mit m = n, auch von von x abhängt. da du aber keine blackbox hast, kann man g(x) immer nachrechnen.

kannst denn an f was drehen?
wenn f ein argument bekommt, das unbekannt ist, wird ein zufälliges erzeugt; gleichzeitig muss sich f dann aber merken, dass der wert generiert und nicht gespeichert wurde
renee
 2004-08-05 19:12
#15771 #15771
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=esskar,05.08.2004, 17:03][quote=renee,05.08.2004, 16:56]kannst du nicht rsa dafür benutzen??[/quote]
dann bräuchte er ja public und private key für.[/quote]
kann er doch berechnen... der algorithmus ist doch bekannt...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2004-08-05 19:16
#15772 #15772
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Ishka,05.08.2004, 17:08]oder er vergleicht die verschlüsselten Werte[/quote]
Anmerkung:

c := Verschlüsselungsfunktion
k := Schlüssel
x := Wert
y := Wert

es gilt:

Code: (dl )
1
2
x != y => c(k, x) != c(k, y)
x == y => c(k, x) != c(k, y)
esskar
 2004-08-05 19:22
#15773 #15773
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=renee,05.08.2004, 17:12]der algorithmus ist doch bekannt...[/quote]
[color=Red]NEVER WRITE YOUR OWN CRYPTO CODE![/color]

[color=Red]NEVER ROLL YOUR OWN RSA ROUTINES![/color]

er kann zwar die cpan module nutzen; dann bekommt er aber probleme mit windows, weil sich z.B. die RSA sachen von dort nicht auf windows bauen lassen!
Ishka
 2004-08-05 19:48
#15774 #15774
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Deine Anmerkung stimmt bei RSA aber nicht.

Ich hab das, wofür ich diesen Algo gebraucht hätte, inzwischen anders gelöst, aber die Lösung dieses Problems finde ich trotzdem noch interessant.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
murphy
 2004-08-05 20:38
#15775 #15775
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Wenn g nur zum Lesen gedacht ist, kann man wie folgt vorgehen:
1) Zunächst wähle man eine (fast) beliebige Funktion p, die jeder natürlichen Zahl eine Position in einem Datenpuffer fester Größe zuordnet.
2) Nun fülle man den Datenpuffer mit Zuffalsbits
3) Man prüfe, ob für alle bekannten Paare (m,n) in f jeweils an der Position p(m) im Datenpuffer n steht (ein p und eine Zufallsfolge, die dieser Bedingung genügen, existieren für hinreichende Puffergrößen immer, edit: es sei denn, man hat p so blöd gewählt, dass sich Überlappungen in den Daten ergeben, die wegen der Originaldaten in f nicht möglich sind)
4) falls Schritt 3 nicht erfolgreich war, kehre zu Schritt 2 zurück
5) Die gesuchte Funktion g ist diejenige, welche ihrem Parameter mittels p eine Position im Datenpuffer zuordnet und den dort liegenden Wert zurückliefert.

Diese Methode ist bei geschickt gewählter Puffergröße sicherlich sehr ätzend für den Angreifer, da sich alle echten und falschen Werte im Datenpuffer beliebig überlappen dürfen! Außerdem braucht man eventuell nicht ganz so viel Speicher, wie wenn man die Datenbank f mit Dummy-Werten auffüllt. Allerdings ist die Generierung von g nach dem oben angegebenen Algorithmus natürlich maximal ineffizient, zumal man hier tunlichst echte Zufallsbits verwenden sollte, da man bei Pseudozufallszahlen hier schnell Opfer einer Seed-Rate-Attacke werden könnte. Ferner sollte man die "echten" Werte noch überschlüsseln, und zwar mit einem Verfahren, dass möglichst gut die Bithäufigkeitsverteilung der Zufallsquelle in seiner Ausgabe reproduziert, damit statistische Angriffe schwieriger werden (edit: bzw. damit man überhaupt eine vernünftige Chance hat, in endlicher Zeit eine passende Zufallsfolge zu finden).

Generell muss man aber sagen, dass die Sicherheit eines Algorithmus, der Ishkas Problem löst, auf jeden Fall abnimmt, wenn die resultierende Datenbank g viel weniger Daten enthält als ein mit Dummy-Werten aufgefülltes f. Da f aber nicht komplett mit Dummy-Werten aufgefüllt werden kann (dann bräuchte man abzählbar unendlich viele), wage ich zu vermuten, dass es keine mit endlichem Aufwand durchführbare sichere Lösung des Problemes geben kann.\n\n

<!--EDIT|murphy|1091724168-->
When C++ is your hammer, every problem looks like your thumb.
Ishka
 2004-08-05 21:02
#15776 #15776
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
danke, ich denke das ist ne gute Idee :)
klar - definitv sicher geht es nie ;)

Allerdings denke ich, daß man bei der Funktion p vergleichsweise geschickt vorgehen muß, um kein exponentielles Wachstum (gegen die Anzahl der Eingangswerte) seiner Datenbank zu erzwingen.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
murphy
 2004-08-05 21:10
#15777 #15777
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ja, p sollte am besten geschickt gewählt werden!
Müsste ich sowas programmieren, würde ich vermutlich so vorgehen:
1) Daten der Datenbank komprimieren und verschlüsseln
2) Die verschlüsselten Daten mit einem modifizierten LZW-Algorithmus nach überlappungen durchsuchen.
3) Mir eine gute Größe für den Datenpuffer ausdenken -- vermutlich ungefähr doppelt so groß wie die verschlüsselten Daten (! Genauere Analyse täte hier Not)
4) Die verschlüsselten Daten werder mit maximaler noch mit minimaler Überlappung, sondern in schöner Gleichverteilung in den Puffer quetschen
5) Den Rest des Puffers mit Zufallsbits ausfüllen
6) p als interpolierendes Polynom bestimmen (! Auch hier täte genauere Analyse Not. Gut wäre es vielleicht, eine "schlechtere" Approximation als ein interpolierendes Polynom zu bestimmen, bei der die Ableitung überall höllisch groß ist, damit p dem Angreifer möglichst wenig Informationen gibt)

Allerdings muss ich zugeben, dass ich nicht genügen Ahnung von Mathe habe, um mir so etwas in "Produktionsqualität" zuzutrauen...

btw: RSA ist ja auch nur ein Algorithmus, der den Verschlüsselungsalgorithmus umschliesst\n\n

<!--EDIT|esskar|1091729683-->
When C++ is your hammer, every problem looks like your thumb.
esskar
 2004-08-05 21:51
#15778 #15778
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Ishka,05.08.2004, 17:48]Deine Anmerkung stimmt bei RSA aber nicht.[/quote]
hmmm

dieser Text wurd 2 mal verschlüsselt (S/MIME conform)

Code: (dl )
signed receipts test


Code: (dl )
1
2
3
4
5
6
7
8
9
10
MIICGwYJKoZIhvcNAQcDoIICDDCCAggCAQAxggFrMIIBZwIBADCBzzCBvDELMAkGA1UEBhMCREUx
EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRDIFRydXN0Q2Vu
dGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0
Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0BCQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVy
LmRlAg5P7QAAAAIbpaOJfYQsxTANBgkqhkiG9w0BAQEFAASBgDAX6JB5iBeT3Us4ugj8EbYiqleE
MtiUHA8lkLZvVwKAuxfzilxG8hNT6NW/3gtVgxYo/hzuUP9v/2SuQ92OJneVA44bJPgovxXB59lo
ZtQ7nOQCNF0HXCWB7cwdY1sp7G5A3EVfpasBuvEvpbG9e1ihYygv9OgYW+IgGfNlNq+uMIGTBgkq
hkiG9w0BBwEwFAYIKoZIhvcNAwcECJGGXf7fL1FegHCjRMmBsTfP5LJazvc5NF+e0VtOnTQLFWuY
1t7A6VR5rznh2GNIjjiYQceWPEHCUOEotC6SLowr69T0SGfWty184zFUfIPHG+oFpLmqjzW1RU3W
uklxQqp9Gue5FA+fOq6jLnZajqilxSoJdeDLXQsd


Code: (dl )
1
2
3
4
5
6
7
8
9
10
MIICGwYJKoZIhvcNAQcDoIICDDCCAggCAQAxggFrMIIBZwIBADCBzzCBvDELMAkGA1UEBhMCREUx
EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRDIFRydXN0Q2Vu
dGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0
Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0BCQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVy
LmRlAg5P7QAAAAIbpaOJfYQsxTANBgkqhkiG9w0BAQEFAASBgJzxra/DsMQzIGK/iwdh9Sm2uvEI
PTwBwMYBlToEgNXRd4McIUMRAl6EgLkYjyjn/Tg31Qq3koqkhlM16yUTny/YJcE3mFNb6oWw03Ig
oJpPjaNdxVzaVGWzPl9WSTyWTbuMn98pkpjOH5pxxz7/yrTc6URJwezCI4rWpuM1DwcxMIGTBgkq
hkiG9w0BBwEwFAYIKoZIhvcNAwcECP2YdDaUrIGggHDO5K/ulXcpHdMXefvtKJfqhs0xxYA60eDp
+CdOKhfI1ynflgXOEH7Ot+4tsEOJj7+ImI4jjq8toXAePSjcFs9JiWPaYiR3g3BKek7I45wVENzV
mdgxhpYdWETRCf/0QL8GqRXaTLUyXignd702yD3R


ist nicht wirklich gleich! :P
nur die ersten bytes; dass ist aber das zertifikat, das benutzt wurde!\n\n

<!--EDIT|esskar|1091728653-->
Ishka
 2004-08-05 22:15
#15779 #15779
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Dann ist das kein reines RSA. Schon durch das padden mit einigen Zufallsbits kriegt man natürlich was völlig anderes, was hier wohl gemacht wurde.

Aber selbst mit dieser Erweiterung ist RSA nicht sinnvoll, weil man dann selbst im Falle eines existierenden f(i) bei g(i) keine Antwort erhielte - es sei denn wiederum, man hat den Schlüssel zum entschlüsseln, dann hilft das aber auch nicht sonderlich weiter.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2004-08-05 03:03.