Schaf im Wolfspelz
Die Hashfunktionen finde ich schon seit recht langer Zeit ziemlich interessant, vor Allem das Auffinden von Kollisionen. Vorhin ist mir dann ein (De-)Kompressionsalgorithmus eingefallen - ich weiß allerdings nicht, ob er Sinn macht.
Die Idee: Jeder String ergibt einen eindeutigen MD5-Wert. Das Script prüft alle Strings von 0 an, ob ihr Wert mit dem gegebenen MD5 übereinstimmt. Sollte das der Fall sein, hat man einen String gefunden, der zumindest die selbe Checksumme besitzt - es könnte aber auch irgend ein anderer sein. Dafür gibt es die Kollisionsvariable: wird eine Kollision gefunden, wird sie dekrementiert; ist sie 0 ist die gewünschte Kollision erreicht und die Datei dekomprimiert. (Über die Kompression machen wir uns jetzt mal noch keine Gedanken)
Vorraussetzung für die Dekompression ist also den MD5 der gewünschten Daten zu wissen und die Anzahl der Kollisionen von "kleineren" Daten (binär gesehen).
Die Funktion würde dann in etwa so aussehen:[php:1:5b59db895c]// Das <?php wird von der dämlichen Seite hier gesetzt und ich werde es sicher nicht weghacken
function decompress($md5, $collision = 1) {
for($expression = '';; $expression++) { /* $expression ist ein Wert im 256er-System und steht
dabei für ein ISO-8859-1-Zeichen. Die Implementierung davon spare ich mir
hier mal der Übersicht halber. */
if(md5($expression) == $md5) { // Kucken ob's passt
if(!--$collision) break; // Falls die gewünschte Kollision erreicht wurde Schleife verlassen
}
}
return $expression;
}[/php:1:5b59db895c]Das Hauptproblem wird sein, dass Kollisionen statistisch alle 2^128 Wörter auftreten; wenn man Pech hat, ist $collision also eine riesige Zahl - womöglich größer als die Datei selbst. Hier kann auch abhilfe geschaffen werden: diese riesige Zahl wird, neben der MD5-Summe, erneut mit dem selben Algorithmus komprimiert, wodurch sich bei häufiger Annahme die Datenmenge reduzieren könnte.
Blöderweise kann man all das nicht nachprüfen, weil Quantencomputer noch in der Entwicklung sind - es bleibt also Theorie. Außerdem klingt es ziemlich seltsam, beliebig große Daten in 128Bit chiffrieren zu können.
Ein weiterer Gedanke: Wenn tatsächlich irgendwann mal eine Grenze erreicht sein sollte, ab der $collision immer größer wird, könnte man auch an die dechiffrierten Strings eine Anforderung stellen ("ein F an 4. Stelle"), aber das führt jetzt zu weit.
Wie auch immer, wer Lust hat kann sich ja mal ein paar Gedanken drüber machen... und wer Lust hat den Sinn der Fragestellung in Frage zu stellen möge das bitte an meine persönliche eMail-Adresse (blackout@example.com) senden - ich werde mich darum kümmern, sobald ich sie erhalten habe.
Die Idee: Jeder String ergibt einen eindeutigen MD5-Wert. Das Script prüft alle Strings von 0 an, ob ihr Wert mit dem gegebenen MD5 übereinstimmt. Sollte das der Fall sein, hat man einen String gefunden, der zumindest die selbe Checksumme besitzt - es könnte aber auch irgend ein anderer sein. Dafür gibt es die Kollisionsvariable: wird eine Kollision gefunden, wird sie dekrementiert; ist sie 0 ist die gewünschte Kollision erreicht und die Datei dekomprimiert. (Über die Kompression machen wir uns jetzt mal noch keine Gedanken)
Vorraussetzung für die Dekompression ist also den MD5 der gewünschten Daten zu wissen und die Anzahl der Kollisionen von "kleineren" Daten (binär gesehen).
Die Funktion würde dann in etwa so aussehen:[php:1:5b59db895c]// Das <?php wird von der dämlichen Seite hier gesetzt und ich werde es sicher nicht weghacken
function decompress($md5, $collision = 1) {
for($expression = '';; $expression++) { /* $expression ist ein Wert im 256er-System und steht
dabei für ein ISO-8859-1-Zeichen. Die Implementierung davon spare ich mir
hier mal der Übersicht halber. */
if(md5($expression) == $md5) { // Kucken ob's passt
if(!--$collision) break; // Falls die gewünschte Kollision erreicht wurde Schleife verlassen
}
}
return $expression;
}[/php:1:5b59db895c]Das Hauptproblem wird sein, dass Kollisionen statistisch alle 2^128 Wörter auftreten; wenn man Pech hat, ist $collision also eine riesige Zahl - womöglich größer als die Datei selbst. Hier kann auch abhilfe geschaffen werden: diese riesige Zahl wird, neben der MD5-Summe, erneut mit dem selben Algorithmus komprimiert, wodurch sich bei häufiger Annahme die Datenmenge reduzieren könnte.
Blöderweise kann man all das nicht nachprüfen, weil Quantencomputer noch in der Entwicklung sind - es bleibt also Theorie. Außerdem klingt es ziemlich seltsam, beliebig große Daten in 128Bit chiffrieren zu können.
Ein weiterer Gedanke: Wenn tatsächlich irgendwann mal eine Grenze erreicht sein sollte, ab der $collision immer größer wird, könnte man auch an die dechiffrierten Strings eine Anforderung stellen ("ein F an 4. Stelle"), aber das führt jetzt zu weit.
Wie auch immer, wer Lust hat kann sich ja mal ein paar Gedanken drüber machen... und wer Lust hat den Sinn der Fragestellung in Frage zu stellen möge das bitte an meine persönliche eMail-Adresse (blackout@example.com) senden - ich werde mich darum kümmern, sobald ich sie erhalten habe.