wolfSSL製品には、それぞれ特定の目標と目的を持ついくつかのソフトウェアモジュールとコンポーネントが存在します。すべてのソフトウェア製品は、開発プロセスにおいて、要求される品質基準を使用し設計されていることを確認しています。ソフトウェアのライフタイム内の各ステップでは、コードの欠陥とリグレッションを非常に早期に検出できるよう、厳格なルールとテスト基準(厳格なファズベースのテストを含む)が課されています。
ソフトウェア開発プロセスの概要
ソフトウェアエンジニアリングの観点から、wolfSSLソフトウェアコンポーネントの設計と開発のライフサイクルは、次の3つのステップで構成されています:
- ソフトウェア要件と仕様の特定と分析
- API指向のソフトウェア設計
- ソフトウェアモジュールの開発
次に、各ステップは、次のような特定の品質管理手順のセットを通じて検証されます。
- ユニットテストと定期的なカバレッジ分析
- API整合性テスト
- 複数のアーキテクチャ/コンパイラでの統合テストと、コンパイル時の構成オプションのユースケース/組み合わせ
- 他の実装に対する相互運用性テスト
- 正式なアルゴリズムとモジュールの検証
- ファジングテスト
コードの安全性を向上させ、潜在的な欠陥や誤動作を検出するために、追加の品質管理をソフトウェアモジュールに定期的に適用しています。特に、静的アナライザー、動的メモリ診断ツール、ファザーなどのツールは常に追加しています。
GPLライセンスでソースコードを配布し、開発プロセス全体をGitHubプラットフォームで公開することで、プロジェクトに関心のある何百人ものユーザー、寄稿者、およびプロジェクトに関心をよせる人々は、コードのすべての変更と、コードレビュー中に生成される会話を常に認識できます。企業のセキュリティ組織、サイバーセキュリティパートナー、および学術研究者は、新しい脆弱性を絶えず調査し、コードの作成中に特定するのが難しい、可能性のある潜在的な攻撃対象領域を注意深く調査することにより非常に貴重な貢献をしています。 wolfSSL Inc.は脆弱性管理を真剣に受け止めており、緊急修正や迅速なリリースの場合に実行する正確で詳細なチェックリストを備えています。
仕様は絶えず変化するため、ソフトウェア設計プロセスは、アルゴリズムの実装、使用上の推奨事項、および安全なプロトコルとメカニズムを実装するためのガイドラインの更新に対応できる柔軟性を備えている必要があります。
NISTは、「Special Publications」(SP)を通じて仕様とガイドラインを配布しています。 NISTの一部として、業界団体、政府機関、学術機関の協力により、National Cybersecurity Center of Excellence(NCCoE)が設立されました。 IETFと同様に、NISTは、ガイドラインを最新の状態に保つために、以前の出版物に対する頻繁な更新と修正をリリースするアプローチをとっています。 NIST内のガイドラインを更新するプロセスは、「NIST暗号化標準およびガイドライン開発プロセス」(NIST.IR.7977)によって規制されています。 wolfCryptの暗号化関数は、アルゴリズムとその実装プロセスに関するNISTの最新の仕様に従います。後で説明するように、NISTの出版物とソフトウェアツール群は、アルゴリズムとモジュールの検証フェーズで重要な役割を果たします。
wolfMQTTは、OASISによって提供された仕様に基づいて実装され、最初は2015年12月に承認されたMQTTバージョン3.1.1を対象としています。その後、wolfMQTTは、2019年3月に最新のMQTT標準として承認されたOASISMQTTバージョン5.0の仕様をサポートするように進化しました。
ソフトウエア要求仕様と機能仕様
暗号化、安全な通信プロトコル、および安全なファームウェア更新メカニズムの実装に関するガイドラインは、オープンスタンダードとして記述されています。 これらの標準は、いくつかの組織によって維持および文書化されています。 wolfSSLソフトウェアプロジェクトは、次の3つの主要な組織から仕様書をインポートしています:
- IETF(インターネット技術特別調査委員会)は、インターネットプロトコルスタックのドキュメントの公開と更新を担当するエンジニアの大規模なオープン国際コミュニティです。現在では、暗号スイートで使用される安全な通信プロトコルとアルゴリズムも含まれています。
- NIST(米国国立標準技術研究所)は、プロセス、モジュール、およびアルゴリズムのガイドラインを提供し、暗号化のベストプラクティスとして世界的に認められています。
- OASIS(構造化情報標準の進歩のための組織)は、IoTとデータ交換のためのオープンスタンダードの開発に取り組んでいる、グローバルな非営利コンソーシアムです。
IETFは、「Request for Comments」(RFC)の形式で新しい仕様をリリースします。これらは個別に番号が付けられた出版物であり、ピアレビュープロセスの後に発行されます。これには多くの場合、複数のドラフトフェーズが必要です。 RFCに一意の番号が割り当てられると、RFCが再度変更されることはありません。 RFCで公開されている標準トラックを更新するために、以前に公開された既存のRFCの修正、訂正、または置換を含む可能性のある新しいRFCを発行することができます。新しいRFCは、古いRFCを廃止または非推奨にすることで、古いRFCに取って代わることができます。 RFCは、TLSプロトコル標準(RFC8446)、DTLS(RFC6347)、TLS拡張(RFC6066)など、wolfSSL通信モジュールの大部分の仕様をカバーしています。 wolfCryptライブラリは、RSA公開鍵暗号化(RFC8017)、またはAEAD用のChaCha20 / Poly1305(RFC8439)など、サポートされているアルゴリズムに基づく暗号化プリミティブの実装に関する推奨事項に従います。 wolfSSHは、RFC4250-RFC4254シリーズの仕様に基づいて設計および開発しており、提案されたインターネット標準としてSSH-2を文書化しています。 wolfBootは当初、draft-ietf-suit-architectureのガイドラインに従って設計および開発しました。このガイドラインは後にRFC9019になりました。
ソフトウエアデザイン
wolfSSLが開発したソフトウェアコンポーネントのほとんどは、API指向の設計に基づいた構造化ライブラリです。関数がAPIの一部になると、関数のシグネチャ、目的、または戻り値の意味が変更されることはありません。これにより、ライブラリのさまざまなバージョン間での互換性が保証されます。機能が追加になると、新しいAPI関数が作成されます。この関数は、違う引数を受け入れるか、特定のインターフェイスを拡張します。 API関数呼び出しは、モジュールのユーザーマニュアルに正式に記載されています。
設計段階で覚えておくべき最も重要な側面の1つは、APIのさまざまなレイヤーにわたるエラーコードの正しい意味、伝播、および検証です。各エラーコードには、マニュアルで説明されている固有の明確な意味があります。これにより、ライブラリを使用するアプリケーションの実行時エラーの識別が容易になります。
暗号化と安全なプロトコルに関する仕様は動的に変化するのが常なので、設計プロセスもそれに応じて適応する必要があります。新しい仕様が分析され、既存のモジュールアーキテクチャに統合されます。これにより、既存のAPI関数シグネチャが時間内に不変に保たれるため、既存の機能が損なわれることはありません。
ソフトウエア開発とトレーサビリティ
wolfSSLのすべてのソフトウェアは、一元化されたgitメインラインリポジトリを介して、継続的インテグレーションの実践に従って開発および保守しています。
すべてのソースコードは公開しており、GPLライセンスで、開発中いつでもアクセスできます。 wolfSSL製品のソフトウェアコンポーネントのライフサイクルは、一般的なオープンソース開発プロセスとは異なり、変更された条件決定カバレッジ(MC / DC)プロセスに準拠するように設計されています。 wolfSSLはコードベース全体を所有および維持します。つまり、メインラインの変更と更新に関して厳格なルールがあります。リポジトリへの変更は、変更がマスターブランチにマージされる前に厳格なピアレビューポリシーに準拠する必要があり、wolfSSLエンジニアによってのみ許可されます。
wolfSSLリポジトリに寄稿するには、開発者はGitHubを介して「プルリクエスト」を送信する必要があります。次に、リクエストは1人以上のwolfSSLエンジニアがレビューします(パッチのサイズ、影響、および性質によって異なります)。これにより、多くの場合、コードのマージが受け入れられる前に、設計ドキュメントの目的との整合性、コードの変更、再適応、および改善が要求されます。承認された寄稿者のみが、レビューのためにコードを送信できるようになっています。wolfSSLエンジニアリングチーム外の寄稿者は、寄稿コードの追加検討に入る前に、事前にその承認が取れている必要があります。
ご質問は、info@wolfssl.jpまでお問い合わせください。テクニカルサポートについては、support@wolfssl.comにお問い合わせください。
原文:https://www.wolfssl.com/wolfssl-software-development-process/