当前位置: 首页 > news >正文

前后端国密加密传输用户密码流程

一、国密算法介绍

SM2:非对称加密,由公钥和私钥组成,公钥可以公开,私钥不允许公开,公钥的加密结果只有私钥能够解开,公钥加密相同内容,每次加密结果不同。

SM3:哈希算法,相同的内容哈希算法结果相同。

SM4:对称加密,使用一个密钥对原文进行加密,对密文进行解密。

二、工作流程

服务端与客户端使用一对SM2密钥,建议SM2公钥通过调用服务端接口获取,不要硬编码在客户端。
这里用保存用户密码流程举例:

  1. 客户端请求服务端生成随机数,服务端保存该随机数

服务端随机数作为server_nonce,nonce是指一个仅使用一次的随机数或令牌,用于确保某次通信或交易的唯一性,防止恶意用户重复使用有效请求,比如攻击者拦截登陆请求,虽然无法解密请求内容,但是可以将请求信息重复发送,模拟用户登陆,如果请求中只包含用户密码而不包含server_nonce,会导致攻击者成功登陆的安全风险。

  1. 客户端生成客户端随机数,与服务端随机数按指定规则成SM4秘钥。

引入客户端随机数使最终的对称密钥由两端共同贡献(server_nonce + client_nonce),这样即使有人知道server_nonce,没有客户端随机数也无法推导出会话密钥,增加抗重放与密钥不可预测性。

  1. 客户端使用SM4秘钥加密原文,得到国密加密结果,SM4密钥由服务端随机数与客户端随机数生成,所以每次密钥不同,每次加密结果不同。
  2. 客户端使用SM2公钥加密客户端随机数。

使客户端随机数在传输中被保护,只有持有 SM2 私钥的服务器可以恢复 client_nonce。这样即便攻击者截获了客户端随机数密文,也无法得到 client_nonce,从而无法派生出 SM4 密钥解密密码密文。

  1. 客户端将SM4加密的密码与SM2加密的客户端随机数一起发送给服务端。

把加密后的密码与加密的客户端随机数组合发送,服务端能安全获得 client_nonce(解密 SM2),进而和已存 server_nonce 共同派生 SM4 密钥并解密密码。

  1. 服务端使用SM2私钥解密SM2公钥加密的客户端随机数,得到客户端随机数,与保存的服务端随机数共同生成SM4秘钥。
  2. 服务端使用SM4秘钥解密加密结果,得到原始密码。
  3. 服务端使用SM3对原始密码进行哈希运算,保存到数据库。
http://www.xdnf.cn/news/1464859.html

相关文章:

  • Unity 解决天空盒中间出现一条线
  • flink 伪代码
  • 高效管理网络段和端口集合的工具之ipset
  • Bug排查日记:高效记录与解决之道
  • 高通AR1平台Recovery架构分析与自动恢复出厂设置实现
  • 从 elecworks 到云端协同:SOLIDWORKS Electrical 发展历史 + 核心功能 + 采购指南
  • Linux 磁盘扩容及分区相关操作实践
  • 从Java全栈到云原生:一场技术深度对话
  • Golang语言设计理念
  • 【GEOS-Chem伴随模型第一期】GEOS-Chem Adjoint 模型详解
  • 常见Bash脚本漏洞分析与防御
  • 【Flutter】RefreshIndicator 无法下拉刷新问题
  • 【存储选型终极指南】RustFS vs MinIO:5大维度深度对决,95%技术团队的选择秘密!
  • LeetCode 131 分割回文串
  • 【LeetCode热题100道笔记】删除链表的倒数第 N 个结点
  • Kafka核心原理与常见面试问题解析
  • 《AI 问答系统:从开发到落地,关键技术与实践案例全解析》
  • 【技术教程】如何将文档编辑器集成至基于Java的Web应用程序
  • c++工程如何提供http服务接口
  • 基于 GEE 批量下载 Landsat8 地表温度(LST)数据
  • 【计算机科学与应用】砚文化虚拟博物馆的Unity3D设计
  • 理解损失函数:机器学习的指南针与裁判
  • 踩坑实录:Django继承AbstractUser时遇到的related_name冲突及解决方案
  • 【Flask】测试平台中,记一次在vue2中集成编辑器组件tinymce
  • XR数字融合工作站打造智能制造专业学习新范式
  • windows通过xrdp远程连接Ubuntu黑屏问题解决
  • FDTD_3 d mie_仿真
  • 计算机毕设选题:基于Python数据挖掘的高考志愿推荐系统
  • AI+消费,阿里的新故事很性感
  • 新后端漏洞(上)- Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)