Primeiro, um ponto de terminologia: o que você descreve é criptografia simétrica , e uma chave compartilhada entre os participantes é geralmente conhecida como chave secreta; "Chave privada" geralmente significa a parte de uma chave na criptografia de chave pública que apenas um participante conhece.
Há duas maneiras de disseminar uma chave secreta: ela pode ser transportada de alguma maneira fisicamente segura ou pode ser transportada usando alguma outra forma de criptografia, geralmente a criptografia de chave pública.
Existem maneiras de trocar uma chave secreta que não requer um canal de comunicação secreto. O mais popular é o protocolo de troca de chaves Diffie-Hellman. O princípio de Diffie-Hellman é que cada participante gera seu próprio par de chaves e há uma operação matemática que constrói um grande número a partir de uma chave pública e uma chave privada. Essa operação matemática tem uma propriedade muito interessante: o grande número pode ser construído a partir da chave privada de Alice e da chave pública de Bob, ou da chave privada de Bob e da chave pública de Alice; você obtém o mesmo número de qualquer maneira. Então, Alice e Bob trocam suas chaves públicas, e ambas as partes conhecem o grande número, que pode ser usado como uma chave secreta. Um bisbilhoteiro pode descobrir as duas chaves públicas, mas é impossível encontrar o grande número somente das chaves públicas.
A troca de chaves Diffie-Hellman permite que duas partes troquem um segredo, não importa quem esteja ouvindo. No entanto, não autentica Alice para Bob ou vice-versa. Portanto, é passível de um ataque do tipo homem do meio : Mallory realiza a troca de chaves com Alice (que acredita estar conversando com Bob) e separadamente com Bob (que acredita que está conversando com Alice), e assim decide ou menos conhece o segredo.
Quando o invasor pode interceptar e injetar mensagens, é necessária mais criptografia para que os participantes se autentiquem. (Um invasor passivo significa efetivamente que o protocolo de transporte subjacente fornece autenticação.) A maneira mais fácil é que cada participante já conheça a chave pública do outro. Se Alice conhece a chave pública de Bob:
- Alice pode autenticar Bob enviando a ele um desafio: um valor aleatório (um nonce ) criptografado com a chave pública de Bob. Se Bob pode descriptografar esse valor e enviá-lo de volta, Alice sabe que está realmente conversando com Bob.
- Bob pode se autenticar com Alice, enviando uma mensagem assinada com sua chave pública. Alice verifica a assinatura para verificar se está realmente conversando com Bob.
Existem muitas variantes que usam um desses métodos (ou ainda outra variante) em uma direção e o mesmo ou um método diferente na outra direção, ou que são autenticadas apenas em uma direção. Por exemplo, SSL / TLS (a camada de criptografia para muitos protocolos -s como HTTPS, SMTPS, IMAPS etc.) pode usar várias combinações de cifras diferentes e geralmente autentica o servidor para o cliente, mas também pode opcionalmente autenticar o cliente. Diffie-Hellman é lento e complicado para esta aplicação; o algoritmo mais amplamente distribuído de chave pública é o RSA .
É claro que Alice e Bob podem não conhecer a chave pública um do outro antes. Então eles confiam em uma cadeia de confiança: Bob envia a Alice sua chave pública, juntamente com uma declaração assinada de um terceiro que afirma que essa chave é realmente a chave pública de Bob. Essa declaração assinada é chamada de certificado e a terceira parte é uma autoridade de certificação . O terceiro pode ser conhecido por Bob ou sua identidade pode ser confirmada por um quarto e assim por diante. Eventualmente, essa cadeia de confiança (... atesta Dominique atenta a Charlie que atesta Bob) deve chegar a alguma parte em que Ron já confia, o que significa que Bob tem a chave pública de Ron e confia que Ron assine apenas certificados válidos.
Existem protocolos que não dependem da criptografia de chave pública. Em particular, o protocolo Kerberos é usado em redes baseadas em unix e baseadas em Windows para estabelecer conexões entre um cliente e um servidor. O Kerberos usa um servidor de autenticação central chamado KDC ( Key Distribution Center ). O KDC deve ter a senha do usuário armazenada em um banco de dados e o cliente normalmente solicita a senha do usuário. Para evitar expor a senha, o protocolo não usa a senha diretamente, mas um hash criptográfico ou, mais geralmente, uma função de derivação de chave aplicada à senha.
Com esse segredo compartilhado, o cliente e o KDC estabelecem um canal seguro e o KDC envia ao cliente um "ticket". O ticket contém uma chave de sessão (ou seja, uma chave secreta recém-gerada), bem como uma cópia da chave que é criptografada com outra chave simétrica compartilhada entre o KDC e o servidor que o cliente deseja entrar em contato. O cliente então encaminha esta cópia criptografada para o servidor. O servidor descriptografa essa mensagem para obter a chave da sessão e gera um nonce que criptografa com a chave da sessão e envia de volta ao cliente. O cliente inicia um canal seguro com o servidor, criptografado com a chave da sessão e começa mostrando que pode descriptografar o nonce: isso autentica o cliente no servidor. Um estabelecimento de sessão Kerberos é uma variante do protocolo Needham-Schroeder .
¹ No sentido de que os criptografadores se esforçaram muito, mas a melhor maneira que encontraram para isso exige uma quantidade inatingível de poder de computação.