Envio/recebimento de dados pelo Socket

Galera,

Seguinte: 

  Tenho uma mesagem que foi assinada, no caso, o seu hash foi criptografado através de uma chave privada. A saída do método que faz essa esta assinatura é na forma é byte[]. Eu envio para o servidor e ela encaminha para o cliente e consigo verificar sem problema. Eu faço uma conversão para String e quando recebo de volta eu gero novamente os bytes que utilizo para verificar a assinatura no lado do cliente.
  A questão é se devo enviar o hash criptografado (assinatura digital) e a mensagem original pelo socket ou então somente a assinatura? O modelo que estou usando é de um chat. Onde envio mensagem pro servidor e ele devolve para o cliente.
 Eu envio através de um objeto PrintStream. O código está abaixo:

 [code] out = new PrintStream(clisoc.getOutputStream()); [/code]

No caso pra enviar assinatura digital + texto original eu chamo o objeto out duas vezes? Se for este o caso, como no cliente eu capturo primeiro o hash e o texto original?

Valeu...

Você não quer pesquisar algo sobre os protocolos SSL e TLS? Aí você aprende como é que isso foi resolvido (troca de chaves, certificados etc.)

Os detalhes são um bocadinho chatos, mas todos os problemas de segurança mais óbvios já foram tirados dos protocolos SSL e TLS.

Acho que vale a pena estudar sobre este protocolos, mas por agora preciso de uma solução no que estou trabalhando pra não mudar muito. O tempo está correndo e quando mais poder me dedicar neste aspecto será melhor.

Com certeza a dica já foi considerada. Valeu Thingol