Android OTA releasekey 替换

本文介绍如何在Amlogic T950平台上用自定义的OTA签名密钥替换默认的testkey,并详细记录了生成密钥、修改编译规则及签名APK的过程。

在Amlogic T950平台上用公司的OTA 签名key替换Android默认的testkey,过程记录如下:

1.生成key 
 系统默认的key如下,首先需要产生以下4种我们项目自己的OTA签名key文件,每一种类型的key都是成对生成的,.509.pem后缀名的是公钥,.pk8后缀名的是私钥。
 testkey -- a generic key for packages that do not otherwise specify a key.  
 platform -- a test key for packages that are part of the core platform.  
 shared -- a test key for things that are shared in the home/contacts process.  
 media -- a test key for packages that are part of the media/download system.

 Android 源码包里面提供了生成key的工具,development/tools/make_key, 命令如下:
 ./make_key releasekey '/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX' rsa
 ./make_key platform  '/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX'  rsa
 ./make_key shared '/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX'   rsa
 ./make_key media    '/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX' rsa

将XXX替换为自己公司信息。
生成文件如下:
 media.pk8  media.x509.pem  platform.pk8  platform.x509.pem  
 releasekey.pk8  releasekey.x509.pem  shared.pk8  shared.x509.pem
 将生成的key 文件放到项目相关的目录下,针对Amlogic项目放到device/amlogic/p341/sign_keys。这样我们公司的key就生成了。

2.更改编译规则,使编译过程中使用我们新生成的key对OTA进行签名
 首先在build/core/Makefile里搜索testkey, 查看testkey是怎么用到编译系统的,看到如下编译选项:
 ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
 BUILD_KEYS := test-keys
 else
 BUILD_KEYS := dev-keys
 endif

 继续查看DEFAULT_SYSTEM_DEV_CERTIFICATE,可以看到在build/core/config.mk文件里有如下:
 # The default key if not set as LOCAL_CERTIFICATE
 ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
   DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
 else
   DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
 endif

 因此要想使用releasekey,只需要指定PRODUCT_DEFAULT_DEV_CERTIFICATE的值即可,因此在device/amlogic/p341/p341.mk中指定项目特定变量

 PRODUCT_DEFAULT_DEV_CERTIFICATE :=  device/amlogic/p341/sign_keys/releasekey

 同时在根据规则,在build/core/Makefile改动如下:

 ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),device/amlogic/p341/sign_keys/releasekey)
 BUILD_KEYS := release-keys

 endif

 这样在编译的最后阶段会使用我们的key对OTA包签名。

 3. 补充 
 对于apk的签名,系统会根据apk里指定的key进行签名。如果系统中的apk的android.mk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。
 ifeq ($(LOCAL_CERTIFICATE),)
     LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE)
 endif

 private_key := $(LOCAL_CERTIFICATE).pk8
 certificate := $(LOCAL_CERTIFICATE).x509.pem

 而如果设置成:
 LOCAL_CERTIFICATE := platform

 就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名


<think>好的,我现在要解决用户关于Android 13 MTK OTA签名的问题。用户想知道为什么用的是test签名,以及如何改成release签名。首先,我需要回顾一下Android系统的签名机制,特别是MTK平台的差异。 首先,Android OTA包的签名通常涉及整个系统镜像的签名过程。MTK平台可能有自己的工具和流程。用户提到test签名,这可能指的是开发阶段使用的测试密钥,而release签名则是发布时用厂商的正式密钥。需要确认MTK在OTA签名时的具体步骤,以及他们使用的工具是否有特殊要求。 接下来,我需要考虑MTK平台的特定工具,比如MTK的签名工具是否与AOSP的标准工具有所不同。例如,AOSP中使用的是sign_target_files_apks和ota_from_target_files脚本,而MTK可能有自己的脚本或参数。用户可能是在使用MTK提供的脚本时遇到了test签名的问题,或者他们的构建环境默认使用了测试密钥。 然后,用户的问题是如何将test签名替换为release签名。这涉及到密钥的替换,可能包括platform、shared、media等密钥。需要检查MTK的构建配置,比如mk文件或envsetup.sh,确认密钥的路径是否指向测试密钥,并更改为release密钥的路径。此外,MTK可能有特定的签名步骤,比如使用MTK的DA工具或者SP Flash Tool,这些步骤是否需要额外的签名流程。 同时,用户可能遇到的一些常见问题,比如替换密钥后OTA包无法通过验证,或者设备拒绝安装。这可能是因为设备的vbmeta分区没有更新,或者签名后的镜像与设备中的公钥不匹配。需要确保在替换密钥后重新生成vbmeta.img,并且设备固件中包含了对应的公钥。 另外,用户可能没有提到但需要注意的点是,MTK平台在签名时是否有硬件相关的校验,比如特定芯片型号需要不同的签名方式。或者,是否在OTA包生成后还需要进行其他处理,比如使用MTK的加密工具对包进行加密,这可能影响签名过程。 最后,我需要整理出步骤清晰的解决方案,包括找到测试密钥的位置,替换为release密钥,修改构建配置,重新生成签名后的OTA包,并验证签名是否正确。同时,提醒用户注意事项,如备份原密钥、确保所有分区都使用相同密钥等。</think>#### MTK平台Android 13 OTA签名机制详解 --- ### 一、MTK OTA签名原理 **1. 签名层级结构**: ``` BOOT签名(AVB 2.0) → SYSTEM/VENDOR签名OTA全包签名 → 增量包二次签名 ``` - MTK使用**双重校验机制**:既验证镜像级签名(如boot.img),也验证完整OTA包的签名 **2. 默认Test-Key原因**: ```bash # MTK源码中默认配置路径 vendor/mediatek/proprietary/scripts/sign-image_v2/keys/ ├── testkey_rsa2048.pem # 平台测试密钥 ├── testkey_rsa4096.x509.pem └── MTK_SBC.xml # 签名策略文件 ``` - 开发阶段MTK提供预置测试密钥,厂商需**自行替换release密钥链** --- ### 二、从Test-Key切换Release-Key全流程 #### 步骤1:准备Release密钥 需生成以下密钥对(相比AOSP多出MTK专用密钥): ```bash make -j8 target-files-package # 生成密钥模板 development/tools/make_key releasekey '/C=CN/ST=Guangdong/L=Shenzhen/O=YourCompany' development/tools/make_key mtk_securekey '/C=CN/...' # MTK特有安全密钥 ``` #### 步骤2:修改MTK签名配置 编辑关键配置文件: ```makefile # vendor/mediatek/proprietary/scripts/sign-image_v2/config.cfg [Key] PLATFORM_KEY = path/to/release/platform.x509.pem SHARED_KEY = path/to/release/shared.x509.pem MTK_SECURE_KEY = path/to/release/mtk_securekey.pem # 必须存在 [Algorithm] BOOT_SIG = RSA4096_SHA256 # MTK要求boot必须4096位 ``` #### 步骤3:重签现有固件 ```bash # 使用MTK专用签名工具 ./vendor/mediatek/proprietary/scripts/sign-image_v2/sign_flow.sh \ --input target_files.zip \ --output signed_target_files.zip \ --key-dir release_keys/ \ --mtk-sbc MTK_SBC.xml ``` #### 步骤4:生成Release版OTA包 ```bash ./build/tools/releasetools/ota_from_target_files \ --package_key=releasekey \ --mtk_special_mode=true \ # MTK专用参数 signed_target_files.zip ota.zip ``` --- ### 三、关键验证点 **1. 检查vbmeta签名**: ```bash avbtool info_image --image vbmeta.img ``` 输出应包含: ``` Algorithm: SHA256_RSA4096 Public Key: YOUR_COMPANY_RLK ``` **2. 验证OTA签名**: ```bash openssl pkcs7 -in ota.zip -inform DER -print_certs ``` 应显示**release证书链**而非"Android Debug" **3. MTK专有校验**: ```bash grep -a "MTK_SIG" ota.zip | xxd ``` 输出应有**0x4D544B5F534947**头标识(HEX格式"MTK_SIG") --- ### 四、典型问题解决 **问题1:签名OTA验证失败** ```log E update_engine: [ERROR:payload_verifier.cc(318)] Failed to validate PKCS7 ``` **解决方案**: 1. 检查`/system/etc/security/otacerts.zip`是否包含新公钥 2. 更新`build/make/target/product/security/`中的release密钥 **问题2:MTK Secure Boot阻止启动** ```log [LK] Verify Image Fail (0xFFFFFFFF) ``` **处理步骤**: 1. 使用`mtk_efuse_tool`烧录新密钥哈希到设备: ```bash mtk_efuse_tool --write-hash --key releasekey.x509.pem --partition LK ``` 2. 重新编译preloader并刷入 --- ### 五、高级配置选项 **1. 多项目密钥管理**: 在`BoardConfig.mk`中定义: ```makefile MTK_SBC_POLICY := $(LOCAL_PATH)/MTK_SBC_$(TARGET_PRODUCT).xml MTK_SECURE_KEY_TYPE := RSA4096_SHA256_WITH_PSS ``` **2. 签名效能优化**: 启用MTK硬件加速签名: ```bash export MTK_SIGNING_USE_HW_CRYPTO=1 # 调用HSM或TEE加速 ``` **3. OTA增量包签名**: 需额外处理: ```bash imgdiff -z --block-limit=4096 --extra=mtk_specific old.new.dat.br new.new.dat.br | \ openssl smime -sign -inkey releasekey.pk8 -signer releasekey.x509.pem > patch.zip ``` --- #### 注意事项: 1. MTK设备的**preloader分区**包含初始公钥,修改签名必须同步更新 2. 天玑芯片要求**所有分区的签名算法一致**(不能混合RSA2048/RSA4096) 3. 使用`fastboot oem lock`后会永久绑定当前密钥,需谨慎操作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值