Bootstrap

【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

文献来源:

文献分享阅读:

我用夸克网盘分享了「【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策.pdf」,点击链接即可保存。打开「夸克APP」在线查看,支持多种文档格式转换。
链接:夸克网盘分享
提取码:4vRm 

虚假数据注入攻击(FDIA)已被证明是对抗电力系统的严重安全挑战之一。这正成为电力公司日益关注的问题,最近引起了电力系统研究人员和工程师的注意。因此,电力系统运行和规划中的状态估计是监测和控制系统通过电表测量和电力系统拓扑估计电力系统最佳状态的重要和必不可少的工具。因此,本文提出了避免系统内不必要的完全停电的建模和对策。本文还考虑了输电和配电系统对FDIA的脆弱性。本文的结果可为制定针对电力系统网络漏洞的必要保护对策奠定基础。

原文摘要:

Abstract:

False Data Injection Attacks (FDIA) has been shown to be one of the serious security challenges combating power systems. This is becoming a grown concern to power utilities and has drawn the attention of power system researchers and Engineers in recent times. State estimation in power system operation and planning is therefore an important and an essential tool for monitoring and controlling the system to estimate the best state of the power system through meter measurements and power system topologies. This paper therefore presents the modeling and countermeasures for avoiding unnecessary total blackout within the system. The vulnerability of both the Transmission and the distribution power system to FDIA is also considered in this paper. The outcomes of this paper could serve as a basis for the development of necessary protective countermeasures against vulnerabilities within power system networks.

确保任何系统的数据完整性和安全性对于安全运行和保护系统免受操纵至关重要。随着传统电网被智能电网取代,这就构成了电网容易受到网络攻击的情况[1]。智能电网作为国家关键基础设施,是一个将网络和物理系统集成在一起的系统,该系统的不同部分之间不断通信。因此,确保数据完整性并保护系统免受操纵非常重要。物联网(IoT)的应用使通信链路和整个电力系统容易受到攻击。电网不能被描述为传统的网络系统,而是一个信息物理系统,其特征是网络和物理系统之间的通信或集成[2]。智能电网带来的进步在自动化、电网监控和管理、智能计量基础设施和客户端管理领域值得称赞。由此产生的电力系统的通信网络更容易受到入侵者的攻击和操纵[2]。

智能电网的一个重要元素是状态估计。状态估计的输入仅限于负载总线上的P,Q注入和电压控制总线上的PV值。需要状态估计有两个原因。首先,来自远程终端单元(RTU)和传感器等现场设备的测量被认为是有噪声的,并且包含一些误差。其次,在潮流的情况下,测量值包含一些变量,例如PQ线流,这些变量对于潮流计算不是必需的。因此,运行状态的最佳估计是通过状态估计获得的,并且该估计值在被接受之前需要进行统计分析[3]。

电力系统由能源管理系统(EMS)或监督控制和数据采集(SCADA)系统持续监测和控制,这些系统需要状态估计器的输入来维持电力系统的运行状态。SCADA系统从现场设备(如网络中的传感器)收集测量值。传感器测量值用作状态估计器的输入。状态估计器根据这些测量值估计电力系统的真实状态。状态估计器的输出是一些电压幅度和相位角。控制动作和能量管理系统依赖于状态估计器的输出,以实现电力系统的安全运行。因此,状态估计使用来自仪表测量的数据,计算这些测量的最佳估计值,然后将结果用于控制网格。因此,状态估计在电力系统监测和控制中起着重要作用[3] [4]。

状态估计给出了电力系统真实状态的估计,大多数控制动作、研究和系统操作都依赖于状态估计。对电力系统状态估计的攻击往往会危及电网。电力系统模型可以是交流或直流,其中交流模型同时考虑实际功率和无功功率,因此该模型的方程变为非线性。对于简化的直流模型,方程是线性的,不需要迭代。

电网对攻击的敏感性是由于电网作为网络物理系统的架构,通信链路更容易受到网络物理攻击。配备智能电表的先进计量系统基础设施的引入在实现智能电网方面发挥了重要作用。然而,由于电网上有许多输入或插座可用,系统就越脆弱[4]。

针对电网的攻击之一是虚假数据注入攻击(FDIA)。FDIA 是一种针对电力系统中状态估计的数据完整性攻击,攻击者会破坏传感器节点。大多数情况下,攻击者操纵和误导系统操作员发出不准确的命令,如果不快速检测和控制,会导致电力系统停电[6]。因此,FDIA的后果是重大设备故障和完全停电。通过破坏智能电表测量、传感器或远程终端单元 (RTU) 或侵入网络上的监控通信 [7],可能会注入虚假数据。

攻击者可以插入通常不会被BDD检测到的测量值[8]。了解电力系统的当前配置可能会导致BDD的当前实现无法检测到攻击,因为攻击者希望注入与估计状态密切相关的数据。大多数BDD技术基于最小加权平方法。了解电源系统配置肯定会违反这种方法。许多研究表明,保护一些战略性选择的仪表测量值,以防止FDIA [4],[9][10]。确定一组仪表测量值,以便攻击者注入 FDA 所需的矢量受到限制是一种很好的做法。但是,这种方法不会完全使系统免受攻击,并且必须始终提供受保护传感器的测量值。对于实际系统,可能无法实现仪表免受攻击的绝对保护。由于SCADA设备和网络拓扑各不相同,因此正确监控系统以确定最合适的FDIA实施非常重要。因此,需要制定超越这些传统方法的检测方法,因为攻击者可以利用最小二乘法允许的误差范围之间的测量而不会被检测到[6]。

因此,考虑到电网作为国家关键基础设施的重要性以及FDIA对电力系统的严重影响,确保数据完整性和电网保护非常重要[5]。网络计算应用带来的自动化导致电网容易受到网络攻击。就像传统的网络系统一样,系统上可用的许多插座或连接链接往往会增加其漏洞[1]。针对状态估计的虚假数据注入攻击 (FDIA) 被证明是攻击者通过向电力系统注入错误或错误仪表测量来破坏电力系统运行的一种方式。

大多数系统参数(如系统稳定性和控制)都取决于状态估计。状态估计参数是做出基于系统的物理系统稳定性和控制决策所必需的。FDIA可能会误导系统运营商根据注入的数据做出不准确的决策。最近,已经证明虚假数据注入(FDI)攻击可以绕过当今EMS / SCADA系统中的错误数据检测(BDD)而不会被发现[2] [8] [11]。

📚2 运行结果

Del = 180/pi*del;
E2 = [V Del]; % Bus Voltages and angles..
disp('-------- State Estimation ------------------');
disp('--------------------------');
disp('| Bus |    V   |  Angle  | ');
disp('| No  |   pu   |  Degree | ');
disp('--------------------------');
for m = 1:num
    fprintf('%4g', m); fprintf('  %8.4f', V(m)); fprintf('   %8.4f', Del(m)); fprintf('\n');
end
disp('---------------------------------------------');

 

  

主函数代码:

% Power System State Estimation using Weighted Least Square Method..

num = 30; % IEEE - 14 or IEEE - 30 bus system..(for IEEE-14 bus system replace 30 by 14)...
ybus = ybusppg(num); % Get YBus..
zdata = zdatas(num); % Get Measurement data..
bpq = bbusppg(num); % Get B data..
nbus = max(max(zdata(:,4)),max(zdata(:,5))); % Get number of buses..
type = zdata(:,2); % Type of measurement, Vi - 1, Pi - 2, Qi - 3, Pij - 4, Qij - 5, Iij - 6..
z = zdata(:,3); % Measuement values..
fbus = zdata(:,4); % From bus..
tbus = zdata(:,5); % To bus..
Ri = diag(zdata(:,6)); % Measurement Error..
V = ones(nbus,1); % Initialize the bus voltages..
del = zeros(nbus,1); % Initialize the bus angles..
E = [del(2:end); V];   % State Vector..
G = real(ybus);
B = imag(ybus);

vi = find(type == 1); % Index of voltage magnitude measurements..
ppi = find(type == 2); % Index of real power injection measurements..
qi = find(type == 3); % Index of reactive power injection measurements..
pf = find(type == 4); % Index of real powerflow measurements..
qf = find(type == 5); % Index of reactive powerflow measurements..

nvi = length(vi); % Number of Voltage measurements..
npi = length(ppi); % Number of Real Power Injection measurements..
nqi = length(qi); % Number of Reactive Power Injection measurements..
npf = length(pf); % Number of Real Power Flow measurements..
nqf = length(qf); % Number of Reactive Power Flow measurements..

iter = 1;
tol = 5;

while(tol > 1e-4)
    
    %Measurement Function, h
    h1 = V(fbus(vi),1);
    h2 = zeros(npi,1);
    h3 = zeros(nqi,1);
    h4 = zeros(npf,1);
    h5 = zeros(nqf,1);
    
    for i = 1:npi
        m = fbus(ppi(i));
        for k = 1:nbus
            h2(i) = h2(i) + V(m)*V(k)*(G(m,k)*cos(del(m)-del(k)) + B(m,k)*sin(del(m)-del(k)));
        end
    end
    
    for i = 1:nqi
        m = fbus(qi(i));
        for k = 1:nbus
            h3(i) = h3(i) + V(m)*V(k)*(G(m,k)*sin(del(m)-del(k)) - B(m,k)*cos(del(m)-del(k)));
        end
    end
    
    for i = 1:npf
        m = fbus(pf(i));
        n = tbus(pf(i));
        h4(i) = -V(m)^2*G(m,n) - V(m)*V(n)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n)));
    end
    
    for i = 1:nqf
        m = fbus(qf(i));
        n = tbus(qf(i));
        h5(i) = -V(m)^2*(-B(m,n)+bpq(m,n)) - V(m)*V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
    end
    
    h = [h1; h2; h3; h4; h5];
    
    % Residue..
    r = z - h;
    
    % Jacobian..
    % H11 - Derivative of V with respect to angles.. All Zeros
    H11 = zeros(nvi,nbus-1);

    % H12 - Derivative of V with respect to V.. 
    H12 = zeros(nvi,nbus);
    for k = 1:nvi
        for n = 1:nbus
            if n == k
                H12(k,n) = 1;
            end
        end
    end

    % H21 - Derivative of Real Power Injections with Angles..
    H21 = zeros(npi,nbus-1);
    for i = 1:npi
        m = fbus(ppi(i));
        for k = 1:(nbus-1)
            if k+1 == m
                for n = 1:nbus
                    H21(i,k) = H21(i,k) + V(m)* V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
                end
                H21(i,k) = H21(i,k) - V(m)^2*B(m,m);
            else
                H21(i,k) = V(m)* V(k+1)*(G(m,k+1)*sin(del(m)-del(k+1)) - B(m,k+1)*cos(del(m)-del(k+1)));
            end
        end
    end
    
    % H22 - Derivative of Real Power Injections with V..
    H22 = zeros(npi,nbus);
    for i = 1:npi
        m = fbus(ppi(i));
        for k = 1:(nbus)
            if k == m
                for n = 1:nbus
                    H22(i,k) = H22(i,k) + V(n)*(G(m,n)*cos(del(m)-del(n)) + B(m,n)*sin(del(m)-del(n)));
                end
                H22(i,k) = H22(i,k) + V(m)*G(m,m);
            else
                H22(i,k) = V(m)*(G(m,k)*cos(del(m)-del(k)) + B(m,k)*sin(del(m)-del(k)));
            end
        end
    end
    
    % H31 - Derivative of Reactive Power Injections with Angles..
    H31 = zeros(nqi,nbus-1);
    for i = 1:nqi
        m = fbus(qi(i));
        for k = 1:(nbus-1)
            if k+1 == m
                for n = 1:nbus
                    H31(i,k) = H31(i,k) + V(m)* V(n)*(G(m,n)*cos(del(m)-del(n)) + B(m,n)*sin(del(m)-del(n)));
                end
                H31(i,k) = H31(i,k) - V(m)^2*G(m,m);
            else
                H31(i,k) = V(m)* V(k+1)*(-G(m,k+1)*cos(del(m)-del(k+1)) - B(m,k+1)*sin(del(m)-del(k+1)));
            end
        end
    end
    
    % H32 - Derivative of Reactive Power Injections with V..
    H32 = zeros(nqi,nbus);
    for i = 1:nqi
        m = fbus(qi(i));
        for k = 1:(nbus)
            if k == m
                for n = 1:nbus
                    H32(i,k) = H32(i,k) + V(n)*(G(m,n)*sin(del(m)-del(n)) - B(m,n)*cos(del(m)-del(n)));
                end
                H32(i,k) = H32(i,k) - V(m)*B(m,m);
            else
                H32(i,k) = V(m)*(G(m,k)*sin(del(m)-del(k)) - B(m,k)*cos(del(m)-del(k)));
            end
        end
    end
    
    % H41 - Derivative of Real Power Flows with Angles..
    H41 = zeros(npf,nbus-1);
    for i = 1:npf
        m = fbus(pf(i));
        n = tbus(pf(i));
        for k = 1:(nbus-1)
            if k+1 == m
                H41(i,k) = V(m)* V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
            else if k+1 == n
                H41(i,k) = -V(m)* V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
                else
                    H41(i,k) = 0;
                end
            end
        end
    end
    
    % H42 - Derivative of Real Power Flows with V..
    H42 = zeros(npf,nbus);
    for i = 1:npf
        m = fbus(pf(i));
        n = tbus(pf(i));
        for k = 1:nbus
            if k == m
                H42(i,k) = -V(n)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n))) - 2*G(m,n)*V(m);
            else if k == n
                H42(i,k) = -V(m)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n)));
                else
                    H42(i,k) = 0;
                end
            end
        end
    end
    
    % H51 - Derivative of Reactive Power Flows with Angles..
    H51 = zeros(nqf,nbus-1);
    for i = 1:nqf
        m = fbus(qf(i));
        n = tbus(qf(i));
        for k = 1:(nbus-1)
            if k+1 == m
                H51(i,k) = -V(m)* V(n)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n)));
            else if k+1 == n
                H51(i,k) = V(m)* V(n)*(-G(m,n)*cos(del(m)-del(n)) - B(m,n)*sin(del(m)-del(n)));
                else
                    H51(i,k) = 0;
                end
            end
        end
    end
    
    % H52 - Derivative of Reactive Power Flows with V..
    H52 = zeros(nqf,nbus);
    for i = 1:nqf
        m = fbus(qf(i));
        n = tbus(qf(i));
        for k = 1:nbus
            if k == m
                H52(i,k) = -V(n)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n))) - 2*V(m)*(-B(m,n)+ bpq(m,n));
            else if k == n
                H52(i,k) = -V(m)*(-G(m,n)*sin(del(m)-del(n)) + B(m,n)*cos(del(m)-del(n)));
                else
                    H52(i,k) = 0;
                end
            end
        end
    end
    
    % Measurement Jacobian, H..
    H = [H11 H12; H21 H22; H31 H32; H41 H42; H51 H52];
    
    % Gain Matrix, Gm..
    Gm = H'*inv(Ri)*H;
    
    %Objective Function..
    J = sum(inv(Ri)*r.^2);  
    
    % State Vector..
    dE = inv(Gm)*(H'*inv(Ri)*r);
    E = E + dE;
    del(2:end) = E(1:nbus-1);
    V = E(nbus:end);
    iter = iter + 1;
    tol = max(abs(dE));
end

CvE = diag(inv(H'*inv(Ri)*H)); % Covariance matrix..

Del = 180/pi*del;
E2 = [V Del]; % Bus Voltages and angles..
disp('-------- State Estimation ------------------');
disp('--------------------------');
disp('| Bus |    V   |  Angle  | ');
disp('| No  |   pu   |  Degree | ');
disp('--------------------------');
for m = 1:num
    fprintf('%4g', m); fprintf('  %8.4f', V(m)); fprintf('   %8.4f', Del(m)); fprintf('\n');
end
disp('---------------------------------------------');

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]A. S. Alayande, N. Nwulu and A. E. Bakare, "Modelling and Countermeasures of False Data Injection Attacks Against State Estimation in Power Systems," 2018 International Conference on Computational Techniques, Electronics and Mechanical Systems (CTEMS), Belgaum, India, 2018, pp. 129-134, doi: 10.1109/CTEMS.2018.8769295.

🌈4 Matlab代码实现

;