web-dev-qa-db-ja.com

opensslコマンドでファイルを直接暗号化する場合のファイルセキュリティ/最初にSHA1ハッシュパスワードについてはどうですか?

私はこのコマンドを使用してしばらくの間ファイルを暗号化しています:

openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc

次に、パスワードを入力します。

大まかに言えば、これを解読するのはどれほど難しいでしょうか。

ソルトを使用しているようですが、ハッシュ化されたパスワードを実際にどこかに(ウェブサイトのログインのデータベースのように)保存しない限り、セキュリティはそれほど向上しないはずですよね?先ほど述べたように、ファイルをローカルで暗号化しているだけなので、毎回手動でパスワードを入力します。

opensslはIVを生成するために1回の反復のみを使用することも理解しているため、これは非常に時間のかかるプロセスではないと思います。私が間違っていたら訂正してください。

あなたの見積もりでは、これは本当に安全ですか?


おまけの質問:SHA1が最初にパスワードをハッシュするとどうなりますか?

echo -n "mypassword" |openssl sha1

ファイルを暗号化するときにSHA1ハッシュに貼り付けますか?クラッカーがパスワードの形式を確実に知っているため(SHA1ハッシュ)、これによりセキュリティが低下することはわかっていますが、実際にはどれほどセキュリティが低下すると考えますか? SHA1ハッシュのすべて(または十分な数)をループ処理することは可能でしょうか?

7
user21203

この回答 の終わりを参照してください:パスフレーズを暗号化キーに変換するためにOpenSSLが行うこととIVは弱いものです。 OpenSSL内で単純に変更する方法はありません(適切なコマンドラインオプションがないため、これはハードコードされています)。

パスフレーズを事前にハッシュしても、状況はあまり変わりません。ネストされたハッシュをたくさん行うと、少し強化されますが、ソルトは最後の手順まで考慮されないため、理想的なレベルにはなりません(共有可能な事前計算の多くは、依然として攻撃者が実行できます)。設定可能な速度とソルトによるパスワードハッシュは、即興を許容するものではありません。その時点で、OpenSSLを完全に破棄し、より優れたツールを使用する方がはるかに安全およびです。 GnuPG-cフラグ付きのコマンドラインツールは、パスワードベースの対称暗号化を行い、openssl encよりもはるかに優れています。

11
Thomas Pornin

そのコマンドのセキュリティは、選択したパスワードの安全性に直接関係しています。現時点では、aes-256-cbcは壊れないので、パスワードを知っていれば、そこからデータを取得することしかできません。

パスワードをハッシュしてもほとんど違いはありません。パスワードハッシュは、パスワードを非表示にするために使用されます。これにより、誰かが保存されたパスワードを取得したとしても、ユーザーのパスワードを知ることはできません。これは、暗号化されたファイルにはまったく関係ありません。唯一の利点は、パスフレーズが40文字になるということですが、大文字と小文字が1つの英数字のみになります。誰かがそれを解読する時間を非常に大幅に削減することを知っていれば。 pbkdf2のようなkdfを使用する利点は、パスワードとハッシュの照合を総当たりするのに時間がかかることです。したがって、ある時点でハッシュを使用することが有用であったとしても、ハッシュを計算する代わりに、可能なすべてのハッシュをブルートフォースする方が簡単です。より良い方法は、解読に長い時間がかかるパスワードを選択することです。

あなたがすべきことは、zxcvbnを使って適切なパスワードを選び、それを使うことです。現在、世界最速のパスワードクラッキングコンピューターは1秒間に3,500億のパスワードを処理できるため、20文字以上のパスフレーズとzxcvbnを使用して、辞書攻撃などでクラッキングされないようにすることで、ファイルをクラックできないようにします。これらのコンピュータが数千台あるとしても、次の数千年は。

2
Eric

Opensslの以前のバージョンでは、他の回答で述べられているように、非常に弱い鍵導出プロセスを使用して、パスワードから暗号化鍵を導出していました。ただし、opensslのバージョン1.1.1は、ランダムに生成されたソルトとsha256ハッシュの複数の反復(デフォルトでは10,000)を使用して、PBKDF2を使用した鍵の導出をサポートするようになりました。

Aes-256-cbcとパスワードを使用してファイルを暗号化するには:

 openssl aes-256-cbc -e -salt -pbkdf2 -iter 10000 -in plaintextfilename -out encryptedfilename

復号化するには:

 openssl aes-256-cbc -d -salt -pbkdf2 -iter 10000 -in encryptedfilename -out plaintextfilename

詳細は https://www.openssl.org/docs/man1.1.1/man1/openssl-enc.html を参照してください。

0
mti2935