QKD Integration in RouterOS IPsec (PPK)

本页介绍 RouterOS IPsec 的后量子预共享密钥(PPK)功能,详细说明其与量子密钥分发(QKD)的集成、支持的密钥来源(静态、PSK、QKD)、安全建议,以及一个双设备设置示例。

RouterOS IPsec 中的 QKD 集成(PPK)

1. 简介

本手册介绍 RouterOS IPsec 中的后量子预共享密钥(RFC9867)功能及其与量子密钥分发(QKD)的集成。

PPK 通过使用动态分发或静态配置的密钥,提供针对量子攻击的前向安全性。所有 PPK 类型(静态、PSK、QKD)都受益于 RFC 8784 的建议:密钥应具有至少 256 位熵,以提供约 128 位的后量子安全性。

RouterOS 支持三种 PPK 来源:

  • 静态 PPK — 按 peer 手动配置的密钥。
  • PSK(预共享密钥)— 一次性生成的密钥,可选地仅用于初始 IKE SA。
  • QKD — 从 QKD 服务器动态分发的密钥。

动态密钥(PSK/QKD)在使用后即被消耗并失效。静态密钥在会话间保持有效,但如果重复使用,其安全性较弱。

2. 概念

  • PPK(Post-Quantum Pre-shared Key,后量子预共享密钥): 在 IKE 协商期间共享的额外密钥,用于抵御量子攻击。
  • QKD: 基于量子的密钥分发,通过密钥管理实体(KME)提供新的对称密钥。

IKE SA 与 ESP SA

  • IKE SA:控制隧道协商。
  • ESP SA:承载加密的用户数据。

静态密钥与动态密钥

  • 动态:临时 PSK 或 QKD 分发的密钥,使用一次后丢弃。
  • 静态:按 peer 手动设置,在会话间持久存在。

2.1 RouterOS PPK 来源

PPK 来源描述
Static持久的、手动配置的密钥。
PSK一次性动态生成的预共享密钥。可选地仅用于初始 IKE SA(psk-ike-initial)。
QKD从 QKD 服务器动态拉取的密钥,使用后即被消耗。

3. 安全建议

  • 所有 PPK 密钥都应满足 RFC 8784 的建议:≥256 位熵。
  • 静态 PPK 密钥如果足够长,可改善后量子保护,但重复使用会降低安全性。
  • 动态密钥(PSK/QKD)由于是一次性使用,可提供更强的安全性。同步失败可能导致密钥失同步。

4. 双设备设置概述

本手册聚焦于使用两台设备的最小化设置:

角色设备功能
服务器RouterOS托管 IPsec 隧道;提供 QKD/PPK 密钥
客户端ROS/LibreSwan使用 QKD/PPK 连接到服务器

RouterOS 服务器可以作为 KME 的 QKD 客户端,因此不需要第三台设备。

# Example of pushing a configuration to a remote peer (IPsec)
/ip ipsec peer
add address=192.168.88.1/32 name=Server exchange-mode=ike2
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha256 enc-algorithms=aes-256-gcm

5. 配置对象

5.1 证书

QKD 需要:

  • CA 证书(用于验证服务器)。
  • SAE 客户端证书(用于向 QKD 服务器进行身份验证)。
/certificate/import file-name=ca.crt.pem
/certificate/import file-name=sae-server.crt.pem
/certificate/import file-name=sae-server.key.pem

5.2 PSK 示例

生成用于 PPK 的一次性 PSK:

/ip/ipsec/key/psk/generate count=10 key-size=32

  • count → 要生成的 PSK 数量。
  • key-size → 每个密钥的大小,以字节为单位(32 字节 = 256 位)。

5.3 QKD 密钥管理器

RouterOS 服务器可以充当 QKD 客户端:

/ip/ipsec/key/qkd/set address=10.2.3.4:8020 \
    cache-size=1 \
    certificate=sae-server \
    key-size=32 \
    kme-id=server-kme-id \
    peer-sae-id=client-sae-id

参数说明:

参数描述
cache-sizeIPsec 将从 QKD 服务器预取的密钥数量。
cache-state当前已缓存且可用的密钥数量。
key-size请求的每个密钥大小,以字节为单位(例如,32 字节 = 256 位)。
kme-id用于证书验证。如果未指定,则不会验证 KME 身份。
peer-sae-idpeer SAE 的标识符。

5.4 配置文件和 Peers

/ip/ipsec/profile/add name=qkd-profile ppk=qkd
/ip/ipsec/peer/add address=10.2.1.2 exchange-mode=ike2 \
    name=peer-client profile=qkd-profile proposal-check=obey
/ip/ipsec/identity/add peer=peer-client profile=qkd-profile

配置文件的 PPK 选项:

选项描述
no禁用 PPK。
psk用于 IKE 和 ESP 重新密钥的一次性 PSK。
psk-ike-initial仅用于初始 IKE SA 的 PSK(由 psk-ike-only 重命名而来)。
qkd从 QKD 服务器获取的密钥。

5.5 Proposal / Policy

/ip/ipsec/proposal/add name=qkd-proposal auth-algorithms=sha256 \
    enc-algorithms=aes-256-gcm pfs-group=modp2048
/ip/ipsec/policy/add src-address=10.1.0.0/24 dst-address=10.2.0.0/24 \
    peer=peer-client proposal=qkd-proposal tunnel=yes

6. 行为

  • 动态密钥:从 /ip/ipsec/key/psk/ 或 QKD 服务器拉取,使用一次后删除。
  • 静态密钥:按 peer 配置,重复使用。
  • 一次性动态密钥可确保最强的保护,但需要同步。
  • 静态回退可保证隧道建立,但应足够长(≥256 位熵)。
  • PPK 的使用可选地限制为仅 IKE SA(psk-ike-initial),以减少密钥消耗。

7. 调试与故障排除

要验证 QKD 集成和密钥获取,请启用 IPsec 调试日志:

/system/logging/add topics=ipsec,debug action=memory

显示 QKD 密钥获取的示例调试输出:

2025-10-11 17:32:38 ipsec,debug,packet POST
2025-10-11 17:32:38 ipsec,debug,packet Host: 10.2.3.4\r\n
2025-10-11 17:32:38 ipsec,debug,packet {"number":1,"size":16}
2025-10-11 17:32:38 ipsec,debug,packet HTTP/1.1 200 OK\r\n
2025-10-11 17:32:38 ipsec,debug,packet {"keys":[{"key_ID":"37f4c842-dd82-4c49-8dfc-52a3793e5331","key":"m/JIEIUCzAE="}]}
2025-10-11 17:32:38 ipsec,debug,packet qkd: add to cache key 37f4c842-dd82-4c49-8dfc-52a3793e5331: 9bf24

如果密钥未被添加到缓存中,请检查到 KME 的网络连通性、证书验证,以及 kme-id 和 peer-sae-id 配置是否正确。

8. 示例导出(双设备设置)

RouterOS 服务器

/ip/ipsec/key/qkd
set address=10.2.3.4:8020 cache-size=1 certificate=sae-server key-size=32 \
    kme-id=server-kme-id peer-sae-id=client-sae-id
/ip/ipsec/profile/add name=qkd-profile ppk=qkd
/ip/ipsec/proposal/add name=qkd-proposal auth-algorithms=sha256 enc-algorithms=aes-256-gcm pfs-group=modp2048
/ip/ipsec/peer/add address=10.2.1.2 exchange-mode=ike2 name=peer-client profile=qkd-profile proposal-check=obey
/ip/ipsec/identity/add peer=peer-client profile=qkd-profile
/ip/ipsec/policy/add src-address=10.1.0.0/24 dst-address=10.2.0.0/24 peer=peer-client proposal=qkd-proposal tunnel=yes

客户端设备

/ip/ipsec/key/qkd
set address=10.2.3.4:8020 cache-size=1 certificate=sae-client key-size=32 \
    kme-id=client-kme-id peer-sae-id=server-sae-id
/ip/ipsec/profile/add name=qkd-profile ppk=qkd
/ip/ipsec/proposal/add name=qkd-proposal auth-algorithms=sha256 enc-algorithms=aes-256-gcm pfs-group=modp2048
/ip/ipsec/peer/add address=10.2.1.1 exchange-mode=ike2 name=peer-server profile=qkd-profile proposal-check=obey
/ip/ipsec/identity/add peer=peer-server profile=qkd-profile
/ip/ipsec/policy/add src-address=10.2.0.0/24 dst-address=10.1.0.0/24 peer=peer-server proposal=qkd-proposal tunnel=yes

9. 参考资料

说明

QKD 作为分发机制

  • RouterOS 中的 QKD 本身不是一种新的加密方法 —— 它是一种密钥分发机制。
  • 它通过**密钥管理实体(KME)**提供动态生成的密钥,两个 peer 都安全地获取这些密钥。

动态来源与静态来源

  • 动态来源:QKD 分发的密钥、来自 /ip/ipsec/key/psk/ 的一次性 PSK。
  • 静态来源:按 peer 配置的静态 PPK 密钥。
  • 建议:为长期安全优先使用动态密钥;保留静态回退以防动态密钥耗尽时隧道中断。

安全指南(RFC 8784)

  • 后量子预共享密钥应包含至少 256 位熵,以提供 128 位的后量子安全性。
  • 可以仅使用一个静态密钥来保护 IKE SA,但如果重复使用则存在风险。

运维注意事项

  • 密钥耗尽:在频繁重新密钥(IKE + ESP)期间,一次性 PSK 会很快被消耗。QKD 通过持续提供新密钥来避免此问题。
  • 中心辐射型拓扑:动态 PSK 需要 peer 关联,以避免各分支之间失同步。
  • 回退行为:确保系统在动态密钥不可用时能够平滑切换到静态 PPK。

兼容性说明

  • RouterOS - RouterOS:同时支持 PSK 和 QKD PPK。
  • RouterOS - LibreSwan:可用于静态 PPK;动态 PSK 可能需要自定义构建。
  • RouterOS - StrongSwan:需要适配,因为不同草案版本之间的标识符有所不同。