O que uma frase-passe numa chave privada de VPN realmente protege
Bloqueia o ficheiro no disco, não o túnel em execução nem o login da sua conta. Saiba o que o pedido cobre, o que não cobre e o que fazer se vazar.
O pedido que aparece quando um cliente VPN arranca é fácil de ler mal. Não é a palavra-passe da conta VPN, não é a palavra-passe do túnel, e introduzi-la não prova que a ligação é segura. Desbloqueia uma representação guardada de uma chave privada para que o cliente possa ler o material da chave e usá-lo para autenticação. Tudo o que acontece depois é outra questão.
Na prática, a resposta falha nas margens: as pessoas assumem que a frase-passe protege o túnel em execução, ou que alterá-la revoga uma cópia da chave que já vazou. Ambas as suposições falham, e falham de forma a deixar uma credencial exposta enquanto o operador acredita que o assunto está resolvido.
Um diálogo, vários segredos diferentes
Uma frase-passe de chave privada desencripta um ficheiro. Uma palavra-passe de conta autentica-o num serviço. Uma palavra-passe de importação PKCS#12 desencripta um pacote que contém uma chave e o respetivo certificado, e pode não ser a mesma cadeia que a frase-passe da própria chave. Estes pedidos podem parecer quase idênticos, e adivinhar que segredo vai para onde é como as chaves acabam coladas no campo errado.
A encriptação do próprio túnel é uma quarta coisa. O canal de dados usa chaves de sessão negociadas durante o handshake; a frase-passe da chave privada não tem qualquer papel na proteção de pacotes individuais. Se alguém conseguir ler o ficheiro da chave, pode tentar adivinhar a frase-passe offline, mas se conseguir ler pacotes, a frase-passe é irrelevante.
O que a encriptação no disco cobre
Uma chave PEM encriptada surge em duas formas, e o cabeçalho diz-lhe qual tem. A forma moderna PKCS#8 começa com -----BEGIN ENCRYPTED PRIVATE KEY-----; a forma PEM antiga, ainda comum em instalações OpenVPN mais antigas, começa com -----BEGIN RSA PRIVATE KEY----- e transporta Proc-Type: 4,ENCRYPTED e uma linha DEK-Info logo abaixo. O ficheiro contém a chave privada encriptada sob uma chave derivada da sua frase-passe, normalmente através de um KDF baseado em palavra-passe com um número de iterações ou fator de trabalho indicado. A documentação do OpenSSL pkey cobre os formatos e as opções de frase-passe aplicáveis ao ler uma.
Seguem-se duas consequências. Uma frase-passe fraca é atacável offline ao ritmo que o KDF permitir, pelo que as permissões do ficheiro e o acesso a cópias de segurança continuam a importar mesmo quando o ficheiro está encriptado. E um atacante que obtenha apenas o ficheiro sem a frase-passe tem de adivinhar; quem obtém o ficheiro e a frase-passe tem a chave, exatamente como se nunca tivesse sido encriptada.
head -3 vpn.key
openssl pkey -in vpn.key -noout -pubout
openssl pkcs12 -in bundle.p12 -info -noout
head -3 mostra o cabeçalho e, num ficheiro antigo, as linhas Proc-Type e DEK-Info que provam a encriptação; uma única linha não é prova em nenhum sentido. A linha pkey pede a frase-passe e imprime apenas a metade pública, o que prova que o ficheiro e a frase-passe funcionam sem expor a chave privada. Não use -text para essa verificação: imprime os componentes privados, privateExponent, prime1, prime2 e o resto, e essa saída nunca deve ser colada em lado nenhum, nem num ticket, num chat ou num registo. O comando PKCS#12 também lhe diz se o pacote tem uma palavra-passe MAC ou de encriptação separada, o que vale a pena saber antes de o entregar a um colega.
O que deixa de proteger quando a chave é carregada
O desbloqueio é um evento de sentido único para esse processo. O cliente pede a chave ao KDF, desencripta o ficheiro e mantém a chave privada em memória enquanto precisar dela. A partir desse momento a frase-passe não protege nada da sessão em execução: nem a memória do processo, nem um core dump, nem uma sessão de depuração ligada ao cliente, nem uma cópia de segurança da máquina tirada enquanto a chave estava em uso.
É a mesma fronteira de uma chave SSH com frase-passe, ou do cofre desbloqueado de um gestor de palavras-passe. Aumenta o custo de roubar o ficheiro em repouso e não faz nada contra software malicioso a correr como o seu utilizador, uma aplicação autorizada que peça ao cliente para assinar, ou um administrador que consiga ler memória. Trate-a como uma camada, não como o controlo que torna uma chave segura de deixar por aí.
Porque é que o pedido continua a voltar
Um cliente que pergunta de novo em cada reconexão não está necessariamente avariado. Alguns clientes guardam a frase-passe em cache para a sessão, outros armazenam-na no porta-chaves do sistema operativo, e outros podem ser apontados para um auxiliar que a fornece, pelo que o comportamento depende do cliente e da sua configuração, não do ficheiro da chave.
Se o pedido repetido é a queixa real, reveja as opções de cache e autenticação do cliente antes de remover a encriptação da chave. Retirar a frase-passe transforma um ficheiro protegido numa chave em texto simples, e a reconexão fica silenciosa à custa do único controlo em repouso que tinha. Uma resposta melhor é normalmente um armazenamento de credenciais suportado com as mesmas permissões de ficheiro que usaria de qualquer forma.
Perda e exposição não são a mesma reparação
Uma frase-passe perdida não pode ser recuperada a partir do certificado. O certificado é material público que liga um nome a uma chave; não contém qualquer caminho de volta para a chave privada nem qualquer pista sobre a frase-passe. As opções práticas são uma cópia de segurança autorizada da chave, ou uma nova identidade emitida através do processo normal do operador. Quem oferecer 'recuperar' a frase-passe está a oferecer adivinhá-la.
A exposição exige uma resposta diferente. Reencriptar a mesma chave com uma nova frase-passe deixa o material da chave inalterado, pelo que uma cópia que já foi desbloqueada noutro sítio continua a funcionar. A reparação é revogar ou substituir a credencial: emitir uma nova chave e certificado, distribuí-los e retirar o antigo no par. Até isso acontecer, mudar a palavra-passe do ficheiro é manutenção, não contenção. Mantenha o ficheiro antigo fora das cópias de segurança apenas depois de confirmar que a nova identidade funciona, e registe que número de série ou impressão digital a substituiu.