Em um JWS, alg define como a assinatura é calculada: HS256, RS256, PS256, ES256, ES256K, Ed25519 etc., ou none. Em um JWE, ele define como a chave de conteúdo é entregue, enquanto enc indica a cifra do conteúdo. Os valores são strings que diferenciam maiúsculas de minúsculas, no registro “JSON Web Signature and Encryption Algorithms” da IANA.
Até a assinatura ser verificada, o cabeçalho está sob controle do atacante; por isso, o verificador não deve deixar que ele decida o algoritmo: configure o algoritmo aceito (de preferência um só) para cada chave e rejeite todo o resto (RFC 8725 §3.1). Bibliotecas que escolhem a operação com base em alg já aceitaram none ou usaram uma chave pública RSA como segredo HMAC.
A RFC 9864 (2025) torna obsoletos os identificadores “polimórficos”, como EdDSA, cujo significado depende da chave, em favor de identificadores totalmente especificados, como Ed25519, para que só o nome do algoritmo determine a operação.