2.2.4 - Criptografia


Kerberos amiúde necessita criptografar e descriptografar mensagens (bilhetes e autenticadores) passadas entre os vários participantes na autenticação. É importante notar que Kerberos usa somente criptografia de chave simétrica (em outras palavras, a mesma chave é utilizada para criptografar e descriptografar).


Tipo de Criptografia


Kerberos 4 implementava um tipo simples de criptografia, DES (do inglês Data Encryption Standard) de 56 bits. A fragilidade desta criptografia associada a outras vulnerabilidades do protocolo tornaram Kerberos 4 obsoleto. A versão 5, contudo, não pré-determina o número ou tipo de metodologias de criptografia. Contudo, essa flexibilidade e expansibilidade do protocolo apresenta problemas acentuados de interoperabilidade entre várias implementações do Kerberos 5. A fim de clientes, aplicações e servidores de autenticação utilizando diferentes implementações poderem interoperarem, eles devem ter ao menos um tipo de criptografia em comum. A dificuldade relacionada com interoperabilidade entre implementações Unix de Kerberos 5 e a presente no Active Directory do Windows é um exemplo clássico disso. O Active Directory do Windows suporta um número limitado de criptografias e tem somente DES de 56 bits em comum com Unix. Isso requer que a última esteja ativada, não obstante os riscos já conhecidos, se a interoperabilidade tem de ser garantida. O problema foi resolvido subsequentemente com a versão 1.3 do Kerberos 5 do MIT. Esta versão introduziu suporte ao RC4-HMAC, também presente no Windows, mais seguro que DES. Dentre as criptografias suportadas, convém mencionar também a tripla DES (3DES) e as novas AES128 e AES256 (acrônimos do inglês Advanced Encryption Standard), embora não suportadas pelo Windows.


Chave de Criptografia


Como mencionado na seção 2.1, um dos objetivos do protocolo Kerberos é evitar o armazenamento em forma não-criptografada de senha do usuário, mesmo no banco de dados do servidor de autenticação. Considerando que cada algoritmo de criptografia usa seu próprio comprimento de chave, é claro que, se o usuário não é coagido a usar diferentes senhas de um tamanho fixo para cada método suportado, as chaves de criptografia não podem ser as senhas. Por essas razões, foi introduzida a função string2key, que transforma uma senha não-criptografada em uma chave criptografada adequada ao tipo de criptografia a ser utilizado. Essa função é chamada cada vez que o usuário troca a senha ou entra com ela para autenticação. A função string2key é chamada função hash, significando que é irreversível, dado que uma chave de criptografia não determina a senha que a gerou.


Tempero


No Kerberos 5, diferentemente da versão 4, foi introduzido o conceito de tempero de senha, também conhecido pelo nome inglês password salt. Trata-se de uma string a ser concatenada à senha não-criptografada antes de aplicar a função string2key para obter a chave. Kerberos 5 usa o principal do usuário como tempero:


Kmichel = string2key (Pmichel + "michel@ARCHLINUX.ORG")


Kmichel é a chave de criptografia do usuário michel e Pmichel é a senha não-criptografada do usuário. Este tipo de tempero tem as seguintes vantagens:


- dois principals pertencentes ao mesmo domínio e tendo a mesma senha não-criptografada, têm chaves diferentes. Por exemplo, um administrador tendo um principal para trabalho diário (michel@ARCHLINUX.ORG) e um para trabalho administrativo (michel/admin@ARCHLINUX.ORG), é muito provável que este usuário tenha configurado a mesma senha para ambos principals por questões de conveniência. A presença do tempero garante que as chaves referidas sejam diferentes.


- se um usuário tem duas contas em diferentes domínios, é muito frequente que a senha não-criptografada seja a mesma para ambos os domínios: graças à presença do tempero, um possível comprometimento de uma conta em um domínio não provocará automaticamente o comprometimento do outro.


Um tempero nulo pode ser configurado para compatibilidade com Kerberos 4.


Tendo discutido os conceitos de tipo de criptografia, função string2key e tempero, é possível conferir a precisão da seguinte observação: a fim de que haja interoperabilidade entre diversas implementações de Kerberos, não é suficiente negociar um tipo comum de criptografia, mas devem ser utilizados também os mesmos tipos de string2key e tempero.


É importante também notar que, explicando os conceitos de string2key e tempero, foram referenciados somente principals do usuário e nunca de servidores, pela razão de que um serviço, mesmo que compartilhe um segredo com o servidor de autenticação, não é uma senha não-criptografada, mas uma chave que, uma vez gerada pelo administrador no servidor Kerberos, é memorizada, como no servidor provedor do serviço.


Número de Versão da Chave


Quando um usuário muda uma senha ou um administrador atualiza a chave secreta para um servidor de aplicação, essa mudança é registrada por um contador ascendente. O valor corrente do contador que identifica a versão da chave é conhecido como "Número de Versão da Chave", ou mais brevemente, kvno (do inglês Key Version Number).


Próximo: 2.2.5 - Centro de Distribuição de Chaves

Anterior: 2.2.3 - Bilhete

Voltar ao índice