Prima di tutto, quando si dice che X e Y hanno una relazione di fiducia, di solito implica che X si fidi di Y e viceversa. Questo non è necessariamente a che fare con la qualità o le garanzie del collegamento tra di loro. Non sto solo dicendo questo per correggere la tua definizione, ma perché questa relazione fiducia è importante.
Se nel tuo caso, A si fida di B, e C si fida anche di B, quindi sia A sia C dovrebbero credere che B consegna i messaggi che hanno inviato senza modifiche. Esistono molti esempi di crittografia che utilizzano trusted 3rd party
per esattamente questo tipo di cose.
Se tuttavia, non c'è fiducia in B. Solo una fiducia nella sicurezza dei link a / da B, quindi è una storia diversa.
Probabilmente la crittografia non è ciò di cui hai bisogno qui o non SOLO di ciò che ti serve. Se A e C condividono una chiave e crittografano i messaggi tra loro (tramite B), B non sarà in grado di leggere i messaggi, ma nulla gli impedirà di modificare messaggi. Alcune volte è possibile apportare modifiche al messaggio crittografato. Ad esempio, se crittografo un messaggio "Ti devo $ 1000", potrebbe essere possibile che B aggiunga elementi al messaggio, quindi dopo la decifrazione sembra "ti devo $ 10000" o cambiarlo in "ti devo $ 9000" ( ad es. attacco di bit flipping ). Ho scritto un piccolo post sul blog che descrive questo equivoco in modo un po 'più dettagliato, nel caso in cui ti interessa.
Se vuoi proteggere il messaggio contro la modifica , dovresti prendere in considerazione l'utilizzo di qualche tipo di Autenticazione dei messaggi Codice (MAC) . In genere, probabilmente vorrai utilizzare HMAC - che utilizza una funzione di hash sicura per generare il MAC. Questo è come una firma sul messaggio. Anche la modifica più piccola invalida questa firma, quindi può essere rilevata. Senza conoscere la chiave tra A e C, B non può falsificare questa firma.
Ora nulla ti impedisce di usare Crittografia + Firma. Ciò garantirà sia che quei messaggi non possano essere letti né modificati.
Tenendo presente tutto ciò, ti esorto ancora a non sviluppare / costruire la tua soluzione, ma piuttosto a trovare un protocollo adatto o almeno una libreria / pacchetto che fornisce quel tipo di meccanismi.