iOSの輸出コンプライアンス対応についてまとめてみた(フランス対応)

# 概要
2022年11月頃AppleのiOSアプリ審査にて輸出コンプライアンス項目がサイレント修正されました。
全世界リリース（特にフランス）を前提としているiOSアプリ開発者の殆どが影響が出てくる内容かと思われますので、2023年3月時点で調べた限りでの対応方法等をまとめておきます。

 **※Appleによって輸出コンプライアンス規制がサイレント規制されていたり、
 GDPR(EU一般データ保護規則)やEAR(米国輸出管理規則)の規制が変更されている可能性があり、都度最新情報を確認することをお勧めします。** 

参考

https://roguefactory.blog/ios/apple-encryption-export-compliance-documentation-2022/

## 輸出コンプライアンスとは
ざっくり言えばiOSアプリをダウンロードするのは以下のようなイメージであり、これが米国->海外への輸出にあたる為、スマホアプリにおいて暗号化の観点で輸出コンプライアンスに遵守していることを説明する必要があります。

その為現状のiOSアプリにおける輸出コンプライアンスは、
`iOSアプリに暗号化が施されていた場合にアプリ審査前にその暗号化に関して説明するもの`といったイメージです。

※引用: [今こそ理解しよう、輸出コンプライアンス](https://speakerdeck.com/kazu0620/jin-kosoli-jie-siyou-shu-chu-konpuraiansu)
![スクリーンショット 2023-03-09 21.44.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/545c4eaa-e025-19dc-8396-58e512103340.png)


https://speakerdeck.com/kazu0620/jin-kosoli-jie-siyou-shu-chu-konpuraiansu

公式
[輸出コンプライアンスの概要](https://help.apple.com/app-store-connect/#/dev88f5c7bf9)
> 暗号化が、App で使用、実装されたり、App の一部として組み込まれたり、あるいは App が暗号化機能にアクセスしたりする場合で、かつ App を App Store 経由でアップロード、テスト、配信することを予定している場合は、App Store Connect でその App に対する輸出コンプライアンス要件を定義する必要があります。


## AppStoreConnectの11月のアップデート
こちら参照

https://roguefactory.blog/ios/apple-encryption-export-compliance-documentation-2022/

今までも輸出コンプライアンスに関する質問は聞かれていましたが、
一般的なHTTPSを扱うアプリであれば簡易な質問のみで特に開発者の負担は高くありませんでした。
(年末の自己番号分類報告除く)

今回のアップデートで以下のようなダイアログが審査アプリ提出する際に表示されるようになりました。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/87d8d8c7-3b44-41b3-8543-b0fe3dafff26.png)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/f7828db8-1583-5ff0-f344-adbb46c774bb.png)


そのため、**HTTPS通信を行いフランスでの配信を想定するアプリ** はこの **フランスの暗号化申告承認証** (後述)を事前に提出することが必須になりました。

## 私はどう対応した？
私の案件ではフランス配信は不要と判断し、 フランス配信を「いいえ」で対応できました。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/97fd6cbd-92c7-e4e7-2070-c269bd8e4898.png)

これで対応おしまい。

## フランス配信したい場合はどうするか
まず、暗号化をアプリ内で利用しているか？という点を確認する必要があります。
大抵のアプリでは一般的なサーバアクセスやFirebaseを利用する場合はHTTPSを利用しているはずで、
その場合下記曰く、OSに標準搭載されてはいない業界標準の暗号化アルゴリズムを利用しているとみなされると思われます。
(Appleからの回答と記載しているものの、ソースが明示されていないので少し信憑性に欠けますが…)

https://teratail.com/questions/128694
> Mac OS や iOS ではファイル暗号化等にAES 暗号化アルゴリズムが使用されておりますが、HTTPS などは、特にOSに組み込まれているわけではないので、業界標準のものとなります。ZIP をパスワード付きで暗号化する際の暗号化アルゴリズムは複数ありますがこれは個々の圧縮ソフトで設定されますので、業界標準ということになると思います。

OS側が提供していないHTTP/TLSプロトコルを利用した暗号化と読み取れるので、以下を`標準的な暗号化アルゴリズム`と選択する必要があります。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/ab1e816d-8161-9c27-86e2-b20e9161077f.png)


次に **フランスの暗号化申告承認証** というものを準備する必要があり、フランスの国家情報セキュリティ局(ANSSI)より手に入れることが可能です。

恐らくココからダウンロードできます。
https://www.ssi.gouv.fr/administration/reglementation/controle-reglementaire-sur-la-cryptographie/les-formulaires/

申請資料の中身はコレ（体裁は変わる可能性あり）
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/23f1dd30-7524-804c-15d5-a1035f0c4162.png)

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/6a902251-d790-df2c-cde2-6b84ba75c6fb.png)


実際にフランスへの申請まで私は至ってないのですが、基本的にフランス語で入力するとOKだと思います。申請を出して許可を貰えればそれをエビデンスに以下公式に沿ってAppStoreConnect経由で提出しましょう。

https://help.apple.com/app-store-connect/#/dev38f592ac9

その申請も受理された場合、`ITSEncryptionExportComplianceCode`というコードが払い出されるので、それをInfo.plistにセットすれば今後フランス輸出コンプライアンスの質問は免除されるようです。

https://developer.apple.com/documentation/security/complying_with_encryption_export_regulations

## まとめ
### 大変だったところ
 - とにかく必要な作業が分かりにくい
     - 全世界的にも情報が殆どない。
     - 具体的に必要な書類が明示されておらず、手探りで探していくしかない。

 - 国家情報セキュリティ局(ANSSI)への申請資料が大変
     - 今回私は運良く入力をスキップできましたが、全てフランス語で入力は翻訳かましてもやっぱりキツい…。
     - 入力項目の精査からまず時間を掛ける必要がありそうです。
 - そもそも今回のアップデート変更点を検知し辛い
   - 告知無しで急に変更を入れてくるApple様
   - バイナリアップロードしてAppStoreConnect上でリリース審査直前の輸出コンプライアンスを出さないと事前検知できない鬼仕様

### 注意 (調査中に出てくるはずの疑問)
 - `ITSAppUsesNonExemptEncryption`をfalseにするだけでいいのでは…？
     - 確かに輸出コンプライアンスの設定をこれだけでスキップできます。しかし、これは暗号化を使用していないもしくは、暗号化の申告免除要件を満たした場合に申告を省略できるもので、暗号化製品でありながらこれを定義するのはNGとなっています。いち企業ビジネスにおけるエンジニアである以上安直にこれを設定するのはちょっとリスキー。
     - 参考: https://developer.apple.com/documentation/bundleresources/information_property_list/itsappusesnonexemptencryption

 - フランスの申請資料はもしかしたら以下サイトの中にある`Déclaration de fourniture d’une prestation de cryptologie`のファイルも正しいかもしれないです。中身を見ても似たような記載内容で一応補足まで。
     - https://www.ssi.gouv.fr/administration/reglementation/controle-reglementaire-sur-la-cryptographie/
 - こちらの記事も役に立ちそうです。
     - https://qiita.com/ginger/items/b5c74451ec263c972930

### その他参考リンク
こちらのツイートが一連を纏めて頂いていて分かりやすいです。

https://twitter.com/kazy_developer/status/1595633720392044546?s=46&t=Wy9BJxrXQHaxRhqIvywF1A


https://crammbon.com/2022/11/15/when-app-use-encryption-need-document-export-compliance/