考慮事項
予想される要件
wolfSSLを環境に最適化する最初のステップは、予想される要件を文書化することです。 最高レベルでは、SSL/TLSの設計目標は通常以下に集約されます:
- メモリフットプリント(ROM)
- セッションごとのメモリ使用量(RAM)
- SSLハンドシェイクのパフォーマンス
- データフローパフォーマンス(大量データ転送)
- 望ましいセキュリティレベル(以下の図1を参照)
望ましいセキュリティレベル
セキュリティレベル | レベル名 | 説明 |
---|---|---|
1 | 緩やか | カジュアルな覗き見を防ぐことができればよい |
2 | 適度 | 攻撃者が存在するが、彼らはそこまで高いモチベーションがない |
3 | 企業向け | プロフェッショナルな攻撃に対して安全 |
4 | 軍用グレード | 軍事レベルの保護 |
5 | 量子コンピュータ耐性 | 量子コンピュータによる攻撃に耐えることができる |
図1:望ましいセキュリティレベル
これらのトップレベルの目標の各々は、設計を進める中で他の目標とトレードオフが発生します。
あらかじめ定義する必要のある重要な変数は次のとおりです:
- 利用可能なハードウェア: a. SSL/TLSに利用可能なメモリ(ROM / RAM) b. CPUの種類とクロック速度
- 必要なSSL/TLSプロトコルレベル(例:TLS 1.0、TLS 1.1、TLS 1.2など)
- 必要な暗号スイート。要件に暗号スイートが定義されていない場合は、パフォーマンス目標に合った暗号スイートを自由に選択できます: a. 公開鍵アルゴリズムとキーの長さ(RSA、ECC、NTRU、PSKなど) b. ブロック / ストリーム暗号(AES、DES、3DES、RC4、HC-128など) c. ハッシュ関数(SHA、SHA2、MD5、Blake2bなど)
- 接続のどちら側にいるか:クライアント、サーバー、またはその両方?
- クライアント認証?
- SSL接続の反対側は定義されていますか? a. どのSSL実装を使用していますか? b. どのSSL/TLSプロトコルバージョンですか? c. キーの長さは? d. クライアントまたはサーバーですか?
- 一度に必要なアクティブなSSL/TLS接続/セッションの最大数は?
- SSLハンドシェイクのパフォーマンス要件は?
- SSLハンドシェイク完了後の大量データ転送のパフォーマンス要件は?
- ハードウェア暗号化は利用可能ですか?もしそうなら、どの暗号がハードウェアで利用可能ですか?
- 編集者注:このドキュメントを実用的な範囲内に保つために、オペレーティングシステムとTCP/IPスタックのチューニングについては本ドキュメントのスコープから外しています。
上記の変数をすべて考慮すると、多くのことを考慮する必要があることがわかります。 したがって、このガイドでは参考として3つの最適化レシピを提示します:
- 最小フットプリントサイズ(ヒープ、スタック、静的データ、コード)のための最適化
- 最高速度を実現するための最適化
- 最高のセキュリティ性能を保つための最適化
他の最適化レシピも利用可能です。info@wolfssl.jp までご連絡ください。 追加の参考レシピには以下が含まれます:
- 大量の接続数に対応するための最適化
- 特定のオペレーティングシステム/チップセット環境における最適化
- 特定のアプリケーション向けの最適化
- 最高のセキュリティと最小のフットプリントの組み合わせなど、複数の目標に向けた最適化
- 低消費電力のための最適化
- セキュリティレベル1,2のための最適化