一、基本通讯
i2c总线上只传输:明文和密码slot号
send:
1byte 1byte nbyte 2byte
word_addr count data crc(lsb:msb)
recv:
1byte nbyte 2byte
count data crc(lsb:msb)
read config:
send:
reg + count + opcode + zone + addr_lsb + addr_msb + crc_lsb + crc_msb
recv:
count + byte0 + byte1 + byte2 + byte3 + crc_lsb + crc_msb
reg
reset 0x00
sleep 0x01
idle 0x02
cmd 0x03
二、使用心得
config zone : 88byte, 一直可读,未锁定前可写 (4byte读写)
opt zone : 64byte,config锁定后,可写不可读,opt锁定后,根据模式(可作为64byte的只读eeprom) (32byte读写)
data zone : 512byte,config锁定后,可写不可读,data锁定后,根据config来读写 (32byte读写)
配置完config zone,应将其锁定;再加密写opt zone和data zone,再锁定opt zone和data zone
Rolled Keys
密钥滚动。秘钥使用一定次数后,将其更新为其当前值的 SHA-256 摘要加上一些偏移量(序列号 或型号 或随机数)。
Created Keys
密钥创建。秘钥使用一定次数后,原密钥与固定的或随机的随机数再次组合以创建唯一密钥。
加密写:输入的数据是加密后的数据(用TempKey与明文异或来加密数据);
还需要输入mac(用于检查输入数据的完整性)(SHA-256(TempKey, Opcode, Param1, Param2, SN[8], SN[0:1], <25 bytes of 0's>, PlainTextData))
加密读:输出的数据是加密后的数据(用TempKey与明文异或来加密数据);
加密读写:
Nonce 命令将内部生成的随机数与输入值相结合来生成TempKey,并返回生成的随机数;
使用返回生成的随机数计算出Nonce的TempKey;
GenDig 命令使用 SHA-256 将存储的值与TempKey生成的摘要作为新的TempKey;
使用Nonce的TempKey计算出GenDig的TempKey
config锁定后,写入opt,写入data,不锁定opt和data,也能mac成功
opt锁定后(read only模式),能明文读取;
data锁定后(读写加密模式),能加密读取,也能加密写入
如果设置父秘钥:
忘记子密钥,知道父密钥,可以用父密钥来读出子密钥
忘记子密钥,知道父密钥,可以用父密钥来重写子密钥
data zone可以一部分作为秘钥槽,一部分作为eeprom,
作为eeprom的槽,使用其他秘钥槽的秘钥进行读写
加密读data zone :只能按槽号来读取。
需要参数:
需要读取的槽号;
需要读取的槽号的读秘钥,及读秘钥的槽号;
其中读秘钥用于解密加密读返回的数据,用其生成TempKey,再与返回的数据异或得出明文