以下是对用户登录流程中信息加密机制的核心内容总结,涵盖所有加密环节、算法实现细节和密码传输流程:
一、整体加密体系架构
-
分层加密机制
- 第一层(终端加密):SM2非对称加密 + SM3哈希摘要
- 第二层(传输加密):AES对称加密(可选)
- 第三层(通信加密):HTTPS协议保障
-
加密环节覆盖
graph LR A[用户输入] --> B[密码SM2加密] B --> C[SM3哈希摘要] C --> D{是否启用AES} D -->|是| E[整个请求AES加密] D -->|否| F[直接传输] E --> G[服务器解密] F --> G
二、核心加密算法实现细节
1. 国密算法实现(SM2/SM3)
-
SM2非对称加密
sm2.doEncrypt(str, spk, 1) // 参数:明文、服务器公钥、加密模式
- 曲线参数:256位素数域椭圆曲线
- 密钥长度:256位(32字节)
- 加密输出:04||X||Y||C(04标识未压缩点,X/Y为椭圆曲线点坐标,C为密文)
-
SM3哈希摘要
sm3(this.utf8Encode(cipherText))
- 哈希长度:256位
- 迭代压缩:64轮消息扩展
- 抗碰撞性:设计强度2¹²⁸
2. AES传输加密
CryptoJS.AES.encrypt(content, key, {mode: CryptoJS.mode.ECB, // 电子密码本模式padding: CryptoJS.pad.Pkcs7 // PKCS#7填充标准
})
- 密钥处理:
Base64.parse("GXyq3KiXdoulN/JJx7dDOQ==")
→ 128位密钥 - 块大小:128位(16字节)
- 加密轮数:10轮(128位密钥)
三、密码传输加密全流程
1. 密码加密阶段
-
输入处理:
- 用户名:
uname.trim()
(去除首尾空格) - 密码:原始字符串输入
- 用户名:
-
SM2加密:
cipherText = sm2.doEncrypt(pwd, serverPublicKey)
-
完整性保护:
digest = sm3(utf8Encode(cipherText)) // 对密文哈希
-
组合输出:
cipherText + ' ' + digest
(密文与摘要空格分隔)
2. 传输封装阶段
-
启用AES时:
reqStr = AES.encrypt(JSON.stringify({user: trimmedUsername,password: "SM2密文+摘要" }))
请求体:
{ userName, data: { reqStr } }
-
未启用AES时:
直接传输:{ user, password }
3. 服务器端验证流程
- 解密AES层(若启用)
- 验证SM3摘要:
received_digest == sm3(received_cipherText)
- SM2解密:
sm2.doDecrypt(cipherText, serverPrivateKey)
- 密码比对:
decryptedPassword == DB_storedHash
四、辅助安全机制
1. 数字签名
sign = sm2Encrypt(userName + date + digest + clientSign + publicKey)
- 签名元素:
- 时间戳:
new Date().getTime()
- 随机数:
CryptoJS.MD5(timestamp + random)
- 报文摘要:
sm3(msgStr)
- 时间戳:
2. Token生成机制
token = AES.encrypt({timestamp: currentTime,nonce: MD5(timestamp + random + url)
}) + ' ' + MD5(key)
- 有效期:基于时间戳控制
- 防重放:随机数+URL绑定
五、安全特性分析
安全特性 | 实现方式 | 防护目标 |
---|---|---|
保密性 | SM2+AES双重加密 | 防中间人窃听 |
完整性 | SM3摘要验证 | 防数据篡改 |
认证性 | 数字签名+Token | 身份合法性验证 |
不可否认性 | 客户端私钥签名 | 操作可追溯 |
时效性 | 时间戳+随机数 | 防重放攻击 |
六、关键技术亮点
- 国密算法融合:SM2/SM3/SM4完整生态应用
- 密钥分离机制:
- 客户端:动态生成密钥对(
generateKeyPairHex()
) - 服务器:固定公钥分发
- 客户端:动态生成密钥对(
七、附录
参考地址 https://github.com/JuneAndGreen/sm-crypto
sm2和sm3参考地址 https://github.com/yazhouZhang/js-sm2-sm3-sm4-sm9-zuc/tree/master