O que é Derivação de chave?
A derivação de chave é o processo de transformar um valor de origem — normalmente uma senha, uma frase-senha ou um segredo compartilhado — em uma ou mais chaves criptográficas por meio de um algoritmo determinístico projetado para produzir material de chave de alta entropia.
As senhas escolhidas por pessoas são intrinsecamente fracas como chaves criptográficas. Elas são curtas, têm conjuntos de caracteres limitados e seguem padrões previsíveis. Uma função de derivação de chave (KDF) preenche essa lacuna processando a senha por meio de um algoritmo computacionalmente intensivo que produz uma chave de comprimento fixo adequada para a criptografia.
As funções de derivação de chave são deliberadamente projetadas para serem lentas e exigentes em recursos. Isso é contraintuitivo para a maioria dos softwares, em que a velocidade é valorizada, mas para as KDFs a lentidão é um recurso de segurança. Um atacante que tente quebrar uma senha por força bruta precisa executar a KDF a cada tentativa. Se a KDF levar 100 milissegundos por tentativa, testar um bilhão de senhas levaria mais de três anos, em comparação com segundos usando uma função hash rápida.
As KDFs comuns incluem PBKDF2, bcrypt, scrypt e Argon2. Cada uma equilibra recursos diferentes (tempo de CPU, memória, paralelismo) para resistir a diferentes estratégias de ataque. A escolha da KDF depende do ambiente: as aplicações baseadas em navegador normalmente usam PBKDF2 porque ela está disponível por meio da Web Crypto API, enquanto as aplicações do lado do servidor podem preferir o Argon2 por sua dureza de memória.
Como o Vaulted usa Derivação de chave
Quando você define uma frase-senha opcional em um segredo, a Vaulted usa a derivação de chave para converter essa frase-senha em uma chave de encapsulamento. Mais especificamente, ela executa PBKDF2 com 100.000 iterações, SHA-256 e um salt aleatório de 16 bytes por meio da Web Crypto API. A chave derivada é usada com AES-KW para encapsular a chave de criptografia AES-256-GCM original. O destinatário precisa inserir a mesma frase-senha para derivar a mesma chave de encapsulamento e desencapsular a chave de criptografia antes de descriptografar o segredo.