【安当产品应用案例100集】010-基于国密UKEY的信封加密应用案例

安当有个客户开发了一套C/S架构的软件,Server在云端,Client由不同的用户使用。最初软件设计开发的时候,没有考虑数据安全形势日渐严峻的问题,Server端和Client端直接就建立一个socket连接来进行通信,Server端发出去的数据还涉及到一些敏感字段和指令,随着越来越多的用户开始关注安全问题,这个安全架构显然已经不满足最基本的数据安全要求。
由于Client端数量较多,客户希望能有一种相对成本可控的安全加固方案。如下的案例介绍,我们会分享一下安当如何通过在Client端增加UKEY,通过信封加密的方法在应用层将数据加密,实现数据的安全传递的。
一、什么是信封加密
信封加密(Envelope Encryption)是一种高效的加密技术,特别适用于处理海量数据场景。顾名思义,信封加密是一种类似数字信封技术的加密手段,它通过将加密数据的数据密钥(Data Encryption Key, DEK)封入一个“信封”中进行存储、传递和使用,而不再直接使用用户的主密钥(Customer Master Key, CMK)来加密和解密数据。这种方式结合了对称加密(如AES)和非对称加密(如RSA)两种技术的优势。
通常各个厂家的KMS都提供了支持客户软件通过API调用来完成信封加密的过程。我们以安当的KSP密钥安全平台为例来看看信封加密的具体过程:
1. 生成密钥:
- 首先,通过KSP的GenerateDataKey接口生成一个数据密钥(DEK),这个接口会同时返回一个明文DEK和一个用CMK加密后的密文DEK。
- 接着,可以在本地生成RSA密钥对(如果需要的话,这一步不是必须的,因为DEK的密文已经由CMK加密)。
2. 加密数据:
- 使用明文DEK对需要加密的数据进行对称加密,生成密文数据。
- 将密文DEK(即DEK的密文)和密文数据一起存储或传输。这里的密文DEK和密文数据可以被形象地比喻为“信封”和“信件”。
再来看看具体解密过程:
1. 获取密钥:
- 从存储设备中取得密文DEK和密文数据。
- 如果使用了RSA加密DEK的密文,则需要使用RSA私钥解密密文DEK,得到明文DEK(这一步在实际场景中可以直接使用KSP的Decrypt接口解密密文DEK)。
2. 解密数据:
- 使用明文DEK对密文数据进行对称解密,得到原始数据。
二、C/S架构软件中的信封加密实例
该案例中,客户从综合数据安全解决方案的角度,计划在后续的迭代中引入密钥管理系统来进行完整的数据安全加固。在项目前期,先通过给Client配发UKEY智能密码钥匙,配合UKEY预置的RSA密钥对来实现信封加密机制,实现应用层的数据加密。
整个方案流程如下:

以上流程中,基于场景描述需要,我们给不同的密钥的不同的命名,具体含义如下:
- PUB-KEY:RSA加密公钥
- PRI-KEY:RSA加密私钥
- D-KEY:后台数据加密密钥
- S-KEY:临时会话密钥
方案流程只是原理示例,具体设计到的安当UKEY的一些接口使用,案例中就不赘述了。经过这一层安全加固之后,显而易见的两个好处:
- 首先传输的数据安全了:原来socket接口上的数据流,被S-KEY加密过了,即使被监听,监听者即使拿到加密后的S-KEY,没有UKEY内置的私钥,是没办法解密的。
- 其次Server端对Client有硬件令牌管控了,客户端配发UKEY的方式,也相当于每个客户端有了一个身份令牌。
三、安当的其他安全加固建议
安当目前帮客户实施的只是应用层的数据加密,C/S架构软件实现客户端和服务端之间的数据安全传输,需要一个系统的加固方案。
1. 应用加密技术确保应用层和传输层数据安全
传输层加密
- SSL/TLS协议:这是最常用的传输层加密协议之一,它可以在客户端和服务器之间建立一个加密的通道,确保数据在传输过程中的机密性和完整性。SSL/TLS协议通过握手过程协商加密密钥,并使用这些密钥对数据进行加密和解密。
应用层加密
- 对称加密:如AES(高级加密标准),客户端和服务端可以使用相同的密钥对数据进行加密和解密。但密钥的安全传输是一个问题,通常需要使用非对称加密技术来安全地交换密钥。
- 非对称加密:如RSA,客户端和服务器各自拥有一对公私钥。私钥保密,公钥公开。客户端可以使用服务器的公钥加密敏感数据或对称密钥,然后发送给服务器,服务器使用自己的私钥解密。
2. 安全协议的选择
- HTTPS:基于HTTP协议和SSL/TLS协议,为Web应用提供安全的数据传输。HTTPS是C/S架构中Web服务常用的加密通信协议。
- 自定义协议:在某些特定场景下,开发者可能会根据业务需求自定义安全协议,以确保数据传输的安全性和效率。
3. 数据完整性和校验
- 数字签名:服务端可以使用私钥对消息进行签名,客户端使用服务端的公钥验证签名的真实性,以确保消息在传输过程中未被篡改。
- 哈希校验:在数据传输前后使用哈希算法对数据进行校验,确保数据的完整性和一致性。
4. 访问控制和认证
- 用户认证:通过用户名、密码、令牌等方式对客户端进行身份认证,确保只有合法的用户才能访问服务端资源。
- 权限控制:根据用户的身份和角色,限制其对服务端资源的访问权限,防止未授权的数据访问。
5. 网络安全措施
- 防火墙:在服务器和网络边界部署防火墙,过滤非法访问和攻击流量,保护服务端资源的安全。
- 入侵检测系统:实时监控网络流量和服务器日志,检测潜在的入侵和攻击行为,并及时采取应对措施。
数据安全无止境,只有综合评估企业业务系统架构以及数据全生命周期的各个环节,才能在成本与安全之间达到一个合适的平衡。安当建议客户考虑数据全生命周期的安全方案,依托安当的KDPS解决方案,对生产环节数据、传输环节数据、存储环节数据都做好安全保护。
文章作者:太白 ©本文章解释权归安当西安研发中心所有
相关文章:
【安当产品应用案例100集】010-基于国密UKEY的信封加密应用案例
安当有个客户开发了一套C/S架构的软件,Server在云端,Client由不同的用户使用。最初软件设计开发的时候,没有考虑数据安全形势日渐严峻的问题,Server端和Client端直接就建立一个socket连接来进行通信,Server端发出去的数…...
扫码点餐系统小程序功能分析
扫码点餐系统小程序通常具备以下核心功能: 用户界面:提供直观易用的界面,方便用户浏览菜单、选择菜品、查看订单状态等 。菜单展示:展示餐厅的菜单,包括菜品图片、价格、描述等信息 。扫码点餐:用户通过…...
网络安全——基础知识记忆梳理
1. SQL注入攻击 SQL注入攻击是一种常见的网络安全威胁,它利用Web应用程序中对用户输入的数据的不正确处理,攻击者可以在SQL查询中注入恶意代码,从而执行非授权的数据库操作。这种攻击方式可以导致数据泄漏、数据篡改、绕过认证等多种安全问题…...
GitHub开源的轻量级文件服务器,可docker一键部署
文件服务器 介绍安装使用命令使用API调用 介绍 项目github官网地址 Dufs是一款由Rust编写的轻量级文件服务器,不仅支持静态文件服务,还能轻松上传、下载、搜索文件,甚至支持WebDAV,让我们通过Web方式远程管理文件变得轻而易举。…...
Scratch编程深度探索:解锁递归与分治算法的奥秘
标题:Scratch编程深度探索:解锁递归与分治算法的奥秘 在编程的世界里,递归和分治算法以其精妙的逻辑结构和解决问题的能力而著称。Scratch,这款专为儿童和初学者设计的图形化编程工具,是否能够支持实现这样复杂的逻辑…...
使用docker compose一键部署 Portainer
使用docker compose一键部署 Portainer Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 1、创建安装目录 mkdir /data/partainer/ -p && cd /data/partainer2、创建docker…...
js原生模板引擎
在JavaScript中,可以使用模板字符串(template strings)来创建简单的模板。模板字符串是用反引号(`)标识的字符串,其中内嵌表达式使用${}格式。 下面是一个简单的模板函数示例,它接受一个对象作为参数,并使用模板字符串来生成一个HTML字符串。 function createTemplat…...
Java面试题———MySql篇③
目录 1.查询语句执行流程 2.索引的数据结构是什么 3.数据库中的锁有哪些 4.MySQL日志类型 5.MySQL主从复制的流程 6.谈谈你对sql的优化的经验 1.查询语句执行流程 一条查询语句到达MySQL数据库之后,数据库中的各个组件会按照顺序执行自己的任务 首先是连接器…...
ArcGis在线地图插件Maponline(好用版)
ArcGis加载插件,可在线浏览谷歌地图、天地图、高德地图、必应地图等多种,包含街道、影像、标注地图等信息(谷歌地图需自备上网手段),免费注册账号即可使用,可加载无水印底图。 与大地2000坐标无需配准直接使…...
Chainlit接入DifyAI知识库接口快速实现自定义用户聊天界面
前言 由于dify只提供了一个分享用的网页应用,网页访问地址没法自定义,虽然可以接入NextWeb/ChatGPT web/open webui等开源应用。但是如果我们想直接给客户应用,还需要客户去设置配置,里面还有很多我们不想展示给客户的东西怎么办…...
《Python编程:从入门到实践》笔记(一)
一、字符串 1.修改字符串大小写 title()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写,其他的改为小写。 upper()将字母都改为大写,lower()将字母都改为小写。 2.合并(拼接)字符串 Python使用加号()来合并字符串。这种合…...
Linux入门——06 基础IO
1.什么是当前路径 exe -> /home/lin/Desktop/Linux_learn/fork_learn/test 当前进程执行是磁盘路径下的哪一个程序 cwd -> /home/lin/Desktop/Linux_learn/fork_learn 当前进程的工作目录------》当前进程 1.1当前路径这个地址能改吗? 可以,使…...
未来城市的科技展望
未来城市,将是科技与人文深度融合的产物,展现出一个全方位智能化、绿色生态且可持续发展的全新面貌。随着物联网、人工智能等技术的飞速发展,未来城市的轮廓逐渐清晰,它将为我们带来前所未有的生活体验。 在未来…...
DevOps安全性的重要性体现在哪?
DevOps的安全性,也称为DevSecOps,是DevOps领域中的一个重要方面,它强调将安全实践集成到DevOps流程中,以提高代码发布的质量和速度,并降低安全漏洞的风险。 DevOps安全性的重要性: 提高代码质量和速度&…...
【tip】数量级大小
大于1 量级英文名称中文名称yotta尧zetta泽exa艾peta拍tera太giga吉mega兆kilo千hecto百deca十 小于1 量级英文名称中文名称deci分centi厘milli毫micro微nano纳pico皮femto飞atto阿zepto仄yocto幺...
Java基础——自学习使用(static关键字)
一、static关键字是什么? static修饰的代码属于类,定义的变量存储在方法区的静态常量池当中 二、static可以修饰什么 1.static修饰变量 static修饰的变量叫做类变量,被所有该类产生的对象所共享,存储在方法区的静态常量池中 2…...
安装docker+docker远程连接
docker Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采⽤“沙盒”机制,容器之间不会存在任何接⼝。 docker架构 docker核心概念 1. 镜像(images):⼀个⾯向 docker 容器引擎的只读模板,…...
2080. 邻接点
代码 #include<bits/stdc.h> using namespace std; int main() {int n,e,i,j,x,y;cin>>n >> e;vector<vector<int>> adj(n1);for(i0;i<e;i){cin>>x>>y;adj[x].push_back(y);}for(i1;i<n;i)sort(adj[i].begin(),adj[i].end())…...
《计算机操作系统》(第4版)第7章 文件管理 复习笔记
第7章 文件管理 一、文件和文件系统 1. 数据项、记录和文件 数据组成可分为数据项、记录和文件三级,它们之间的层次关系如图7-1所示。 图7-1 文件、记录和数据项之间的层次关系 (1)数据项 在文件系统中,数据项是最低级的数据组织形式,可以分为…...
uniapp 修复使用 uni.saveImageToPhotosAlbum 方法在部分安卓手机上保存失败
场景:使用 uni.saveImageToPhotosAlbum 保存图片,其他手机都是可以的,但在鸿蒙系统的手机上出现了bug,报错Object {errMsg:"savelmageToPhotosAlbum:fai..errMsg:savelmageToPhotosAlbum:fail invalid filetype"} 原因&…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
