pkeyutl -sign
com uma chave RSA (e rsa_padding_mode
assumido como pkcs1
que significa especificamente pkcs1-v1_5) E -pkeyopt digest:$hash
executa as etapas 2-6 do EMSA-PKCS1-v1_5-ENCODE na seção 9.2 do rfc3447, em seguida, etapa 2 do RSASSA-PKCS1-v1_5-SIGN na seção 8.2.
Em outras palavras, ele faz tudo menos hash os dados (mas verifica o tamanho do hash de entrada). Observe que, se o hash nome especificado aqui for diferente do hash que você realmente usou, a assinatura resultante não será verificada corretamente.
rsautl -sign
(semelhantemente padronizado) faz apenas os passos 4-6 e 2. Em outras palavras, ele NÃO adiciona a codificação ASN.1 AlgorithmIdentifier ao hash bruto, então você mesmo precisa fazer isso se quiser assinaturas para serem compreendidas e aceitas pelos outros. pkeyutl -sign
SEM -pkeyopt digest
também ignora a codificação ASN.1.
Para completar, dgst -$hash -sign
ou sua forma abreviada $hash -sign
com uma chave RSA faz todo o trabalho: hash, codificação ASN.1, pad 01FF..00 e modexp.