Ich habe ein kleines Kryptographie-Problem (ich nenne es Doubleblind-Broadcast), bei dem ich mir nicht sicher bin, wie (und ob) man das lösen kann. Ich möchte feststellen, ob zwei User die gleiche Nachricht veröffentlicht haben, ohne dass einer die Nachricht des anderen sieht, wenn sie nicht gleich ist: Es gibt zwei User A und B, die beide die gleiche Nachricht erstellen. Jeder verschlüsselt die Nachricht und gibt sie irgendwann in einen gemeinsamen Pool, auf den auch noch andere User Zugriff haben. Solange nur einer der beiden User die Nachricht veröffentlicht hat, soll niemand die Nachricht entschlüsseln können. Sobald beide die Nachricht veröffentlicht haben, soll jeder (A, B und die anderen) die Nachricht lesen können. Im Idealfall soll es keine Kommunikation zwischen den beiden geben (auch kein Austausch des Public Keys, da die User eventuell nicht gleichzeitig existieren). Eigentlich wissen beide nur, dass die Nachricht gleich ist. Für mich klingt das schwer bis unmöglich, aber mein Wissen über Kryptographie ist recht eingeschränkt. Hat vielleicht jemand eine Idee, wie man das angehen könnte?
:
Bearbeitet durch User
Hallo, ich versuche mich mal an einer Umsetzung. Benutzer A erzeugt Nachricht Msg_A und erzeugt Hashwert Digest_A = SHA256(Msg_A). Aus dem Hashwert berechnet er folgende Werte: K_1 = Digest_A[0..63] K_2 = Digest_A[64..127] Danach verschlüsselt A die Nachricht Msg_A mit dem Schlüssel K1 || K2 Enc_A = AES-128(Msg_A, K1 || K2) und bildet folgende zwei Nachrichten Enc_Msg_A_1 = (K1, Enc_A) Enc_Msg_A_2 = (K2, Enc_A) Nun prüft A, ob im Pool bereits Nachricht Enc_Msg_A_1 vorhanden ist. Wenn ja, veröffentlicht A Enc_Msg_A_2, ansonsten Enc_Msg_A_1. Erzeugt Benutzer B später die identische Nachricht Msg_B == Msg_A, so wird von B die Nachricht Enc_Msg_B_2 veröffentlicht, da Enc_Msg_B_1 (== Enc_Msg_A_1) bereits im Pool vorhanden ist. Die anderen Benutzer können beide Nachrichten anhand Enc_A == Enc_B zuordnen und können dann K1 und K2 aus den beiden Nachrichten extrahieren und damit die ursprüngliche Nachricht entschlüsseln. Leider ist das Verfahren angreifbar, wenn der Nachrichteninhalt gut vorhersagbar ist, da dann ein Angreifer mögliche Nachrichtentexte durchprobieren kann. Gruss Micha
Micha C. schrieb: > Leider ist das Verfahren angreifbar, wenn der Nachrichteninhalt gut > vorhersagbar ist, da dann ein Angreifer mögliche Nachrichtentexte > durchprobieren kann. Das ist ein Problem. Ich wollte vermeiden, die Nachricht als Key zu verwenden, da sie wirklich relativ einfach vorherzusagen ist. Micha C. schrieb: > Nun prüft A, ob im Pool bereits Nachricht Enc_Msg_A_1 vorhanden ist. Das könnte auch problematisch werden, da sich beide User einigen müssen, wer zuerst veröffentlicht. Der Pool ist ein P2P Netzwerk. So ähnlich habe ich mir das auch schon überlegt, jedoch ohne es bis zum Ende durchzudenken. Hilfreich ist es auf jeden Fall.
Alexander F. schrieb: > Micha C. schrieb: >> Leider ist das Verfahren angreifbar, wenn der Nachrichteninhalt gut >> vorhersagbar ist, da dann ein Angreifer mögliche Nachrichtentexte >> durchprobieren kann. > > Das ist ein Problem. Ich wollte vermeiden, die Nachricht als Key zu > verwenden, da sie wirklich relativ einfach vorherzusagen ist. > kann man daran drehen? Z.B. als Nachricht keinen Text nehmen, sondern die Bitmap eines QR Codes? > Micha C. schrieb: >> Nun prüft A, ob im Pool bereits Nachricht Enc_Msg_A_1 vorhanden ist. > > Das könnte auch problematisch werden, da sich beide User einigen müssen, > wer zuerst veröffentlicht. Der Pool ist ein P2P Netzwerk. > Du meinst ein Punkt zu Punkt Netzwerk? Wo kommen da "andere user" (also der Rest der Welt) ins Spiel? > > So ähnlich habe ich mir das auch schon überlegt, jedoch ohne es bis zum > Ende durchzudenken. Hilfreich ist es auf jeden Fall.
Adapter schrieb: > kann man daran drehen? Z.B. als Nachricht keinen Text nehmen, sondern > die Bitmap eines QR Codes? Kann man, aber das ändert nichts am Problem. Es muss nur als Zwischenschritt für jede Nachricht ein QR Code generiert werden. Adapter schrieb: > Du meinst ein Punkt zu Punkt Netzwerk? Wo kommen da "andere user" (also > der Rest der Welt) ins Spiel? Ein (unstrukturiertes) Peer-to-Peer Netzwerk, das den erwähnten "Pool" verwaltet. Jeder kann sich mit dem Netzwerk verbinden und Nachrichten veröffentlichen. Der Pool ist eigentlich eine öffentliche Blockchain, in die Nachrichten unter bestimmten Bedingungen eingefügt werden. Das ist aber mMn für das ursprüngliche Problem nicht relevant. Ganz durchdacht ist das Konzept noch nicht, aber es ist eh nur eine Spielerei.
Alexander F. schrieb: > Adapter schrieb: >> kann man daran drehen? Z.B. als Nachricht keinen Text nehmen, sondern >> die Bitmap eines QR Codes? > > Kann man, aber das ändert nichts am Problem. Es muss nur als > Zwischenschritt für jede Nachricht ein QR Code generiert werden. > Würde aber sehr wohl an der Vorhersehbarkeit der Message etwas ändern...
Adapter schrieb: > Würde aber sehr wohl an der Vorhersehbarkeit der Message etwas ändern... Ich sehe keinen Unterschied. Da die Plaintext Message vorhersehbar ist, ist ja auch der QR Code vorhersehbar.
Alexander F. schrieb: > Micha C. schrieb: >> Nun prüft A, ob im Pool bereits Nachricht Enc_Msg_A_1 vorhanden ist. > > Das könnte auch problematisch werden, da sich beide User einigen müssen, > wer zuerst veröffentlicht. Der Pool ist ein P2P Netzwerk. Dieses Problem kann ich mittlerweile umgehen. Beide User haben einen Namen, den sie voneinander wissen - die User lassen sich also ordnen. Damit kann ein User Enc_Msg_A_1 veröffentlichen und der andere Enc_Msg_B_2.
Alexander F. schrieb: > Für mich klingt das schwer bis unmöglich, aber mein Wissen über > Kryptographie ist recht eingeschränkt. Seh ich auch so. Mit der Forderung: Alexander F. schrieb: > Sobald beide die Nachricht > veröffentlicht haben, soll jeder (A, B und die anderen) die Nachricht > lesen können. machst du das System angreifbar da ja man dann ja eine Gemeinsamkeit benötigt um gleiche Nachrichten zu erkennen. Genau das was man bei einer Verschlüsselung normalerweise verhindern will.
Dann werde ich mir etwas anders überlegen müssen. Bevor ich etwas unsicheres implementiere, implementiere ich lieber nichts. Vorher muss eh das P2P Netzwerk halbwegs stabil funktionieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.