Speichern von Kennwörtern in NSString, ohne im Arbeitsspeicher lesbar zu sein

8

Ich muss Passwörter in NSString objects speichern; Allerdings möchte ich sie irgendwie verschleiern, damit sie nicht direkt aus dem Speicher gelesen werden können.

Dies ist eine Mac OS X (10.5) Anwendung, aber eine Lösung, die auch auf dem iPhone funktioniert, würde sehr geschätzt werden.

    
rjstelling 14.04.2009, 22:44
quelle

5 Antworten

12

Wenn Sie den Schlüsselbund zum Speichern von Passwörtern verwenden, können Sie anstelle des Passierens von Strings den undurchsichtigen Schlüsselbund SecKeychainItemRefs verwenden und nur den Klartext an dem Punkt abrufen, an dem er benötigt wird. Auf diese Weise erwarten Mac-Benutzer auch, dass ihre Passwörter behandelt werden. Leider ohne zu wissen, warum Sie "Passwörter in NSString objects" speichern müssen, kann ich nicht sagen, ob das wirklich stimmt: -)

    
user23743 15.04.2009, 07:01
quelle
3

Könntest du sie nicht einfach md5 machen, bevor du sie in den NSString legst? Dann, wenn Sie zum Test gehen, md5 die Eingabe-Zeichenfolge und vergleichen Sie das mit dem, was gespeichert ist?

    
Ronald 15.04.2009 01:59
quelle
3

Auf dem iPhone stoppt die Sandbox jeden, der auf Ihre Passwörter zugreift. auf dem Desktop ist es nicht so einfach.

Sie sollten die Passwörter als Hashes und nicht als Klartext speichern. Ich glaube, das wird Ihnen die gewünschten Ergebnisse bringen, ohne die Funktionalität zu beeinträchtigen. Der einzige Gedanke, den Sie niemals machen können, ist, erneut auf das Klartext-Passwort zuzugreifen - wenn Sie es auf Stärke analysieren oder es an einen anderen Dienst weitergeben möchten. Im Allgemeinen werden Hashes jedoch keine Funktionalität opfern.

Der folgende Code nimmt ein Passwort in rawPassword und speichert seinen SHA-1-Hash in passwordHash.

%Vor%

Beachten Sie, dass hier keine Speicherverwaltung vorhanden ist.

Sehen Sie sich den Wikipedia-Eintrag für eine Erklärung des Passwortshashings an.

Es gibt viele Versionen desselben Codes um die Intertubes.

    
Roger Nolan 15.04.2009 07:16
quelle
2

Ich denke, das Poster bezieht sich auf das Verschleiern des Passwortes im Speicher, so dass Sie nicht nur den Inhalt des ivar aus dem Speicher lesen können. Die GData-Bibliothek von Google hat nützlichen Code für die XOR-Passwörter, die als NSMutableData in Instanzvariablen gespeichert werden.

Quelle für GDataServiceBase.m

%Vor%

Sie können das Passwort mit XOR speichern / wiederherstellen (siehe #password und #setUserCredentialsWithUsername: Passwort: Methoden in der gleichen Datei). XOR ist keine High-Tech-Verschlüsselung, aber es ist gut genug, um gelegentliches Schnüffeln zu verhindern. Im Fall des GData-Clients, in dem Sie möglicherweise ein langlebiges Service / Manager-Objekt in einer Anwendung haben, das einen Verweis auf die Passwortdaten enthält, halte ich dies für einen vernünftigen Ansatz.

    
Brian Chapados 23.11.2009 23:14
quelle
1

Ein sehr nützlicher Code zum Speichern und Abrufen von Passwörtern zum und vom Schlüsselbund finden Sie hier:

Ссылка

Ich habe es benutzt, und es hat gut funktioniert.

    
jb62 11.08.2009 16:01
quelle