OpenSSL にパスワードを渡すより安全な方法は何ですか?

OpenSSL にパスワードを渡すより安全な方法は何ですか?

OpenSSL では、bash で環境変数をパスワードとして使用する方法が 2 つあります:
pass:"${var}"およびenv:var

マニュアル ページには、psとして渡されたときに がパスワードを読み取ることができpass:"${var}"、 でも同様の可能性もあると記載されているため、どの方法が最もセキュリティが高いのか疑問に思っていますenv:var

OpenSSL マニュアルページの関連セクション:

パスフレーズ引数

いくつかのコマンドはパスワード引数を受け入れます。通常は、入力パスワードと出力パスワードにそれぞれ -passin と -passout を使用します。これにより、さまざまなソースからパスワードを取得できます。これらのオプションは両方とも、以下に説明する形式を持つ単一の引数を受け取ります。パスワード引数が指定されず、パスワードが必要な場合は、ユーザーにパスワードの入力を求めます。これは通常、エコーをオフにした現在の端末から読み取られます。

パス:パスワード

実際のパスワードは password です。パスワードはユーティリティ (Unix の 'ps' など) に表示されるため、この形式はセキュリティが重要でない場合にのみ使用してください。

環境変数

環境変数 var からパスワードを取得します。特定のプラットフォーム (たとえば、特定の Unix OS の ps) では他のプロセスの環境が表示されるため、このオプションは注意して使用する必要があります。

答え1

マニュアルページにはこの問題についてかなり明確に記載されています。環境変数方法。

マニュアルページは正しく、すべてのコマンドラインパラメータはpsで確認できます。すべてのユーザーシステム上。

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

環境変数を使用すると、別のユーザー (root を除く) はその変数の名前のみを表示でき、その内容は表示できなくなります。

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

関連情報