通常、パスワードは "abc"、 "1234"などの任意の文字列になります。しかし、DESのような暗号化アルゴリズムでは、固定長の秘密鍵が必要です。可変長パスワードを固定長の秘密鍵に変換する方法を知りたいと思います。可変長パスワードを固定長の秘密鍵に変換する方法
0
A
答えて
1
scrypt、bcrypt、またはPBKDF2のようなソルト値(辞書攻撃を防止するため)と良好なキー偏差関数を使用する必要があります。
鍵を生成するためにハッシュ関数のみを使用すると、生成される鍵がSHA256( "abcd")またはSHA256( "password")である可能性が高くなります。つまり、この方法はブルートフォース攻撃に対して非常に脆弱です。
3
パスワードベースのキー導出機能を使用して暗号化キーをパスワードから派生させます。PBKDF2
(別名Rfc2898DeriveBytes
)。導出に約100msの計算時間がかかるように、ランダムな塩と繰り返し回数を使用します。
復号化の鍵を導出するために同じ塩と繰り返し回数を使用する必要があります。秘密にする必要はないため、暗号化されたデータの前に付加することができます。
ハッシュ関数を使用するだけでは不十分です。ちょうど塩を追加するだけでセキュリティを向上させることはほとんどありません。
ポイントは、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。
関連する問題
- 1. 共有秘密鍵の長さ
- 2. SSIS:データを可変幅の固定長テキストに変換
- 3. Javaで与えられたRSA秘密鍵の固定長指数を生成する方法は?
- 4. pfx形式の秘密鍵をpem形式に変換する
- 5. 鋳型と固定+可変長クラス
- 6. MySQLの固定長データ型と可変長データ型
- 7. 可変長シーケンスの連続した固定長バッチ
- 8. 公開鍵と秘密鍵は交換可能ですか?
- 9. 秘密鍵を秘密鍵で暗号化する
- 10. 固定長フィールドの可変長配列によるメッセージの解析
- 11. 鍵ボールト鍵と秘密鍵
- 12. KeyStoreに秘密鍵と公開鍵を格納する方法
- 13. pythonで固定長ファイルをcsvファイルに変換する方法は?
- 14. パスワードを知らずに秘密鍵をJavaキーストアにインポートする方法
- 15. 固定長テキストファイルをSQLに変換する
- 16. 長い固定数を配列に変換するRuby
- 17. Beanstalk秘密鍵
- 18. アンドロイドコードバの秘密鍵の保存方法
- 19. swift3 - 秘密鍵の保護方法
- 20. 可変長pdfを固定LRECLで直接接続する方法
- 21. 秘密鍵とパスワードをPythonに格納する場所
- 22. Libsodium鍵交換(共有秘密)が異なる方法で
- 23. Django設定の秘密鍵環境変数502 nginx
- 24. SSLをインストールするための秘密鍵のパスワード
- 25. Silverlight 4に秘密鍵または秘密鍵を安全に格納する方法は?
- 26. Basic authを渡す方法headerjaxの公開鍵と秘密鍵
- 27. PEMでエンコードされたRSA秘密鍵をAsymmetricKeyParameterに変換する
- 28. RSA PKCS1秘密鍵文字列をJava PrivateKeyオブジェクトに変換する
- 29. express-sessionのセッションオブジェクトで変数を秘密鍵として使用する方法
- 30. JWTトークン - 秘密鍵
「約100msの計算時間」...どのハードウェアで、どのレベルの並列計算リソースで...? –
生産マシン上で100ミリ秒、それは人間の使用のためにほぼ正しいです。確かに速いコンピュータは良くなるが、<1usと比較するとSHA512では攻撃者にとって大きなペナルティがあり、〜10万倍遅くなる。 NIST [パスワードベースのキー導出のための推奨](http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf)を参照してください。ここでは抜粋を示します:*反復の回数は高く設定する必要があります許容可能な性能を維持しながら、環境に対して許容されるものである。 – zaph