Forum: PC-Programmierung Kryptographie - Doubleblind-Broadcast (oder so ähnlich)


von Alexander F. (alexf91)


Lesenswert?

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
von Micha C. (Gast)


Lesenswert?

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

von Alexander F. (alexf91)


Lesenswert?

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.

von Adapter (Gast)


Lesenswert?

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.

von Alexander F. (alexf91)


Lesenswert?

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.

von Adapter (Gast)


Lesenswert?

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...

von Alexander F. (alexf91)


Lesenswert?

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.

von Alexander F. (alexf91)


Lesenswert?

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.

von Tek (Gast)


Lesenswert?

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.

von Alexander F. (alexf91)


Lesenswert?

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
Noch kein Account? Hier anmelden.