En primer lugar, cuando X e Y tienen una relación de confianza, generalmente implica que X confía en Y y viceversa. Esto no tiene que ver necesariamente con la calidad o las garantías del vínculo entre ellos. No solo digo esto para corregir su definición, sino porque esta relación de confianza es importante.
Si en su caso, A confía en B, y C también confía en B, entonces A y C deberían confiar en que B entrega los mensajes que enviaron sin modificaciones. Hay muchos ejemplos criptográficos que usan un trusted 3rd party
para exactamente ese tipo de cosas.
Sin embargo, si no hay confianza en B. Solo una confianza en la seguridad de los enlaces a / desde B, entonces es una historia diferente.
El cifrado probablemente no sea lo que necesita aquí, o no es SOLAMENTE lo que necesita. Si A y C comparten una clave y cifran los mensajes entre sí (a través de B), B no podrá leer los mensajes, pero nada lo detiene si cambia el mensajes Algunas veces es posible hacer cambios en el mensaje cifrado. Por ejemplo, si cifro un mensaje "Te debo $ 1000", es posible que B agregue cosas al mensaje, por lo que después del descifrado se ve como "Te debo $ 10000", o cámbiate a "Te debo $ 9000" ( por ejemplo, ataque de volcado de bits ). Escribí un pequeño blog post describiendo esta idea errónea con un poco más de detalle, por si acaso estas interesado.
Si desea proteger el mensaje contra la modificación , debe considerar el uso de algún tipo de Autenticación de mensajes Código (MAC) . Por lo general, probablemente querrá usar HMAC , que utiliza una función hash segura para generar el MAC. Esto es como una firma en el mensaje. Incluso la modificación más pequeña invalidará esta firma, por lo que puede ser detectada. Sin conocer la clave entre A y C, B tampoco puede falsificar esta firma.
Ahora nada te impide usar Encryption + Signature. Esto asegurará que ambos mensajes no puedan leerse ni modificarse.
Teniendo todo esto en cuenta, todavía le insto a que no desarrolle / construya su propia solución, sino que encuentre un protocolo adecuado o, al menos, una biblioteca / paquete que proporcione ese tipo de mecanismos.