srsRAN_4G安全机制:从AES到ZUC的完整加密流程
srsRAN_4G作为开源SDR 4G软件套件,其安全机制涵盖从AES到ZUC的完整加密流程,为4G通信提供了坚实的安全保障。本文将深入解析srsRAN_4G中的加密技术实现,帮助读者全面了解其安全防护体系。
安全加密算法概述
在移动通信系统中,加密算法是保障数据传输安全的核心。srsRAN_4G实现了多种加密算法,其中AES(Advanced Encryption Standard)和ZUC(祖冲之算法)是最主要的两种。AES主要用于用户平面和控制平面的数据加密,而ZUC则作为中国自主研发的流密码算法,在3GPP标准中被采用,用于提供完整性保护和加密服务。
AES加密算法实现
AES算法在srsRAN_4G中的实现主要集中在lib/include/srsran/common/ssl.h文件中。该文件定义了AES的上下文结构和相关操作函数,包括密钥设置和ECB、CTR等工作模式的实现。
typedef mbedtls_aes_context aes_context;
#define AES_ENCRYPT 1
#define AES_DECRYPT 0
inline int aes_setkey_enc(aes_context* ctx, const unsigned char* key, unsigned int keysize)
{
return mbedtls_aes_setkey_enc(ctx, key, keysize);
}
inline int aes_crypt_ecb(aes_context* ctx, int mode, const unsigned char input[16], unsigned char output[16])
{
return mbedtls_aes_crypt_ecb(ctx, mode, input, output);
}
在实际应用中,AES算法被广泛用于各种加密场景。例如,在lib/src/common/liblte_security.cc文件中,AES-ECB模式被用于生成密钥和加密数据:
aes_crypt_ecb(&ctx, AES_ENCRYPT, const_zero, L);
aes_crypt_ecb(&ctx, AES_ENCRYPT, tmp, T);
ZUC加密算法实现
ZUC算法是一种面向移动通信系统的流密码算法,在srsRAN_4G中主要用于完整性保护。其实现代码位于lib/include/srsran/common/zuc.h和lib/src/common/zuc.cc文件中。
ZUC算法的状态结构定义如下:
typedef struct {
u32 LFSR_S0;
u32 LFSR_S1;
// ... 其他LFSR状态寄存器
u32 F_R1;
u32 F_R2;
u32 BRC_X0;
u32 BRC_X1;
u32 BRC_X2;
u32 BRC_X3;
} zuc_state_t;
ZUC算法主要包含初始化和密钥流生成两个过程:
void zuc_initialize(zuc_state_t* state, const u8* k, u8* iv);
void zuc_generate_keystream(zuc_state_t* state, int key_stream_len, u32* p_keystream);
密钥派生流程
srsRAN_4G中的密钥派生过程遵循3GPP标准,从主密钥开始,通过一系列密钥派生函数(KDF)生成各种子密钥,用于不同的安全服务。这一过程在lib/src/common/security.cc文件中实现。
主要密钥派生函数
- k_asme派生:从CK和IK派生ASME(Access Security Management Entity)根密钥
uint8_t security_generate_k_asme(const uint8_t* ck,
const uint8_t* ik,
const uint8_t* ak_xor_sqn_,
const uint16_t mcc,
const uint16_t mnc,
uint8_t* k_asme)
- k_enb派生:从k_asme派生eNodeB密钥
uint8_t security_generate_k_enb(const uint8_t* k_asme, const uint32_t nas_count_, uint8_t* k_enb)
- 算法密钥派生:从k_enb派生各种算法密钥(NAS、RRC、UP的加密和完整性保护密钥)
uint8_t security_generate_k_nas(const uint8_t* k_asme,
const CIPHERING_ALGORITHM_ID_ENUM enc_alg_id,
const INTEGRITY_ALGORITHM_ID_ENUM int_alg_id,
uint8_t* k_nas_enc,
uint8_t* k_nas_int)
密钥派生的核心实现
密钥派生的核心是KDF函数,srsRAN_4G实现了多个重载版本的kdf_common函数,支持不同数量的输入参数:
int kdf_common(const uint8_t fc, const std::array<uint8_t, 32>& key, const std::vector<uint8_t>& P0, uint8_t* output)
int kdf_common(const uint8_t fc,
const std::array<uint8_t, 32>& key,
const std::vector<uint8_t>& P0,
const std::vector<uint8_t>& P1,
uint8_t* output)
这些函数使用SHA-256哈希算法,根据输入的密钥和参数生成派生密钥。
加密与完整性保护流程
srsRAN_4G实现了完整的加密和完整性保护机制,涵盖了NAS(非接入层)、RRC(无线资源控制)和UP(用户平面)等多个协议层。
加密实现
加密功能主要在lib/src/common/security.cc中实现,支持多种加密算法:
- EEA1 (AES-CBC-MAC):
uint8_t security_128_eea1(uint8_t* key,
uint32_t count,
uint8_t bearer,
uint8_t direction,
uint8_t* msg,
uint32_t msg_len,
uint8_t* msg_out)
- EEA2 (SNOW 3G):
uint8_t security_128_eea2(uint8_t* key,
uint32_t count,
uint8_t bearer,
uint8_t direction,
uint8_t* msg,
uint32_t msg_len,
uint8_t* msg_out)
- EEA3 (ZUC):
uint8_t security_128_eea3(uint8_t* key,
uint32_t count,
uint8_t bearer,
uint8_t direction,
uint8_t* msg,
uint32_t msg_len,
uint8_t* msg_out)
完整性保护实现
完整性保护同样支持多种算法,包括EIA1、EIA2和EIA3:
uint8_t security_128_eia1(const uint8_t* key,
uint32_t count,
uint32_t bearer,
uint8_t direction,
uint8_t* msg,
uint32_t msg_len,
uint8_t* mac)
uint8_t security_128_eia2(const uint8_t* key,
uint32_t count,
uint32_t bearer,
uint8_t direction,
uint8_t* msg,
uint32_t msg_len,
uint8_t* mac)
uint8_t security_128_eia3(const uint8_t* key,
uint32_t count,
uint32_t bearer,
uint8_t direction,
uint8_t* msg,
uint32_t msg_len,
uint8_t* mac)
安全机制的实际应用
srsRAN_4G的安全机制在eNodeB和UE(用户设备)中都有广泛应用。例如,在eNodeB的实现中,安全模块负责对所有无线接口上的信令和数据进行加密和完整性保护。
安全配置示例
在实际部署中,可以通过配置文件(如enb.conf.example)来设置安全相关参数:
[security]
integrity_enabled = true
encryption_enabled = true
integrity_algorithm = EIA2
encryption_algorithm = EEA2
安全相关模块路径
srsRAN_4G的安全相关代码主要分布在以下目录和文件中:
- 加密算法定义:
lib/include/srsran/common/ssl.h、lib/include/srsran/common/zuc.h - 密钥派生实现:
lib/src/common/security.cc - 安全算法实现:
lib/src/common/liblte_security.cc - eNodeB安全配置:
srsenb/enb.conf.example
总结
srsRAN_4G提供了从AES到ZUC的完整加密流程,通过多层次的密钥派生和多种加密算法的实现,为4G通信提供了全面的安全保障。其安全机制遵循3GPP标准,实现了从密钥生成、密钥派生到数据加密和完整性保护的全流程。
通过深入了解srsRAN_4G的安全实现,开发者可以更好地理解移动通信系统的安全机制,为构建安全可靠的无线通信系统提供参考。对于想要深入研究的开发者,可以从lib/src/common/security.cc和lib/src/common/liblte_security.cc等文件入手,进一步探索srsRAN_4G安全机制的实现细节。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00