附录 A. 加密中间值
附录 A. 加密中间值
此处给出第 5 节示例所计算的中间值. 下列 base64url 值中的空白可以去除.
计算的输入如下:
明文 (Plaintext): V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24
应用服务器公钥 (as_public):
BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIg
Dll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8
应用服务器私钥 (as_private): yfWPiYE-n46HLnH0KqZOF1fJJU3MYrct3AELtAQ-oRw
用户代理公钥 (ua_public):
BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-
JvLexhqUzORcx aOzi6-AYWXvTBHm4bjyPjs7Vd8pZGH6SRpkNtoIAiw4
用户代理私钥 (ua_private): q1dXpw3UpT5VOmu_cf_v6ih07Aems3njxI-JWgLcM94
Salt: DGv6ra1nlYgDCS1FRnbzlw
认证秘密 (auth_secret): BTBZMqHH6r4Tts7J_aSIgg
注意只需知道其中一个私钥. 应用服务器随机生成 salt, 对接收方而言 salt 是输入.
由此得到下列中间值:
ECDH 共享秘密 (ecdh_secret): kyrL1jIIOHEzg3sM2ZWRHDRB62YACZhhSlknJ672kSs
用于密钥组合的伪随机密钥 (PRK_key): Snr3JMxaHVDXHWJn5wdC52WjpCtd2EIEGBykDcZW32k
密钥组合的 info (key_info):
V2ViUHVzaDogaW5mbwAEJXGyvs3942BVG
q8e0PTNNmwR zr5VX4m8t7GGpTM5FzFo7OLr4BhZe9MEebhuPI-OztV3
ylkYfpJGmQ22ggCLDgT-M_SrDepxkU21WCP3O1SUj0Ew
bZIHMtu5pZpTKGSCIA5Zent7wmC6HCJ5mFgJkuk5cwAv MBKiiujwa7t45ewP
内容加密密钥导出的输入密钥材料 (IKM): S4lYMb_L0FxCeq0WhDx813KgSYqU26kOyzWUdsXYyrg
内容加密的 PRK (PRK): 09_eUZGrsvxChDCGRCdkLiDXrReGOEVeSCdCcPBSJSc
内容加密密钥导出的 info (cek_info): Q29udGVudC1FbmNvZGluZzogYWVzMTI4Z2NtAA
内容加密密钥 (CEK): oIhVW04MRdy2XN9CiKLxTg
nonce 导出的 info (nonce_info): Q29udGVudC1FbmNvZGluZzogbm9uY2UA
Nonce (NONCE): 4h_95klXJ5E_qnoN
salt, 记录大小 4096 以及应用服务器公钥产生 86 字节首部:
DGv6ra1nlYgDCS1FRnbzlwAAEABBBP4z 9KsN6nGRTbVYI_c7VJSPQTBtkgcy27ml
mlMoZIIgDll6e3vCYLocInmYWAmS6Tlz AC8wEqKK6PBru3jl7A8
推送消息明文追加填充分隔符字节 (0x02) 后得到:
V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0 byBiZSBhIHdhdGVybWVsb24C
再使用 AES-GCM 加密明文, 得到密文:
8pfeW0KbunFT06SuDKoJH9Ql87S1QUrd irN6GcG7sFz1y1sqLgVi1VhjVkHsUoEs
bI_0LpXMuGvnzQ
将首部与密文拼接即得第 5 节所示结果.