2016-12-16 12 views
-1

ユーザパスワードから256bitのメッセージダイジェストを作りたい。圧縮アルゴリズムをGPU攻撃に使用するのは安全ですか?

私はアルゴン2がセキュリティのために推奨されていることを知っていますが、これまでのところAndroidデバイスではサポートされていません。

私は以下の別の方法を考え出しました。 GPUは、ユーザーパスワードによって、いくつかのアルゴリズム(例えばAES)で、SRAMにデータを残さないことができるように大きいです

  1. を暗号化し、大きなランダムデータ、。

  2. 暗号化されたデータをZipアルゴリズムでエンコードします。

  3. 私はそれだけで1ビットごとに処理し、支店であれば、多くを持っているので、ジップエンコーディングがGPU、 のための最悪のアルゴリズムの一つだと思いSHA256

のZIPデータのメッセージダイジェストを取得します。 並列化できません。

Zipは可逆圧縮なので、ステップ2で生成されたデータはユーザーパスワードと一意です。

GPUアーキテクチャを考えると、Ifブランチ実行時に多くのクロックサイクルを要します。 GPUでZipをエンコードするのがCPUよりも遅いと思います。

これはいかがですか? 安全?

私はセキュリティの初心者です。

この方法を評価してください。

+1

代わりにcrypto.stackexchange.comで質問してください... – Narf

+0

'libsodium'にはArgon2があります。[Android用に3つの' libsodium'実装があります](https://download.libsodium.org/doc/ bindings_for_other_languages /)。 – CommonsWare

+1

独自の暗号方式を作成しないでください。 [「シュナイダーの法則」](https://www.schneier.com/blog/archives/2011/04/schneiers_law.html):最も無慈悲なアマチュアから最高の暗号技術者まで、誰でも自分自身でできるアルゴリズムを作成できます壊れない – zaph

答えて

1

ハッシュ関数を使用するだけでは不十分です。ちょうど塩を追加するだけでセキュリティを向上させることはほとんどありません。代わりに、約100msの持続時間の間、ランダムな塩でHMACを繰り返し、塩をハッシュで保存してください。 PBKDF2(別名Rfc2898DeriveBytes)、password_hash/password_verifyBcryptなどの機能を使用してください。要点は、攻撃者が無差別にパスワードを見つけるのに多くの時間を費やすことです。ユーザーを保護することが重要です。安全なパスワード方法を使用してください。

+0

GPGPUが非常に開発されたので、PBKDF2は弱すぎます。 BcryptはPBKDF2よりはるかに安全ですが、私はちょうど256bitのハッシュが必要です。 –

+0

実際には、現在の[DRAFT NIST Special Publication 800-63Bデジタル認証ガイドライン](https://pages.nist.gov/800-63-3/sp800-63b.html)ではPBKDF2を推奨しています。 *検証者は、暗記された秘密をオフライン攻撃に耐性のある形で格納する必要があります。秘密鍵は、[SP800-132] "で説明されているように、PBKDF2などの承認済みハッシュ関数を使用して、 – zaph

関連する問題