iOS Security Tools
Apple アプリのための keychain、暗号化、pinning、ワンタイムコード、整合性チェック。
ライセンス: MIT
テスト: 589計測日:
計測方法
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.
要約
- 5つの Apple プラットフォーム向けに、keychain、暗号化、Secure Enclave、pinning、ワンタイムパスワード、整合性、ログ redaction の部品を提供する依存関係のない Swift パッケージです。
- 2.0.0 の log redactor は似た文字、エスケープ、値として書かれた秘密の名前で回避できたため、ログ用途で 2.0.0 に頼るべきではありません。
- 2.1.0 では plain-ASCII のキーのみが秘密の名前と比較され、それ以外のキーの値はデフォルトで隠されます。
- JSON、form、multipart の body はパーサーで読み取られ、完全にパースできないか 256 KiB を超える body は省略されます。
- Redaction は誤って記録された秘密に対する安全網であり、故意に秘密を偽装する人物に対する保証ではありません。
iOS、macOS、tvOS、watchOS、visionOS 向けアプリのためのセキュリティ部品を集めた Swift パッケージです: keychain での保存、authenticated encryption、PIN ハッシュ、Secure Enclave キー、certificate pinning、ワンタイムパスワード、デバイスの整合性チェック、ログの redaction。各型は渡された値を検証し、クラッシュする代わりに型付きエラーを throw するため、QR コードやサーバーやファイルから来た値がアプリを動けなくすることはありません。Apple のフレームワークを直接呼び出し、依存関係はありません。
機能
- Keychain は data、文字列、Codable な値を保存し、初回使用時に 256 ビットの鍵を生成し、Face ID、Touch ID、またはパスコードを要求でき、それは keychain 自身によって強制されます
- DataCipher は自身のバージョン、アルゴリズム、nonce を持つ AES-256-GCM または ChaCha20-Poly1305 のエンベロープを書き込みます。変更された1バイト、誤った鍵、誤った associated data は復号を失敗させます
- HKDF、PBKDF2、PHC 形式の PIN ハッシュで、反復回数には上限があり、改ざんされたハッシュが検証を何時間も実行させることはありません
- PinningPolicy はバックアップ pin を必須とし、サブドメイン、有効期限、report-only モードをサポートしますが、それでもシステム自身の trust 評価に合格する必要があります
- otpauth:// の解析と書き込みに対応した HOTP と TOTP、そしてアカウントをデバイスに紐づける Secure Enclave の P-256 鍵
- IntegrityInspector は jailbreak ファイル、デバッガ、シミュレータ、フッキングライブラリ、システムプロキシを、証拠としてではなく Codable なレポート内のシグナルとして報告します
- SensitiveDataRedactor は plain-ASCII のキーのみを秘密の名前と比較し、それ以外のすべてのキーの値を隠します。JSON、form、multipart の body と URL はパーサーで読み取られ、パースできないものは省略されます
- @Redacted は説明(description)に <redacted> と表示し、.privacyShield() は app switcher 中と画面収録中にビューを覆います
クイックスタート
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}インストール
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.gitスクリーンショット






タイムライン
AES と RSA の暗号化ヘルパーとともにリポジトリが公開されました
v1.0.0 がリリースされました。現在のパッケージとは異なるコードベースでした
整理: 1.0.0 のソースは placeholder コードに置き換えられました
2.0.0 としてゼロから再構築されました: keychain、暗号化、Secure Enclave キー、biometrics、pinning、ワンタイムパスワード、整合性チェック、ログの redaction。1.0.0 の API は一切残されていません
2.1.0: 2.0.0 が回避可能であることが判明した後、log redactor が再設計されました。plain ASCII でないキーはデフォルトで隠され、body と URL はパーサーで読み取られます