diff --git a/wolfSSL-Tuning/Makefile b/wolfSSL-Tuning/Makefile index b4995ce4..adbd1f99 100644 --- a/wolfSSL-Tuning/Makefile +++ b/wolfSSL-Tuning/Makefile @@ -8,7 +8,12 @@ SOURCES = section01.md \ section03.md \ section04.md -PDF = wolfSSL-Tuning-Guide.pdf +ifeq ($(DOC_LANG),JA) + PDF = wolfSSL-Tuning-Guide-jp.pdf +else + PDF = wolfSSL-Tuning-Guide.pdf +endif + DOXYFILE = Doxyfile diff --git a/wolfSSL-Tuning/mkdocs-ja.yml b/wolfSSL-Tuning/mkdocs-ja.yml new file mode 100644 index 00000000..cc90b8f6 --- /dev/null +++ b/wolfSSL-Tuning/mkdocs-ja.yml @@ -0,0 +1,27 @@ +site_name: wolfSSL チューニングガイド +site_url: https://wolfssl.com/ +docs_dir: build/html/ +site_dir: html/ +copyright: Copyright © 2024 wolfSSL Inc. +nav: + - "1. イントロダクション": index.md + - "2. 考慮事項": section02.md + - "3. レシピ": section03.md + - "4. 追加情報": section04.md +theme: + name: null + custom_dir: ../mkdocs-material/material + language: ja + palette: + primary: indigo + accent: indigo + font: + text: roboto + code: roboto mono + icon: "logo.png" + logo: logo.png + favicon: logo.png + feature: + tabs: true +extra_css: [skin.css] +use_directory_urls: false diff --git a/wolfSSL-Tuning/src-ja/section01.md b/wolfSSL-Tuning/src-ja/section01.md new file mode 100644 index 00000000..5d9ea0e7 --- /dev/null +++ b/wolfSSL-Tuning/src-ja/section01.md @@ -0,0 +1,16 @@ +# イントロダクション + +このガイドは、wolfSSL組み込みSSL/TLSライブラリのパフォーマンスとメモリ使用量を調整および最適化するためのリファレンスをエンジニアのみなさまに提供します。 +「ガイド」として考慮されるべきものであり、今後も随時更新します。 +何か不足していると感じた場合は、ぜひお知らせください。 +より使いやすくすることも、wolfSSLの主な目標の1つです。 + +## 対象読者 + +このガイドは、wolfSSL組み込みSSL/TLSライブラリのパフォーマンスとメモリ使用量を最適化することに関心のあるエンジニアを対象としています。 + +## 概要 + +wolfSSLチューニングガイドは、wolfSSL組み込みSSL/TLSライブラリのパフォーマンスとメモリ使用量を最適化するために設計されています。 +このドキュメントは、さまざまな環境に適応できるように包括的なガイドと説明を提供することを目的としています。 +このガイドは、メモリフットプリント、パフォーマンス、およびセキュリティを特定の要件に応じて調整することで、SSL/TLS処理の効率を高めることに関心のある開発者を対象としています。 diff --git a/wolfSSL-Tuning/src-ja/section02.md b/wolfSSL-Tuning/src-ja/section02.md new file mode 100644 index 00000000..87a4cb10 --- /dev/null +++ b/wolfSSL-Tuning/src-ja/section02.md @@ -0,0 +1,66 @@ +# 考慮事項 + +## 予想される要件 + +wolfSSLを環境に最適化する最初のステップは、予想される要件を文書化することです。 +最高レベルでは、SSL/TLSの設計目標は通常以下に集約されます: + +- **メモリフットプリント(ROM)** +- **セッションごとのメモリ使用量(RAM)** +- **SSLハンドシェイクのパフォーマンス** +- **データフローパフォーマンス(大量データ転送)** +- **望ましいセキュリティレベル(以下の図1を参照)** + +## 望ましいセキュリティレベル + +| セキュリティレベル | レベル名 | 説明 | +|------------------|---------------------|---------------------------------------------------------| +| 1 | 緩やか | カジュアルな覗き見を防ぐことができればよい | +| 2 | 適度 | 攻撃者が存在するが、彼らはそこまで高いモチベーションがない | +| 3 | 企業向け | プロフェッショナルな攻撃に対して安全 | +| 4 | 軍用グレード | 軍事レベルの保護 | +| 5 | 量子コンピュータ耐性 | 量子コンピュータによる攻撃に耐えることができる | + +**図1:望ましいセキュリティレベル** + +これらのトップレベルの目標の各々は、設計を進める中で他の目標とトレードオフが発生します。 + +あらかじめ定義する必要のある重要な変数は次のとおりです: + +1. 利用可能なハードウェア: + a. SSL/TLSに利用可能なメモリ(ROM / RAM) + b. CPUの種類とクロック速度 +2. 必要なSSL/TLSプロトコルレベル(例:TLS 1.0、TLS 1.1、TLS 1.2など) +3. 必要な暗号スイート。要件に暗号スイートが定義されていない場合は、パフォーマンス目標に合った暗号スイートを自由に選択できます: + a. 公開鍵アルゴリズムとキーの長さ(RSA、ECC、NTRU、PSKなど) + b. ブロック / ストリーム暗号(AES、DES、3DES、RC4、HC-128など) + c. ハッシュ関数(SHA、SHA2、MD5、Blake2bなど) +4. 接続のどちら側にいるか:クライアント、サーバー、またはその両方? +5. クライアント認証? +6. SSL接続の反対側は定義されていますか? + a. どのSSL実装を使用していますか? + b. どのSSL/TLSプロトコルバージョンですか? + c. キーの長さは? + d. クライアントまたはサーバーですか? +7. 一度に必要なアクティブなSSL/TLS接続/セッションの最大数は? +8. SSLハンドシェイクのパフォーマンス要件は? +9. SSLハンドシェイク完了後の大量データ転送のパフォーマンス要件は? +10. ハードウェア暗号化は利用可能ですか?もしそうなら、どの暗号がハードウェアで利用可能ですか? +11. 編集者注:このドキュメントを実用的な範囲内に保つために、オペレーティングシステムとTCP/IPスタックのチューニングについては本ドキュメントのスコープから外しています。 + +上記の変数をすべて考慮すると、多くのことを考慮する必要があることがわかります。 +したがって、このガイドでは参考として3つの最適化レシピを提示します: + +1. 最小フットプリントサイズ(ヒープ、スタック、静的データ、コード)のための最適化 +2. 最高速度を実現するための最適化 +3. 最高のセキュリティ性能を保つための最適化 + +他の最適化レシピも利用可能です。[info@wolfssl.jp](mailto:info@wolfssl.jp) までご連絡ください。 +追加の参考レシピには以下が含まれます: + +1. 大量の接続数に対応するための最適化 +2. 特定のオペレーティングシステム/チップセット環境における最適化 +3. 特定のアプリケーション向けの最適化 +4. 最高のセキュリティと最小のフットプリントの組み合わせなど、複数の目標に向けた最適化 +5. 低消費電力のための最適化 +6. セキュリティレベル1,2のための最適化 \ No newline at end of file diff --git a/wolfSSL-Tuning/src-ja/section03.md b/wolfSSL-Tuning/src-ja/section03.md new file mode 100644 index 00000000..d9c8c64c --- /dev/null +++ b/wolfSSL-Tuning/src-ja/section03.md @@ -0,0 +1,62 @@ +# レシピ + +## レシピ #1 最小フットプリント + +多くのユーザーは、メモリリソースが限られている深く組み込まれたシステムを使用しています。 +このセクションでは、wolfSSLのフットプリントサイズを削減する方法を説明します。 + +1. 必要なプロトコルバージョンのみをサポートするように制限します。たとえば、TLS 1.2接続のみを許可します。 +2. コンパイル時に不要なライブラリ機能を削除します - wolfSSLマニュアルの[2.4.1節](https://www.wolfssl.com/documentation/manuals/jp/wolfssl/chapter02.html#_4)を参照してください。 +3. 限定されたセットの暗号スイートを選択します: + a. RSA、ECC、PSKのメモリ使用量の違い。 + b. 小さい鍵サイズを選択します - wolfSSLマニュアルの[4.3節](https://www.wolfssl.com/documentation/manuals/jp/wolfssl/chapter04.html#_7)を参照してください。 +4. ハードウェア暗号が利用可能であればそれを活用します - wolfSSLマニュアルの[4.4節](https://www.wolfssl.com/documentation/manuals/jp/wolfssl/chapter04.html#_15)を参照してください。 +5. コンパイラとツールチェーンの最適化を利用します。 +6. 接続の両端を制御できる場合は、最大SSLレコードサイズを減らします。 + +## レシピ #2 最高速度 + +接続にSSL/TLSを追加すると、パフォーマンスの低下は避けられません。 +私たちの目標は、そのパフォーマンス低下をできるだけ小さくすることです。 +このセクションでは、ハンドシェイク中およびハンドシェイク後のwolfSSLの速度を向上させる方法を説明します。 + +パフォーマンスに関して懸念される主な分野は2つあります: + +1. SSL/TLSハンドシェイク速度。 +2. データフロー速度(SSLハンドシェイク後の大量データ転送)。 + +SSLハンドシェイクのパフォーマンスを最適化する際に考慮すべき項目は次のとおりです: + +1. より速い数学ライブラリを使用します(big integer vs. fastmath)。 +2. ハードウェア暗号が利用可能であればそれを活用します - wolfSSLマニュアルの[4.4節](https://www.wolfssl.com/documentation/manuals/jp/wolfssl/chapter04.html#_15)を参照してください。 +3. 鍵サイズ - wolfSSLマニュアルの[4章](https://www.wolfssl.com/documentation/manuals/jp/wolfssl/chapter04.html)を参照してください。 +4. 鍵タイプ(例:RSA vs ECC)。 +5. ハンドシェイク速度とセキュリティレベルのトレードオフ(例:クライアント/サーバー証明書検証 - wolfSSLマニュアルの[4.8節](https://www.wolfssl.com/documentation/manuals/jp/wolfssl/chapter04.html#_31)を参照)。 +6. PSK(事前共有鍵)を使用することを検討します - wolfSSLマニュアルの[4.7節](https://www.wolfssl.com/documentation/manuals/jp/wolfssl/chapter04.html#_30)を参照してください。 + +ストリーミングメディア環境での**最大データフロー速度**(例:ビデオゲーム、VoIPアプリケーション、クラウドインフラストラクチャ)では、暗号スイートの選択が重要です。 +このレシピでは、ハードウェア環境や接続数に応じて多くのオプションがあります。 +レシピをシンプルにするために、典型的なクラウドベースのサーバーで動作する単一接続環境に焦点を当てます。 + +最大データフロー速度を最適化する際に考慮すべき項目は次のとおりです: + +1. ストリーム暗号、Rabbit、HC-128など、遅いアルゴリズムよりも速いアルゴリズムを優先する暗号スイートを選択します。 +2. より良いコンパイラの最適化を利用します。(これはユーザーにとって実用的なオプションではないかもしれません) +3. ハードウェア暗号が利用可能であればそれを活用します。 + +## レシピ #3 最高のセキュリティ + +SSL/TLS接続のセキュリティは非常に重要です。 +プロジェクトにSSL/TLSを追加する主な理由は、安全な通信チャネルを確保することだからです。 + +すべての暗号ベースのプロトコルと同様に、新しい攻撃や脆弱性が発見され公開されると、SSL/TLSのセキュリティ推奨事項は変更されることがあります。 +最高のセキュリティを最適化すると、構成に応じてメモリ使用量とパフォーマンスの両方に悪影響を及ぼす可能性があります。 + +1. 現在利用可能な最高の情報に基づいた、暗号スイートの選択。 +2. 現在利用可能な最高の情報に基づいた、鍵サイズの選択。 +3. その他の考慮事項 + +上記の基本レシピからわかるように、SSL/TLSの最適化は複雑な多変量問題であり、初期環境に関するさまざまな前提に大きく依存します。 +wolfSSLチームは、これらの選択に際し多くのお客様にサポートを提供してまいりました。 +シンプルなご質問のほか、短期間のプロフェッショナルデザインコンサルティング、さらにはSSL/TLSプロジェクト全体の実装管理まで、さまざまな方法でサポートいたします。 +ご興味がありましたら、ぜひ info@wolfssl.jp までお問い合わせください。 \ No newline at end of file diff --git a/wolfSSL-Tuning/src-ja/section04.md b/wolfSSL-Tuning/src-ja/section04.md new file mode 100644 index 00000000..07f63552 --- /dev/null +++ b/wolfSSL-Tuning/src-ja/section04.md @@ -0,0 +1,10 @@ +# 追加情報 + +wolfSSLポーティングガイド: [https://wolfssl.jp/docs/](https://wolfssl.jp/docs/#:~:text=%E3%81%99%E3%81%B9%E3%81%8D%E4%BA%8B%E9%A0%85-,wolfSSL%E3%83%9D%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%AC%E3%82%A4%E3%83%89,-%E6%97%A5) + +wolfSSLのダウンロード: [https://wolfssl.jp/download/](https://wolfssl.jp/download/) + +wolfSSLサポートフォーラム(英語): [http://www.wolfssl.com/forums](http://www.wolfssl.com/forums) + +ご不明な点がございましたら、[info@wolfSSL.com](mailto:info@wolfSSL.com)までお問い合わせください。 +導入支援や最適化コンサルティングのご案内も可能です。