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

news2024/11/25 4:26:11

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.coloradmin.cn/o/1296959.html

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

相关文章

通过案例讲解MATLAB中的数据类型

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,贝叶斯滤波与Kalman估计、多传感器信息融合,机器学习,人工智能&#xff0c…

【算法题】一种字符串压缩表示的解压(js)

输入:2dff 输出 !error 两个d不需要压缩,故输入不合法 输入:4eA 输出:!error 全部由小写英文字母组成,压缩后不会出现,故输出不合法 function solution(str) {const error "!error";// 只能包含小写字母和数字 [^a-z0…

[gRPC实现go调用go]

1什么是RPC RPC:Remote Procedure Call,远程过程调用。简单来说就是两个进程之间的数据交互。正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者自身调用的,也就是本地过程调用。和本地过程调用相对的就是:假如两个…

ardupilot开发 --- git 篇

一些概念 工作区:就是你在电脑里能看到的目录;暂存区:stage区 或 index区。存放在 :工作区 / .git / index 文件中;版本库:本地仓库,存放在 :工作区 / .git 中 关于 HEAD 是所有本地…

FPGA设计时序分析概念之Timing Arc

目录 1.1 Timing Arc概念 1.2 Timing Arcs的类型 1.3 Timing Sense(时序感知) 1.4 参考资料 1.1 Timing Arc概念 在时序工具对设计进行时序分析时,经常会看到一个概念Timing Arch(时序弧)。Timing Arc是一个信号一个单元Cell的输入引脚Pin到该单元输出引脚Outpu…

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 变…

SAP UI5 walkthrough step3 Controls

在上一步&#xff0c;我们是直接用index.html 中的body 里面的DIVision去输出 hello world&#xff0c; 在这个章节&#xff0c;我们将用SAP UI5 的标准控件 sap/m/Text 首先&#xff0c;我们去修改 webapp/index.html <!DOCTYPE html> <html> <head><…

电脑软件:TileIconifier开始菜单美化工具介绍

目录 一、 软件介绍 二、软件功能 三、使用说明 四、软件下载 一、 软件介绍 TileIconifier是一款简单易用的win10开始菜单美化软件&#xff0c;该程序具备了简单直观的操作界面&#xff0c;打开软件后&#xff0c;您可以在快捷方式列表下选择要美化的快捷方式&#xff0c;…

年底不同外贸客户催单模板分享

最近工厂又爆单了&#xff0c;有些小的订单都没时间管了。时间过得很快&#xff0c;眼看就剩一个多月就春节&#xff0c;大家可以抓住这段时间催一下还有机会成单的客户&#xff0c;好为来年做准备&#xff01; 1.老客户模板 Dear xxx, Greetings. Do you have any new inqu…

springboot 集成Dubbo2.7.8 ,连接zookeeper 提示错误 zookeeper not connected

Dubbo 连接zookeeper时&#xff0c;提示“zookeeper not connected” java.lang.IllegalStateException: zookeeper not connectedat org.apache.dubbo.remoting.zookeeper.curator.CuratorZookeeperClient.<init>(CuratorZookeeperClient.java:83) ~[dubbo-2.7.8.jar:2.…

YouTube网红营销:出海品牌扩大影响力的关键

随着数字媒体的兴起&#xff0c;社交媒体已成为品牌与消费者之间建立联系的重要桥梁。其中&#xff0c;YouTube作为全球最大的视频分享平台&#xff0c;不仅拥有庞大的用户群体&#xff0c;还聚集了众多有影响力的网红。这些网红在各自的领域内拥有强大的话语权和号召力&#x…

需求产生技术,什么是光电混合缆?

光电混合缆是一种集成了光纤和导电铜线的混合形式的电缆&#xff0c;可以用一根线缆同时解决数据传输和设备供电的问题。在园区网络中&#xff0c;光电混合缆主要用于完成交换机与AP或远端模块之间的连接&#xff0c;用一根线缆同时完成AP或远端模块的数据传输和PoE供电。 随着…

快解析结合智邦国际使用教程

北京智邦国际软件技术有限公司&#xff0c;是经中华人民共和国工业和信息化部以及北京经济和信息化委员会评定和审核的双软企业&#xff0c;国家重点支持的高新技术企业。 十几年来致力于企业信息化&#xff0c;主要从事ERP、CRM、项目管理、人资管理、移动应用等企业管理软件的…

游戏王的题解

目录 原题&#xff1a; 时间&#xff1a;1s 空间&#xff1a;256M 题目描述 输入格式 输出格式 样例输入 样例输出 题目大意&#xff1a; 主要思路&#xff1a; dp转移&#xff1a; dp初始化&#xff1a; 代码&#xff1a; 原题&#xff1a; 时间&#xff1a;1s …

敏捷开发迭代缺陷统计的重要性

在敏捷开发中&#xff0c;迭代缺陷统计具有重要性&#xff0c;对团队和项目具有多方面的影响&#xff1a; 早期发现和解决问题&#xff1a; 迭代缺陷统计允许团队及时识别和定位在迭代中出现的问题。这有助于早期解决问题&#xff0c;避免问题扩大化&#xff0c;并最大程度地减…

MTU与MSS

MTU&#xff1a;一个网络包的最大长度&#xff0c;以太网中一般为1500各字节。 MSS&#xff1a;除去头部之后&#xff0c;一个网络包所能容纳的TCP数据的最大长度。 应用程序调用write后&#xff0c;将要发送的数据被交给TCP/IP协议栈进行。 协议栈不关心应用的数据内容&…

给你的Python程序添点Emoji魔法:使用Emoji模块增添趣味和个性!

当你想给你的Python程序增添一些趣味和个性时&#xff0c;Emoji模块是一个很有用的工具。Emoji模块允许你在Python中使用各种表情符号&#xff0c;从笑脸到动物&#xff0c;甚至是食物和天气等。在本篇博客中&#xff0c;我们将介绍如何在Python中使用Emoji模块&#xff0c;并展…

动态规划——完全背包问题(公式推导,组合、排列)

本文章是对于完全背包 一些题型(如题目所示&#xff0c;组合、排列和最小值类型)的总结和理解&#xff0c;依次记录一下&#xff0c;方便回顾与复习。 本文章是基于个人所总结 实现的&#xff0c;但在其中遇到了一些疑惑与困难&#xff0c;所以总结一篇与完全背包相关的问题。 …

本地数据备份与FTP远程数据迁移

数据是电脑中最重要的东西。为了保证数据安全&#xff0c;我们经常会对数据进行备份。之前一直采用将重要数据拷贝至移动硬盘的方式实现备份&#xff0c;实现简单但每次都需要把所有文件拷贝一次&#xff0c;当文件很大时效率较低。 因此&#xff0c;考虑使用 FreeFileSync 软…

【Flink系列五】Checkpoint及Barrier原理

本章内容 一致性检查点从检查点恢复状态检查点实现算法-barrier保存点Savepoint状态后端&#xff08;state backend&#xff09; 本文先设置一个前提&#xff0c;流处理的数据都是可回放的&#xff08;可以理解成消费的kafka的数据&#xff09; 一致性检查点&#xff08;che…