iOS Security Tools
Keychain, Verschlüsselung, Pinning, Einmalcodes und Integritätsprüfungen für Apple-Apps.
Lizenz: MIT
Tests: 589Gemessen:
Wie gemessen wurde
swift test at PR #25 head 5b71c19 (the planned v2.1.0, not yet tagged) on macOS 27.0.1, Apple Swift 6.4: "Test run with 589 tests in 101 suites passed after 370.336 seconds". Re-run at the v2.1.0 tag before publishing.
Zusammenfassung
- Ein abhängigkeitsfreies Swift-Package mit Bausteinen für fünf Apple-Plattformen: Keychain, Verschlüsselung, Secure Enclave, Pinning, Einmalpasswörter, Integrität und Log-Redaction.
- Der Log-Redactor von 2.0.0 ließ sich mit ähnlichen Buchstaben, Escapes und als Werte geschriebenen geheimen Namen umgehen, daher sollte man sich bei Logs nicht auf 2.0.0 verlassen.
- In 2.1.0 werden nur reine ASCII-Schlüssel mit den geheimen Namen verglichen, und der Wert jedes anderen Schlüssels wird standardmäßig verborgen.
- JSON-, Form- und Multipart-Bodies werden mit Parsern gelesen, und ein Body, der nicht vollständig parst oder über 256 KiB liegt, wird weggelassen.
- Redaction ist ein Sicherheitsnetz gegen versehentlich geloggte Geheimnisse, keine Garantie gegen jemanden, der ein Geheimnis absichtlich verschleiert.
Ein Swift-Package mit Sicherheitsbausteinen für Apps auf iOS, macOS, tvOS, watchOS und visionOS: Keychain-Speicherung, authentifizierte Verschlüsselung, PIN-Hashes, Secure-Enclave-Schlüssel, Certificate Pinning, Einmalpasswörter, Geräteintegritätsprüfungen und Log-Redaction. Jeder Typ validiert den übergebenen Wert und wirft einen typisierten Fehler, statt abzustürzen; so kann ein Wert aus einem QR-Code, einem Server oder einer Datei die App nicht zu Fall bringen. Es ruft Apples Frameworks direkt auf und hat keine Abhängigkeiten.
Funktionen
- Keychain speichert Data, Strings und Codable-Werte, erzeugt beim ersten Gebrauch einen 256-Bit-Schlüssel und kann Face ID, Touch ID oder den Passcode verlangen, durchgesetzt vom Keychain selbst
- DataCipher schreibt AES-256-GCM- oder ChaCha20-Poly1305-Umschläge mit eigener Version, eigenem Algorithmus und eigener Nonce; ein geändertes Byte, ein falscher Schlüssel oder falsche Associated Data lässt die Entschlüsselung fehlschlagen
- HKDF, PBKDF2 und PIN-Hashes im PHC-Format, mit begrenzter Iterationszahl, damit ein manipulierter Hash die Prüfung nicht stundenlang laufen lassen kann
- PinningPolicy verlangt einen Backup-Pin, unterstützt Subdomains, Ablaufdaten und einen Report-only-Modus, und verlangt weiterhin, dass die eigene Trust-Bewertung des Systems besteht
- HOTP und TOTP mit otpauth://-Parsing und -Schreiben, sowie Secure-Enclave-P-256-Schlüssel, um ein Konto an das Gerät zu binden
- IntegrityInspector meldet Jailbreak-Dateien, einen Debugger, den Simulator, Hooking-Bibliotheken und einen System-Proxy als Signale in einem Codable-Report, nicht als Beweis
- SensitiveDataRedactor vergleicht nur reine ASCII-Schlüssel mit seinen geheimen Namen und verbirgt den Wert jedes anderen Schlüssels; JSON-, Form- und Multipart-Bodies sowie URLs werden mit Parsern gelesen, und was sich nicht parsen lässt, wird weggelassen
- @Redacted gibt in Beschreibungen <redacted> aus, und .privacyShield() verdeckt Views im App-Switcher und während der Bildschirmaufnahme
Schnellstart
1import SwiftUI2import iOSSecurityTools3 4struct ContentView: View {5 @State private var status = "Nothing stored yet"6 7 var body: some View {8 VStack(spacing: 16) {9 Text(status)10 Button("Encrypt and store a note") {11 do {12 let keychain = Keychain(service: "QuickStart")13 let cipher = try DataCipher(key: keychain.symmetricKey(forKey: "notes-key"))14 try keychain.set(cipher.encrypt("Meet at 7 pm"), forKey: "note")15 16 let stored = try keychain.data(forKey: "note") ?? Data()17 status = "Decrypted: \(try cipher.decryptString(stored))"18 } catch {19 status = error.localizedDescription20 }21 }22 .buttonStyle(.borderedProminent)23 }24 .padding()25 .privacyShield()26 }27}Installation
Swift Package Manager
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/iOSSecurityTools.git", from: "2.1.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "iOSSecurityTools", package: "iOSSecurityTools")7 ])8]Xcode
1https://github.com/muhittincamdali/iOSSecurityTools.gitScreenshots






Zeitleiste
Repository eröffnet mit AES- und RSA-Verschlüsselungshelfern
v1.0.0 veröffentlicht; eine andere Codebasis als das heutige Paket
Bereinigung: Die 1.0.0-Quellen wurden durch Platzhaltercode ersetzt
Von Grund auf neu aufgebaut als 2.0.0: Keychain, Verschlüsselung, Secure-Enclave-Schlüssel, Biometrics, Pinning, Einmalpasswörter, Integritätsprüfungen und Log-Redaction; nichts von der 1.0.0-API blieb erhalten
2.1.0: Der Log-Redactor wurde neu entworfen, nachdem sich zeigte, dass 2.0.0 umgangen werden konnte; Schlüssel, die nicht reines ASCII sind, werden standardmäßig verborgen, und Bodies und URLs werden mit Parsern gelesen