Ich habe einen User Pin im iOS Keychain gespeichert. Für jeden Pinversuch verwende ich SecItemCopyMatching
, um den Referenzstift abzurufen, und führe dann den Vergleich durch.
Das Problem ist, dass der abgerufene Referenzstift für eine kurze Zeit in den Arbeitsspeicher der App gelangt. Wenn das Telefon kompromittiert ist, kann der Referenzstift möglicherweise ausgelesen werden.
Gibt es eine Möglichkeit, den PIN-Versuch an den Schlüsselbund zu übergeben und den Schlüsselbund in seiner sicheren Umgebung mit dem Referenzstift vergleichen zu lassen? (Kann das sichere Element solche Sachen machen?)
Ich denke, das könnte Ihnen helfen, die endgültige Antwort zu erreichen, da 1Password mit demselben Problem konfrontiert ist.
Aber basierend auf dem, was ich lese, ist das, was Sie erreichen wollen, momentan nicht möglich. Die nächste Information, die ich finden konnte, war diese:
Was ist das? korrekte Methode zum Löschen vertraulicher Daten aus dem Speicher in iOS?
und dieser:
Wo Sie lesen können:
Wenn Ihr Gegner beliebigen Code auf Ihrem Ziel ausführen kann Maschine (mit den Debug-Privilegien, die benötigt werden, um ein Prozessabbild auszugeben), Sie sind alle Arten von verschraubt.
Meine Antwort lautet also: Nein, Sie können die PIN nicht überprüfen, ohne den iOS-Schlüsselbund zu verlassen.
Im Allgemeinen speichern Sie einen Einweg-Hash des Passworts mit einem Salt, nicht dem tatsächlichen Passwort. Fügen Sie zum Überprüfen das Salz hinzu, überprüfen Sie die Zeichenfolge, vergleichen Sie sie mit dem gespeicherten Hash, und wenn sie übereinstimmt, ist sie verifiziert.
Die Stärke ist dann die Stärke des Algorithmus, das Salz und das Passwort.
Nein, es kann nicht so gemacht werden, wie Sie es vorschlagen. Der Schlüsselbund ist ein Speicher
aber ist es wirklich ein Problem, wenn das Element im flüchtigen Speicher ist?
Ich meine .. wenn der Schlüsselbund geöffnet ist, ist es bereits im Speicher (zumindest während der Überprüfung)