atsha204加密芯片——使用心得

一、基本通讯

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,再与返回的数据异或得出明文 

上一篇:自定义文件夹处理函数(Python)


下一篇:华为SNS2224的Zone配置