一种基于专用密钥芯片的DSP代码加密方案

2022-09-07 05:48周健
新型工业化 2022年6期
关键词:哈希字节密钥

周健

上海地铁维护保障有限公司车辆分公司,上海,200233

0 引言

现代嵌入式软件系统越来越复杂,开发成本高,放在Flash中的程序容易被拷贝,PCB电路板也很容易被复制。为了保护产品免遭克隆,保护企业的知识产权免受侵害,有必要在系统中使用秘钥认证技术。

目前在芯片加密方面主要有使用专用密钥认证芯片,如Atmel AT88系列。其次就是使用不可破解的芯片,如EPLDEPM7128,Actel公司的CPLD,或使用MASK(掩膜)IC,一般来说MASK IC要比可编程芯片难破解。

本文介绍的ATSHA204A是Atmel公司推出的一款专用加密芯片,采用SHA-256公钥算法,具有体积小、功耗低、安全性高等一系列特点,价格也较低,使用范围广泛。

1 芯片简介

1.1 芯片组成

ATSHA204A加密芯片内部包含Static RAM和EEPROM,RAM主要用来存储输入命令以及输出结果,EEPROM总大小为4.5 kB,包含数据区、配置区以及OTP(一次性编程)区域[1]。

数据(data)区:数据区的总大小是512 kB,包含16个通用的容量为32字节的数据槽。这些数据槽可用来存储秘钥、校准数据以及型号信息。每个数据槽可通过配置区配置成只读、可读写、不可访问三种方式。

配置(config)区:配置区的大小为88字节,配置区包含芯片的序列号、ID信息以及每个数据槽的访问权限信息。

一次性编程(OTP)区:大小为64字节,在锁定OTP区域之前,可以通过写命令对OTP区域进行写入操作。

1.2 主要特性

ATSHA204A是Atmel高安全性硬件认证器件系列的一个新成员,它拥有一个灵活的指令集,支持众多应用[2]。

防伪:可用于验证某个可移除、可更换或耗材型客户端的真实性。这些客户端的例子包括:打印机墨盒、电子子卡或其他备件。此外,它还可用于验证某个软件或固件模块或存储元件。

保护固件或媒体文件:可在开机时验证闪存中的代码,以防止代码在未经授权的情况下被修改;对下载的媒体文件进行加密,并以独特方式加密代码图像,使它们只能在一个系统中使用。

交换会话密钥:可安全、方便地交换串流加密密钥,以供系统微处理器中的一个加密/解密引擎用于管理保密通信信道或加密的下载内容等。

安全数据存储:可存储供标准微处理器中的加密加速器使用的密钥。此外,它还可用于存储少量的配置和校准用数据、电子钱包数据、消费数据和其他机密信息。通过加密/认证读写操作提供可编程的保护功能。

用户密码检查:在不暴露预期值的情况下验证用户输入的密码,将简单的密码映射为复杂的密码,并与远端系统安全地交换密码值。

有保障的序列号:每个器件都有一个唯一的72位序列号。

高质量的随机数发生器:内置高质量的随机数发生器(ENG)。

1.3 认证流程

ATSHA204A不仅有软件加密,内部还有高质量硬件加密,可使用SHA-256 Hash算法。每个ATSHA204A出厂时都具有一个唯一的9字节的序列号,兼容标准I2C总线通信时序。

为了简化编程,ATSHA204A支持标准的摘要/答应协议,主机发送一个挑战(challenage)到ATSHA204A芯片,芯片将挑战信息和存储在芯片内的秘钥一起通过哈希算法计算出一个摘要(digest),然后发回到主机。主机只发送摘要信息到设备上面,避免了通过总线时序观察到秘钥数据的可能性。主机控制器也通过相关的公钥算法计算出摘要,与设备发送回来的摘要对比,实现认证。

2 技术综述

2.1 哈希算法与消息鉴别码

哈希(Hash)算法,即散列函数,是一种单向密码体制。它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程[3]。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。

根据输出消息的数据位的不同,哈希算法包含MD5、SHA-1、SHA-2、SHA-25、SHA-512等。SHA-256具有256位的信息摘要长度。该算法的简要处理流程包括以下几步:消息填充、附加消息长度、初始化缓存、迭代压缩、得出哈希结果。

消息鉴别码(MAC)实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,接收方利用与发送方共享的密钥进行鉴别认证。

ATSHA204A中的MAC命令使用SHA-256哈希算法,以88字节的信息量作为输入,并产生一个32字节的报文摘要,以供认证和鉴别。

2.2 加密与认证

2.2.1 加密概述

加密是隐秘信息,使其在没有正确的密钥情况下,变得难以读取的过程。在简单的对称加密中,同一个密钥被用于加密和解密。在非对称加密中,可以使用用户的公钥对信息加密,使得只有对应私钥的拥有者才能读取它。加密算法是可逆的,每个加密算法都会有一个解密算法,原文与密文一一对应。

2.2.2 认证概述

认证是呈现信息,使其抗篡改,同时也证明它起源于预期发送者的过程。Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一Hash值,却不能通过这个Hash值重新获得目标信息。哈希算法是不可逆的,不同的消息经过哈希算法后可能会得到相同的结果。

2.2.3 方案对比

加密无法保证信息来源的合法性,使用Hash算法的认证方案可以确认数据提供者是否合法,以及确保信息的完整性、没有被他人篡改过。

3 需求分析

为实现车门软件与门控器硬件之间的认证,车门控制器使用一片ATSHA204A,作为认证的Client,DSP28335作为Host,执行认证流程[4]。若认证成功,则认为车门软件与门控器匹配,正常运行;若认证失败,则车门软件进入死循环,不再执行任何功能,认证方式如图1所示。

3.1 秘钥管理

ATSHA204A包含一个可以用来存储密钥数据的EEPROM阵列,包含16个数据槽,每个数据32个字节,这16个数据槽都可以用来保存秘钥。写完秘钥数据后,配置数据槽的权限为不可读,不可写,实现加密功能。车门控制器在出厂前,需要提前烧录秘钥数据,将执行车门功能的应用程序与秘钥程序分开。

3.2 随机数产生

为防止认证过程中IIC总线上数据被捕获后,伪造数据实现认证,每次认证过程需要有不同的挑战信息。ATSHA204A包含一个随机数发生器,可以获得一个32字节的随机数。DSP通过随机数发生器获得此随机数后,组成一个88字节的挑战信息发送给ATSHA204A执行认证流程。

3.3 SHA-256算法

SHA-256算法容易获得,但算法中涉及以字节(8bit)为最小单位的连续存储空间的操作。DSP可以定义char型的8bit变量,但是最小存储单位是16bit,存储空间不连续。因此移植算法时需要将数据进行处理,保证存储空间的连续性。

4 软件设计

DSP与ATSHA204A通过IIC总线进行通讯,DSP将Challeng发送给ATSHA204A,ATSHA204 A执行完MAC指令之后,发回response,DSP进行对比,如果匹配成功,则程序继续运行[5],如果失败,则程序终止运行,从而实现认证的目的。程序包括两部分:认证流程设计和SHA-256算法移植。

4.1 操作命令

4.1.1 Write命令

命令格式如表1所示。

表1 Write命令列表

参数1的Zone.bit0和Zone.bit1配置写入数据的区域是配置区、OTP区还是数据区,Zone.bit6配置写入数据是否需要加密,Zone.bit7配置数据长度是4字节还是32字节。若写入数据无需加密,则数据2长度为0字节。

4.1.2 Read命令

命令格式如表2所示。

表2 Read命令列表

与写命令类似,参数1的Zone.bit0和Zone.bit1配置写入数据的区域是配置区、OTP区还是数据区,Zone.bit7配置数据长度是4字节还是32字节。若读命令正确执行,芯片将返回4字节或者32字节数据。

4.1.3 Nonce命令

命令格式如表3所示。

表3 Nonce命令列表

随机命令目的在于更新芯片中的TempKey值。TempKey相当于程序中的临时变量,用来保存一些中间结果,但这个TempKey值不能被访问,只能芯片内部本身使用。Nonce命令也是其余多数命令执行前都要执行的一个命令。

参数1的模式如果设置为0或者1的时候,要求输入一个20字节的随机数,而后更新芯片内的seed,更新seed能使内部产生的随机数质量更高。如果设置为3,就要求输入32字节的随机数,直接写在TempKey中。

4.1.4 MAC命令

命令格式如表4所示。

表4 MAC命令列表

模式的详细含义如表5所示。

表5 MAC模式列表

使用MAC命令可以让ATSHA204A生成一个摘要。

4.1.5 CheckMAC命令

命令格式如表6所示。

模式的详细含义如表7所示。

使用CheckMAC命令可以验证秘钥。例如有一个主设备,它把秘钥存在slot0里面,有一些从设备,要输入正确的密钥才能使用主设备提供的服务。这种工况下就能够用这种方式,在总线上也不会传输密码,而且将密码存储在ATSHA204A里面更安全。

表6 CheckMAC命令列表

表7 CheckMAC模式列表

4.2 认证流程

主控DSP通过IIC总线与芯片相连,首先在ATSHA204A芯片的slot0中写入一个32字节的秘钥,设置为不可读。在启动时候,先获取芯片序列号,然后发送一个随机数生成命令给ATSHA204A,让其更新内部的TempKey中的值。DSP内部也根据Nonce的模式计算TempKey的值,称之为host_tempKey。若上述步骤执行正常,那么TempKey和host_tempKey中的值是一致的。接下来DSP本身就能够根据host_tempKey、序列号、以及秘钥计算出一个摘要digest,称之为digest1。再给ATSHA204A发送MAC命令,ATSHA204A根据存储在slot0区域中的秘钥来计算digest2并返回给DSP,DSP判断digest1和digest2是否匹配,若不匹配则将程序挂起[6]。认证流程如图2所示。

4.3 认证函数

根据软件流程设计,列出需实现的函数,以及函数功能的描述,如表8所示。

表8 函数列表

将以上函数编码完成后,软件可实现认证功能。

4.4 软件流程图

设计的认证程序流程,如图3所示。

5 软件验证

在完成软件编码后,需要对认证功能进行验证。DSP计算的摘要与ATSHA204A返回的摘要一致。

其中,秘钥数据在芯片配置时已经写入,保存于slot1的秘钥数据和32字节的挑战码如表9所示。

表9 数据信息列表

查询A T S HA 20 4 A芯片配置区序列号,Serial Number[0],Serial Number[1]和Serial Number[8]都为固定值,数据分别是01、23、EE。通过SHA-256算法获得的32字节摘要数据如表10所示。

表10 摘要信息列表

根据MAC命令格式得出DSP软件发送到ATSHA204A的数据如表11所示。

ATSHA204A芯片会使用芯片内的SN[0]、SN[1]、SN[8]、SLOT1数据,接收到的挑战码,KeyID(即01 00),MAC命令码(08)和mode(00)做一次SHA-256哈希算法,结果是一组32字节的校验码,并回传给DSP(需要执行一次读回状态包操作)。

表11 数据信息列表

调用认证函数,使用串口调试,测试数据如图4所示,DSP计算所得摘要信息与ATSHA204A返回的信息一致,认证通过。

6 结语

ATSHA204A芯片内共有16个数据槽,上述方案只是使用了一个数据槽保存一个秘钥,如果使用多组秘钥,执行多次认证,那么安全性将得到提高。芯片还提供一个64字节的一次性编程区,写入数据后,通过配置,仅允许执行加密读的操作获取数据。因此可将控制系统中较为关键的参数保存在此区域,首次上电通过加密读获取,而IIC总线上不会直接出现这些数据。

另外,在一些应用中,每次都使用相同的秘钥可能也会带来风险,而ATSHA204A芯片可以对秘钥进行更新。例如在使用一次秘钥进行认证后,当前秘钥可以被SHA-256算法的摘要信息和特定的信息合并形成后覆盖,这些特定信息可以配置为常量、时间数据或者随机数。这样处理后,原始的秘钥将被滚动的秘钥取代,秘钥数据无法被追溯,由此提高了系统的安全性。

猜你喜欢
哈希字节密钥
幻中邂逅之金色密钥
幻中邂逅之金色密钥
基于特征选择的局部敏感哈希位选择算法
No.8 字节跳动将推出独立出口电商APP
哈希值处理 功能全面更易用
密码系统中密钥的状态与保护*
文件哈希值处理一条龙
No.10 “字节跳动手机”要来了?
Android密钥库简析
巧用哈希数值传递文件