CryptoKitラッパー

注意この実装では暗号化が弱いです。

使い方

項目詳細
暗号化方式AES-GCM(256bit)- 認証付き暗号で改ざん検知も可能
鍵導出SHA-256(password) — シンプルな実装。より堅牢にするなら PBKDF2/HKDF を推奨
保存先Documents/tableData.enc(iCloud バックアップ対象)
パスワード変更時SettingsView でトグルON/OFFが変わるたびに saveTableData() を呼ぶと安全です

CryptoKitManager、このクラスで暗号化した場合、同じこのアプリであって同じパスワードを使用した場合違うデバイスでも復号できますか?

はい、復号できます。 その理由を説明します。

なぜ別デバイスでも復号できるか

鍵の導出が決定論的

SHA-256(パスワード文字列) はどのデバイスで実行しても同じ結果になります。つまり同じパスワード → 常に同じ256bitの鍵が生成されます。

nonce(ランダム値)が暗号文に含まれている

AES-GCM の combined は nonce・暗号文・認証タグをひとまとめ にしたものです。復号側は combined から nonce を自動的に取り出すので、デバイス間で別途 nonce を共有する必要がありません。

条件結果
同じアプリ・同じパスワード・同じデバイス✅ 復号できる
同じアプリ・同じパスワード・別デバイス✅ 復号できる
同じアプリ・違うパスワード❌ 復号失敗(CryptoError.decryptionFailed

暗号化ファイル(tableData.enc)さえ共有できれば(iCloud Drive 経由など)、同じパスワードで別デバイスからも問題なく開けます。

ひとつ注意点

現在の実装は パスワードがそのまま鍵の素材 になっています。短いパスワードや辞書に載っているような単語はブルートフォース攻撃に弱いため、もし将来セキュリティを強化したい場合は SHA-256 の代わりに PBKDF2 や Argon2 などの鍵導出関数(KDF)を使うとより安全です。ただし現状の用途(個人メモアプリ)であれば十分実用的です。

コメント

タイトルとURLをコピーしました