Qual é a maneira mais segura de passar senhas para OpenSSL?

Qual é a maneira mais segura de passar senhas para OpenSSL?

Com o OpenSSL, existem duas maneiras no bash de usar uma variável de ambiente como senha:
pass:"${var}"e env:var.

Estou me perguntando qual método oferece mais segurança, já que a página de manual faz parecer que psé possível ler a senha quando passada como pass:"${var}", e que também pode ser possível com env:var.

Seção relevante da página de manual do OpenSSL:

Argumentos de frase secreta

Vários comandos aceitam argumentos de senha, normalmente usando -passin e -passout para senhas de entrada e saída respectivamente. Isso permite que a senha seja obtida de diversas fontes. Ambas as opções utilizam um único argumento cujo formato é descrito abaixo. Se nenhum argumento de senha for fornecido e uma senha for necessária, o usuário será solicitado a inserir uma: ela normalmente será lida no terminal atual com o eco desativado.

senha: senha

a senha real é senha. Como a senha é visível para utilitários (como 'ps' no Unix), este formulário só deve ser usado onde a segurança não for importante.

env:var

obtenha a senha da variável de ambiente var. Como o ambiente de outros processos é visível em determinadas plataformas (por exemplo, ps em determinados sistemas operacionais Unix), esta opção deve ser usada com cautela.

Responder1

A página de manual é bastante explícita sobre o assunto, você deve usar oenv:varmétodo.

A página do manual está correta, todos os parâmetros da linha de comando são visíveis via ps paratodos os usuáriosno sistema.

alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456
evil$ ps aux|grep openssl                                                                                                                               
alice      17594  115  0.0  17108  4424 pts/6    R+   11:02   0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456

Se você usar uma variável de ambiente, outro usuário (exceto root) só poderá ver o nome dessa variável, mas não seu conteúdo.

alice$ OPENSSLPW=123456
alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW
evil$ ps aux|grep openssl                                                                                                                               
alice      17713  115  0.0  17108  4424 pts/6    R+   11:02   0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW

informação relacionada