web-dev-qa-db-ja.com

iOSパスコードが有効かどうかをプログラムで検出

パスコードをアプリに直接作成するのではなく、ユーザーにパスコードを2回入力するように要求する可能性があります(デバイスに対して1回、アプリに対してもう一度)。私は自分を賢くして、次のように何かをするかもしれないと思いました:

if (device has passcode)
    continue into my app
else
    make user enter my app passcode

デバイスのパスコードを設定したくない、画面ロックを強制したくない、何も暗号化したくない-デバイスパスコードが有効かどうかを検出するためのAPIだけが本当に必要です。何かのようなもの:

BOOL notReally = [UIDevice isUserSlightlyMoreSecureBecauseTheySetDeviceLockOn];

または私が幸運を感じているなら:

BOOL isPasscodeEnabled = [UIDevice isPasscodeEnabled];
BOOL isSimplePasscode = [UIDevice isSimplePasscode];
NSInteger minutes = [UIDevice requirePasscodeAfter];

私はこの質問に基づいていないと思います(しかし、数年前です) " プログラムで設定バンドルのiPhoneのパスコードを確認してください "またはこれが答えかもしれません。 " Lock Unlock events iphone "は、私が望んでいるものとは異なりますが、「事後的に」機能する可能性があります。

22
Eric

更新

IOS 9以降、LocalAuthentication.frameworkを使用してこれを実現できます。 iOS 9以降をターゲットにしている場合は、コメント ここ を読むか、または この答え を参照してください。

それでもiOS 8をターゲットにする必要がある場合は、引き続き読んでください:)


IOS8から、できる!
ステータスを簡単に確認できるように簡単なカテゴリをまとめました: https://github.com/liamnichols/UIDevice-PasscodeStatus

使い方

このカテゴリは、iOS 8のSecurity.Frameworkに追加された新しいaccessControl機能を使用して機能します。kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly保護レベルを使用して、キーチェーンにアイテムを追加しようとします。

ドキュメントには次のように記載されています。

アイテムデータは、デバイスのロックが解除されている間のみアクセスできます。このクラスは、デバイスにパスコードが設定されている場合にのみ使用できます。これは、アプリケーションがフォアグラウンドにあるときにのみアクセス可能にする必要があるアイテムに推奨されます。この属性を持つアイテムは新しいデバイスに移行されないため、バックアップが新しいデバイスに復元された後、これらのアイテムは失われます。 パスコードのないデバイスでは、このクラスにアイテムを保存できません。デバイスパスコードを無効にすると、このクラスのすべてのアイテムが削除されます。

このため、このレベルのaccessControlでキーチェーンの項目を追加または読み取ろうとすると、エラーが返されます。このエラーが発生した場合、passcodeStatusLNPasscodeStatusDisabledとして返されます。このレベルのaccessControlでキーチェーンを正常に読み書きできる場合、LNPasscodeStatusEnabledを返します。

デバイスがサポートされていないか、キーチェーンに関連しないエラーが返された場合は、LNPasscodeStatusUnknownを返します。

27
liamnichols

IOS 9以降では、新しいLocalAuthenticationクラスを使用してそれを検出でき、シミュレータだけでなくデバイスでも機能します。

import LocalAuthentication

private func devicePasscodeSet() -> Bool {
    //checks to see if devices (not apps) passcode has been set
    return LAContext().canEvaluatePolicy(.DeviceOwnerAuthentication, error: nil)
  }
33
sschale

私はこの情報を直接取得する方法を知りませんが、ディスク暗号化に対するAppleのサポートの副作用を使用することで、おそらくあなたが後の結果を達成できると思います。詳細は オンディスク暗号化を使用したデータの保護 を参照してください。

ただし、これは設計された動作というよりはハックであり、認識されないコーナーケースがいくつかあります。この機能は、ヒューリスティックで有効にするものではなく、ユーザーが明示的に制御するものにすることをお勧めします。

1
Jim