computer-security-5

实验五 电力信息安全

1 实验目的和要求:

  • 了解电力信息安全需求,理解电力信息网络安全架构。
  • 掌握电力信息安全机制设计与实施。

2 实验内容:

  1. 电力信息网络安全架构;
  2. 查阅资料,深入探讨电力信息网络安全体系。

3 实验步骤:

1) 根据“安全分区、网络专用、横向隔离、纵向认证”的安全防护策略画一个相关的电网安全系统拓扑图。

对于这个拓扑图,我需要模拟出电力系统常见的“生产控制区”、“管理信息区”以及它们之间的安全隔离。

电网安全系统拓扑图

核心理念:

  • 安全分区: 将电力系统划分为不同的安全域,如生产控制区、管理信息区等。
  • 网络专用: 各区内部使用专用网络,不与外部随意互联。
  • 横向隔离: 同一安全域内部不同业务系统之间也需要隔离,防止攻击蔓延。
  • 纵向认证: 跨安全域的访问(尤其是从管理区到控制区)必须进行严格的身份认证和权限控制。

拓扑图构成要素:

  1. 生产控制区(核心安全域)

    • 主站系统: SCADA/DCS系统、能量管理系统(EMS)、配电自动化系统(DAS)等。
    • 生产控制大区边界: 通常部署有高性能防火墙、入侵检测/防御系统(IDS/IPS)、单向传输设备(数据从生产区到管理区单向流动)等。
    • 子站/变电站: RTU/IEDs(远程终端单元/智能电子设备)、通信网关。
    • 厂站通信网络: 专用的光纤网络或工业以太网,连接主站和子站。
    • 横向隔离设备: 生产控制大区内部,不同子系统之间(如EMS与DAS之间)可能通过内部防火墙或工业隔离网关进行隔离。
  2. 管理信息区(非生产核心安全域)

    • 企业信息系统: OA系统、MIS系统、生产管理系统(PMS)、数据仓库等。
    • 管理信息大区边界: 部署有防火墙、IDS/IPS、统一认证平台、堡垒机等。
    • 运维终端: 工程师、运维人员的工作站。
    • 管理信息区网络: 企业内部局域网。
  3. 横向隔离与纵向认证的关键节点:

    • 生产控制区与管理信息区之间的隔离:
      • 安全隔离装置: 通常是双网闸(Gap),实现物理隔离,数据通过安全摆渡的方式传输。
      • 防火墙群: 多个防火墙级联,形成纵深防御。
      • 单向传输设备: 确保数据只能从生产区向管理区流动,防止管理区对生产区的直接控制。
    • 纵向认证体系:
      • 统一认证平台(CA): 位于管理信息区,负责签发、管理和撤销数字证书。
      • 认证网关/堡垒机: 部署在生产控制区边界,所有来自管理区的访问都必须通过此网关,并进行强制的身份认证。
      • 安全审计系统: 记录所有跨区访问行为,进行审计。

简单的拓扑图描述(文字版):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+-------------------------------------------------+        +-------------------------------------------------+
| 管理信息区 (Management Information Zone) | | 生产控制区 (Production Control Zone) |
| | | |
| +---------------------+ +-------------------+ | | +---------------------+ +-------------------+ |
| | 企业信息系统 (MIS) |---| 统一认证平台 (CA) | | | | 主站系统 (SCADA/DCS) |---| 生产控制通信网络 |
| +---------------------+ +-------------------+ | | +---------------------+ +-------------------+ |
| | | | | | | |
| +---------------------+ +-------------------+ | | +---------------------+ +-------------------+ |
| | 运维终端/工作站 |---| 安全审计系统 | | | | 变电站/子站 (RTU/IEDs) |---| 工业以太网 |
| +---------------------+ +-------------------+ | | +---------------------+ +-------------------+ |
| | | | | | | |
+-------------------------------------------------+ +-------------------------------------------------+
| |
| 纵向认证/安全隔离通道 |
V V
+---------------------------------------------------------------------------------------------------------+
| 安全隔离设备 (防火墙群 / 双网闸 / 单向传输设备) |
| |
| 认证网关 / 堡垒机 (实现纵向认证) |
+---------------------------------------------------------------------------------------------------------+

说明:

  • 粗线箭头 表示数据流向和认证方向,通常是从管理区通过认证后访问生产区,或生产区单向发送数据到管理区。
  • 安全隔离设备 是最重要的隔离屏障,实现物理或逻辑上的断开,阻断恶意流量。
  • 统一认证平台和认证网关 是实现“纵向认证”的核心组件。

2) 面向“纵向认证”实现一个可用于身份认证的数字签名算法(算法不限)。

为了实现“纵向认证”,数字签名是一个非常好的选择,它可以保证数据的完整性、发送者的身份认证和不可否认性。这里我将选择一个比较常见的、易于理解的数字签名算法——RSA数字签名算法

RSA数字签名算法原理概述:

RSA数字签名算法基于RSA公钥密码体制。其基本思想是:

  1. 密钥生成: 签名者生成一对RSA密钥对:私钥(用于签名)和公钥(用于验证)。
  2. 签名过程:
    • 发送方(签名者)对要发送的数据(或其哈希值)使用自己的私钥进行加密,生成数字签名。
    • 将原始数据和数字签名一起发送给接收方。
  3. 验证过程:
    • 接收方使用发送方公开的公钥对数字签名进行解密,得到原始数据的哈希值(或原始数据本身)。
    • 接收方独立计算接收到的原始数据的哈希值。
    • 比较两个哈希值,如果一致,则表明:
      • 数据在传输过程中没有被篡改(完整性)。
      • 数据确实是由私钥对应的实体(签名者)签名的(身份认证)。
      • 签名者不能否认他已经签过这个数据(不可否认性)。

实现一个简化的RSA数字签名算法(伪代码或概念描述):

由于我是一名学生,无法直接运行复杂的代码,但我可以描述出算法的逻辑。这里我们以一个简单的场景为例:运维人员(签名者)向主站系统(验证者)发送一条指令,这条指令需要通过数字签名进行认证。

假设环境:

  • 运维人员A:拥有RSA私钥 和公钥
  • 主站系统:拥有运维人员A的公钥
  • 传输的指令内容:command = "启动XXXX设备"

1. 密钥生成阶段(运维人员A):

  • 选择两个大素数
  • 计算模数
  • 计算欧拉函数
  • 选择一个整数 ,使其满足
  • 计算 ,使其满足
  • 公钥 (公开给主站系统)
  • 私钥 (运维人员A自己保管)

2. 签名阶段(运维人员A发送指令):

a. 计算指令的哈希值:
* hash_value = Hash(command)
* (例如,使用SHA-256算法:hash_value = SHA256("启动XXXX设备")
* 将 hash_value 转换为一个大整数

b. 用私钥进行签名:
* signature = H^d \pmod{n}
* 这是一个数学运算,表示将哈希值 用私钥的指数 进行模 运算。

c. 发送数据:
* 运维人员A将 (command, signature) 发送给主站系统。

3. 验证阶段(主站系统接收指令):

a. 接收数据:
* 主站系统接收到 (received_command, received_signature)

b. 用公钥解密签名:
* decrypted_hash = received_signature^e \pmod{n}
* 主站系统使用运维人员A的公钥 来解密接收到的签名。

c. 计算接收到的指令的哈希值:
* calculated_hash = Hash(received_command)
* 同样,使用与签名时相同的哈希算法(SHA-256)。
* 将 calculated_hash 转换为一个大整数

d. 比较验证:
* 如果 decrypted_hash == H',则:
* 认证成功!指令未被篡改,且确实是运维人员A发送的。主站系统可以执行此指令。
* 否则:
* 认证失败!指令可能被篡改,或者发送者不是合法的运维人员A。主站系统应拒绝执行此指令并记录告警。

简化流程图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
+---------------------+                      +---------------------+
| 运维人员A | | 主站系统 |
+---------------------+ +---------------------+
| ^
| 1. 生成RSA密钥对 (PR_A, PU_A) |
| |
| 2. 将PU_A公开给主站系统 (提前部署或安全传输) |
| |
V |
(发送指令) | 3. 计算指令哈希值 (H) | (接收指令)
| 4. 用PR_A对H进行签名 (signature = H^d mod n) | 5. 接收 (command, signature)
| 5. 发送 (command, signature) -------------+
| |
| | 6. 用PU_A解密signature (decrypted_hash = signature^e mod n)
| | 7. 计算received_command的哈希值 (calculated_hash)
| | 8. 比较 decrypted_hash 和 calculated_hash
| |
| V
| +---------------------+
| | 认证结果 (成功/失败) |
| +---------------------+

在电力信息安全中的“纵向认证”应用:

  • 运维人员远程接入主站: 运维人员登录时,其身份凭证(如数字证书)中包含其公钥。登录请求会被签名,主站系统使用CA颁发的证书来验证签名。
  • 控制指令下发: 主站系统向RTU/IEDs下发控制指令时,指令会进行数字签名。RTU/IEDs通过内嵌的公钥或从CA获取公钥来验证指令的合法性。
  • 数据采集与上报: RTU/IEDs采集的数据上报到主站时,也可以进行数字签名,保证数据来源的可靠性和数据完整性。

这种基于数字签名的纵向认证机制,可以有效防止假冒身份、篡改指令/数据等安全威胁,是保障电力系统安全运行的关键技术之一。