Para gerar a chave de 256 bits para as cifras de bloco, o algoritmo Secure Hash SHA-256 é usado. Esse algoritmo compacta a chave do usuário fornecida pelo usuário (consistindo em senha e / ou arquivo de chave) em uma chave de tamanho fixo de 256 bits. Essa transformação é unidirecional, ou seja, é inviável computacionalmente inverter a função hash ou encontrar uma segunda mensagem que seja compactada no mesmo hash.
O ataque recentemente descoberto contra o SHA-1 [2] não afeta a segurança do SHA-256. O SHA-256 ainda é considerado muito seguro [3].
Derivação de chave:
Se apenas uma senha for usada (ou seja, nenhum arquivo de chave), a senha mais um sal aleatório de 128 bits será hash usando o SHA-256 para formar a chave final (mas observe que há algum pré-processamento: Proteção contra ataques de dicionário). O sal aleatório evita ataques baseados em hashes pré-calculados.
Ao usar a senha e o arquivo de chaves, a chave final é derivada da seguinte forma: SHA-256 (SHA-256 (senha), conteúdo do arquivo de chaves), ou seja, o hash da senha principal é concatenado com os bytes do arquivo de chaves e o byte resultante string é hash com SHA-256 novamente. Se o arquivo de chave não contiver exatamente 32 bytes (256 bits), ele também será hash com SHA-256, para formar uma chave de 256 bits. A fórmula acima muda para: SHA-256 (SHA-256 (senha), SHA-256 (conteúdo do arquivo-chave)).