セキュリティに影響を及の格納にパスワードを設定します。バンドルを得たとCFPreferencesCopyAppValue

StackOverflow https://stackoverflow.com/questions/1248575

質問

お気自明性の問題が何らかの理由でんを見つけることができ、明確な答えのAppleアンダーグラウンドなどを設定します。バンドルのパスワード情報が格納されています。私の質問:いく必要がある一部の資格は、アプリを使用していを設定します。バンドルのパスワードを入PSTextFieldSpecifier textfieldアップルの設定により地域IsSecure=あり、そのアクセスの値からアプリを使用CFPreferencesCopyAppValue、書面でNSUserDefaultsのみを送信したりすることは、ネットワークを安全に、安全で参考として示したもので、これらおよび検索手法と比較した場合の保存と取得は、パスワードをキーチェーンに自分のアプリの設定は?で入力します。

役に立ちましたか?

解決

CFPreferencesCopyAppValueNSUserDefaultsを使用しているときあなたが得る同じ情報にアクセスするだけでCore Foundationの方法です。セキュリティの面では、機能はまったく同じです。つまり、それが暗号化されていません。それだけで、それが隠されていますという意味で安全です。 「正しい」答えは、キーチェーンを使用することです。

とカウンタは、多くのアプリケーションがパスワードを保存するためにNSUserDefaultsを使用することです。パスワードコントロールが任意の値の情報にアクセスしない限り、それはキーチェーンを使用しようとして努力する価値はないと主張することができます。どの設定アプリケーションにセキュアなフィールドを使用して賛成の第二引数に私をもたらします:キーチェーンAPIは恐ろしいですと、少なくとも私の経験では、エラーのないコードを書くことは難しいです。

他のヒント

保存しないユーザーのパスワードを設定です。
います。

を記憶する必要がなくなり、より快適なのかを元にパスワードを把握しておく必要がありの場合はパスワードをユーザに入り 試合 元のパスワードになります。正しい対パスワードをiOSのどちらにも

  • 軒のキーチェーン、その他いて
  • を生成する暗号一方向のハッシュ関数SHA-512またはその他の暗号化および店舗のハッシュと塩 NSUserDefaults

これらのオプションに暗号化、パスワードを格納するハッシュ+塩にあります。こんにパスワード:

  1. グラブをパスワードをユーザーから
  2. をランダム塩値
  3. を作成しておりだけのハッシュを使用SHA-512のランダム塩値
  4. 店内のハッシュや塩分の値 NSUserDefaults --これらの値を使用する事が出来ませんよりハッカーを決定する独自のパスワードで保管する必要はなくなりします。

今の場合、ユーザがパスワードとして検証の場合は正しさん:

  1. グラブをパスワードをユーザーから
  2. 鷲掴みに保存されたハッシュ+塩値から NSUserDefaults
  3. を作成しておりだけのハッシュを用い、同一方向のハッシュ機能を使った暗号化のパスワード--広い範囲にわたってのみパスワードの塩値から NSUserDefaults
  4. 比較されたハッシュとして保存され NSUSerDefaults.場合には、そのユーザーに正しいパスワードになります。

こちらのコードを生成する塩のみにハッシュ:

NSString *FZARandomSalt(void) {
    uint8_t bytes[16] = {0};
    int status = SecRandomCopyBytes(kSecRandomDefault, 16, bytes);
    if (status == -1) {
        NSLog(@"Error using randomization services: %s", strerror(errno));
        return nil;
    }
    NSString *salt = [NSString stringWithFormat: @"%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x",
                      bytes[0],  bytes[1],  bytes[2],  bytes[3],
                      bytes[4],  bytes[5],  bytes[6],  bytes[7],
                      bytes[8],  bytes[9],  bytes[10], bytes[11],
                      bytes[12], bytes[13], bytes[14], bytes[15]];
    return salt;
}

NSData *FZAHashPassword(NSString *password, NSString *salt) {
    NSCParameterAssert([salt length] >= 32);
    uint8_t hashBuffer[64] = {0};
    NSString *saltedPassword = [[salt substringToIndex: 32] stringByAppendingString: password];
    const char *passwordBytes = [saltedPassword cStringUsingEncoding: NSUTF8StringEncoding];
    NSUInteger length = [saltedPassword lengthOfBytesUsingEncoding: NSUTF8StringEncoding];
    CC_SHA512(passwordBytes, length, hashBuffer);
    for (NSInteger i = 0; i < 4999; i++) {
        CC_SHA512(hashBuffer, 64, hashBuffer);
    }
    return [NSData dataWithBytes: hashBuffer length: 64];
}

コードはこの例でした。 http://blog.securemacprogramming.com/2011/04/storing-and-testing-credentials-cocoa-touch-edition/

iPhone上のキーホルダーは、カスタム行うことは非常に困難である暗号化、(およびエクスポート)を使用している場合を除き、最も安全であることを行っています。 NSUserDefaultsは安全と見なされていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top