Ich arbeite an IOS-Anwendung, die einige Dateien enthält, die AES-128 verschlüsselt sind, so zum Entschlüsseln dieser Dateien verwende ich einige Drittanbieter-Bibliotheken wie Cryptoswift, gerade jetzt in schneller Code nur ich schreibe meine eigene Logik, um Daten mit Schlüsseln zu entschlüsseln, aber ich möchte diese Schlüssel sicher speichern, für Android hatte ich meine Logik in nativer Bibliothek geschrieben, hier, was ist der beste Weg, um meinen geheimen Schlüssel zu sichernSo speichern Sie vorhandene Zeichenfolge heimlich in IOS Swift App
Antwort
Sie sollten die iOS Keychain Services verwenden, um die Schlüssel sicher zu speichern.
In Swift sind mehrere Bibliotheken implementiert, die einen einfachen Zugriff auf die Schlüsselkette ermöglichen. Siehe hier: https://github.com/vsouza/awesome-ios#keychain
wie ich meinen schlüssel zu keychain hinzufügen, wenn ich diese Logik in swift schreiben, kann jeder diesen Schlüssel sehen – skyshine
Das hängt von der Architektur Ihres Schlüsselgenerierungsmechanismus ab ... Wenn Sie den Schlüssel auf dem Gerät zum Beispiel erstellen, müssen Sie nie schreiben der Schlüssel in den Swift-Code. Wenn Sie vorgenerierte Schlüssel haben, müssen Sie diese mit der App versehen und den Benutzer zum Beispiel nach einem Passwort fragen. – aofs
@parker Definieren Sie "irgendjemand"? Der Besitzer des Geräts kann, da sie Besitz und volle Kontrolle haben. Gleiches gilt für Geräte ohne Sperrcode. Die Sicherung durch den Benutzer erfordert DRM, nicht nur Verschlüsselung. – zaph
Zum Speichern sensibler Informationen sollten Sie den Keychain immer verwenden.Sie können den folgenden von Apple geposteten Beispielcode verwenden, um ausführlich zu wissen Generic Keychain .Happy Coding !!!
EDIT: Siehe die Diskussion darunter. Kluge Schlussfolgerung: Vielleicht ist die beste Antwort "stört nicht, steckt den Schlüssel in den Code", es gibt einen großen Arbeitsfaktor, um den Schlüssel zu erhalten.
Wenn Sie ein geheimes Token in der App speichern, besteht die Gefahr, dass es als einfache Zeichenfolge leicht wiederhergestellt werden kann. Sie können mehr darüber unter Reverse Engineering iOS Apps lesen.
Sie können es nicht ganz verhindern, aber Sie können Kennwortdaten verschleiern durch Passwort in kleinere Stücke, halten sie auseinander in dem Code, und verwenden Sie einige dumb-Entschlüsselungsalgorithmus zur endgültigen Form abzurufen, wie folgt aufgeteilt:
func crypt(string: String) -> [UInt32] {
return string.unicodeScalars.enumerated().map { index, char in
return char.value + UInt32(index)
}
}
func decrypt(chars: [UInt32]) -> String {
return chars.enumerated().map { (index, char) -> String in
let s = UnicodeScalar(char - UInt32(index))!
return "\(Character(s))"
}.joined()
}
let clearPassword = "Acb,321"
let cryptedChars = crypt(string: clearPassword)
let decrypted = decrypt(chars: cryptedChars)
let c1: UInt32 = 65
let c2: UInt32 = 100
let c3: UInt32 = 100
let c4: UInt32 = 47
let c5: UInt32 = 55
let c6: UInt32 = 55
let c7: UInt32 = 55
let decryptedScattered = decrypt(chars: [c1, c2, c3, c4, c5, c6, c7])
Nicht perfekt, aber sollte für einfache Angriffe ausreichen, und fortgeschrittenere wäre wahrscheinlich zu teuer, um fortzufahren.
Es ging Ihnen gut, bis Sie "einen Algorithmus zur Dumb-Entschlüsselung verwenden". – zaph
@zaph Und könnten Sie mehr ausarbeiten, warum? Auf welche andere Weise schlagen Sie vor, ein Token in einer Binärdatei zu speichern? Schlüsselbund ist nur zur Laufzeit verfügbar, nicht zur Kompilierungszeit. Ein zufälliger Schlüssel, den Sie oben vorgeschlagen haben, löst das Problem überhaupt nicht, wenn Sie Dateien bereits mit einem bestimmten Geheimnis verschlüsselt haben. –
Warum "einige Dumb-Entschlüsselung Algorithmus" verwenden, wenn AES verfügbar ist? Das Wort "dumm" sagt alles. – zaph
- 1. So migrieren Sie eine vorhandene Appcelerator Titanium-App-Datenbank in eine native Swift iOS-App
- 2. iOS - So speichern Sie In-App-Kaufdaten?
- 3. So authentifizieren Sie eine iOS-App in swift
- 4. Speichern großer Bilder in iOS swift
- 5. So speichern Sie Daten in einer * Tabellenansicht * auf swift?
- 6. Speichern der Anwendung in ios mit Swift
- 7. Spezifizierte Farbänderung in der Zeichenfolge. Swift iOS
- 8. So speichern Sie NSTimer mit NSUserDefaults? Swift
- 9. So erhalten Sie eine Teilzeichenfolge nach dem letzten Auftreten eines Zeichens in der Zeichenfolge: Swift IOS
- 10. So speichern Sie einen Objektnamen als Zeichenfolge
- 11. ios Kamera app swift 3
- 12. didTapInfoWindowOfMarker auf iOS App Swift
- 13. So speichern Sie Zeichenfolge an Anfang von CoreData Array
- 14. Verwendung vorhandener Systemtöne in iOS App [swift |
- 15. So speichern Sie Audiodatei in SQLite-Datenbank in iOS
- 16. So speichern Sie "Posts" (nicht Server POST, sondern eher Bulletin Board) in Firebase für iOS-App
- 17. So erkennen Sie Flugmodus/Flugmodus in IOS Swift
- 18. So speichern Sie dauerhaft eine URL in Swift 3
- 19. So verwenden Sie die vorhandene GCM-Absender-ID für die iOS-App
- 20. So zeigen Sie MKSnapshot in Swift (iOS) an
- 21. Swift 3 Core Data - So speichern Sie den Kontext synchron?
- 22. So sichern Sie Standard-Plist-Dateien in der iOS-App
- 23. So deaktivieren Sie iOS Mail App Textvergrößerung
- 24. So speichern Sie eine Farbe in NSUserDefaults in swift?
- 25. So erstellen Sie eine Doppelseiten-iOS-App
- 26. So speichern Sie Datei von App-Bundle auf Festplatte
- 27. So speichern Sie Daten dauerhaft in Swift 3
- 28. So rufen Sie Daten ab Speichern in Modellklasse Swift 3
- 29. So speichern Sie Wert in NSSet-Core-Daten (Swift)
- 30. So zeigen Sie ein paar Seiten Text in swift ios
Es ist am besten zu vermeiden, CryptoSwift zu verwenden, unter anderen Dingen ist es 100 bis 1000 mal langsamer als Common Crypto-basierte Implementierungen. Apples Common Crypto ist FIPS-zertifiziert und wurde daher gründlich geprüft. CryptoSwift nimmt die Chance auf Korrektheit und Sicherheit. – zaph
Sie können Ihren Schlüsselspeicher in Ihrem Code verschleiern; Speichern Sie es in mehrere Teile, speichern Sie es in einer Form, die einige mathematische Operationen benötigt, um den Schlüssel wiederherzustellen usw. Dies wird es für einen Angreifer schwieriger, Ihren Schlüssel zu extrahieren, aber es gibt wenig, was Sie tun können, um sich vor einem entschlossenen Angreifer zu schützen letztlich ist der Schlüssel irgendwo da. – Paulw11
@ Paulw11 Die Verteidigung gegen den Besitzer ist im Prinzip unmöglich, aber die Verteidigung gegen jemand anderen mit physischem Besitz hängt von der Qualität des Sperrcodes ab. Ein gesperrtes Gerät ist gegen praktisch jeden Angreifer sicher. – zaph