You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java验证欧盟新冠疫苗二维码(EU COVID Vaccine QRCode)的签名

欧盟新冠疫苗接种二维码签名验证可行技术方案

欧盟新冠疫苗接种二维码遵循欧盟数字健康证书(原欧盟数字新冠证书EUDCC)技术规范,可通过非对称加密验签流程确认其签发机构合法性,具体方案如下:

核心原理

欧盟所有授权签发机构都会生成非对称加密密钥对:签发时使用私钥对证书内容签名,公钥由欧盟官方汇总公开,验证时仅需通过公钥即可完成签名合法性校验,无需联网对接签发机构。

具体执行步骤

  • 第一步:二维码原始内容解码
    扫码得到的原始字符串以HC1:为固定前缀,先去除前缀后对剩余内容做Base45解码,得到zlib压缩的二进制数据,再解压后得到CBOR格式的结构化数据包。
  • 第二步:拆分COSE签名结构
    解压后的CBOR数据包符合COSE(CBOR对象签名与加密规范)标准,可拆分出三个核心字段:证书原始 payload、数字签名值、签发机构的密钥ID(kid)。
  • 第三步:匹配官方授权公钥
    用拆分得到的kid匹配欧盟官方汇总的合法签发机构公钥列表,仅当kid存在于该列表中时,才有可能是官方授权签发的证书。
  • 第四步:签名校验
    用匹配到的公钥,结合COSE结构中标注的签名算法(主流为ES256、RS256),对payload的哈希值和签名值做校验,校验通过即可确认证书由对应授权机构签发、且内容未被篡改。

注意事项

必须使用欧盟官方发布的授权公钥列表做校验,使用第三方未认证的公钥列表可能导致伪造证书被误判为合法。
签名校验仅确认签发主体合法性和内容完整性,证书对应的接种记录是否符合各地防疫要求属于业务逻辑判断范畴,和签名校验流程无关。

极简Python实现示例(仅做逻辑参考)

import base45
import zlib
import cbor2
from cose.messages import CoseMessage

# 替换为实际扫码得到的二维码字符串
qr_raw = "HC1:NCF70T9XK...(此处为实际扫码内容)"

# 1. 内容解码
b45_data = qr_raw.removeprefix("HC1:")
compressed_data = base45.b45decode(b45_data)
cbor_data = zlib.decompress(compressed_data)

# 2. 解析COSE结构
cose_msg = CoseMessage.decode(cbor_data)
issue_kid = cose_msg.kid.hex()
cert_payload = cbor2.loads(cose_msg.payload)

# 3. 此处从官方公钥列表中匹配issue_kid对应的公钥,假设已拿到合法公钥official_pub_key
cose_msg.key = official_pub_key

# 4. 验签
sign_valid = cose_msg.verify_signature()
if sign_valid:
    print("签名合法,为官方授权机构签发")
else:
    print("签名无效,二维码可能被篡改或伪造")

内容的提问来源于stack exchange,提问作者MA1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:06:03