完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
引言
现代嵌入式软件系统越来越复杂,开发成本很高,且都是基于控制器外加Flash存储芯片的设计方案,上电即从存储芯片读取程序运行,放在Flash中的程序容易被拷贝,PCB电路板也很容易被复制。为了更好地保护好产品免遭克隆,保护程序设计者的知识产权免受侵害,有必要在系统中使用密钥认证技术。 目前在芯片加密方面主要有使用专用密钥认证芯片,如Atmel AT88系列;其次就是使用不可破解的芯片,如EPLDEPM7128、Actel公司的CPLD;或使用MASK(掩膜)IC,一般来说MASK IC要比可编程芯片难破解。 本文介绍的ATSHA204是Atmel公司推出的一款专用加密芯片,采用SHA-256公钥算法,具有体积小、功耗低、安全性高等一系列特点,价格也较低,使用范围广泛。 1 ATSHA204加密芯片简介 1.1 主要特性 ATSHA204包含一个可以用来存储密钥数据和关键字的EEPROM阵列,不同阵列区域的访问方式不同,通过合理配置,可以在实现认证的同时防止密钥被读取。该芯片能有防范各种物理攻击的机制,能阻止在主机和芯片间传输数据时受到的逻辑攻击。每个ATSHA204出厂时都具有一个唯一的9字节的序列号,兼容标准I2C总线通信时序,也可通过单线通信的方式。 1.2 认证流程 为了简化编程,ATSHA204支持标准的摘要一答应协议,主机发送一个256位的摘要信息(challenage)到ATSHA204芯片,芯片将摘要信息和存储在芯片内的秘钥一起通过哈希算法计算出一个响应,然后发回到主机。主机只发送摘要信息到设备上面,避免了通过总线时序观察到秘钥数据的可能性。主机控制器也通过相关的公钥算法计算出响应,与设备发送回来的响应对比,实现认证。 1.3 芯片组成 ATSHA204加密芯片内部包含Static RAM和EEPRO,RAM主要用来存储输入命令以及输出结果,EEPROM总大小为4.5 Kb,包含数据区、配置区以及OTP(一次性编程)区域。 数据(data)区:数据区的总大小是512 Kb,包含16个通用的容量为32字节的数据槽。这些数据槽可用来存储秘钥、校准数据以及型号信息。每个数据槽可通过配置区配置成只读、可读写、不可访问三种方式。 配置(config)区:配置区的大小为88字节,配置区包含芯片的序列号、ID信息以及每个数据槽的访问权限信息。 一次性编程(OTP)区:大小为64字节,在锁定OTP区域之前,可以通过写命令对OTP区域进行写入操作。 |
|
|
|
2 ATSHA204加密芯片配置方法
ATSHA204有两种与主机通信的方式,可以通过UART或者I2C总线接口进行通信,本没讣采用带有I2C总线接口的芯片。如果主机I/O口在45~85 ms的时间内没有发出时序,则ATSHA204芯片会进入休眠状态,因此在使用前都应当对芯片进行唤醒操作。 ①配置config区域。config区域的配置是整个芯片配置的核心,分为对数据槽的配置和对OTP区域的配置。ATSHA204配置区包含对16个数据槽(data slot)的配置,配置的主要目的是对16个数据槽的访问进行限制,每个数据槽的配置项为16位,控制着对应的数据槽的访问和使用,本设计中对16个数据槽统一配置如表1所列,每个数据项的配置值为0x8080。 OTP区域配置项对应在config区域中的第4个block中的第3个字节,有两种配置模式:0xAA(Read-onlymode),当OTP区域被锁定时,禁止写入;0x00(Legacymode),当OTP区域被锁定时,禁止写入,32字节读也被禁止。本设计中为了保密没计,配置为0x00。 ②使用LOCK命令锁定config区域。 ③配置data区域。data区域的配置使用标准的write名字将数据写入其中即可,本设计采用32字节一次性写入的方式,每个data slot可以写入不同的数据,写入data slot中的数据将参与后续的MAC运算,因此对于每组写入data slot中的数据必须谨记。 ④写OTP区域。OTP区域属于一次性编程区域,一次性写入之后便不可更改,因此应当谨慎操作,OTP中存放的秘钥也将作为SHA-256输入,在使用MAC方式认证时,只需用到OTP区域中的前11字节,因此只需对前11字节进行写入数据操作即可。 ⑤使用LOCK命令锁定数据区和OTP区域。 |
|
|
|
3 SHA-256认证算法与MAC
3.1 SHA-256算法 SHA(Securc Hash Algorithm,安全散列算法)是美国国家安全局(NSA)设计、美国国家标准与技术研究院(NIST)发布的一系列密码散列函数。SHA-256是NIST发布了额外的SHA变体,具有256位的信息摘要长度。该算法的简要处理流程包括以下几步:消息填充→附加消息长度→初始化缓存→迭代压缩→得出哈希结果(digest)。 3.2 MAC MAC(消息鉴别码)实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证。ATSHA204中的MAC命令使用SHA-256哈希算法,以88字节的信息量作为输入,并产生一个32字节的报文摘要,以供认证和鉴别。 4 基于ATmega128平台的实现 4.1 硬件设计 本设计采用8引脚SOIC封装的ATSHA204,其中4个引脚是无效的,其他4个引脚对应VCC、GND、一个同步时钟信号SCL、一个数据信号SDA SCL和SDA分别接到ATmege128的SDL和SDA上,使用ATmege128自带的I2C总线接口与ATSHA204进行通信。接线示意图如图1所示。 4.2 软件设计 系统运行原理图如图2所示,在ATmega128平台上面,通过程序的方式实现SHA-256算法,同时,将challenge(消息摘要)发送到ATSHA204 ATSHA204计算好之后,发回response,再在ATmega128平台上面实现对比,如果匹配成功,则程序继续运行,如果失败,则程序终止运行,从而实现加密的目的。通信方式采用基础的I2C通信。整个程序包括两部分:认证程序没计和SHA-256程序设计。下面分别描述。 4.2.1 MAC(消息认证)程序设计 MAC认证程序使用上面提及的标准的TWI读写函数接口,通过发送0x00信号使SDA保持一段时间的低电平信号,以wakeup加密芯片、chal lenge数组中的格式和response数组的大小详见datasheet。基本函数流程如下: 4.2.2 ATmega128平台SHA-256计算程序 SHA-256计算程序需要和ATSHA204芯片上面的哈希算法保持一致,因此需要移植Atmel公司提供的算法,移植之后的主程序如下: 函数形参中的message指针指向一个88字节的输入数组,len的值本设计中赋值88,digest指针指向返回的response数组。 4.3 功能测试 为了测试系统的可行性,验证哈希计算结果,本设计采用将哈希计算结果输出到串口端的方法来测试整个程序在ATmega128平台上面的运行。在实际系统运行时,为了保证高强度加密,消息摘要应该采用随机数,但为了测试方便,暂时采用固定不变的摘要信息。 通过串口接收到的主机计算的结果(digest)和ATSHA204发送回来的结果截图如图3所示。图中前32字节为SHA-256计算所得的digest,后面为device发回来的count(1字节)+response(32字节)+crc(2字节),可以看出中间的32字节和SHA-256计算所得相同,因此便可认证成功。反之,如果芯片中的密钥数据不是用户定义的。那么返回的response和SHA-256计算的不同,则认证不成功,从而实现了程序加密。 |
|
|
|
5 测试
为了更好地验证加密系统的可靠性与可行性,在测试认证基本功能之后,将其嵌入到一个实际系统中,对加密性能进行测试。基于已有的ATmega128硬件平台,选取SD卡文件系统读取程序作为测试,系统的运行流程如图4所示。 本系统采用开源的Fatfs文件系统作为SD卡的文件系统,SD卡与ATmega128的通信方式采用传统的SPI方式,SD卡中存放已经转换好的单色分辨率为128×64的位图bin文件,认证部分只作为一个具有返回值的子函数,根据返回值确定是否成功。 如果成功,则程序继续执行;如果不成功,延时1 s再次启动加密芯片进行认证。如果成功,则视同认证成功;如果还是不成功,则通过液晶显示屏提示不成功,使用assert语句终止程序。 测试中采用置换不同配置的加密芯片来测试加密的可靠性,认证成功和失败时的情况分别如图5和图6所示。 结语 本文主要介绍了Atmel公司最新加密芯片ATSHA204的原理和使用方法,初步对其中使用到的加密算法SHA-256进行了简单介绍,最后在ATmega128平台使用I2C总线接口模块,利用中断方式实现SD卡的数据发送与接收,并通过MAC方式实现了认证,并详细描述了程序流程,解析了部分程序语句。本设计具有很强的实用性,ATSHA204是目前广泛使用的加密芯片,是Atmel公司加密芯片的典型产品,本设计对于指导实际应用具有参考意义。 |
|
|
|
只有小组成员才能发言,加入小组>>
301 浏览 0 评论
954 浏览 1 评论
2344 浏览 5 评论
2664 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2474 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
514浏览 9评论
527浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
626浏览 6评论
500浏览 5评论
539浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-7 04:12 , Processed in 1.185286 second(s), Total 85, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191