【iOSDC Japan 2024 レポート】Day1「快適な開発と高セキュリティを実現するCryptoKitを活用したCoreDataのデータ暗号化術」を聞いてきた #iosdc

【iOSDC Japan 2024 レポート】Day1「快適な開発と高セキュリティを実現するCryptoKitを活用したCoreDataのデータ暗号化術」を聞いてきた #iosdc

Clock Icon2024.08.25

2024年8月22日から24日に開催された「iOSDC Japan 2024」に参加してきた。WWDCが世界的なカンファレンスであるとすれば、iOSDC Japanは日本国内での最大のiOSデベロッパーカンファレンスだ。

この記事では、Day1「快適な開発と高セキュリティを実現するCryptoKitを活用したCoreDataのデータ暗号化術」についての感想を共有する。

快適な開発と高セキュリティを実現するCryptoKitを活用したCoreDataのデータ暗号化術

https://fortee.jp/iosdc-japan-2024/proposal/ef35b460-0c0e-4fa5-b4f5-6f8bdfe6956b

登壇者

  • Takahiro Kato さん

スライド

https://speakerdeck.com/grandbig/kuai-shi-nakai-fa-togao-sekiyuriteiwoshi-xian-surucryptokitwohuo-yong-sitacoredatanodetaan-hao-hua-shu

概要

永続化されたデータの保護は、現代のiOSアプリ開発において必要不可欠な要素です。
しかし、Appleが提供する永続化フレームワークであるCore Dataは標準でデータの暗号化を提供しません。
また、Core Dataのデータ暗号化には、「データベース全体を暗号化する方法(SQLCipher)」や「保存するデータを個別に暗号化する方法(CryptoKit)」があります。
このトークでは、それぞれのメリット/デメリットを比較した上で、Core Dataにおけるデータの暗号化手法とその選定方法について詳しく紹介します。

参加者は以下の内容を学ぶことができます。

  1. データ保護の重要性
  2. Core Dataの各暗号化手法のメリット/デメリット
  3. Core Dataの暗号化手法の選定方法
  4. CryptoKitによる暗号化と復号化のコード例
  5. CryptoKitによる暗号化と復号化のパフォーマンス検証

このトークを通して、「Core Data」の暗号化に必要なナレッジや各利点について理解を深めて頂ければ幸いです。

このセッションでは、現代のiOSアプリ開発におけるデータ保護の重要性が強調されていた。Core Dataのデータ暗号化に関する手法が2通りあり、それらのメリット・デメリットが詳しく紹介されていた。

  • SQLChipher
    • sqliteファイルそのものを暗号化する。
    • 金融やヘルスデータを扱う場合、データ全体を守る必要がある。
    • メリット:古くからあるため知見が豊富。
    • デメリット:SPMに非対応で、ビルド時間が長くなる。
  • CryptoKit
    • データ単位で暗号化する。
    • メリット:Apple公式提供なので今後のアップデートも安心。
    • デメリット:どのデータを暗号化すべきか選定が必要。

セッション中には、CryptoKitを利用したデータ暗号化の実装方法やパフォーマンス検証の結果が紹介された。CryptoKitは扱いやすいが、暗号化/復号化時に例外が発生する可能性があり、例外処理など要件に応じた対応が求められることが説明された。

また、データ単位での暗号化がSQLの強みであるフィルタリングやソートを制限してしまう点についても触れられ、セッションの後半では、名前順にソートしたい場合にはnameOrderというソート用のプロパティを用意することで対応する方法が提案されていた。

質疑応答の時間には、暗号化アルゴリズムを変更する際にはマイグレーションが必要になってしまうが、アプリ起動時にユーザーを待たせるなどの対応が必要だと議論されていた。

こう思った

データの永続化とセキュリティの両立は、iOSアプリ開発において避けては通れない課題だと考えている。

数年前からメンテナンスしているアプリではRealmを使っており、Realmには標準で暗号化機能が備わっているため、暗号化の実装が容易だった。

一方で、Core Dataでは暗号化機能は標準装備されておらず、過去に「LINE DEVELOPER DAY 2021」でLINEアプリではSQLCipherを使って暗号化していると発表があり、それがデファクトスタンダードだと思っていた。しかし、このセッションで初めて、iOS 13から追加されたCryptoKitを使ったデータ暗号化の手法が確立されていることを知った。

https://developer.apple.com/documentation/cryptokit/

SQLCipherを使った場合、CloudKitを利用したデータバックアップは難しいと思っている。CryptoKitを使うことで、Core Dataに格納する前のデータに暗号化を施すことで、CloudKitによるバックアップが可能になるのではないかと感じた。

また、セッションで紹介されたデメリットの一つである、どのデータを暗号化するかの選定が難しそうだと感じた。どのように選定しているのか、Ask the Speakerコーナーで確認したところ、基本的には個人情報にあたるものを暗号化の対象とし、曖昧な領域のデータについては法務やセキュリティチームに相談して決定しているとのことだった。

さらに、ルーキーズLTの枠でも「手軽に実装!CryptoKitを使ったCore Dataのデータ保護術」というセッションが行われており、Core Dataのデータ保護手法に選択肢が増えたことはとても嬉しく思う。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.