SwiftArgon2: セキュアなパスワードハッシュのためのメモリ安全な Swift 実装。
クライアント側キー導出のための、Argon2アルゴリズム(d、i、idバリアントを含む)の純粋なSwift 6実装。主な特徴は、既存のSwift暗号ラッパーで一般的なC/FFIの境界リスク(バッファオーバーラン、use-after-free)を回避するメモリ安全性です。
ベータSwiftArgon2
暗号技術の分野では、最先端の性能と保証されたメモリ安全性の間で難しいトレードオフがしばしば存在します。Argon2のような従来の高性能アルゴリズムは、通常、SwiftではCラッパーやバインディング(例:libsodium)を介してアクセスされます。実戦で検証されているものの、これらのバインディングは不可避にC言語レベルのメモリ管理エラー(バッファオーバーラン、use-after-free)のリスクを導入し、まれではあるものの、Swiftのような最新のメモリ安全言語を使用する根本的な約束を損なうのです。
SwiftArgon2はこの構造的な脆弱性に真正面から取り組みます。Argon2を完全に純粋なSwift 6で実装することで、Cライブラリに関連する恐ろしいFFI(外部関数インターフェース)のリスクを回避します。この純粋性へのコミットメントにより、結果のコードベースはSwiftの構造化されたメモリモデルの利点を保持し、セキュリティ保証が最も重要で、キー導出プロセスが本質的に計算コストの高いモバイルクライアント側の使用に特に魅力的です。3つのバリアント(d、i、id)をすべて含めることで、RFC 9106標準の厳格な要求を満たす相互運用性と柔軟性を確保しています。
しかし、この安全性への注力は必然的に注意点をもたらします:性能です。このライブラリは明示的に、最適化されたC言語実装と比較して通常2〜3倍遅いことを示しています。この遅延は欠陥ではなく、むしろ特徴であり、ライブラリの適切な使用例を定義しています。高スループットのサーバー側パスワード検証(Cバックエンドライブラリが必須)から、モバイルプラットフォーム上の安全で分離されたクライアント側キー導出へと、意図された使用を移行させます。これは、その専門性の境界を明確にする慎重な技術的制限です。
技術的には、特に安全なメモリ消去に関して非常に洗練された実装となっています。単純なSwiftの代入では、コンパイラが書き込みを最適化してしまう可能性があるため、機密メモリを確実にゼロにできないことを認識し、ライブラリは`memset_s`や`explicit_bzero`などの関数への単一の必要不可欠なFFI呼び出しを含んでいます。この例外は、範囲が狭く、文書化され、メモリクリーンアップの非純粋Swift経路に限定されており、機密情報(パスワード、キー、中間行列)が廃棄時に安全にゼロ化されることを確保しながら、全体的な安全性プロファイルを維持しています。最大限の安全性と、十分に正当化された最小限の安全でない操作のバランスが、このプロジェクトの中核的な技術的成果なのです。