Un digest e una signature non sono dei sistemi di cifratura, il primo da una stringa univoca per ogni stringa in entrata, il secondo genera una stringa che è un'impronta, come il digest, autenticata con la chiave di chi vuole garantire che è lui a scrivere il messaggio.
Per quello che vuoi fare tu, ovvero evitare il caso "man in the middle" come ad esempio uno sniffer che prenda i dati che passano tra client e server, si può usare solo la cifratura, ovvero fare in modo che quando i dati sono fuori dal client e fuori dal server siano incomprensibili, se usi anche l'autenticazione quello che cambia è che il server oltre che decifrare i dati controlla anche se arrivano da un client autorizzato che firma i suoi messaggi ma il canale deve essere già sicuro perchè se uno si mette tra client e server può intercettare i dati firmati e farsi riconoscere come autorizzato.
Per risolvere questo tipo di problema sicuramente si usa la cifratura asimmetrica(RSA appunto) però questo tipo di cifratura ha un processo molto lento anche se vengono usati trucchi metematici di calcolo per accellerarlo, per questo potresti anche usare cifratura simmetrica e assimetrica assieme creando una chiave di sessione: praticamente il messaggio viene codificato con un algoritmo simmetrico e la chiave(univoca per cifrare e decifrare) codificata asimmetricamente, server e client si scambiano chiavi pubbliche messaggio e chiave cifrata.
Cmq io uso RSA normale senza chiavi di sessione visto che un messaggio in chat è più corto di una chiave quindi si potrebbe ottenere l'effetto contrario.
![]()