# S6. 暗号化の実践 (Cryptographic Practices)

## 管理目標

鍵の管理、署名の検証、乱数の生成のための安全な暗号プラクティスを確立して、スマートコントラクト内のトランザクションとデータの完全性と真正性を保護します。

## S6.1 鍵管理 (Key Management)

### 管理目標

秘密鍵の安全な取り扱いと保管を確保し、堅牢な署名検証プロセスを実装して、認可されていないアクセスやアクションを防ぎます。

### S6.1.A 秘密鍵の安全な処理と保管 (Secure Handling and Storage of Private Keys)

| 参照コード   | 要件                                                                                                           | L1 | L2 | L3 | SWE |
| ------- | ------------------------------------------------------------------------------------------------------------ | -- | -- | -- | --- |
| S6.1.A1 | ecrecover() 関数が不正な入力を正しく処理し、無効なデータを返さないことを検証します。                                                             |    | ✓  | ✓  |     |
| S6.1.A2 | 特に、署名自体にのみ依存するのではなく、ノンスやハッシュ化されたメッセージを使用することで、署名検証メカニズムが署名の可変性やリプレイ攻撃に対して堅牢であることを確認します。                      |    | ✓  | ✓  |     |
| S6.1.A3 | Solidity 0.8 で導入された ABI デコードの問題を考慮して、SignatureChecker.isValidSignatureNow がエッジケースを適切に処理し、予期せず元に戻らないことを検証します。 |    | ✓  | ✓  |     |
| S6.1.A4 | すべての署名が徹底的にチェックされ、脆弱または不適切に管理された署名バリデーションによる認可されていないトランザクションやアクションを防いでいることを確認します。                            |    | ✓  | ✓  |     |
| S6.1.A5 | 古いライブラリやプラクティスを避けることで、署名保護メカニズムが最新であり、署名可変性攻撃に対する耐性があることを検証します。                                              |    | ✓  | ✓  |     |

### S6.1.B マルチ署名ウォレット (Multi-Signature Wallets)

| 参照コード   | 要件                                                       | L1 | L2 | L3 | SWE |
| ------- | -------------------------------------------------------- | -- | -- | -- | --- |
| S6.1.B1 | マルチ署名ウォレットではトランザクションを実行する前にあらかじめ定義された数の署名が必要であることを検証します。 |    | ✓  | ✓  |     |
| S6.1.B2 | マルチ署名ウォレットロジックがリプレイ攻撃に耐性があることを確認します。                     |    | ✓  | ✓  |     |
| S6.1.B3 | マルチ署名ウォレットへの署名者の追加または削除するプロセスが安全かつ制御されていることを検証します。       |    | ✓  | ✓  |     |

## S6.2 署名検証 (Signature Verification)

### 管理目標

認証されたトランザクションの完全性を維持するために、署名の安全な検証と標準への準拠を確保する暗号技法を導入します。

### S6.2.A 認証のための暗号技法 (Cryptographic Techniques for Authentication)

| 参照コード   | 要件                                                | L1 | L2 | L3 | SWE |
| ------- | ------------------------------------------------- | -- | -- | -- | --- |
| S6.2.A1 | 署名検証に使用される暗号アルゴリズムが安全であり、ベストプラクティスに従っていることを確認します。 |    | ✓  | ✓  |     |

### S6.2.B 標準準拠 (例, EIP-712) (Standard Compliance (e.g., EIP-712))

| 参照コード   | 要件                                                                                                                                     | L1 | L2 | L3 | SWE |
| ------- | -------------------------------------------------------------------------------------------------------------------------------------- | -- | -- | -- | --- |
| S6.2.B1 | ECDSA.recover や ECDSA.tryRecover などの ECDSA 署名処理関数が、特に従来の 65 バイト署名と EIP-2098 コンパクト署名の両方を署名する場合に、署名の可変性を防ぐために署名フォーマットを適切に管理していることを検証します。 |    | ✓  | ✓  |     |

## S6.3 安全な乱数生成 (Secure Random Number Generation)

### 管理目標

安全な乱数生成のためのベストプラクティスを実装して、予測不可能性と操作に対する耐性を確保します。

### S6.3.A ランダム性のベストプラクティス (Best Practices for Randomness)

| 参照コード   | 要件                                             | L1 | L2 | L3 | SWE |
| ------- | ---------------------------------------------- | -- | -- | -- | --- |
| S6.3.A1 | 乱数生成がベストプラクティスに従い、安全なエントロピーソースを使用していることを確認します。 |    | ✓  | ✓  |     |
| S6.3.A2 | あらゆる乱数生成が操作や予測に対して耐性があることを検証します。               |    | ✓  | ✓  |     |


---

# Agent Instructions: 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://coky-t.gitbook.io/owasp-scsvs-ja/owasp-sumtokontorakutosekyuriti-001/0x15-s6-cryptographic-practices.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.
