整个认证过程是一个双向认证的过程,
用户系统的MCU首先从芯片中读出Nc和Ci,根据自定义的F1(Nc,Ks)算法算出Gc,同时利用芯片内部的F2(Gc,Ci,Q0)算法算出 Q1,并向芯片发送初始化认证参数Q1和Q0,其中,Q0是CPU方给出的随机数。芯片内部则利用自己的F2逻辑算出 Ci+1=F2(Gc,Ci,Q0),同时得出Q2=F2(Gc,Q1)。芯片收到校验认证命令后,判断是否Ci+1=Q1,如是,则有 Ci+2=F2(Gc,Ci+1),且用Ci+2更新Ci,芯片中的认证通过;同时更新芯片内部同组的SK(Session Encryption Key)的值。CPU方接收芯片中更新的Ci后,判断是否等于Q2,如果通过,则认证全部通过。
上面说的过程是认证模式,如果想进入加密难证模式的话,需要再次利用认证成功时返回更新的SK值,用它取代Gc,Ci再作为参数;利用F2函数,芯片和MCU方再计算一次并比较,判断相等后才进入加密认证模式。
上面提到的F2算法,是芯片内部的控制逻辑利用Gc、Ci、Q0三个参数初始化的一个DES算法的变种。这个算法是所有加密解密、完整性认证与信息认证的关键‘
下面将利用本加密芯片进行产品加密的最安全模式 制造商ID以及加密的存储区,获得数据进行64位密钥的运算(自制的F1算法),得到芯片内部的加密种子Gc。再获得芯片内部的特定寄存器的随机数Ci 和CPU产生的随机数Q1,利用芯片内部的F2算法,芯片和CPU分别进行F2(Ci,Q1,Gc)运算,利用计算结果进行双向判断,从而完成认证。
2)芯片的加密认证:芯片认证完成后,采用第一步运算产生的SK(F2算法特定处的中间结果),以及由认证更新过得Ci+1 和CPU产生的随机数Q2再进行一次加密运算F2(Ci+1,Q2,SK)认证,最后再通过读取芯片内部更新的Ci+2与CPU计算的结果进行比较,如果相同,则加密认证完成,进入加密模式。
3)加密模式下访问加密的存储区:在加密模式下,I2C总线上传输的数据为经过加密的密文数据,首先将存储区的密码进行加密,发送给芯片进行认证;然后利用加密读指令加密访问带密码的加密存储区,将获得数据进行解密,并与产