私はアプリを逆行させていますが、私はAESアルゴリズムの専門家ではありません。 アプリケーションは、ユーザーにオフラインログインを行う機会を与えます。AES-256ベストプラクティスの実装
ユーザーは、これは、ユーザー
public void EncryptLoginInfo(string username, byte[] secretShared, byte[] salt)
{
byte[] random = calc.GenerateRandomBytes();
byte[] array = aes.Encrypt(secretShared, random);
OfflineLogin loginInfo = new OfflineLogin()
{
Username = username,
SecretShared = array,
Iv = random,
Salt = salt
};
this._userCredentials.StoreOfflineLoginData(username, loginInfo);
}
そして、このアールの情報を格納するために使用される機能です
彼名とパスワードを提供するように求めていますこれらの情報はアプリの内部設定ファイルの中に保存されています。ユーザーがオフラインでログインを行いたい場合は、以下の例では、encryptLoginInfoに渡さパスワードが
Username: not_important
SecretShared: 4KVrjy1cQVWYpWF7aolpMS0HzhKyFf+9VXauQrXoXVUbf0bGXIDOLDJuSVhYoFo2
Iv:yil4nn02IoKsOnX5KXVsDg==
Salt: 5kJio2VQEqjomHRdQMqRVJ0zkBsmqi8K3NypC2VWJk4
で、彼は、ユーザー名と自分のパスワードを提供するように求めています。
質問:これは安全ですか?攻撃者はSecretShared + IV +塩を得ることができるならば、彼はユーザーのパスワードを回復することができる(つまり、この特定の例である)
これは
public void DencryptLoginInfo(OfflineLogin loginInfo)
{
byte[] array = aes.Decrypt(loginInfo.SecretShared, loginInfo.Iv);
loginInfo.SecretShared = array;
loginInfo.Iv = (byte[]) null;
}
があります復号化関数にありますあなたはこの実装のセキュリティ問題を見つけることができますか? 使用するアルゴはAES-256でなければなりません。。 SecretShared + Iv + Saltで与えられたPASSWORDを解読するために、PythonでPOCを実装できますか?
達成しようとしているものは何ですか? * something *を暗号化してユーザーを認証しているのですか、または実際にユーザーのパスワードを使って有用なデータを暗号化していますか?スタックオーバーフローは、あなたの質問に合わないプログラミングに関する質問を扱うことに注意してください。 –
パスワードを暗号化してユーザーを認証する – paolino
@paolinoパスワードを暗号化するのではなく、パスワードベースのキー導出機能でハッシュする必要があります。申し訳ありませんが、あなたの質問を修正し、私は私の答えを修正することができます。 – TheGreatContini