
医療機器は、スタンドアロンシステムから、継続的な更新や遠隔診断が可能な接続型プラットフォームへと移行しつつあります。これにより、ハードウェアの制約、長いライフサイクル、そして厳しい規制という条件下において、安全性とサイバーセキュリティに対する要求水準が高まっています。本記事では、業界横断的なベストプラクティスや、ベクター社の安全クリティカルな組込みソフトウェアに関する実績を踏まえ、エンジニアが今すぐ実践できる取り組みに焦点を当てます。
主な課題
- ライフサイクルが長く、更新頻度が高い場合:コンプライアンスの証拠を保持しつつ、10年以上にもわたって安全かつセキュアな更新を維持します。
- 異種プラットフォームとSOUP:混在するツールチェーンやサードパーティ製コードにより、一貫した安全性・セキュリティ対策の実施が複雑化します。
- 接続性と相互運用性:新たな攻撃対象領域と認証の複雑化(例:病院のITシステムやIEC 62443)。
- スキルとツール:暗号技術、セキュアな更新パイプライン、冗長性を持つアーキテクチャにおける高い複雑さ。ツールは、「デフォルトで正しい」状態を実現しやすくする必要があります。
医療技術の標準
- IEC 62304:ソフトウェアのライフサイクル、分類、検証、保守、および問題解決。
- ISO 14971:明確なハザードの特定、リスク管理、および残存リスクを含むリスク管理。
- フレームワーク:IEC 60601-1(基本安全要件/必須性能)、IEC/TR 60601-4-5(IEC 62443:IACSのセキュリティを参照)、およびSBOMと調整された情報開示に関するガイダンス。
安全かつ安心を実現するための実践的なパターン
ロックステッピング
ロックステッピングでは、2つの同一のCPUコアが、同じ命令を同期して実行します。ハードウェアコンパレータが、両方のコアのレジスタや結果を継続的にチェックします。不一致が検出されるとすぐにエラーが報告され、システムは安全状態に移行することができます。これにより、以下の点で安全性に寄与します:
- エラー検出:不一致を検出するための2oo2(2 out of 2)アーキテクチャ。
- エラーへの反応時間の短縮:継続的な比較により、迅速なフェイルサイレントまたはフォールバック動作が可能になります。
- セーフティケースのサポート:ECC保護メモリ、ウォッチドッグ、クロック/電力モニタリング、エンドツーエンド保護と組み合わせることで、コンピューターの演算コア、メモリ、通信にわたる閉じたエラー検出チェーンを確立します。
信頼実行環境
ハードウェアによってサポートされる、システムを「セキュア/トラステッド・ワールド」と「ノーマル・ワールド」に分割するパーティショニングの仕組みです。セキュア・ワールドでは、メモリ、周辺機器、および暗号関連リソースへのアクセスが隔離されており、ノーマル・ワールドとは厳格に分離されています。
- セキュリティ関連の設計要素の保護:セキュリティ要件、キャリブレーション、設定、ステートマシン、およびエラーカウンタは、セキュア・ワールド内に配置することができ、意図しない変更や改ざんから保護されます。
- 無干渉:ハードウェアによる分離(セキュア・ワールドとノーマル・ワールド)は、パーティショニング(MPU/MMU)を補完し、欠陥のあるソフトウェアやセキュリティ対策が不十分なソフトウェアが安全関連領域に影響を及ぼすリスクを削減します。
- 鍵および通信の保護:構成、ログ、および安全上重要なメッセージに対する安全な鍵管理および署名/CMACにより、データの破損や不正な変更の検出精度が向上します。
セキュアな更新
セキュアな更新とは、そのライフサイクル全体を通じて改ざんから保護され、承認されたソースからのみ提供され、セキュリティや機能を損なうことなく適用できるソフトウェア更新のことです。その重要なコンポーネントは以下の通りです:
- 真正性:更新にはデジタル署名(コード署名)が施されており、信頼できるソースからのパッケージのみが受け入れられます。
- 完全性:ハッシュチェックにより、内容が変更されていないことが保証されます。
- 認可とアクセス:役割/権限管理により、承認されたサービス/ユーザーのみが更新を開始できるようにします。
- 機密性と安全な転送:安全な通信経路(例:TLS/mTLS)を介したダウンロード、中間者攻撃に対する保護。
安全な通信
外部または内部からの悪意のある攻撃や偶発的な攻撃から保護します:機密性、完全性、認証、再送信攻撃防止。
- ハードウェア支援による強力な暗号化サービス。
- 送信されるメッセージには、認証情報(例:MAC)および有効期限情報が付加されます。
- TLSなどの暗号化プロトコルを使用します。
安全な通信
制御ユニット内部および制御ユニット間の安全な通信を確保します。外部通信においては、以下の方法によりこれが実現されます:
- データに対するCRC、データID、およびシーケンスカウンタ。これにより、シグナルの破損やなりすましを検出することが可能です。
- シーケンスカウンタにより、メッセージの順序のフォールトや、メッセージの重複・挿入を検出します。
- 受信側でタイマーにより、メッセージの欠落や遅延に対応します。
シフトレフトテスト
シフト・レフト・テストとは、ソフトウェアライフサイクルにおいて、テストや品質保証の活動を可能な限り早い段階、つまり最終段階だけでなく、要件定義、アーキテクチャ、実装の段階に近い時期に実施することを指します。その目的は、以下の実践手法を使用して、迅速なフィードバックを提供し、エラーを早期に検出することにあります:
- 要件およびアーキテクチャの早期レビュー。
- 開発者のワークフローに直接統合された静的解析およびコーディングガイドライン。
- 自動化されたビルド、テスト、品質ゲートを備えた継続的インテグレーション(CI)。
- APIおよび統合テストの早期実施。
業界横断的な教訓
ベクターでは、長年にわたり安全性が極めて重要な組込みソフトウェアの開発に取り組んでおり、世界中のお客様に安全認証を取得したソリューションを提供してまいりました。これには、製品そのものだけでなく、社内で一貫して適用している、堅牢かつ文書化の行き届いた開発および認定プロセスも含まれます。つまり、当社は、安全アプリケーションの開発がいかに複雑で骨の折れる作業であるか、そして同時に不可欠なものであるかを、正確に理解しているのです。
安全対策がしばしば困難である理由――そして、それが必須である理由:
- ハザードおよびリスク分析
- 機能安全コンセプト
- 技術安全コンセプト
- ハードウェアソフトウェアインターフェースの定義
- 定性的および定量的安全分析
- 検証および妥当性確認
- 対象市場に合わせた開発プロセスとワークフロー
こうした活動はすべて必要不可欠ですが、多くの場合、単調で細かくて、労力を要するものです。「楽しみ」でやる人は誰もいません。しかし、これらを過小評価すると、後のアーキテクチャ設計、実装、認証の段階で、多大なコストを伴う手直しが必要になるリスクがあります。まさにここで、当社のツールや製品が役立ちます。それらは複雑さを削減し、手順を標準化し、困難な部分を管理しやすいものにしてくれるのです。
実例:マルチコア組み込みシステムにおける安全性は、今日では標準となっていますが、特に以下の点で課題となっています:
- 各コアは、決定論的かつ再現性があり、副作用のない状態で一貫して動作しなければなりません。
- メモリアクセスは、誤ったリソースをターゲットにしてはなりません。無効なポインタや、パーティション間の干渉は許されません。
- コア間の通信は、効率的でありながらコントロールされ、安全基準に準拠していなければなりません。適切なベーシックソフトウェアがなければ、これを実現するには、アーキテクチャ、構成、テスト、および検証において極めて厳格な管理が求められます。
ベーシックソフトウェアが、安全関連の開発をいかに著しく容易にするか:
- 混在システムにおいて無干渉の環境を実現し、同一の制御ユニット上で安全関連および非安全関連のソフトウェアコンポーネントを干渉なく実行できるようにします
- これにより、リスクが削減され、無干渉であることが証明され、アーキテクチャ設計やテストにかかる時間を節約できます。
- 追加の安全要件は、安全かつセキュアな通信など、他のベーシックソフトウェアモジュールにマッピングすることが可能です
- これにより一貫性を作成し、エラーのリスクを最小化することができます。
- マルチコアマイクロコントローラのサポート
- これにより、複数のコアにわたるタスク、リソース、およびメモリ領域の明確な分離がサポートされます。
- 異なるメモリパーティションとマイクロコントローラコア間の相互作用に対する効率的なソリューション
- これにより、最初から無効なアクセスを防止し、安全性を損なうことなくパフォーマンスを確保することができます。
- 公認の標準およびプロセスに従って開発・認証されています
- これにより、認定や監査にかかる労力を削減し、エビデンスの連鎖を強化します。
その効果:すべての構成要素を自ら構築、文書化、保守する代わりに、無干渉、パーティショニング、安全な通信、マルチコア間の連携といった機能を構造的にすでに備えた基盤を統合します。これにより、安全設計に費やす時間は、汎用的なインフラストラクチャから、真にプロジェクト固有のリスクへとシフトすることになります。
マルチコアの例において、それは具体的にどういう意味になるのでしょうか?
- 一貫性のある実行:ベーシックソフトウェアがコアごとにタスクとリソースを調整し、安全関連部分と非安全関連部分が互いに影響を与えないようにします。
- メモリとリソースの保護:明確なパーティション、定義されたハードウェアソフトウェアインターフェース、および検証済みのアクセスパスにより、不正なメモリアクセスを防止します。
- 証拠文書:確立されたモジュールとプロセスにより、検証、妥当性確認、およびセーフティケースの論証にかかる労力が削減されます。これは、多くの要件がすでに基盤によってカバーされており、再利用可能な形で実証できるためです。
- 現在の安全活動(ハザード分析からセーフティケースまで)について、冗長性や手作業の工程がないか解析してください。
- 当初の段階から無干渉とパーティショニングを徹底するためのアーキテクチャおよびプロセスガイドラインを定義してください。
- 特にコンポーネントの分離と安全な通信を目的として、制御ユニット上で当社のベーシックソフトウェアを用いたセットアップを試験的に導入してください。
- 開発期間、テスト工数、および証拠の信頼性への影響を測定し、このアプローチを他のプロジェクトにも拡大してください。
早い段階で構造化を行えば、後々二重の利益が得られます。手戻りが減り、証拠が明確になり、リリースも早まります。今すぐ的を絞ったパイロットプロジェクトを開始し、安全開発をより効率的なレベルへと引き上げましょう。

