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_3 SM9加密算法
内容加密算法标识 SGD_SM4_CCM 基于SM4算法CCM加密算法
内容加密算法标识 SGD_SM4_GCM 基于SM4算法GCM加密算法


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

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

参数名称 类型 要求 参数取值 说明
kty 字符串 必选 EC ECC密钥类
kty 字符串 必选 oct 对称密钥或字符串类
crv 字符串 kty取值EC sm2p256v1  sm2算法曲线
crv 字符串 kty取值EC sm9curve sm9算法曲线
x 字符串 kty取值EC,crv取sm2p256v1 base64url编码 sm2算法公钥x取值
y 字符串 kty取值EC,crv取sm2p256v1 base64url编码 sm2算法公钥y取值
id 字符串 kty取值EC,crv取sm9curve base64url编码 sm9用户标识
hid 整数 kty取值EC,crv取sm9curve 无符号整数 sm9私钥生成函数标识
x_pub 字符串 kty取值EC,crv取sm9curve base64url编码 sm9主公钥x坐标
y_pub 字符串 kty取值EC,crv取sm9curve base64url编码 sm9主公钥y坐标
k 字符串 kty取值oct base64url编码 对称密钥
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
待签名对象M JOSE头部编码.有效载荷编码
M的签名结果(base64url) pcQI2trgy0Y-nCrl1C1Z5VPCLbNPQcq8ouF3lUANFVQMozHPv5aNHCQzeOv8ysplYSfLLYoVWQxut2eWHtwriA

        SM3消息鉴别码实例

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

{

        "alg":"SGD_SM3_HMAC"

}

JOSE头部编码(base64url) eyJhbGciOiJTR0RfU00zX0hNQUMifQ
验证码输入参数M eyJhbGciOiJTR0RfU00zX0hNQUMifQ.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
随机数IV EjRWeJCrze8
额外可鉴别数据A eyJhbGciOiJTR0RfU00yXzMiLCJlbmMiOiJTR0RfU000X0NDTSIsIng1dCNzbTMiOiJsM245dHZUTGd1RVhSb3V0MHdLRnA1NUlHRUVNZjBETXJDeWlqZFh6Y3lnIn0
M加密密文编码Ciphertext(base64url) d5doM5Y7UBUc-WXiJRgERw
M加密标志编码Tag(base64url) RAPO79sKY5hqSQ
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐