> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/nfc-wallet-sdk-ios/ja/security-and-privacy/security-guidance.md).

# セキュリティガイダンス

## 概要

このセキュリティガイダンスは、NFC Wallet SDKを統合したiOSを構築およびリリースする際に使用してください。 **デジタルウォレットアプリケーション** NFC Wallet SDKを統合したアプリケーション。

このガイダンスは、リリース前に適用すべきセキュリティガイドラインのセットです。

## 一般的なセキュリティガイドライン

### 最新のNFC Wallet SDKリリースを使用する

最新のNFC Wallet SDKリリースを使用してください。最新のセキュリティ更新と修正が含まれています。

### NFC Wallet SDKのReleaseビルドを使用する

App Storeに公開する前に、デジタルウォレットアプリケーションを次のように設定してください： `リリース` ビルドを使用していることを検出した場合、エラーを返します。

{% hint style="warning" %}
この `デバッグ` 本番環境での使用は許可されていません。
{% endhint %}

### デバッグシンボルを削除する

デバッグシンボルを含めたままリリースしないでください。これによりリバースエンジニアリングの難易度が下がり、機密変数、構造、ロジックの特定が容易になります。

### 機密データの漏洩を防ぐ

アプリがバックグラウンドに入る前に、UIから機密データを消去してください。

アプリがフォアグラウンドに戻るまでデータを暗号化するか消去してください。

機密情報のログ出力を避けてください。

### コード難読化を使用する

難読化を使用してリバースエンジニアリングのコストを増加させてください。

### ネットワーク通信を保護する

デジタルウォレットのバックエンドへのすべてのネットワーク呼び出しにHTTPSを使用してください。

自己署名証明書は避けてください。

証明書ピンニングを実装する場合は、次のガイドラインに従ってください：

* ホスト名をリーフ証明書と照合すること。
* システムの信頼ストアに対して完全な証明書チェーンを検証すること。
* 有効期限切れの証明書は拒否すること。
* ルートCAまたはリーフ証明書のSHA-256ハッシュをピンすること。

個人を特定できる情報（PII）を含む機密データを送信する場合は、必要に応じてアプリケーションレベルの暗号化と認証を追加してください。

### RASP保護を追加する

商用のランタイムアプリケーション自己防御（[RASP](https://en.wikipedia.org/wiki/Runtime_application_self-protection)）ソリューションを使用してください。

検出および対応する内容：

* RootまたはJailbreak。
* デバッグ。
* フッキング（Hooking）。
* アプリの改ざん。
* エミュレータ上での実行。

### ログ出力

デバイスのログに機密データを書き込むことを避けてください。

本番環境ビルドからデバッグログを除外するためにビルドフラグを使用してください。

### 安全なコーディングを採用する

開発全体で安全なコーディングを適用してください。例えば以下を行うべきです：

* 入力検証を行うこと。
* 適切なメモリ管理。
* 安全なC関数を使用すること。
* 機密データを格納するために不変コンテナを使用するのは避けること。

ベースラインのチェックリストについては、OWASPを参照してください [Secure Coding Practices](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide).

これらの実践はPMDやHP Fortifyなどの静的コード解析ツールを使用して強制できます。

### 監査およびペネトレーションテストを実施する

アーキテクチャおよびコード監査、さらにペネトレーションテストを実施して脆弱性を特定し、アプリケーションの全体的なセキュリティ体制を評価してください。

### アプリケーションセキュリティの回復力を評価する <a href="#evaluate-the-resilience-of-application-security" id="evaluate-the-resilience-of-application-security"></a>

OWASP MASVS（Mobile Application Security Verification Standard）を確認してください： [OWASP MASVS](https://github.com/OWASP/owasp-masvs)。これはモバイルアプリケーションのセキュリティ要件の基準です。

OWASP MSTGを使用することを強く推奨します [チェックリスト](https://github.com/OWASP/owasp-mastg/releases/latest) を使ってアプリケーションのセキュリティ状況を評価してください。

## iOS開発者向けセキュリティガイドライン

### アプリライフサイクル中の機密データ露出を防ぐ

アプリがバックグラウンドに移行するときに機密UIコンテンツを削除してください。

アプリがフォアグラウンドに戻るまで機密データをワイプまたは暗号化してください。

機密データのログ出力を避けてください。

次のiOSフックを使用してください：

* `applicationWillResignActive`：画面をクリアします。機密データを暗号化してください。
* `applicationDidBecomeActive`：UIを復元します。機密データを復号してください。
* `UIScreenCapturedDidChangeNotification`：スクリーンキャプチャを検出します。機密UIコンテンツを消去してください。

例：resigning active時にアプリのコンテンツを隠す。

```swift
UIApplication.shared.keyWindow?.isHidden = true
```

### Xcode出力からシンボルを削除する

Xcodeでは、リリースビルド設定で次の値を設定してください：

```
DEPLOYMENT_POSTPROCESSING = YES
GCC_GENERATE_DEBUGGING_SYMBOLS = NO
STRIP_INSTALLED_PRODUCT = YES
STRIP_STYLE = all
COPY_PHASE_STRIP = YES
```

### Swiftで機密データを管理する

機密バイトのコピーを最小限にしてください。

[Data](https://developer.apple.com/documentation/foundation/data) はSwiftでは値型です。代入や渡しで基になるバイトのコピーが作成される可能性があります。

割り当てられたバイトを参照渡しで渡してください（ `inout` 引数を使用）。

```swift
func helloWorld(_ data: inout Data) { 
    ... 
}

var data = Data()
helloWorld(&data)
```

使用後にワイプする `Data` ：

```swift
extension Data {
    internal mutating func wipe() {
        guard count > 0 else {
            return
        }
        let length = count
        withUnsafeMutableBytes { ptr in
            if let mutableRawPtr = ptr.baseAddress {
                memset_s(mutableRawPtr, length, 0, length)
            }
        }
    }
}
```

### 機密入力の自動補正キャッシュを無効にする

機密データを受け付けるフィールドでは自動補正を無効にしてください。

次のオプションのいずれかを使用してください：

* を設定する `secureTextEntry = true`.
* を設定する `autoCorrectionType = UITextAutocorrectionType.no`.

### 機密入力でのコピー＆ペーストを無効にする

機密フィールドでコピー/ペーストメニューを無効にしてください。これにより、デバイスにアクセスできる攻撃者が貼り付けてコピーされたデータを閲覧することを防ぎます。

```swift
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    let menuController = UIMenuController.shared
    menuController.isMenuVisible = false
    return false
}
```

### アプリの改ざんを防ぐ

機密操作のためにランタイムでアプリの整合性を確認してください。

次のセクションのチェックサムを計算できます： `__text` セクション（）の `__TEXT` セグメント。

実装の詳細については、OWASP MSTG（Mobile Security Testing Guide）の [iOS Anti-Reversing Defenses](https://github.com/OWASP/owasp-mstg/blob/master/Document/0x06j-Testing-Resiliency-Against-Reverse-Engineering.md).

に関するガイダンスを参照してください。

### チェックサム実装を保護するために強力な難読化を使用してください。

Xcodeのハードニングオプションを有効にする

<details>

<summary>解析やリバースエンジニアリングを困難にするXcode設定を使用してください。</summary>

```
推奨されるXcode設定
GCC_UNROLL_LOOPS = YES
GCC_OPTIMIZATION_LEVEL = 3
OTHER_CFLAGS = -fstack-protector-all -finline-functions
CLANG_ENABLE_OBJC_ARC = YES
GCC_DYNAMIC_NO_PIC = NO
LD_NO_PIE = NO
RUN_CLANG_STATIC_ANALYZER = YES
CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES
CLANG_ANALYZER_SECURITY_INSECUREAPI_RAND = YES
CLANG_ANALYZER_SECURITY_INSECUREAPI_STRCPY = YES
CLANG_ANALYZER_SECURITY_INSECUREAPI_GETPW_GETS = YES
CLANG_ANALYZER_SECURITY_INSECUREAPI_MKSTEMP = YES
```

</details>

## CLANG\_ANALYZER\_SECURITY\_INSECUREAPI\_VFORK = YES

App Store配布を管理する **デジタルウォレットアプリケーション**.

エンドユーザーは古い「最後の互換バージョン」をダウンロードできる場合があります。

### 公開された各バージョンは攻撃対象領域を増加させます。サポートするバージョンセットは小さく保ってください。

古いバージョンのダウンロードを制限する

可能な場合はApp Store Connectで以前のバージョンのダウンロードを無効にしてください。 [現在のAppleの挙動とUIラベルについては、次を参照してください：](https://developer.apple.com/support/app-store-connect/).

{% hint style="info" %}
App Store Connect
{% endhint %}

セキュリティ修正をリリースしたら古いバージョンを迅速に削除してください。

### デジタルウォレットアプリケーションの最新の単一バージョンを維持することを推奨します。幅広いiOSバージョンをサポートするようにビルド設定を調整してください。

安全でない実行環境を減らす

* **シミュレータビルドを配布しないでください。**&#x53;imulator宛先を無効にする
* **：デプロイメントターゲットにはiOSデバイスのみを含めるべきです。**&#x41;pp Store Connectで「Apple Silicon Mac Availability」を無効にする

：mac M1上でiOSアプリを実行すると、アプリケーションバイナリとサンドボックスの露出が増加します。 [詳細については、Appleの次のガイダンスを参照してください：](https://developer.apple.com/documentation/apple-silicon/running-your-ios-apps-on-macos).

## macOSでのiOSアプリの実行

アプリケーション保護

### ビルドと配布の際にデジタルウォレットアプリケーションを強化してください。サイドローディング、クローン作成、ランタイムでの改ざんに注力してください。

* 実行環境を検証する
* アプリがターゲットデバイス上で、SDKがサポートするOSバージョン、ファームウェアバージョン、ハードウェアバージョンで実行されていることを確認してください。&#x20;

  エミュレータおよびJailbrokenデバイスでの実行をブロックしてください。 [iOS Anti-Reversing Defenses](https://github.com/OWASP/owasp-mstg/blob/master/Document/0x06j-Testing-Resiliency-Against-Reverse-Engineering.md).

### OWASP MSTGのガイダンスを参照してください：

配布チャネルを制御する

* デジタルウォレットアプリケーションは公式ストアおよび検証済みチャネルを通じてのみ配布してください。
* アプリケーションは意図したストアからインストールされたことを検証する必要があります。

### サイドチャネルでの配布を許可しないでください。

セキュリティアップデートを強制する（強制アプリ更新）

* セキュリティ修正がある場合は強制的なアプリ更新を確実に行ってください。

### インストールされているバージョンが許容される最小バージョン未満の場合、サービスへのアクセスをブロックしてください。

* 改ざん、再署名、クローンの検出
* コード署名の変更（再署名）や再パッケージを検出してください。
  * エミュレータおよびJailbrokenデバイスでの実行をブロックしてください。 [iOS Anti-Reversing Defenses](https://github.com/OWASP/owasp-mstg/blob/master/Document/0x06j-Testing-Resiliency-Against-Reverse-Engineering.md)
* アプリケーションバイナリおよびリソースの変更を検出してください。

機密アプリケーションデータを特定のデバイスに結び付けてください。

### 妥協を検出した場合は、関連するアカウントをブラックリスト化し取引を拒否するようにしてください。

* 通信中のデータを保護する
* 発行者バックエンドへのすべての接続にTLS 1.2またはTLS 1.3を使用してください。
* 証明書ピンニングを実装する場合は、証明書のローテーションを計画してください。
* 強力な暗号スイートを使用し、弱いネゴシエーションを拒否してください。

### 必要に応じてアプリケーションレベルの暗号化を追加してください。

ランタイム保護（RASP）を追加する

* エミュレータおよびJailbrokenデバイスでの実行をブロックしてください。 [iOS Anti-Reversing Defenses](https://github.com/OWASP/owasp-mstg/blob/master/Document/0x06j-Testing-Resiliency-Against-Reverse-Engineering.md)

## デジタルウォレットアプリケーションでRuntime Application Self Protectionが利用可能であることを確認してください。機密操作中にデバッグやフッキングを検出してください。

資産を保護する

#### このセクションは資産を保護するためのアプリ開発におけるベストプラクティスを示します。

FCM登録トークン

* デジタルウォレットアプリケーションがアプリレベルでFCMを管理する場合：
* FCM登録トークンを必要以上に長く保持しないでください。

#### この資産の機密性と完全性を確保してください。

Fundingカード情報

* デジタルウォレットアプリケーションが支払いカードデータを収集する場合： `リスクのある` UITextField
* 機能（AutoFillやコピー/ペーストなど）を無効にしてください。
* セキュアなキーパッドを使用してください。
* 使用前に入力を検証してください。
* 支払いカードデータを永続的に保存しないでください。
* FCM登録トークンを必要以上に長く保持しないでください。

入力画面を表示する前に、ランタイムチェック（Jailbreak、フッキング、デバッグ、改ざん検出）を実施してください。

#### アプリ外部からのその他の機密入力にも同じ制御を適用してください。

* アプリ署名証明書およびTLS証明書
* アプリ署名証明書へのアクセスを制御してください。
* FCM登録トークンを必要以上に長く保持しないでください。

#### 信頼できない第三者に開示しないでください。

* その他の機密資産
* コードを難読化し、バイナリに含まれる機密文字列を保護してください。
  * リリースごとに資産を再評価してください（新機能が新たな機密データを追加する可能性があります）。
* 各資産の価値と重要度を評価し、必要な保護を適用してください。
* 一時的なデータを永続化しないでください。不必要になったらメモリから機密データを消去してください。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.payments.thalescloud.io/nfc-wallet-sdk-ios/ja/security-and-privacy/security-guidance.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
