SaQura Swift · アップグレードノート
バージョンと互換性 — SaQura Swift
更新の前に
現在のバージョン: 1.2.0 · saqura.de/swift · SaQura (binary xcframework) · ドキュメントへ
- saqura.de で配布された全バージョン(1.0.9〜1.2.0)のデータは 1.2.0 で読み取れます。このシリーズで形式の変更はありません。旧形式(1.0.8 以前)の RSA ハイブリッド暗号文も引き続き復号できます。
- ライセンスファイルはそのまま有効です。1.2.0 から任意のバインディング項目が加わりましたが、この項目のないライセンスは従来とバイト単位で同一に動作します。
- パッケージは単一の xcframework(ZIP で約 10 MB)で、Package.swift に URL とチェックサム付きの binaryTarget として追加します。バージョンを変えると URL とチェックサムが変わります。チェックサムの不一致は Xcode がエラーとして報告します。
各バージョンの表は、同じ 5 つの質問に同じ順序で答えます。「ドロップイン更新:可」とは、当社のクロスプラットフォームのテストコーパスにより、新バージョンが旧バージョンのデータを読み取れ、呼び出しの変更が不要であることが確認されたという意味です。
任意モジュール
- 除外可能なモジュールはありません。xcframework にはポスト量子アルゴリズム(liboqs 0.15.0)と、1.1.0 以降は MLS コアが含まれ、どちらもライブラリに静的リンクされています。
- リンカやストリップの作業は不要です。フレームワークはビルド済みかつ署名済みで提供されます。
ライセンスとアプリバインディング
- 非バインドのライセンスはアプリバインディングの影響を受けません。呼び出しの変更も再発行も不要です。
- バインド済み配布ライセンス(1.2.0 以降)は Bundle.main のバンドル識別子を検証し、macOS では読み取り可能な場合にコード署名の Team ID も検証します。追加の呼び出しは不要です。
1.2.0 · 2026-07-11
配布ライセンスのアプリバインディング(iOS / macOS)
- 任意のライセンス項目 boundPackage と boundSignature により、配布ライセンスをバンドル識別子と、プラットフォームが許す場合はコード署名の Team ID に紐付けます。他のアプリにコピーされたライセンスファイルは有効化時に拒否されます(ValidationResult.bindingMismatch)。識別情報は Bundle.main と Security フレームワークから取得し、呼び出し元からは受け取りません。
- 完全な後方互換性:項目は設定されている場合にのみ追加され、非バインドのライセンスは従来と同じ署名対象テキストを生成し、変わらず検証されます。
| 互換性 | 状態 | 備考 |
|---|---|---|
| データ形式(鍵・暗号文・ストリーム) | 変更なし | — |
| ライセンスファイル(バインド有/無) | 追加(既存に影響なし) | 任意項目。非バインドのライセンスはバイト単位で同一。 |
| ネイティブライブラリ/ABI | 変更なし | — |
| R8・keep ルール、トリミング/リンカ | 基準 | — |
| 最小プラットフォーム | 変更なし | iOS 15、macOS 12、tvOS 15、watchOS 8、Swift 5.9 |
| ドロップイン更新 | 可 | — |
1.1.1 · 2026-06-14
MLS:KeyPackage の有効期間開始を 1 時間前倒し
- 厳格な RFC 9420 の相手方が、生成と同じ秒に検証した SaQura の KeyPackage を拒否していました。有効期間の開始を 1 時間前に設定しました。形式と暗号は変更ありません。
| 互換性 | 状態 | 備考 |
|---|---|---|
| データ形式(鍵・暗号文・ストリーム) | 変更なし | — |
| ライセンスファイル(バインド有/無) | 変更なし | — |
| ネイティブライブラリ/ABI | 変更なし | — |
| R8・keep ルール、トリミング/リンカ | 基準 | — |
| 最小プラットフォーム | 変更なし | iOS 15、macOS 12、tvOS 15、watchOS 8、Swift 5.9 |
| ドロップイン更新 | 可 | — |
1.1.0 · 2026-06-13
RFC 9420 準拠の MLS グループメッセージング(Pro)
- TreeKEM、メッセージ単位の前方秘匿性、Welcome および Commit メッセージ、Secure Enclave による署名、グループ状態の永続化を備えたグループメッセージング。標準スイート P-256(0x0002)は他の RFC 9420 実装と相互運用可能で、MLS ワーキンググループのテストベクトルで検証済み。
- 追加スイート 0xF108(SaQura Gen8 ハイブリッド、X25519 と ML-KEM-768):両端が SaQura である必要があり、意図的に標準スイートとしては扱いません。グループ作成、KeyPackage 生成、参加は Pro 以上。読み取りと復元は制限なし。
- 以降、xcframework に MLS コアが含まれ、パッケージサイズはそれに応じて増加しています。
| 互換性 | 状態 | 備考 |
|---|---|---|
| データ形式(鍵・暗号文・ストリーム) | 追加(既存に影響なし) | MLS を追加。従来の形式はすべて変更なし。 |
| ライセンスファイル(バインド有/無) | 変更なし | — |
| ネイティブライブラリ/ABI | 変更あり | xcframework に MLS コアを同梱。除外不可。 |
| R8・keep ルール、トリミング/リンカ | 基準 | — |
| 最小プラットフォーム | 変更なし | iOS 15、macOS 12、tvOS 15、watchOS 8、Swift 5.9 |
| ドロップイン更新 | 可 | — |
1.0.9 · 2026-06-07
Gen8、ML-DSA、SLH-DSA。saqura.de 経由でビルド済み xcframework として初めて配布
- .gen8 を指定した encryptWithQuantum / decryptWithQuantum で Gen8(X25519 と ML-KEM、FIPS 203)を利用可能。署名 signWithMLDsa / verifyMLDsaSignature(FIPS 204、.standard / .medium / .highest)と signWithSlhDsa / verifySlhDsaSignature(FIPS 205、128f / 192f / 256f)。署名は Pro 以上、検証は全ティア。.NET および Kotlin とバイト単位で同一。
- 同梱の liboqs を 0.15.0 に更新。FrodoKEM と Classic McEliece は変更なし。ソースではなく、チェックサム付きの署名済み xcframework(Package.swift の binaryTarget)として配布。
- 1.0.8(2026 年 5 月)より:ティア判定 ApiLicense.is…Available が .NET および Kotlin と同じ規則(features 0 はティアで決定)に従います。以前は features 0 の Pro ライセンスが Free と判定されていました。RSA ハイブリッド形式を .NET に整合、旧形式も引き続き復号可能。.NET の PKCS#1 鍵はインポート時に自動ラップ。1.0.6 および 1.0.7 より:生のエラーの代わりに型付きエラー QuantumOperationError(.keyGeneration / .encryption / .decryption)。空の鍵バッファやゼロ消去された鍵バッファは SaQuraError.invalidInput で拒否。
| 互換性 | 状態 | 備考 |
|---|---|---|
| データ形式(鍵・暗号文・ストリーム) | 追加(既存に影響なし) | 新アルゴリズム追加。RSA ハイブリッドは 1.0.8 以降 .NET 形式、旧形式も読み取り可能。 |
| ライセンスファイル(バインド有/無) | 変更なし | ファイル形式は変更なし。ティア判定は 1.0.8 以降修正済み。 |
| ネイティブライブラリ/ABI | 変更あり | xcframework として配布。liboqs 0.15.0。 |
| R8・keep ルール、トリミング/リンカ | 基準 | — |
| 最小プラットフォーム | 変更なし | iOS 15、macOS 12、tvOS 15、watchOS 8、Swift 5.9 |
| ドロップイン更新 | 可 | Quantum のエラーを SaQuraError として捕捉していたコードは、QuantumOperationError の分岐を追加してください。 |