IndieForm
ガイド一覧

App Store輸出コンプライアンス:暗号化の回答とInfo.plist設定

·最終更新

App Store Connectでbuildを提出すると、輸出コンプライアンスとして暗号化の利用を確認されます。HTTPSでAPIへ接続する一般的なアプリでも暗号化は関係しますが、「暗号化を使う」と「App Store Connectへ文書を提出する」は同じ意味ではありません。

先にYesかNoを推測せず、アプリと組み込んだライブラリが、どこで、どの暗号化機能を使うかを棚卸しします。その結果をApp Store Connectの質問へ入力し、文書不要または文書提出の判定に合わせてInfo.plistを設定します。

この記事はAppleの提出手順を整理するもので、米国やフランスの輸出入規制に関する法的助言ではありません。自社の実装が免除に該当するか判断できない場合は、Apple Developer Supportまたは輸出管理の専門家へ確認してください。

まず暗号化の利用箇所を棚卸しする

Appleの輸出コンプライアンス概要は、暗号化をuse、access、contain、implement、incorporateするアプリを判定対象としています。自分で暗号アルゴリズムを実装していなくても、OS機能やSDK経由の利用を含めて確認します。

作業メモには次の列を用意します。

確認対象記録する内容
通信HTTPS、WebSocket、VPN、独自protocol
保存Keychain、暗号化database、secure storage
認証passkey、token署名、SSO、認証SDK
コンテンツend-to-end encryption、暗号化file
third-partyanalytics、決済、チャット、security SDK
実装元Apple OS、OS外のstandard algorithm、proprietary algorithm
配信先Franceを含むか

「アプリ本体では暗号化していない」だけで終えず、linked third-party libraryも確認します。各SDKのdocumentation、依存関係、実際に有効な機能を調べ、分からないものは提供元へ問い合わせます。

三つの実装元へ分ける

Appleの必要文書リファレンスは、暗号化の実装を大きく三つに分けています。

暗号化の種類App Store Connect上の文書
Apple OS内の暗号化だけを利用不要
Apple OS外のindustry standard algorithmFranceで配信する場合はFrench encryption declaration
国際標準団体に認められていないproprietary algorithmCCATS。Franceで配信する場合はFrench encryption declarationも必要

たとえばAppleのEncryption Export Regulationsでは、URLSessionでHTTPS通信を行うようなOS組み込み暗号化は、通常documentation uploadの免除対象と説明しています。ただし、HTTPSを使うすべてのアプリをこの記事だけで免除と断定することはできません。OS外のライブラリが暗号化を実装していないか、別の暗号化機能がないかまで確認します。

また、App Store Connect上の文書が不要でも、ほかの報告義務まで一律に不要になるとは限りません。Appleは、免除対象の暗号化でも米国政府への年次self-classification reportが必要になる場合があると案内しています。

App Store Connectの質問で文書要否を確定する

棚卸しができたら、App Store Connectの質問へ回答します。

  1. Appsから対象アプリを選ぶ
  2. sidebarのApp Informationを開く
  3. App Encryption Documentationの追加ボタンを選ぶ
  4. 表示される質問へ、実装と配信地域に基づいて回答する
  5. 文書が必要と表示された場合は、指定された文書を用意する

DistributionまたはTestFlightでbuildがMissing Complianceになっている場合は、build横のManageからも質問へ進めます。必要roleはAccount Holder、Admin、App Managerのいずれかです。

質問文は更新される可能性があります。過去versionで選んだ回答や、別アプリの回答をコピーせず、現在のbuildに含まれる暗号化と現在の配信先を基準にしてください。

文書が必要な場合はreview前に提出する

App Store Connectの判定で文書が必要になった場合は、App ReviewまたはTestFlight App Reviewへbuildを出す前に提出します。

Appleの文書判定・upload手順は、次の順番を案内しています。

  1. App InformationApp Encryption Documentationを開く
  2. 質問へ回答する
  3. 指示された文書をChoose Fileからuploadする
  4. 保存してAppleのreviewを待つ
  5. 承認済み文書を対象のbeta buildまたはapp version buildへ関連付ける

Appleはcase-by-caseで確認し、完全な情報であれば約2営業日でのclearを見込むとしています。これは保証された期限ではないため、リリース直前ではなく余裕を持って提出します。

文書を出す前にApp Descriptionと配信地域を整えてください。Appleは、その情報がないと提出文書が十分か判断できないと説明しています。

Info.plistで毎回の質問を減らす

判定結果が確定したら、ITSAppUsesNonExemptEncryptionをInfo.plistへ設定できます。このkeyは、アプリがnon-exempt encryptionを使うか示すBooleanです。

暗号化なし、または免除対象だけの場合

アプリとlinked third-party libraryが暗号化を使わない、または文書提出の免除対象だけを使うと確認できた場合は、NOを設定します。

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

non-exempt encryptionを使う場合

non-exempt encryptionを使う場合はYESを設定します。

<key>ITSAppUsesNonExemptEncryption</key>
<true/>

文書が承認されると、Appleからkey valueが提供されます。通常はその値をITSEncryptionExportComplianceCodeへ設定します。

<key>ITSEncryptionExportComplianceCode</key>
<string>[Appleから提供されたcode]</string>

ITSAppUsesNonExemptEncryptionを設定しない場合、App Store Connectは新しいversionをuploadするたびにexport compliance questionnaireを表示します。keyを入れる目的は質問を隠すことではなく、確認済みの判定をbuildへ正しく宣言することです。

XcodeがInfo.plistを自動生成する構成では、targetのbuild settingsにあるApp Uses Non-Exempt EncryptionApp Encryption Export Compliance Codeを使えます。最終的にarchiveへ含まれた値を確認し、debug用設定だけを変更して終わらないようにします。

TestFlightのMissing Complianceを解消する

TestFlightへuploadしたbuildにMissing Complianceが表示された場合は、build詳細からProvide Export Compliance Informationを選びます。

  • 質問へ回答する
  • 文書不要なら保存する
  • 文書が必要ならApp Encryption Documentationへ移動してuploadする
  • 以前承認された該当文書がある場合はbuildへ関連付ける

TestFlightで回答したからといって、アプリの実装や配信先が変わった後も同じ判定が続くとは限りません。暗号化SDKの追加、独自暗号化の導入、Franceへの配信追加があれば、棚卸しとquestionnaireを見直します。

よくある誤りを提出前に確認する

HTTPSだから必ず文書が必要と考える

OS組み込みのHTTPSは通常、文書uploadの免除対象です。ただし、通信以外の暗号化やOS外の実装を確認せずにNOを選ぶ根拠にはなりません。

自作コードだけを見る

認証、database、VPN、chat、security関連のSDKが暗号化を含むことがあります。third-party libraryまで棚卸しに含めます。

文書不要と暗号化なしを混同する

暗号化を使っていても、App Store Connect上のdocumentationが不要な場合があります。質問には実装事実を答え、文書要否はquestionnaireの結果に従います。

Info.plistを先に決める

ITSAppUsesNonExemptEncryptionは希望する審査結果を書く欄ではありません。先に暗号化の利用と免除条件を確認し、その判定を反映します。

配信地域を後から変える

Franceで配信する場合、暗号化の種類によってFrench encryption declarationが必要です。availabilityを変更したらcomplianceも再確認します。

変更時に再確認するチェックリスト

初回提出だけでなく、暗号化に関わる変更ごとに確認します。

  • 新しいSDKを追加または更新した
  • 通信、認証、保存方式を変更した
  • proprietaryな暗号化機能を追加した
  • App Storeの配信地域を変更した
  • 承認済み文書の対象と現在のbuildが一致している
  • Release archiveのInfo.plistへ判定結果が入っている
  • App Store ConnectでbuildのMissing Complianceが解消している

回答に自信がない場合は、「一般的なHTTPSアプリだから」という推測で免除を選ばず、暗号化の実装資料をそろえてApple Developer Supportへ確認します。Appleも、規制の解釈と免除申告の責任がdeveloperにあると明記しています。

IndieFormはcompliance文書の代わりにしない

輸出コンプライアンスの質問、文書、承認codeはApp Store ConnectとアプリのInfo.plistで管理します。IndieFormは暗号化区分を判定せず、CCATSやFrench encryption declarationを作成するサービスでもありません。

IndieFormを使う場合は、一般ユーザー向けの公開Support URLとして役割を分けます。問い合わせフォームのURLをApp Store Connectへ設定し、対象アプリと連絡方法が分かり、ログアウト状態で利用できることを確認します。輸出コンプライアンス欄へSupport URLを入れたり、問い合わせフォームへcompliance codeを掲載したりしないでください。

暗号化申告は、質問画面だけを見て答える作業ではありません。実装と依存SDKを棚卸しし、公式questionnaireで文書要否を確定し、その結果をbuildのInfo.plistへ反映するところまでを一つの提出手順として管理します。

関連記事

アプリ専用の問い合わせフォームを用意する

アプリのURLからフォームの下書きを作り、サポート窓口として公開できます。