Se sua meta for somente autenticidade (e não confidencialidade), a assinatura no cabeçalho, seja do cliente ou do servidor, ou em ambas as direções, pode ser usada para verificar se os bits recebidos são do remetente.
Observe que, se o conteúdo assinado não tiver um registro de data e hora que esteja marcado, ele estará vulnerável a uma reprodução simples, o que poderia permitir que alguém no meio realizasse alguma função ou se mascarasse como o outro lado indefinidamente.
O erro "dados muito grandes para o tamanho da chave" ocorre parcialmente porque a criptografia / descriptografia RSA direta é computacionalmente intensa, portanto, a implementação não é projetada para processar grandes quantidades de dados. O limite real está relacionado às garantias de força criptográfica fornecidas pelo algoritmo. Permitir que uma carga útil grande e de baixa entropia enfraquecesse.
Para evitar esse erro, é necessário usar um algoritmo de resumo de mensagem que executa um hash unidirecional como o MD5 em um conjunto maior de bits, como o corpo HTTP POST, e criptografar o resultado do digest de tamanho fixo usando criptografia RSA . O hash criptografado é essencialmente uma assinatura digital. O receptor então descriptografa, calcula o resultado do hash do corpo e compara os hashes para verificar a assinatura.
Observe que, se uma chave de sessão estiver disponível porque a criptografia também está sendo usada, o hash do corpo pode ser simplesmente criptografado com essa chave simétrica compartilhada, em vez de fazer a criptografia RSA mais cara. Isso é chamado de código de autenticação de mensagem (MAC) e não é tão strong quanto uma assinatura.