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

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.lryc.cn/news/259101.html

相关文章:

  • 【软件安装】VMware安装Centos7虚拟机并且设置静态IP,实现Windows和Centos7网络互相访问
  • 203. 移除链表元素
  • 最新鸿蒙HarmonyOS4.0开发登陆的界面1
  • 【模型训练】目标跟踪
  • zabbix——实现高效网络监控
  • LeetCode力扣每日一题(Java):58、最后一个单词的长度
  • 一、python requests爬虫[基础、上传文件、会话维持、代理设置]
  • ActiveMQ使用指南
  • 动态SQL学习及使用场景(简略)
  • 【算法每日一练]-动态规划(保姆级教程 篇13)POJ2686马车旅行 #POJ3254 玉米田 #POJ1185:炮兵阵地
  • 工业固体废物智能化综合管控平台
  • 玩转大数据12:大数据安全与隐私保护策略
  • Qt工程文件分离、Qtimer定时器、Qt Creator 常用快捷键
  • 验收支撑-软件项目验收计划书
  • SQL注入绕过技术
  • 锂电池基础知识及管理方式总结
  • 小红书基于零信任 SASE 办公安全解决方案,斩获 “IDC 中国 20 大杰出安全项目”
  • html通过CDN引入Vue使用Vuex以及Computed、Watch监听
  • 【LabVIEW学习】5.数据通信之TCP协议,控制电脑的一种方式
  • uview1 的u-tabs组件在微信小程序中会出现横向滚动条
  • 服务器ipv6地址显示“scope global dadfailed tentative noprefixroute”无法连通的问题处理一例
  • 深度学习学习顺序梳理
  • 机器学习实验六:聚类
  • 逆向思考 C. Fence Painting
  • 当当狸AR智能学习图集跨越千年文明传承,邀您“面对面”与虚拟诗人互动对诗
  • CESM笔记——component活动状态+compset前缀解析+B1850,BHIST区别
  • vue 页面跳转时,浏览器上方显示进度条
  • tqdm输出字符串被截断
  • Qt::UniqueConnection和lambda一块用无效
  • 四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛