Halley6X1600E_V2.0_nand应用签名_加解密
一 硬件平台介绍
开发板Halley6_X1600E_V2.0:
X1600E + nand
串口:uart2_Pd(12,13)
编译配置文件:x1600e_halley6_nand_5.10_defconfig
二 原理介绍
为了保护客户厂商的软件程序不被其对手复制,可以使用AES、2Key-3DES加密对代码进行加密,密码可以是用户提供的User-Key0或芯片内部的Chip-Key(随机数密码)。
而sc通过调用SC-ROM接口使用密码进行解密操作,软件不直接访问密码本身,防止密码泄露。
三 软件实现过程
3.1 kernel相关驱动的配置
进入对应linux工程目录下kernel/kernel/路径下:
kenny@kenny-MS-7B89:~/source/linux_source_ingenic/build$ cat configs/x1600e_halley6_nand_5.10_defconfig | grep kernel
APP_kernel_dir=../kernel/kernel
APP_kernel_config=x1600_module_base_linux_sfc_nand_defconfig
# APP_kernel_dtb is not set
敲make menuconfig并回车,进入Ingenic device-drivers Configurations选项,取消勾选Ingenic Security support,完成后保存配置。
备注:
由于整体编译配置make x1600e_halley6_nand_5.10_defconfig会覆盖掉kernel的当前配置,所以修改完kernel配置以后,需要手动拷贝一份.config到其实际的kernel配置:
xy@vb:~/x2600/kernel/kernel$ cp .config arch/mips/configs/x1600_module_base_linux_sfc_nand_defconfig
3.2 iConfigTool的工具的配置
打开iConfigTool工具
勾选sc命令,一般默认勾选
修改完成配置后Ctrl + S保存到build/configs/x1600e_halley6_nand_5.10_defconfig。
3.3 编译系统
xy@vb:~/x2600/build$ make x1600e_halley6_nand_5.10_defconfig
xy@vb:~/x2600/build$ make
四 相关签名工具使用
4.1 key生成工具
Key 生成工具只有ubuntu版本的,没有windows版本。用于生成 RAS-Key、User-Key0 和 User-Key1,提供给签名工具和烧录工具使用。
运行命令如下:
xy@vb:~/cloner-2.5.49-ubuntu_alpha/securitytool/x2000/keytool$ sudo ./keygen-64
点击 Generate Key 按钮生成签名需要的文件
生成文件路径为:
xy@vb:~/cloner-2.5.49-ubuntu_alpha/securitytool/x2000/keytool$ ls -lh
总用量 37M
-rw-r--r-- 1 root root 588 6月 19 18:35 key.bin
-rwxrw-r-- 1 zxy zxy 22M 4月 29 09:55 keygen-32
-rwxrwxr-x 1 zxy zxy 16M 4月 29 09:54 keygen-64
-rw-r--r-- 1 root root 1.7K 6月 19 18:35 pri_key.pem
-rw-rw-r-- 1 zxy zxy 536 4月 28 17:28 qm_cn.qm
-rw-r--r-- 1 root root 64 6月 19 18:35 user_key.bin
生成 Key 后需要把 key.bin 复制到烧录工具的 security 目录下(保证将key.bin拷贝到签名工具所在的烧录工具对应目录下即可):
注意:生成的下面三个签名文件,需要保存好,同一个板子一旦签名了,再次烧录需要用同一个签名文件的固件,不然烧录会不成功。
key.bin
pri_key.pem
user_key.bin
将 key.bin 拷贝到烧录工具 security/x2000/
下:
kenny@kenny-MS-7B89:~/source/cloner-2.5.48-ubuntu_alpha/securitytool/x2000/keytool$ cp key.bin ../../../security/x2000/ -arf
将 pri_key.pem 和 user_key.bin 拷贝到烧录工具的 securitytool/x2000/sigtool/security_key
下:
kenny@kenny-MS-7B89:~/source/linux_ad100_source/burn_tools/x1600e_burn_tools/sc_boot_burn/cloner-2.5.48-ubuntu_alpha/securitytool/x2000/keytool$ cp pri_key.pem ../sigtool/security_key/ -arf
kenny@kenny-MS-7B89:~/source/linux_ad100_source/burn_tools/x1600e_burn_tools/sc_boot_burn/cloner-2.5.48-ubuntu_alpha/securitytool/x2000/keytool$ cp user_key.bin ../sigtool/security_key/ -arf
4.2 签名工具
为了便于使用,本文展示签名工具使用windows版本的。
签名工具用于签名、加密客户的固件、应用程序、配置文件,以便保护用户核心数据。
打开签名工具之前,需要先在securitytool/x2000/sigtool/下创建⽂件settings.ini , 写⼊内容:
[debug]
value=1
签名工具路径,运行签名工具如下:
securitytool/x2000/sigtool$ sudo ./sigtool-64
4.2.1 签名other.bin
做测试程序test.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
while(1)
{
printf("@@@@@@\n");
sleep(5);
}
}
编译:
CC=/home/kenny/source/linux_source_ingenic/buildroot/buildroot/output/host/usr/bin/mips-linux-gnu-gcc
$CC test.c -lhardware2 -o test
文件加密前手动添加一个2KB大小的零填充数据头:
dd if=/dev/zero bs=2k count=1 | cat - test > test_2k
加密添加头数据之后的文件:
生成加密后的文件:test_2k-dst.bin
adb push 到开发板:
adb push test_2k-dst.bin /usr/data/
开发板解密:
cmd_sc src=/usr/data/test_2k-dst.bin
src_file : /usr/data/test_2k-dst.bin
dst_file : /usr/data/test_2k-dst.bin_dst
将解密后的文件2k头数据删除:
dd if=test_2k-dst.bin_dst of=test_dc bs=512 skip=4
chmod +x test_dc //给应用赋予执行权限
测试解密后是否相同:
注意:
因为当前签名工具会对other.bin签名时按照16byte对齐,不足的部分会自动补0,所以解密后的文件的md5值可能跟源文件的md5值有所不同,但是不影响使用。
五 烧录工具配置
安全烧录具体操作方法请参考《X2000_SecurityBoot操作指南.pdf》,板极选择x1600e_sfc_nand_lpddr2_linux.cfg。
烧录工具的版本: cloner-2.5.48-ubuntu_alpha
烧录工具的配置如下:
注:rootfs 的 Manage mode里面的模式选择为:MTD_MODE
本文为pc02(2*32+2)拉高,实际根据电路设计配置
六 验证sc加密和解密
详见4.2.1。