すべてのオープンソースパッケージ
ツールSwift

iOSSecurityTools

Apple アプリのための keychain、暗号化、pinning、ワンタイムコード、整合性チェック。

5スター数最新リリース: v2.1.0 · 更新日: 2026年10月21日
対応プラットフォーム:iOS 17macOS 14tvOS 17watchOS 10visionOS 1

ライセンス: 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 中と画面収録中にビューを覆います

クイックスタート

swift
1import SwiftUI
2import iOSSecurityTools
3 
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.localizedDescription
20 }
21 }
22 .buttonStyle(.borderedProminent)
23 }
24 .padding()
25 .privacyShield()
26 }
27}

インストール

Swift Package Manager

swift
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

text
1https://github.com/muhittincamdali/iOSSecurityTools.git

スクリーンショット

メールアドレス、パスワード、bearer token、カード番号を含むログテキストと、その下にある redacted 版
メールアドレス、パスワード、bearer token、カード番号を含むログテキストと、その下にある redacted 版、ダークモード
keychain に 46 バイトとして暗号化され読み戻されたメモと、保存されたハッシュに対して検証される PIN
シミュレータでの整合性レポート: jailbreak チェックは非該当、シミュレータを検出。デバッガ、注入されたライブラリ、プロキシはクリア
otpauth URI から生成された6桁の TOTP コードと、残り秒数をカウントダウンするリング
鍵のマークが付いた privacy shield で覆われたカード詳細ビュー

タイムライン

  1. AES と RSA の暗号化ヘルパーとともにリポジトリが公開されました

  2. v1.0.0 がリリースされました。現在のパッケージとは異なるコードベースでした

  3. 整理: 1.0.0 のソースは placeholder コードに置き換えられました

  4. 2.0.0 としてゼロから再構築されました: keychain、暗号化、Secure Enclave キー、biometrics、pinning、ワンタイムパスワード、整合性チェック、ログの redaction。1.0.0 の API は一切残されていません

  5. 2.1.0: 2.0.0 が回避可能であることが判明した後、log redactor が再設計されました。plain ASCII でないキーはデフォルトで隠され、body と URL はパーサーで読み取られます

リンク

関連記事

記事を読む