Há uma diferença entre os dois comandos, conforme descrito em man cryptsetup :
--key-file, -d name
Read the passphrase from file.If the name given is "-", then the passphrase will be read from stdin. In this case, reading will not stop at newline characters.
Isso significa que, se você gerou seu arquivo usando echo , vi ou copiar / colar, provavelmente incluirá uma nova linha no final. se usado como stdin puro (sem --key-file option), ele terá sua nova linha final ignorada, mas quando usado como um parâmetro para --key-file , mesmo que seja o mesmo stdin ( --key-file=- ) ele terá essa nova linha incluída a frase secreta: ela se torna uma nova senha que é inválida.
Para verificar isso:
cat mypass.txt | tr -d '\r\n' | sudo cryptsetup open --type luks --key-file=- /dev/sda1 enc-store
Deve funcionar como pretendido (apenas no caso de eu remover qualquer CR também).
Se essa for a causa, basta remover esta nova linha: por exemplo
mv -i mypass.txt mypass.old && tr -d '\r\n' < mypass.old > mypass.txt
O que você provavelmente deve fazer de qualquer maneira é gerar uma nova senha a partir de números aleatórios puros, colocá-la em um arquivo seguro e incluí-la em um slot LUKS separado.