Main Content

分散型ウォーターマーキングを使用した DC マイクログリッドでのリプレイ攻撃の検出

この例では、分散型ウォーターマーキングを使用してサイバーフィジカル システム (CPS) でのリプレイ攻撃を検出する方法を説明します。DC マイクログリッド (DCmG) とは、物理システムを表す分散型発電ユニット (DGU) の相互接続されたシステムであり、複数のユニットでの負荷共有を担う電流コンセンサス ループを使用して制御されます。

DCmG.png

このアーキテクチャでは、各 DGU の通信に線電流が必要です。通信チャネルは攻撃を受けやすく、偽の情報が挿入されたり、中央の電流コンセンサス ループの動作が改変されたりするおそれがあります。そのような攻撃の 1 つがリプレイ攻撃であり、通信チャネルの信号を遅らせるものです。

DC マイクログリッド モデル

この例の DCmG は、Average-Value DC-DC Converter (Simscape Electrical)ブロックを使用してモデル化された 2 つの分散型発電ユニットを接続して構成されています。

Modified Electrical Scheme of DC Islanded Microgrids 2.png

各種モードを有効 (1) にしたり無効 (0) にしたりする変数を設定します。すべてのモードを無効にして開始します。50 マイクロ秒のサンプル時間と 5 秒のシミュレーション期間を使用します。

enableAttack = 0;
enableObserver = 0;
enableWatermarking = 0;
Ts = 5e-5;
stopTime = 5;

DGU のパラメーターを指定します。

Vin = 100;
Ct = 2.2e-3;
Lt = 1.8e-3;
Rt = 0.2;

送電線のパラメーターを指定します。

Lij = 1.8e-6;
Rij = 0.05;

変更後の負荷が両方のユニットで共有されるため、電圧と線電流の過渡状態が示されるように、最初のユニットの負荷電流を変更します。

ILoadInitial = 3;
ILoadFinal = 2;
tLoadChange = 4;

モデルでは、各 DGU の 1 次局所電圧制御に PID コントローラーを使用します。コントローラーのパラメーターを指定します。

Vref = 48;
Kp = 0.1;
Ki = 6.15;
Kd = 4.6e-4;
N = 2.56e3;
Tf = 1/N;

電流コンセンサス制御は、DGU の定格容量によって正規化された個々の線電流の重み付き総和に基づきます。容量と PID 制御のパラメーターを定義します。

ICapacity_1 = 3;
ICapacity_2 = 6;

CC_Kp = 0;
CC_Ki = 150;
CC_Kd = 0;

モデルを開いてシミュレートします。時間 t = 4 s において、2 つのユニット間での電流の共有が確認できますが、このときに最初のユニットの負荷が変わります。

Simulink.sdi.view
Simulink.sdi.clear
open_system("AttackDetectionInDCMicrogrid.slx");
sim("AttackDetectionInDCMicrogrid.slx");
Simulink.sdi.loadView("DCmGCurrentSharingView.mldatx");

両方のユニットの電流 (プロットの下の行) は、引き続き個々の定格容量に比例します。プロットの上の行は不均衡な電圧を示しています。

リプレイ攻撃

リプレイ攻撃は、悪意のあるエージェントが通信チャネルの信号を観察でき、現在送信される測定値を、遅延した記録済みの観測値に置き換えることを指します。この攻撃は通信チャネルの信号を遅延させます。これは特に、システムが定常状態である場合に、混乱を招きます。

この例では、次の形式のリプレイ攻撃を使用します。

ya(t)=y(t)+β(t-Ta)[-y(t)+y(t-t0)]

ここで、β(t-Ta) は時間 Ta に開始されて、信号 y(t)t0 だけ遅延させる活性化関数を表し、ya(t) は変更後の信号を表します。

攻撃を有効にして、攻撃の時間と、攻撃が信号に導入する遅延を指定します。

enableAttack = 1;
timeOfAttack = 3;
attackTimeDelay = 0.1;

モデルのシミュレーションを実行します。

Simulink.sdi.clear
sim("AttackDetectionInDCMicrogrid.slx");
Simulink.sdi.loadView("DCmGAttackSimulationView.mldatx");

この攻撃により、負荷が変化すると望ましくない動作が発生します。電流コンセンサス制御は、通信チャネルに導入された遅延による線電流の変化を検知しません。

攻撃は t = 3 秒以降に発生しますが、システムが定常状態である間は検出されません。t = 4 秒での負荷変化と、コンセンサス コントローラーでの正しくない測定値の結果、システムは不安定になります。制御されていない線電流 (プロットの下の行) は負荷変化から 300 ミリ秒以内に定格容量を超え、ローカルの DGU が破損します。

ウォーターマーキングと攻撃の検出

攻撃側に対して未知の時変信号をウォーターマークとして導入し、オブザーバーによって生成された残差を使用して、通信チャネルの信号に対する変更や偽データの挿入を検出します。

enableObserver = 1;
enableWatermarking = 1;

CPS_WatermarkAndObserver2.png

ウォーターマーク信号は周期的なノコギリ波であり、モデルの Add Watermark サブシステムにより、電流コンセンサス コントローラーに送信される電圧および電流の測定値に挿入されます。Remove Watermark サブシステムは、フィードバックからこの信号を減算してから、基準電圧に対する調整を計算してオブザーバーの残差を生成します。ウォーターマーク信号は、攻撃により信号に導入された遅延を外乱に変換します。したがって、オブザーバーが非ゼロの残差を生成すると、システムは攻撃を検出します。ウォーターマーク信号の振幅は、リプレイ攻撃の検出が可能になる一方で、検出の前に電流が定格容量を超えないように、慎重に設定する必要があります。この例でのウォーターマーク信号の振幅は 0.1 に設定され、周波数は 2 Hz に設定されています。

モデルは、線形カルマン フィルターと次のモデルを使用して、モデルの状態の推定値を計算します。

V˙i(t)=1CtiIti(t)-1CtiRijVi(t)+1CtiRijVj(t)-1CtiILi(t)I˙ti(t)=-1LtiVi(t)-RtiLtiIti(t)+1LtiVti(t)

状態空間モデルのパラメーターを指定します。

At = [-1/(Rij*Ct),     1/Ct;
     -1/Lt, -Rt/Lt];
Bt = [0;
     1/Lt];
Mt = [-1/Ct;
      0];
Ht = [1 0];

Bj = [1/(Rij*Ct); 0];
BIl = [-1/Ct; 0];

dguPlant = ss(At,[Bt, Bj, BIl],Ht,0);
dguPlant.StateName = {'Vi','Iti'};
dguPlant.InputName = {'Vti','Vj','Ili'};
dguPlant.OutputName = {'Vi'};
dguPlantD = c2d(dguPlant,Ts);

モデルのシミュレーションを実行します。

Simulink.sdi.clear
sim("AttackDetectionInDCMicrogrid.slx");
Simulink.sdi.loadView("DCmGAttackDetectionView.mldatx");

残差プロットは、t = 3 秒での攻撃に対する応答を示しています。DGU 1 で観察された電圧の差 (左上) と、両方の DGU で観察された線電流 (下の行) は非ゼロであり、指定されたしきい値を 4 ミリ秒以内に超えています。DGU 2 の電圧の差 (右上) はゼロのままであり、DGU 1 からの信号が攻撃されたことを示しています。

この方法を拡張して複数の DGU への攻撃を検出したり、しきい値を使用して、攻撃を受けたユニットを分離するなどの補正動作をトリガーしたりできます。

モデルを閉じます。

Simulink.sdi.close
close_system('AttackDetectionInDCMicrogrid')

参考

(Simscape Electrical) |

関連するトピック