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.