one-wire协议和sha1算法在DS28E01上验证(一)

1.DS28E01简介

DS28E01通过1条单总线与MCU通信,单总线不多说了,要求时间非常严格,精确到us级别。

DS28E01有四个存储区:

数据存储器(EEPROM)(共分4页,每页32个字节)

密钥存储器(secret)(8字节)

含有特定功能和用户字节的寄存器页(register page

易失性暂存器(scratchpad)(8字节)

MCU通过单总线只能读写暂存器,而不能直接读写其它存储区。

向数据存储器写数据、载入初始密钥或者向寄存器页写数据时,先把数据写入暂存器,然后通过相应的命令,让芯片自行从暂存器拷贝数据至目的地址。

2.DS28E01工作原理

芯片内部有一个SHA-160加密模块,参与SHA算法的为512位特定格式的数据,

这些数据包含8字节密钥,5字节用户指定的随机数,32字节EEPROM内容,7字节ROMID,1字节EEPROM的地址TA1及固定数。

MCU可以读取芯片通过SHA加密后的20字节哈希值,并与MCU自己通过同样的算法计算出的哈希值进行比对。

既然MCU要进行同样的加密操作,要么肯定要生成与芯片内部完全相同的55字节消息,怎么得来的呢?

8字节密钥是自己生成并写进去的.               ->OK

5字节随机数是在芯片执行SHA之前写进暂存器的值.   ->OK

32字节EEPROM数据,在读回20字节哈希值之前,芯片会传回这32字节内容。 ->OK

7字节ROMID,可以在任何时候读到芯片的ROMID.   ->OK

2字节固定值,看手册可以知道   ->OK

1字节TA1,自己写进去的.   ->OK

3.其他

以上部分是从网络获取的,可以快速数据该器件的工作原理,详细技术文档请参考数据手册。

4.ROMID分析

fpga通过ila抓取8字节的romid为:F1000001B21B942F

2F:器件码

F1:crc校验码

000001B21B:串行序列

下面验证crc是否正确,crc计算器可在线计算,其参数配置和输入、输出结果如下:


one-wire协议和sha1算法在DS28E01上验证(一)_第1张图片

输出结果为F1,与抓取到的数据一致

5.MAC验证

5.1验证MAC前crc16

写入A5命令后,器件输出32字节eeprom数据和一字节FF和两字节crc16校验,后面接着就是20字节的MAC值,要是继续读会返回AA

如果是新的芯片,eeprom通常为0,但是不一定,这点要明确,可读eeprom查看值,这里为0。

crc16校验输入数据为命令+地址+32字节数(0)+FF

通过ila抓取到的数据如下图:


one-wire协议和sha1算法在DS28E01上验证(一)_第2张图片

通过数据分析FF后面接着的为crc16校验0d6d

通过crc16在线计算器,配置和输入、输出结果如下:


one-wire协议和sha1算法在DS28E01上验证(一)_第3张图片

其中A5为命令,后面两字节为地址,接着为32字节0和一个字节FF

输出结果为0d6d,验证正确

5.2验证MAC

读完MAC后,继续读,会返回AA,通过ila抓取的数据如下:


one-wire协议和sha1算法在DS28E01上验证(一)_第4张图片

可见数据结尾为AAAA,剩下两字节22d2为crc16校验,剩下20字节为mac值

crc校验采用crc16在线计算器,其配置和输入输出数据如下:


one-wire协议和sha1算法在DS28E01上验证(一)_第5张图片

可见输入结果为22D2,与抓取的CRC一致

6.结果

通过以上步骤,基本实现了DS28E01的验证工作,具体细节参数需要参考设计文档

7.注意

在写入5A命令之后,最好延时10ms以上,再读取判断是否返回AA,本设计延时为40ms,测试了十几片都能正常工作,无问题发


one-wire协议和sha1算法在DS28E01上验证(一)_第6张图片

你可能感兴趣的:(one-wire协议和sha1算法在DS28E01上验证(一))