SM4-ECB算法的密钥分散及身份鉴别过程可分为根密钥预置、卡片密钥分散、动态验证三个阶段,以下是详细实现过程及示例:
一、根密钥预置阶段
-
系统初始化
系统预置根密钥MK(Master Key),例如:
MK = 0123456789ABCDEFFEDCBA9876543210(32位HEX码) -
安全存储
根密钥通过硬件加密模块存储在门禁读卡器内部,采用防物理篡改设计,确保密钥不出安全边界
二、卡片密钥分散阶段(发卡过程)
-
分散因子生成
取门禁卡唯一标识符UID(如:A1B2C3D4E5F6),结合发行信息(如发卡日期20230515),拼接成分散因子:
DIV = UID || 发行信息 = A1B2C3D4E5F620230515 -
SM4-ECB密钥分散运算
使用根密钥MK对分散因子DIV进行加密,生成卡片密钥CK:
CK = SM4-ECB_ENCRYPT(MK, DIV)
示例:
若DIV为16字节数据,SM4-ECB加密后输出16字节的CK,实现"一卡一密" -
密钥注入
将CK写入门禁卡的加密芯片,同时销毁分散过程中的中间数据
三、身份鉴别阶段(刷卡验证)
-
读卡器生成随机数
读卡器生成16字节随机数RND(如:11223344556677889900AABBCCDDEEFF) -
卡片加密响应
门禁卡使用CK对RND加密,生成响应码RESP:
RESP = SM4-ECB_ENCRYPT(CK, RND) -
读卡器验证计算
读卡器执行以下操作: -
读取卡片的UID和发行信息,重新计算DIV -
用MK对DIV加密生成CK'(与卡片CK相同) -
用CK'对RND加密得到RESP' -
校验RESP'与卡片返回的RESP是否一致 -
验证结果处理
若RESP'=RESP,则验证通过并开门;否则拒绝访问,同时后台记录异常事件
四、安全强化设计示例
-
动态密钥更新
每季度对根密钥MK进行轮换,新MK与原MK通过SM4加密链式派生,确保历史卡片仍可验证 -
防重放攻击
读卡器每次生成唯一随机数RND,并在服务器端记录已验证RND,防止重复使用 -
密钥分散差异化
对VIP区域门禁卡,在DIV中加入区域代码字段(如VIP01),生成独立密钥体系
五、技术合规性要点
-
密钥分散过程完全在密码模块内完成,杜绝密钥明文暴露 -
采用符合GM/T 0028三级要求的硬件密码模块,保障运算环境安全 -
每张卡片密钥具备独立性,单卡泄露不影响整体系统安全
注:实际实施时应参考GM/T 0036-2014标准,针对具体场景调整参数长度和密钥派生策略。
原文始发于微信公众号(利刃信安):【能力验证】采用基于SM4-ECB算法的对称加解密技术,实现读卡器对机房访问人员的身份鉴别的详细过程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论