YD/T 3646-2020 标准解读

YD通信标准信息

现行

作者:标准下载站
发布时间:2026‑09‑10
2896 字
阅读约 10 分钟

一、标准适用范围与执行边界

  • 适用主体:移动应用程序开发者、应用分发平台(含应用商店、企业内部分发系统)、代码签名服务提供方、终端设备制造商(涉及签名验证模块);不适用于纯Web应用、小程序(非独立APK/IPA包形态)、固件级系统组件。
  • 适用场景:Android平台APK/AAB包、iOS平台IPA包的发布前签名;企业内部分发场景下自建签名服务部署;运营商定制ROM中预装应用的签名一致性校验;电信业务管理平台对接第三方应用时的签名合规性核验。
  • 排除条件:调试版本(debuggable=true)、未启用ProGuard/R8混淆且未配置签名配置文件的开发快照包、通过动态加载Dex/so绕过安装校验的插件化应用主包(若插件无独立签名机制则整包不适用);使用非国密算法(如RSA-1024、SHA-1)或未在工信部认证CA机构列表内的证书签发行为直接判定为不合规。

二、核心实操技术要求

  1. 证书与密钥管理:必须使用SM2算法生成密钥对,私钥存储于硬件安全模块(HSM)或通过国家密码管理局认证的密码产品(如USB Key),禁止明文存储于CI/CD服务器磁盘;证书须由工信部许可的电子认证服务机构(如CFCA、BJCA)颁发,且包含扩展字段subjectAltName=“CN=APP_NAME,OU=PACKAGE_NAME”。
  2. 签名流程强制项:Android需同时执行v1(JAR)、v2(APK Signature Scheme v2)、v3(APK Signature Scheme v3)三重签名;iOS需采用Apple Developer Program证书+timestamp server+hardened runtime配置,禁用adhoc临时签名;签名后须调用apksigner verify --verbose --print-certs验证v2/v3完整性,并输出SM2公钥哈希值(SHA256(SM2-PUB))。
  3. 签名信息嵌入规范:APK需在META-INF/MANIFEST.MF中写入“X-YD3646-Signature-Version: 2020”及“X-YD3646-Cert-Serial: [证书序列号十六进制]”;IPA需在_CodeSignature/CodeResources中添加键值对“yd3646-compliance”: true,并确保entitlements.plist包含get-task-allow=false与application-identifier匹配证书Subject CN。
  4. 验收检测项:应用分发平台须在上架前执行自动化检测——检查APK中CERT.RSA证书链是否完整回溯至根CA、v2/v3区块签名块是否覆盖全部文件字节、SM2签名值长度是否为64字节(r+s各32字节);iOS包须验证CMS签名时间戳是否在证书有效期内且偏差≤5分钟。

三、典型业务场景应用案例

场景类型落地操作合规验证点
金融类App企业内部分发使用自建HSM集群生成SM2密钥对,通过CFCA API接口申请带OU=“com.bank.mobile”字段的代码签名证书;CI流水线调用apksigner sign --ks hsm://slot_1 --ks-pass pass:HSM_PIN --v2-signing-enabled true --v3-signing-enabled true app-release.aab分发平台扫描APK获取X-YD3646-Cert-Serial,调用CFCA OCSP服务实时校验证书吊销状态;校验v3签名块中digests[0].digest_alg_id=0x07(对应SM3)
电信营业厅App多渠道打包同一基础包使用不同渠道标识(如channel=cmcc、channel=cucc)生成独立APK,每个渠道包均用同一SM2私钥执行v2/v3签名,MANIFEST.MF中X-YD3646-Signature-Version字段值统一为“2020”自动化工具比对各渠道包v3签名块中signatures[0].signedData.certificates[0].tbsCertificate.subject.serialNumber是否一致,且与CFCA证书库中备案序列号匹配
政务类iOS App上架App Store在Xcode Signing & Capabilities中选择已导入的SM2兼容证书(由BJCA颁发),勾选“Hardened Runtime”并启用“Library Validation”;Archive后使用altool --notarize-app提交至Apple Notary ServiceNotarization Report中确认“Code signature version: 500”且“Team ID”字段与BJCA证书Subject CN后缀一致;CodeResources中“yd3646-compliance”键值存在且为true

四、实操难点与解决方案

  • 难点1:Android Gradle Plugin 7.0+默认禁用v1签名导致老设备兼容失败
    解决方案:在build.gradle中显式启用v1,android { signingConfigs { release { v1SigningEnabled true; v2SigningEnabled true; v3SigningEnabled true } } }
  • 难点2:iOS使用SM2证书触发Xcode 14.3以上版本签名失败
    解决方案:将BJCA SM2证书转换为Apple兼容格式——openssl pkcs12 -export -in bjca_sm2.crt -inkey bjca_sm2.key -out apple_sm2.p12 -passout pass:123456;在钥匙串中导入p12后,Xcode选择该证书并关闭“Automatically manage signing”
  • 难点3:企业内部分发平台无法解析v3签名块中的SM2签名值
    解决方案:升级apksigner至Android SDK Build-Tools 33.0.2+,调用apksigner verify --print-certs输出结果中定位“Signer #1 certificate SHA-256 digest”字段,比对是否为SM3哈希值(长度64字符且仅含0-9a-f)
  • 难点4:CI/CD环境私钥HSM接入延迟导致构建超时
    解决方案:在Jenkins Pipeline中设置hsm-sign step超时阈值为120秒,失败时触发fallback机制——调用备用HSM节点IP并记录审计日志至SIEM系统,禁止降级为软件密钥签名
标准解读不等同于原文,以标准原文为准

更多解读

标准号标准名称状态发布日期实施日期
YD/T 2244-2020电信网和互联网信息服务业务系统安全防护检测要求现行2020-04-162020-07-01