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

验证Apple签名遇椭圆曲线点错误,求可用Python实现示例

解决SKAdNetwork签名验证中"Unsupported elliptic curve point type"错误

问题原因

你使用的Apple SKAdNetwork公钥是PKCS#8格式的DER编码Base64字符串,而非裸椭圆曲线点数据,from_encoded_point方法仅用于加载原始的曲线点编码,因此会抛出类型不支持的错误。

正确实现示例

使用cryptography库的load_der_public_key方法加载PKCS#8格式的公钥,以下是可运行的验证代码:

# cryptography==37.0.4
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives.serialization import load_der_public_key
import base64

# 替换为实际的SKAdNetwork回传原始JSON字节(不能修改格式、顺序、空格)
data = b'{"version":"2.0","ad-network-id":"com.example","campaign-id":123,"transaction-id":"abc123","app-id":"com.example.app","timestamp":1620000000,"redownload":false}'

# 替换为实际回传的签名(先做Base64解码)
signature = base64.b64decode("实际签名的Base64字符串")

# Apple官方提供的SKAdNetwork公钥Base64
public_key_base64 = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWdp8GPcGqmhgzEFj9Z2nSpQVddayaPe4FMzqM9wib1+aHaaIzoHoLN9zW4K8y4SPykE3YVK3sVqW6Af0lfx3gg=="
public_key_bytes = base64.b64decode(public_key_base64)

# 加载PKCS#8格式的公钥
apple_public_key = load_der_public_key(public_key_bytes)

try:
    # SKAdNetwork采用ECDSA-SHA256算法验证签名
    apple_public_key.verify(
        signature,
        data,
        ec.ECDSA(hashes.SHA256())
    )
    print("签名验证成功")
except Exception as e:
    print(f"签名验证失败: {str(e)}")

关键注意事项

  • 验证时必须使用回传的原始JSON字符串字节,不能修改任何格式(包括空格、键值对顺序),否则验证会失败。
  • SKAdNetwork的签名是ASN.1 DER编码格式,cryptography的verify方法会自动处理该格式,无需额外转换。
  • 确保使用Apple官方发布的SKAdNetwork公钥,格式为PKCS#8 DER Base64。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:22:53