diff --git a/wolfSSL/src-ja/appendix07.md b/wolfSSL/src-ja/appendix07.md index 4da7cc8e..91b20868 100644 --- a/wolfSSL/src-ja/appendix07.md +++ b/wolfSSL/src-ja/appendix07.md @@ -20,10 +20,24 @@ wolfSSLチームは以前、実験的なポスト量子暗号アルゴリズム しかし、「あらかじめデータを収集、蓄積し、後に時間をかけて解読を進めていく」といった脅威モデルが存在します。 すなわち、暗号の復号に特化した量子コンピューターが出現するよりも早いうちに準備が必要です。 -NISTが、量子コンピューターに対して脆弱になる公開鍵暗号アルゴリズムを置き換えるように設計された、新しいクラスのアルゴリズムの標準化を進めています。 -この章の執筆時点で、NISTはすでにML-DSA、ML-KEM、SLH-DSAを標準化しています。 -現在、標準化団体はOIDとコードポイントを記述する様々なドラフト文書を持っています。 -NISTはこれらのアルゴリズムをCMVP規制フレームワークの下に置き、これらのアルゴリズムの実装のFIPS-140-3検証を可能にする作業を進めています。 +NISTは量子コンピュータに対して脆弱になる公開鍵暗号アルゴリズムを置き換えるために設計された、新しいアルゴリズムの標準化を主導しています。 +この文章の執筆時点において、NISTはすでにML-DSA、ML-KEM、SLH-DSAを標準化しました。 + +ML-KEM (Module Lattice Key Encapsulation Mechanism) は、NISTが標準化した格子ベースの耐量子アルゴリズムです。 +Kyberをベースとして標準化されました。 +2者間で鍵カプセル化メカニズムを使用して、安全でないチャネル上で共有鍵を確立します。 +これにより、従来型および量子コンピュータを用いた攻撃者の両方から保護できます。 + +ML-DSA (Module Lattice Digital Signature Algorithm) は、同じくNISTが標準化した格子ベースの耐量子デジタル署名方式です。 +Kyberをベースとして標準化されました。 +これにより、送信者はメッセージの送信元と完全性を証明する検証可能な署名を生成できます。 + +ML-KEMとML-DSAはどちらも、暗号の復号に特化した量子コンピュータに耐性を持つように設計された公開鍵アルゴリズムです。 +これらはNISTの耐量子暗号標準(FIPS 203およびFIPS 204)の一部です。 +量子コンピューティング時代に備えるために、ほとんどのケースでハイブリッド形式にてすぐに導入できます。 + +現在、各標準化団体はOIDとコードポイントを示すさまざまなドラフト文書を有しています。 +NISTはこれらのアルゴリズムをCMVP規制フレームワークの傘下に置き、実装に対するFIPS-140-3検証を可能にする取り組みを進めています。 ### 私たちは自分自身をどのように守るのですか? @@ -96,19 +110,19 @@ wolfSSLリポジトリの[INSTALLファイル](https://github.com/wolfSSL/wolfss 次のようにして、サーバーとクライアントを別々のターミナルで実行します。 ```sh - $ examples/server/server -v 4 -l TLS_AES_256_GCM_SHA384 \ - -A certs/mldsa87_root_cert.pem \ - -c certs/mldsa44_entity_cert.pem \ - -k certs/mldsa44_entity_key.pem \ - --pqc P521_ML_KEM_1024 +examples/server/server -v 4 -l TLS_AES_256_GCM_SHA384 \ + -A ../osp/oqs/mldsa87_root_cert.pem \ + -c ../osp/oqs/mldsa44_entity_cert.pem \ + -k ../osp/oqs/mldsa44_entity_key.pem \ + --pqc SecP521r1MLKEM1024 ``` ```sh - $ examples/client/client -v 4 -l TLS_AES_256_GCM_SHA384 \ - -A certs/mldsa44_root_cert.pem \ - -c certs/mldsa87_entity_cert.pem \ - -k certs/mldsa87_entity_key.pem \ - --pqc P521_ML_KEM_1024 +examples/client/client -v 4 -l TLS_AES_256_GCM_SHA384 \ + -A ../osp/oqs/mldsa44_root_cert.pem \ + -c ../osp/oqs/mldsa87_entity_cert.pem \ + -k ../osp/oqs/mldsa87_entity_key.pem \ + --pqc SecP521r1MLKEM1024 ``` これで、対称暗号化にAES-256、認証にML-DSA署名スキーム、鍵確立にECDHEとML-KEMをハイブリッド化した完全な量子安全なTLS 1.3接続を実現しました。 @@ -1253,4 +1267,5 @@ Benchmark complete ``` ### 開発者ノート + * 「今収穫し、後で復号する」脅威モデルを阻止しようとしていて、相互運用性の一部を犠牲にしても構わない場合は、Supported Groups拡張機能で従来のアルゴリズムのサポートを広告したくないことと思います。選択したアルゴリズムで`wolfSSL_UseKeyShare()`と`wolfSSL_set_groups()`を必ず呼び出してください。`wolfSSL_UseKeyShare()`だけを呼び出すだけでは不十分です。なぜなら、それは量子的に脆弱なアルゴリズムのサポートを広告することになるからです。ピアがポスト量子アルゴリズムをサポートしていない場合、`HelloRetryRequest`を送信し、その結果として、従来のアルゴリズムとの接続が確立されます。 diff --git a/wolfSSL/src-ja/chapter02.md b/wolfSSL/src-ja/chapter02.md index fdf9e2a4..c055c13b 100644 --- a/wolfSSL/src-ja/chapter02.md +++ b/wolfSSL/src-ja/chapter02.md @@ -680,6 +680,22 @@ Poly認証を設定するため、TLS v1.2でChacha20/Poly1305を使用する場 `./configure` を使用する場合、これは ChaCha20/Poly1305 でデフォルトで有効になりますが、`WOLFSSL_USER_SETTINGS` でビルドする場合は手動で定義する必要があります。 +#### WOLFSSL_ASN_TEMPLATE + +テンプレートベースのASN.1処理を使用する新しいバージョンのASN解析コードを有効にします。 +この解析は標準的なASN.1ルールに準拠し、テンプレート構造を使用してエンコードとデコードを指示することで、パーサーコードがテンプレート間で汎用化できるようにします。 +`./configure` を使用する場合これはデフォルトでオンになっていますが、`WOLFSSL_USER_SETTINGS` でビルドする場合は手動で定義する必要があります。 + +#### WOLFSSL_DEBUG_ASN_TEMPLATE + +ASN.1テンプレートを使用する際のデバッグ出力を有効にします。 +`WOLFSSL_ASN_TEMPLATE`と併用する場合にのみ関連します。 + +#### WOLFSSL_ASN_TEMPLATE_TYPE_CHECK + +テスト用にコンパイラの型の問題をより適切にテストするためにASN関数を使用します。 +`WOLFSSL_ASN_TEMPLATE`と併用する場合にのみ関連します。 + ### 機能の有効化 (デフォルトで無効) #### WOLFSSL_CERT_GEN @@ -2852,6 +2868,8 @@ LEAN TLS 1.2クライアントのみ(クライアント認証なし)、ECC25 公開鍵コールバックを有効にします。 +このオプションを有効にすると公開鍵コールバックが有効になり、アプリケーションが独自のECC署名/検証・RSA署名/検証・暗号化/復号コールバックを登録できるようになります。 + ### `--enable-sniffer` wolfSSL Snifferのサポートを有効にします。 @@ -2876,16 +2894,18 @@ AES-GCMサポートを有効にします。 このオプションを有効にすると公開鍵コールバックが有効になり、アプリケーションは独自のECC署名/検証とRSA署名/検証を許可し、コールバックを識別して暗号化/復号できます。 +AES-GCMを有効にすると、これらの暗号スイートがwolfSSLに追加されます。 +wolfSSLは、速度とメモリ消費のバランスを考慮した4つの異なるAES-GCM実装を提供しています。 +利用可能な場合、wolfSSLは64ビットまたは32ビット演算を使用します。 +組み込みアプリケーション向けには、RAMベースのルックアップテーブル(セッションごとに8KB)を使用する高速な8ビット版があり、これは64ビット版と同等の速度を持ちます。 +また、追加のRAMを消費しない低速な8ビット版もあります。 +`--enable-aesgcm configure`オプションは、`=word32`、`=table`、`=small`のオプションで変更できます。 +例: `--enable-aesgcm=table`。 + ### `--enable-aesccm` AES-CCMサポートを有効にします。 -AES-CCMを有効にすると、以下の暗号スイートがwolfSSLに追加されます。 -wolfSSLは、速度とメモリ消費のバランスを取った4つの異なるAES-GCM実装を提供しています。 -利用可能な場合、wolfSSLは64ビットまたは32ビットの計算を使用します。 -組み込みアプリケーションの場合、RAMベースのルックアップテーブル(セッションあたり8KB)を使用する高速な8ビットバージョン(64ビットバージョンと同程度の速度)と、追加のRAMを消費しないより遅い8ビットバージョンがあります。 ---enable-aesgcm設定オプションは、`=word32`、`=table`、または`=small`などのオプションで変更できます(例:`--enable-aesgcm=table`)。 - ### `--disable-aescbc` AES-CBCをコンパイルアウトするために[`--disable-aescbc`](#--disable-aescbc)で使用されていました。 diff --git a/wolfSSL/src-ja/chapter03.md b/wolfSSL/src-ja/chapter03.md index 12248d3d..33801551 100644 --- a/wolfSSL/src-ja/chapter03.md +++ b/wolfSSL/src-ja/chapter03.md @@ -622,7 +622,7 @@ wolfSSLを使用したクライアントアプリケーションのサンプル クライアントの説明については、本章の「クライアントアプリケーションでwolfSSLを使用する」節を参照してください。 より詳しい手順とサンプルコードは[第11章 SSLチュートリアル](chapter11.md#ssl-tutorial)に掲載しています。 -1. 概ね上記のクライアントの手順と同様です。ただし、ステップ5のクライアントメソッド呼び出しをサーバーのものに変更します。例えば以下の行を、 +1. 概ね上記のクライアントの手順と同様です。ただし、ステップ2のクライアントメソッド呼び出しをサーバーのものに変更します。例えば以下の行を、 ```c wolfSSL_CTX_new(wolfTLSv1_client_method()); diff --git a/wolfSSL/src-ja/chapter04.md b/wolfSSL/src-ja/chapter04.md index 18c850af..dfea8f69 100644 --- a/wolfSSL/src-ja/chapter04.md +++ b/wolfSSL/src-ja/chapter04.md @@ -190,7 +190,7 @@ NIST Special Publication [SP800-57](https://csrc.nist.gov/publications/detail/sp **メッセージ認証コード(MAC)アルゴリズム**(MD2、MD5、SHA-1、SHA-256、SHA-512、RIPEMD)は、メッセージダイジェストを作成するために使用されるハッシュ関数です。 -以下の表は、`/wolfssl/internal.h`(約706行目以降に記載)にある暗号スイート(およびカテゴリ)に対応しています。 +以下の表は、`/wolfssl/internal.h`(約1097行目以降に記載)にある暗号スイート(およびカテゴリ)に対応しています。 以下のリストにない暗号スイートをお探しの場合は、お問い合わせください。 #### ECC暗号スイート @@ -380,6 +380,21 @@ wolfSSLはいくつかの異なるハッシュ関数をサポートしていま wolfSSLは **RSA**、**ECC**、**DSA/DSS**、**DH** の公開鍵オプションに加え、wolfSSLサーバー上での **EDH**(Ephemeral Diffie-Hellman)もサポートしています。 これらの関数の詳細な使用方法は、[第10章 wolfCryptの使用法](chapter10.md)の「公開鍵暗号」節で確認できます。 +#### ML-KEM、ML-DSA + +ML-KEM (Module Lattice Key Encapsulation Mechanism) は、NISTが標準化した格子ベースの耐量子アルゴリズムです。 +Kyberをベースとして標準化されました。 +2者間で鍵カプセル化メカニズムを使用して、安全でないチャネル上で共有鍵を確立します。 +これにより、従来型および量子コンピュータを用いた攻撃者の両方から保護できます。 + +ML-DSA (Module Lattice Digital Signature Algorithm) は、同じくNISTが標準化した格子ベースの耐量子デジタル署名方式です。 +Kyberをベースとして標準化されました。 +これにより、送信者はメッセージの送信元と完全性を証明する検証可能な署名を生成できます。 + +ML-KEMとML-DSAはどちらも、暗号の復号に特化した量子コンピュータに耐性を持つように設計された公開鍵アルゴリズムです。 +これらはNISTの耐量子暗号標準(FIPS 203およびFIPS 204)の一部です。 +量子コンピューティング時代に備えるために、ほとんどのケースでハイブリッド形式にてすぐに導入できます。 + ### ECC サポート wolfSSLは楕円曲線暗号(ECC)をサポートしています。 @@ -437,7 +452,7 @@ wolfSSLはPBKDF1とPBKDF2に加えて、PKCS #12からのPBKDF関数もサポー ```c int PBKDF2(byte* output, const byte* passwd, int pLen, - const byte* salt,int sLen, int iterations, + const byte* salt, int sLen, int iterations, int kLen, int hashType); int PKCS12_PBKDF(byte* output, const byte* passwd, int pLen, @@ -615,9 +630,9 @@ ESP32とは異なり、ESP8266ではハードウェアベースの暗号化は ESP8266用にコンパイルするには、`user_settings.h` に `WOLFSSL_ESP8266` を定義します。 autoconfにより`./configure CFLAGS="-DWOLFSSL_ESP8266"` とすることも可能です。 -### ERF32 +### EFR32 -wolfSSLはERF32ファミリーのハードウェアベースの暗号化を使用できます。 +wolfSSLはEFR32ファミリーのハードウェアベースの暗号化を使用できます。 サポートを有効にするには、`user_settings.h` で `WOLFSSL_SILABS_SE_ACCEL` を定義します。 wolfSSLは現在、EFR32プラットフォーム上で RNG、AES-CBC、AES-GCM、AES-CCM、SHA-1、SHA-2、ECDHE、ECDSA のハードウェアアクセラレーションをサポートしています。 @@ -866,6 +881,95 @@ ret = wolfSSL_CTX_load_static_memory( `WOLFSSL_CTX`構造体の使用を終了した後は、通常の`wolfSSL_CTX_free()`を使って解放してください。 +### TLSなしでの静的メモリの使用(暗号のみ) + +wolfSSLは、TLS機能を必要とせずに、wolfCrypt操作のための静的メモリ割り当ての使用もサポートしています。 +これは、TLS接続のオーバーヘッドなしに暗号操作(ハッシュ化、暗号化、乱数生成など)のみを必要とするアプリケーションに役立ちます。 + +`wc_LoadStaticMemory()`関数は、wolfCryptで使用するための静的メモリを確保するために使用されます。 +メモリは、作成されたヒープヒントをそれをサポートする関数に渡すことで使用できます。 +この例として、`wc_InitRng_ex()`を呼び出す場合があります。 + +**例:** + +```c +WOLFSSL_HEAP_HINT hint; +int ret; +unsigned char memory[MAX]; +int memorySz = MAX; +int flag = WOLFMEM_GENERAL; + +// 使用するメモリをロード +ret = wc_LoadStaticMemory(&hint, memory, memorySz, flag, 0); +if (ret != SSL_SUCCESS) { + // エラーケースを処理 +} + +ret = wc_InitRng_ex(&rng, hint, 0); +// ret値を確認 +``` + +**グローバルヒープヒントを使用する例:** + +```c +WOLFSSL_HEAP_HINT hint; +void* oldHint; +int ret; +unsigned char memory[MAX]; + +// 静的メモリをセットアップ +ret = wc_LoadStaticMemory(&hint, memory, MAX, WOLFMEM_GENERAL, 0); +if (ret != SSL_SUCCESS) { + // エラーケースを処理 +} + +// グローバルヒープヒントとして設定(スレッドセーフではない) +oldHint = wolfSSL_SetGlobalHeapHint(hint); + +// これ以降、すべてのNULLヒープヒント呼び出しはこのグローバルヒントを使用する +// ... wolfSSL関数を使用 ... + +// 完了時に以前のグローバルヒープヒントを復元 +wolfSSL_SetGlobalHeapHint(oldHint); +wc_UnloadStaticMemory(hint); +``` + + +**カスタムバッファサイズを使用する例:** + +```c +WOLFSSL_HEAP_HINT hint; +word32 customSizes[] = {64, 128, 256, 512, 1024}; +word32 customDist[] = {10, 5, 3, 2, 1}; +int requiredSize, ret; +unsigned char memory[MAX]; + +// カスタム設定に必要なバッファサイズを計算 +requiredSize = wolfSSL_StaticBufferSz_ex(5, customSizes, customDist, + NULL, 0, WOLFMEM_GENERAL); +printf("必要なバッファサイズ: %d バイト\n", requiredSize); + +// メモリバッファを割り当て +if (requiredSize <= MAX) { + // カスタムバケット設定で静的メモリをロード + ret = wc_LoadStaticMemory_ex(&hint, 5, customSizes, customDist, + memory, requiredSize, WOLFMEM_GENERAL, 0); + if (ret != SSL_SUCCESS) { + // エラーケースを処理 + } + + // カスタム設定された静的メモリを使用 + // ... ヒントを使用してwolfSSL関数を使用 ... + + // 完了時にクリーンアップ + wc_UnloadStaticMemory(hint); +} + +// パディングオーバーヘッドを計算 +int paddingSize = wolfSSL_MemoryPaddingSz(); +printf("バケットごとのメモリパディング: %d バイト\n", paddingSize); +``` + #### グローバルヒープヒントの設定 関数`void* wolfSSL_SetGlobalHeapHint(void* heap)`を使用して、グローバルヒープヒントを設定できます。 @@ -880,6 +984,48 @@ ret = wolfSSL_CTX_load_static_memory( この機能はwolfSSL 5.7.0で追加されました。 +#### デバッグメモリコールバック + +`WOLFSSL_STATIC_MEMORY_DEBUG_CALLBACK`ビルドオプションを使用して静的メモリ割り当てを使用する場合、`void wolfSSL_SetDebugMemoryCb(DebugMemoryCb cb)`を使用してデバッグコールバック関数を設定できます。 +このコールバックはメモリの割り当てと解放操作中に呼び出され、メモリ使用に関するデバッグ情報を提供します。 + +コールバック関数のシグネチャは次のとおりです。 + +```c +typedef void (*DebugMemoryCb)(size_t sz, int bucketSz, byte st, int type); +``` + +各パラメータの詳細は次のとおりです。 + +- `sz`: 要求されたサイズ +- `bucketSz`: 使用されたバケットサイズ +- `st`: ステータス(0=割り当て、1=失敗、2=解放、3=初期化) +- `type`: メモリタイプ + +#### 静的メモリのアンロード + +静的メモリ割り当ての使用が終了したら`void wc_UnloadStaticMemory(WOLFSSL_HEAP_HINT* heap)`を呼び出して、静的メモリヒープと関連するミューテックスを適切に解放する必要があります。 +これにより、リソースの適切なクリーンアップが保証されます。 + +#### 高度な静的バッファサイズの計算 + +関数`int wolfSSL_StaticBufferSz_ex(unsigned int listSz, const word32 *sizeList, const word32 *distList, byte* buffer, word32 sz, int flag)`は、提供されたバケットサイズと分布に基づいて、特定のバッファのうちどれだけが静的メモリ割り当てに効果的に使用できるかを計算する事前割り当て計画ツールです。 +使用できない余剰スペースを除いた、完全なバケットに適合するバッファの使用可能な部分を返します。 +静的メモリプールのサイジングとチューニングを行うことで利用効率を最大化し、全体的なメモリ使用量を削減するのに役立ちます。 + +各パラメータの詳細は次のとおりです。 + +- `listSz`: リスト内のバケットサイズの数 +- `sizeList`: バケットサイズの配列 +- `distList`: 各バケットサイズの分布カウントの配列 +- `buffer`: テストするバッファ(計算のみの場合はNULLも可) +- `sz`: バッファのサイズ +- `flag`: メモリフラグ(WOLFMEM_GENERAL、WOLFMEM_IO_POOLなど) + +#### メモリパディングの計算 + +関数`int wolfSSL_MemoryPaddingSz(void)`は、アライメントパディングを含む、各メモリバケットに必要な管理メモリのサイズを計算します。これは、静的メモリ割り当てのオーバーヘッドを理解し、正確なメモリ計画を立てるのに役立ちます。 + ### 静的バッファ確保の調整 wolfSSLで提供しているこの静的バッファ確保機能では、指定されたバッファを次の図のように複数の「バケット(bucket)」という領域に分けて管理します。 @@ -1065,7 +1211,14 @@ DTLSサーバー用 |[`wolfSSL_CTX_is_static_memory`](group__Memory.md#function-wolfSSL_CTX_is_static_memory)| 静的バッファ確保が設定されているかと、設定されている場合にはその使用状況を取得します。 | |[`wolfSSL_is_static_memory`](group__Memory.md#function-wolfSSL_is_static_memory)| 静的バッファ確保が設定されているかと、設定されている場合にはその使用状況を取得します。 | |[`wc_LoadStaticMemory`](group__Memory.md#function-wc_LoadStaticMemory)| wolfCrypt用に静的メモリを確保するために使用されます。| +|[`wc_LoadStaticMemory_ex`](group__Memory.md#function-wc_LoadStaticMemory_ex)| カスタムバケットサイズと分布でwolfCryptで使用する静的メモリを確保するために使用されます。 | +|[`wolfSSL_SetGlobalHeapHint`](group__Memory.md#function-wolfSSL_SetGlobalHeapHint)| メモリ割り当て関数にNULLヒープヒントが渡されたときに使用されるグローバルヒープヒントを設定します。以前のグローバルヒープヒントを返します。 | +|[`wolfSSL_GetGlobalHeapHint`](group__Memory.md#function-wolfSSL_GetGlobalHeapHint)| メモリ割り当て関数にNULLヒープヒントが渡されたときに使用される現在のグローバルヒープヒントを取得します。 | +|[`wolfSSL_SetDebugMemoryCb`](group__Memory.md#function-wolfSSL_SetDebugMemoryCb)| 静的メモリ割り当て追跡用のデバッグコールバック関数を設定します。WOLFSSL_STATIC_MEMORY_DEBUG_CALLBACKビルドオプションと共に使用されます。 | +|[`wc_UnloadStaticMemory`](group__Memory.md#function-wc_UnloadStaticMemory)| 静的メモリヒープと関連するミューテックスを解放します。静的メモリ割り当ての使用が終了したときに呼び出す必要があります。 | |[`wolfSSL_StaticBufferSz`](group__Memory.md#function-wolfssl_staticbuffersz)| `/wolfssl/wolfcrypt/memory.h`で定義されたマクロに基づいて、静的バッファ確保に必要なバッファサイズを計算します。 | +|[`wolfSSL_StaticBufferSz_ex`](group__Memory.md#function-wolfSSL_StaticBufferSz_ex)| カスタムバケットサイズと分布を使用した静的メモリ割り当てに必要なバッファサイズを計算します。 | +|[`wolfSSL_MemoryPaddingSz`](group__Memory.md#function-wolfSSL_MemoryPaddingSz)| アライメントパディングを含む、各メモリバケットに必要な管理メモリのサイズを計算します。 | ## 圧縮 @@ -1148,9 +1301,9 @@ wolfSSL_CTX_load_verify_locations(ctx, caCert, 0); [`wolfSSL_CTX_set_verify()`](group__Setup.md#function-wolfssl_ctx_set_verify)のその他のオプションには、`SSL_VERIFY_NONE`および`SSL_VERIFY_CLIENT_ONCE`があります。 ```c -wolfSSL_CTX_set_verify(ctx,SSL_VERIFY_PEER | ((usePskPlus)? +wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | (usePskPlus ? SSL_VERIFY_FAIL_EXCEPT_PSK : - SSL_VERIFY_FAIL_IF_NO_PEER_CERT),0); + SSL_VERIFY_FAIL_IF_NO_PEER_CERT), 0); ``` クライアント認証の例は、wolfSSLリポジトリに含まれるサンプルサーバー(`server.c`)(`/examples/server/server.c`)で提供しています。 @@ -1221,50 +1374,6 @@ wolfSSLで短縮HMACを有効にするには、次のようにします。 ./configure --enable-tlsx ``` -## ユーザー暗号モジュール - -ユーザー暗号モジュールでは、サポートされている処理の実行中に、ユーザーが使用したいカスタム暗号をプラグインできます。 -(現在はRSA操作をサポートしています。) -モジュールの例は、IPPライブラリを使用した`wolfssl/wolfcrypt/user-crypto/`ディレクトリにあります。 -ユーザー暗号モジュールを有効にしてwolfSSLをビルドするには、次のようにします。 - -```sh -./configure --with-user-crypto -``` - -特定のディレクトリを指定するには、次のようにします。 - -```sh -./configure --with-user-crypto=/dir/to -``` - -RSA操作を実行するユーザー暗号モジュールを作成する場合、RSA用のヘッダーファイル`user_rsa.h`が必須です。 -すべてのユーザー暗号操作では、ユーザーのライブラリが`libusercrypto`と命名されていることが必須条件です。 -これらは、wolfSSL autoconfツールがユーザー暗号モジュールをリンクして使用する際に探す名前です。 -wolfSSLで提供している実装例では、ヘッダーファイル`user_rsa.h`は`wolfcrypt/user-crypto/include/`ディレクトリにあり、作成後のライブラリは`wolfcrypt/user-crypto/lib/`ディレクトリにあります。 -必要なAPIのリストについては、提供されているヘッダーファイルをご参照ください。 - -IPPライブラリをインストールした後、実装例をビルドするには、wolfSSLのルートディレクトリから次のコマンドを実行する必要があります。 - -```sh -cd wolfcrypt/user-crypto/ -./autogen.sh -./configure -make -sudo make install -``` - -wolfSSLに含まれる例ではIPPの使用が必要であり、プロジェクトをビルドする前にIPPライブラリをインストールする必要があります。 -IPPライブラリがなくても実装例をビルドすることはできますが、あくまでファイル名の選択とAPIインターフェースの例を提供することを目的としています。 -ライブラリ`libusercrypto`とヘッダーファイルの両方を作成してインストールした後、wolfSSLに暗号モジュールを使用させるには追加の手順は必要ありません。 -単に[`--with-user-crypto`](chapter02.md#--with-user-crypto)設定フラグを使用するだけで、通常のwolfSSL暗号からユーザー暗号モジュールへのすべての関数呼び出しがマッピングされます。 - -wolfSSLの`XMALLOC`を使用してメモリ割り当てを行う場合は、`DYNAMIC_TYPE_USER_CRYPTO`でタグ付けする必要があります。 -これにより、モジュールによって使用されるメモリ割り当ての分析が可能になります。 - -ユーザー暗号モジュールは、wolfSSLのconfigureオプション`fast-rsa`や`fips`と**一緒に**使用することはできません。 -FIPSは特定の認証済みコードの使用を要求し、fast-rsaはRSA操作を実行するためのサンプルユーザー暗号モジュールを使用します。 - ## wolfSSLのタイミング耐性 wolfSSLは、潜在的にリークタイミング情報を漏らす可能性のある比較操作を行うときに一定の時間を保証する関数`ConstantCompare`を提供します。 diff --git a/wolfSSL/src-ja/chapter06.md b/wolfSSL/src-ja/chapter06.md index 371e55ef..f6a95cf6 100644 --- a/wolfSSL/src-ja/chapter06.md +++ b/wolfSSL/src-ja/chapter06.md @@ -145,6 +145,7 @@ wolfSSLは、SSL/TLS接続中にDH、ECC、Ed25519、X25519、Ed448、X448、お wolfSSLは、SSL/TLS接続中にDH鍵生成と鍵合意操作をより詳細に制御したいユーザー向けにDH(Diffie-Hellman)コールバックを提供します。 ユーザーはオプションで2つの関数を定義できます。 + 1. DH鍵生成コールバック 2. DH鍵合意コールバック @@ -179,6 +180,7 @@ DHコールバックを使用するには、wolfSSLを`HAVE_DH`を定義して wolfSSLは、SSL/TLS接続中にEd25519署名/検証操作をより詳細に制御したいユーザー向けにEd25519コールバックを提供します。 ユーザーはオプションで2つの関数を定義できます。 + 1. Ed25519署名コールバック 2. Ed25519検証コールバック @@ -218,6 +220,7 @@ Ed25519コールバックを使用するには、wolfSSLを`HAVE_PK_CALLBACKS` wolfSSLは、SSL/TLS接続中にX25519鍵生成と共有秘密計算をより詳細に制御したいユーザー向けにX25519コールバックを提供します。 ユーザーはオプションで2つの関数を定義できます。 + 1. X25519鍵生成コールバック 2. X25519共有秘密コールバック @@ -254,6 +257,7 @@ X25519コールバックを使用するには、wolfSSLを`HAVE_PK_CALLBACKS`と wolfSSLは、SSL/TLS接続中にEd448署名/検証操作をより詳細に制御したいユーザー向けにEd448コールバックを提供します。 ユーザーはオプションで2つの関数を定義できます。 + 1. Ed448署名コールバック 2. Ed448検証コールバック @@ -293,6 +297,7 @@ Ed448コールバックを使用するには、wolfSSLを`HAVE_PK_CALLBACKS`と` wolfSSLは、SSL/TLS接続中にX448鍵生成と共有秘密操作をより詳細に制御したいユーザー向けにX448コールバックを提供します。 ユーザーはオプションで2つの関数を定義できます。 + 1. X448鍵生成コールバック 2. X448共有秘密コールバック @@ -329,6 +334,7 @@ X448コールバックを使用するには、wolfSSLを`HAVE_PK_CALLBACKS`と`H wolfSSLは、SSL/TLS接続中にRSA PSS署名/検証操作をより詳細に制御したいユーザー向けにRSA PSSコールバックを提供します。 ユーザーはオプションで4つの関数を定義できます。 + 1. RSA PSS署名コールバック 2. RSA PSS検証コールバック 3. RSA PSS署名チェックコールバック @@ -479,7 +485,7 @@ wolfSSL/wolfCryptの暗号コールバックフレームワークは、ユーザ #### 1. 暗号コールバックサポート付きでwolfSSLをコンパイルする -暗号コールバックのサポートは、`–enable-cryptocb`設定オプション、または`#define WOLF_CRYPTO_CB`を使用して有効にできます。 +暗号コールバックのサポートは、`--enable-cryptocb`設定オプション、または`#define WOLF_CRYPTO_CB`を使用して有効にできます。 #### 2. コールバックと一意のdevIDをwolfCryptに登録する diff --git a/wolfSSL/src-ja/chapter09.md b/wolfSSL/src-ja/chapter09.md index abebefce..19750766 100644 --- a/wolfSSL/src-ja/chapter09.md +++ b/wolfSSL/src-ja/chapter09.md @@ -66,7 +66,7 @@ wolfSSLはスレッドセーフとなるよう設計しています。 wolfSSLは、入力と出力に動的バッファを使用しています。 これらはデフォルトで0バイトであり、`wolfssl/internal.h`の`RECORD_SIZE`定義によって制御されます。 静的バッファよりも大きな入力レコードを受信した場合、一時的に動的バッファが使用され、その後解放されます。 -静的バッファサイズは`MAX_RECORD_SIZE`(2^16または16,384)にて設定できます。 +静的バッファサイズは`MAX_RECORD_SIZE`(2^14または16,384)にて設定できます。 以前のwolfSSLの動作方法(動的メモリを必要としない16Kbの静的バッファ)を希望する場合は、`LARGE_STATIC_BUFFERS`を定義することで、その動作を引き続き使用できます。 diff --git a/wolfSSL/src-ja/chapter10.md b/wolfSSL/src-ja/chapter10.md index 4251fed8..09dba435 100644 --- a/wolfSSL/src-ja/chapter10.md +++ b/wolfSSL/src-ja/chapter10.md @@ -321,8 +321,7 @@ CBC暗号化/復号は[`wc_CamelliaCbcEnrypt()`](group__Camellia.md#function-wc_ **注意**:ARC4は古く、安全でないと考えられています。 他のストリーム暗号を使用してください。 -当時、インターネットで最も一般的に使用されるストリーム暗号はARC4でした。 -wolfCryptはヘッダー`wolfssl/wolfcrypt/arc4.h`を通じてそれをサポートしています。 +wolfCryptはヘッダー`wolfssl/wolfcrypt/arc4.h`を通じてARC4をサポートしています。 ブロックサイズがなく、鍵の長さも任意の長さにできるため、使用方法はブロック暗号よりも簡単です。 以下はARC4の典型的な使用方法です。 diff --git a/wolfSSL/src-ja/chapter11.md b/wolfSSL/src-ja/chapter11.md index 5959b260..d8bf78a8 100644 --- a/wolfSSL/src-ja/chapter11.md +++ b/wolfSSL/src-ja/chapter11.md @@ -316,7 +316,7 @@ echoclientがechoserverに接続するとき、サーバーの識別情報を確 パス値はPEM形式のCA証明書を含むべきディレクトリを指します。 証明書を検索するとき、wolfSSLはパスの場所を見る前に証明書ファイルの値を調べます。 この場合、1つのCAファイルを指定するためパスを指定する必要はありません。 -したがって、パス引数には0を使用します。 +したがって、パス引数には`NULL`を使用します。 [`wolfSSL_CTX_load_verify_locations`](group__CertsKeys.md#function-wolfssl_ctx_load_verify_locations)関数は`SSL_SUCCESS`または`SSL_FAILURE`のいずれかを返します。 ```c @@ -340,10 +340,10 @@ if ( (ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method())) == NULL) { } /* Load CA certificates into WOLFSSL_CTX */ -if (wolfSSL_CTX_load_verify_locations(ctx,"../certs/ca-cert.pem",0) != +if (wolfSSL_CTX_load_verify_locations(ctx, "../certs/ca-cert.pem", NULL) != SSL_SUCCESS) { - fprintf(stderr, "Error loading ../certs/ca-cert.pem, please check" - "the file.\n"); + fprintf(stderr, "Error loading ../certs/ca-cert.pem, " + "please check the file.\n"); exit(EXIT_FAILURE); } ``` @@ -367,7 +367,7 @@ if ( (ctx = wolfSSL_CTX_new(wolfTLSv1_2_server_method())) == NULL) { } /* Load CA certificates into WOLFSSL_CTX */ -if (wolfSSL_CTX_load_verify_locations(ctx, "../certs/ca-cert.pem", 0) != +if (wolfSSL_CTX_load_verify_locations(ctx, "../certs/ca-cert.pem", NULL) != SSL_SUCCESS) { fprintf(stderr, "Error loading ../certs/ca-cert.pem, " "please check the file.\n"); @@ -375,7 +375,7 @@ if (wolfSSL_CTX_load_verify_locations(ctx, "../certs/ca-cert.pem", 0) != } /* Load server certificates into WOLFSSL_CTX */ -if (wolfSSL_CTX_use_certificate_file(ctx,"../certs/server-cert.pem", +if (wolfSSL_CTX_use_certificate_file(ctx, "../certs/server-cert.pem", SSL_FILETYPE_PEM) != SSL_SUCCESS) { fprintf(stderr, "Error loading ../certs/server-cert.pem, please" "check the file.\n"); @@ -383,7 +383,7 @@ if (wolfSSL_CTX_use_certificate_file(ctx,"../certs/server-cert.pem", } /* Load keys */ -if (wolfSSL_CTX_use_PrivateKey_file(ctx,"../certs/server-key.pem", +if (wolfSSL_CTX_use_PrivateKey_file(ctx, "../certs/server-key.pem", SSL_FILETYPE_PEM) != SSL_SUCCESS) { fprintf(stderr, "Error loading ../certs/server-key.pem, please check" "the file.\n"); @@ -408,11 +408,11 @@ wolfSSL_Cleanup(); ### EchoClient TCP接続の後に`WOLFSSL`オブジェクトを作成し、ソケットファイルディスクリプタをセッションに関連付ける必要があります。 -echoclientの実装例では、以下に示す`Connect()`の呼び出しの後にこれを行います。 +echoclientの実装例では、以下に示す`connect()`の呼び出しの後にこれを行います。 ```c /* Connect to socket file descriptor */ -Connect(sockfd, (SA *) &servaddr, sizeof(servaddr)); +connect(sockfd, (SA *) &servaddr, sizeof(servaddr)); ``` 接続直後に、[`wolfSSL_new()`](group__Setup.md#function-wolfssl_new)関数を使用して新しい`WOLFSSL`オブジェクトを作成します。 diff --git a/wolfSSL/src/chapter02.md b/wolfSSL/src/chapter02.md index 5556a087..7d235a39 100644 --- a/wolfSSL/src/chapter02.md +++ b/wolfSSL/src/chapter02.md @@ -2451,7 +2451,7 @@ Enabling this option will turn on User Atomic Record Layer Processing callbacks. Enable Public Key Callbacks -Eabling this option will turn on Public Key callbacks, allowing the application to register its own ECC sign/verify and RSA sign/verify and encrypt/decrypt callbacks. +Enabling this option will turn on Public Key callbacks, allowing the application to register its own ECC sign/verify and RSA sign/verify and encrypt/decrypt callbacks. ### `--enable-sniffer`