Web应用JSON数据保护(密码算法、密钥、数字签名和数据加密)

1.JSON(JavaScript Object Notation)
JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。JSON通过简单的key-value键值对来描述数据,可以被广泛用于网络通信、数据存储等各种应用场景,被广泛应用于互联网前后端数据交互与传输之中。
例如,在web应用中客户端向服务器发送一个HTTP请求并期望返回一些数据时,服务器可以使用JSON作为响应的数据格式,将数据以JSON的形式返回给你。以下是一个实际的JSON数据示例:
{
  "name": "John",
  "age": 30,
  "city": "New York",
  "email": "john@example.com"
}
上面的JSON数据描述了一个人的信息,包括姓名、年龄、所在城市和电子邮件地址。在网络通信中,你可以使用这个JSON数据在客户端和服务器之间传输,以便在你的应用程序中展示或处理这些数据。
目前常见的对JSON数据进行加密保护的方法:
(1)使用HTTPS协议进行数据传输可以提供端到端的加密保护。HTTPS使用SSL/TLS协议对通信数据进行加密,确保数据在传输过程中被加密,并且只有发送方和接收方能够解密和读取传输的数据。
(2)使用加密算法,如AES或RSA等,对JSON数据进行加密。发送方使用公钥加密数据,接收方使用私钥解密数据。这样可以确保只有有权访问私钥的接收方才能解密和读取数据。
(3)使用数字签名来验证JSON数据的完整性和真实性。发送方使用私钥对JSON数据进行签名,接收方使用发送方的公钥验证签名的有效性。这样可以确保接收到的数据没有被篡改,并且是发送方发送的真实数据。

2.国密JSON数据保护相关标准
(1)《GMT 0125.1-2022 JSON Web 密码应用语法规范第1部分 算法标识》
定义JSON web密码应用的算法标识,包括数字签名算法标识、消息鉴别算法标识、密钥加密密钥算法标识、内容加密算法标识。

类别标识说明
数字签名算法标识

SGD_SM3_SM2

基于SM3和SM2的数字签名算法
消息鉴别算法标识SGD_SM3_HMAC基于SM3的消息鉴别算法
密钥加密密钥算法标识SGD_SM2_3

SM2公钥加密算法

密钥加密密钥算法标识SGD_SM9_3SM9加密算法
内容加密算法标识SGD_SM4_CCM基于SM4算法CCM加密算法
内容加密算法标识SGD_SM4_GCM基于SM4算法GCM加密算法


(2)《GMT 0125.4-2022 JSON Web 密码应用语法规范第4部分 密钥》

JWK(JSON Web Key)是标识密钥信息的JSON对象,具体参数定义如下。

参数名称类型要求参数取值说明
kty字符串必选ECECC密钥类
kty字符串必选oct对称密钥或字符串类
crv字符串kty取值ECsm2p256v1 sm2算法曲线
crv字符串kty取值ECsm9curvesm9算法曲线
x字符串kty取值EC,crv取sm2p256v1base64url编码sm2算法公钥x取值
y字符串kty取值EC,crv取sm2p256v1base64url编码sm2算法公钥y取值
id字符串kty取值EC,crv取sm9curvebase64url编码sm9用户标识
hid整数kty取值EC,crv取sm9curve无符号整数sm9私钥生成函数标识
x_pub字符串kty取值EC,crv取sm9curvebase64url编码sm9主公钥x坐标
y_pub字符串kty取值EC,crv取sm9curvebase64url编码sm9主公钥y坐标
k字符串kty取值octbase64url编码对称密钥
use字符串key取值EC(可选)sig公钥用法,签名
use字符串key取值EC(可选)enc公钥用法,加密
key_ops数组可选

sign

verigy

encrypt

decrypt

wrapKey

unwrapKey

deriveKey

deriveBits

密钥操作字符串数组
alg字符串可选

SGD_SM3_SM2

SGD_SM3_HMAC
SGD_SM2_3
SGD_SM9_3
SGD_SM4_CCM
SGD_SM4_GCM

标识密钥相关参数
kid字符串可选ID密钥ID
x5u字符串可选URI证书URL
x5c数组可选JSON字符串数组证书链
x5t#sm3字符串可选base64url编码证书sm3杂凑值

最后,参数keys表示一个JWK集合,例如如下JWK集合中包含

(1)SM2签名公钥

(2)SM2加密公钥

(3)对称密钥(用于SM3-HMAC的key)

(4)SM2验签证书

{

"keys":

 [

        {        

                "kty":"EC"

                "crv":"sm2p256v1"

                "usg":"sig"

                "x":"KkiOvc0rfJKjVEDwrSzhPCJiZS0-H32KDeBk3_RZ2PQ"

                "y":"BxAmH6GXCTbD_VMhBDIwHUHJgE5AMGmZguPIus9ve_8"

        },

        {

                "kty":"EC"

                "crv":"sm2p256v1"

                "usg":"enc"

                "x":"1atDIhF_9PQPSjwmx3KUMZcUM9TPrGQ95oakHKpxW_0"

                "y":"cDImanzNUiT_t7lxIvCR6ooYsRlJqSDGW3XGbiQr5Kg"

        },

        {

                "kty":"oct"

                "alg":"SGD_SM3_HMAC"

                "k":"NiWEDbx7DGGMXMkWyePWtd64R8Y10hf4OdA4alcfGPA"

        },

        {

                “kty”:"EC"

                "crv":"sm2p256v1"

                "use":"sig"

                "x5c":

                ["MIIClzCCAjygAwIBAgIQdd/IVUqMA6s1z1nouGE7njAMBggqgRzPVQGDdQUAMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVOUkNBQzEPMA0GA1UEAwwGUk9PVENBMB4XDTEzMDExNjExMDczMVoXDTMzMDExMTExMDczMVowRDELMAkGA1UEBhMCQ04xDTALBgNVBAoMBEJKQ0ExDTALBgNVBAsMBEJKQ0ExFzAVBgNVBAMMDkJlaWppbmcgU00yIENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEioqqRw0qmjPYUF+6SWgWI1JzDHPGO0iTjSa5m0MuR/QB83yLBknccZ3T1qwdgv27e3qqKMdA3U3ipZkz6qxVk6OCASIwggEeMB8GA1UdIwQYMBaAFEwysZfZMxvEpgXBxuWLYlvwl3ZYMA8GA1UdEwEB/wQFMAMBAf8wgboGA1UdHwSBsjCBrzBBoD+gPaQ7MDkxCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVOUkNBQzEMMAoGA1UECwwDQVJMMQwwCgYDVQQDDANhcmwwKqAooCaGJGh0dHA6Ly93d3cucm9vdGNhLmdvdi5jbi9hcmwvYXJsLmNybDA+oDygOoY4bGRhcDovL2xkYXAucm9vdGNhLmdvdi5jbjozODkvQ049YXJsLE9VPUFSTCxPPU5SQ0FDLEM9Q04wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQf5s/Uj8UiKpdKKYoV5xbJkjTEtjAMBggqgRzPVQGDdQUAA0cAMEQCIFiMoH1BR7I3DmlPk5uhui/W2cX6iPAdnXI4LSPUg9T9AiB06XDp+wsPScMBYzRuY5xBC7IiC+nj+ehMDmkLD4mXKg=="]

        }

]        

}

 (3)《GMT 0125.2-2022 JSON Web 密码应用语法规范第2部分 数字签名》

JWS是使用JSON方式来表示对消息数据的数字签名或消息鉴别码的数据结构,JWS由JOSE头、JWS有效载荷和JWS签名组成。

        JOSE头部参数定义

消息数据的紧凑序列化结果形式为:(仅支持一个签名或消息鉴别码)

base64url(UTF8(JWS保护头部)||'.'||base64url(JWS有效载荷)||'.'||(JWS签名)

消息数据的JSON序列化有两种形式,通用JSON序列化和扁平JSON序列化,前者可以包含一个签名对象组,后者只能表示一个JWS签名对象。

        通用JSON序列化

        

        扁平JSON序列化

        

        SM2签名实例

字段内容
有效载荷(明文)message digest
有效载荷编码(base64url)bWVzc2FnZSBkaWdlc3Q
签名算法(标识)SGD_SM3_SM2
sm2数字证书(base64)如上(MIIClzCCAjyg......mXKg==)
sm2数字证书sm3杂凑值(base64url)l3n9tvTLguEXRout0wKFp55IGEEMf0DMrCyijdXzcyg
JOSE头部

{

        "alg":"SGD_SM3_SM2",

        "x5t#sm3":"l3n9tvTLguEXRout0wKFp55IGEEMf0DMrCyijdXzcyg"

}

JOSE头部编码(base64url)e8KgImFsZyI6IlNHRF9TTTNfU00yIu-8jCJ4NXQjc20zIjoibDNuOXR2VExndUVYUm91dDB3S0ZwNTVJR0VFTWYwRE1yQ3lpamRYemN5ZyJ9
待签名对象MJOSE头部编码.有效载荷编码
M的签名结果(base64url)pcQI2trgy0Y-nCrl1C1Z5VPCLbNPQcq8ouF3lUANFVQMozHPv5aNHCQzeOv8ysplYSfLLYoVWQxut2eWHtwriA

        SM3消息鉴别码实例

字段内容
有效载荷(明文)message hmac
有效载荷编码(base64url)bWVzc2FnZSBobWFj
算法标识SGD_SM3_HMAC
Key(hex)59276E27D506861A16680F3AD9C02DCCEF3CC1FA3CDBE4CE6D54B80DEAC1BC21
JOSE头部

{

        "alg":"SGD_SM3_HMAC"

}

JOSE头部编码(base64url)eyJhbGciOiJTR0RfU00zX0hNQUMifQ
验证码输入参数MeyJhbGciOiJTR0RfU00zX0hNQUMifQ.bWVzc2FnZSBobWFj
HMAC(base64url)XFLRB4aC6o3zQrh55vfAzswuHVLfuwFhyAonMV24Qss

(4)《GMT 0125.3-2022 JSON Web 密码应用语法规范第3部分 数据加密》

JWE是使用JSON方式来表示数据加密的数据结构,JWE由JOSE头部、JWE密钥密文、JWE初始向量、JWE额外可鉴别数据、JWE密文和JWE鉴别标识组成。

        JWE头部参数定义

        JWE密钥加密算法

        SM2公钥加密算法(SGD_SM2_3)、SM9加密算法(SGD_SM9_3),杂凑算法均指定使用SM3。

        JWE内容加密算法

        使用可鉴别加密机制算法(SGD_SM4_CCM和SGD_SM4_GCM),具体算法要求如下。

        基于SGD_SM2_3(密钥加密算法)和SGD_SM4_CCM(内容加密算法)的数据加密实例

字段内容
待加密数据M(明文)message encryption
加密密钥算法(标识)SGD_SM2_3
内容加密算法(标识)SGD_SM4_CCM
sm2数字证书(base64)如上(MIIClzCCAjyg......mXKg==)
sm2数字证书sm3杂凑值(base64url)l3n9tvTLguEXRout0wKFp55IGEEMf0DMrCyijdXzcyg
JOSE头部

{

        "alg":"SGD_SM2_3",

        "enc":"SGD_SM4_CCM",

        "x5t#sm3":"l3n9tvTLguEXRout0wKFp55IGEEMf0DMrCyijdXzcyg"

}

JOSE头部编码(base64url)eyJhbGciOiJTR0RfU00yXzMiLCJlbmMiOiJTR0RfU000X0NDTSIsIng1dCNzbTMiOiJsM245dHZUTGd1RVhSb3V0MHdLRnA1NUlHRUVNZjBETXJDeWlqZFh6Y3lnIn0
信宿SM2密钥

{
    "kty":"EC",
    "crv":"sm2p256v1",
    "x":"h2Mb1HuPNTgNehMLz5IoR3cVhlu-EmFf-cHHml_kZGw",
    "y":"9s4n5s6nZ-fJ4SuVaU-fUkxTIgFvZH4LlJRkstM8iJA",
}

d="AsSpsb0oqEJc1S603kf5l6yW-B2YyS6UZqOg5QhuIjg"

CEK内容加密密钥(128位随机数)719C332571B58835503F8EC25FB81EDA
信宿公钥对CEK加密(base64url)BGOY2r20QSlxvN-UDQbgYKCCFJmKiaHsItrC-pZGsYGhrT_j-dS0t-y7bnPKO3gRSyjvGHXGLYdsVRr2MEzh2s7pPvHRGN-bZ_AuZmRA8pH8M7LI1VJlaUfxif04jcXWTUma8n76fTSxu1Kz3w2ABxk
随机数IVEjRWeJCrze8
额外可鉴别数据AeyJhbGciOiJTR0RfU00yXzMiLCJlbmMiOiJTR0RfU000X0NDTSIsIng1dCNzbTMiOiJsM245dHZUTGd1RVhSb3V0MHdLRnA1NUlHRUVNZjBETXJDeWlqZFh6Y3lnIn0
M加密密文编码Ciphertext(base64url)d5doM5Y7UBUc-WXiJRgERw
M加密标志编码Tag(base64url)RAPO79sKY5hqSQ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python面向对象基础

Python面向对象基础 一、概念1.1面向对象的设计思想1.2 面向过程和面向对象1.2.1 面向过程1.2.2 面向对象1.2.3 面向过程和面向对象的优缺点 二、类和对象2.1 概念2.2 类的定义2.3 对象的创建2.3.1 类中未定义构造函数2.3.2 类中定义构造函数 2.4 类的设计 三、类中的成员3.1 变…

Python教程-数组

作为软件开发者,我们总是努力编写干净、简洁、高效的代码。在本文中,我们将探索 Python 数组的各种特性和功能。我们将学习如何在 Python 中创建、操作和使用数组,以及数组与 Python 编程语言中的其他数据结构有何不同。我们的目标是提供有关…

资源文件、布局管理器、样式表拓展

QT 资源文件 提供了和本地路径无关的资源管理。 图片资源的获取&#xff1a;阿里巴巴矢量图库&#xff08;&#x1f448; 安全链接&#xff0c;放心跳转&#xff09; widget.ui .qrc widget.h #ifndef WIDGET_H #define WIDGET_H#include <QtWidgets>namespace Ui { c…

Plonky2 = Plonk + FRI

Plonky2由Polygon Zero团队开发&#xff0c;实现了一种快速的递归SNARK&#xff0c;据其团队公开的基准测试&#xff0c;2020年&#xff0c;以太坊第一笔递归证明需要60s生成&#xff0c;而于今Plonky2在 MacBook Pro上生成只需 170 毫秒。 下面将逐步剖析Plonky2。 整体构造 …

活久见—当设置不同坐标系统时,ArcMap中的图形相关位置关系会变化

这两天一件十分神奇的事情发生了&#xff1a;当设置不同坐标系统时&#xff0c;ArcMap中的图形相对位置关系会变化。 事情起因是这样的&#xff1a;博主和同行用ArcMap同时验证2个相邻多边形的相对位置关系&#xff0c;见下图图1和图2的多边形&#xff0c;在博主的ArcMap中&am…

大电流H桥电机驱动电路的设计与解析(包括自举电路的讲解,以IR2104+LR7843为例)

大电流H桥电机驱动电路的设计与解析&#xff08;包括自举电路的讲解&#xff0c;以IR2104LR7843为例&#xff09; 电机驱动板主要采用两种驱动芯片&#xff0c;一种是全桥驱动&#xff08;如&#xff1a;HIP4082&#xff09;&#xff0c;一种是半桥驱动&#xff08;如&#xff…

单片机语言--C51语言的数据类型以及存储类型以及一些基本运算

C51语言 本文主要涉及C51语言的一些基本知识&#xff0c;比如C51语言的数据类型以及存储类型以及一些基本运算。 文章目录 C51语言一、 C51与标准C的比较二、 C51语言中的数据类型与存储类型2.1、C51的扩展数据类型2.2、数据存储类型 三、 C51的基本运算3.1 算术运算符3.2 逻辑…

docker学习(七、搭建mysql8.2主从)

一、主库搭建 1.构建主库镜像 # 运行mysql镜像&#xff0c;配置端口3307为主库 docker run -p 3307:3306 --name mysql-master --privilegedtrue -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc…

前端:HTML+CSS+JavaScript实现轮播图2

前端&#xff1a;HTMLCSSJavaScript实现轮播图2 1. 和之前版本的区别2. 实现原理3. 针对上述的改进3. 参考代码 1. 和之前版本的区别 之前发布的那篇关于轮播图的文章在这&#xff1a;前端&#xff1a;HTMLCSSJavaScript实现轮播图&#xff0c;只能说存在问题吧&#xff01;比…

HuggingFace学习笔记--Prompt-Tuning、P-Tuning和Prefix-Tuning高效微调

1--Prompt-Tuning 1-1--Prompt-Tuning介绍 Prompt-Tuning 高效微调只会训练新增的Prompt的表示层&#xff0c;模型的其余参数全部固定&#xff1b; 新增的 Prompt 内容可以分为 Hard Prompt 和 Soft Prompt 两类&#xff1b; Soft prompt 通常指的是一种较为宽泛或模糊的提示&…

搭乘“低代码”快车,引领食品行业数字化转型全新升级

数字化技术作为重塑传统行业重要的力量&#xff0c;正以不可逆转的趋势改变着企业经营与客户消费的方式。 在近些年的企业数字化服务与交流过程中&#xff0c;织信团队切实感受到大多数企业经营者们从怀疑到犹豫再到焦虑最终转为坚定的态度转变。 在这场数字化转型的竞赛中&a…

VS2009和VS2022的错误列表可复制粘贴为表格

在VS2019或VS2022中&#xff0c;可看到如下错误列表&#xff1a; 如果复制这两行错误信息&#xff1a; 然后把它粘贴到word文件&#xff0c;就可以看到以下表格&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0020 未定义标识符 "dd"…

0基础学java-day16-(坦克大战[1])

一、 坦克大战游戏演示 1 游戏演示 2.为什么写这个项目 3.写项目前的提醒 二、java 绘图坐标体系 1 坐标体系-介绍 2 坐标体系-像素 3 介绍-快速入门 package com.hspedu.draw;import javax.swing.*; import java.awt.*;/*** author 林然* version 1.0* 演示如何在面板画圆…

【python可视化系统源码】基于爬虫与可视化的电影推荐系统课题背景、目的、意义、研究思路、研究方法

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1a…

从简单到入门,一文掌握jvm底层知识文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

matlab RGB三元组和十六进制的转换

matlab画柱状图改颜色的时候&#xff0c;用三元组的形式&#xff0c;范围是[0&#xff0c;1] 我们获得了十六进制 到网站转换为[0,255] https://c.runoob.com/front-end/55/ 然后将得到的值/255 输入matlab就可以了

Bean作用域和生命周期

小王学习录 前言Bean的作用域什么是Bean的作用域Bean的六种作用域1. 单例作用域 singleton2. 原型作用域 prototype (多例作用域)3. 请求作用域 request4. 会话作用域 session5. 全局作用域 application6. Http WebSocket作用域 websocket Spring的执行流程和Bean的生命周期Spr…

网页设计--第6次课后作业

试用Vue相关指令完成对以下json数据的显示。显示效果如下&#xff1a; 其中&#xff1a;gender1 显示为女&#xff0c;gender2显示为男。价格超过30元&#xff0c;显示“有点小贵”。价格少于等于30元&#xff0c;则显示“价格亲民”。 data: {books: [{"id": "…

二百一十四、Linux——Linux系统时间比电脑时间慢5分钟

一、目的 服务器重启后&#xff0c;发现Linux的系统时间比电脑时间慢5分钟&#xff0c;于是看了些博客&#xff0c;终于找到了解决方法&#xff0c;记录一下&#xff0c;以防止后面出现同样的问题 二、问题 通过date查看&#xff0c;Linux系统时间比电脑时间慢5分钟 &#…

字节跳动ZNS SSD应用案例解析

一、ZNS SSD基本原理 ZNS SSD的原理是把namespace空间划分多个zone空间&#xff0c;zone空间内部执行顺序写。这样做的优势&#xff1a; 降低SSD内部的写放大&#xff0c;提升SSD的寿命 降低OP空间&#xff0c;host可以获得更大的使用空间 降低SSD内部DRAM的容量&#xff0c;…