MOD8ID加密芯片的内部具备ECC椭圆曲线密码算法引擎,支持secp256k1和secp256r1,secp224r1多种曲线算法,这是一种非对称算法,与其他密码体制相比,ECC(ECDSA)通常具有更小的密钥大小的同时提供更高的安全性能。当然,MOD8ID芯片具有其他更多的安全特性,比如具有可配置的安全数据存储单元和一个真随机数生成器,同时支持各种安全协议栈,如TLS1.2/TLS1.3,secureboot,证书管理等物联网关键安全功能,另外,芯片支持最高到1M的I2C总线,也支持AES-GCM算法以及HASH(SHA-256)算法。
当然,MOD8ID除了完整的安全功能以及提供傻瓜式的集成体验外,最受工程师欢迎的一个最大的原因是他的支持响应速度,一般只需要向其FAE发起问题,都会有快速详细的答复和培训。使得大家在MOD8ID使用上得心应手。
下面会分系列整理MOD8ID的一些关键说明和使用示例程序:
首先必须了解的是,MOD8ID具有完美的安全生命周期管理,通过永久锁定配置和数据区域(发送LOCK指令),MOD8ID才会执行安全认证业务行为,而且锁定操作是不可逆的。因此,建议在调试MOD8ID通讯时不要发送LOCK指令。
区域锁
MOD8ID有两个区域的锁定:
第一个是配置区域(config zone)锁:在启用此锁定之前,必须将芯片的数据插槽配置为所需的设置;如果配置设置不正确,则需要更换新的芯片。
第二个区域锁会锁定数据(DATA)区域和一次性可编程区域(OTP),主要用于密钥数据以及隐私数据的权限确立保护。
I2C报文结构
MOD8ID的业务数据的报文结构简单来讲就是:长度计数字节+数据+CRC校验字节 组成的消息。该消息详细说明了以字节为单位的总传输长度,包括其本身(计数字节)和两个尾随校验和字节。MOD8ID的I2C设备地址是0xC1,下图为I2C报文时序示例
配置
MOD8ID可支持多个密钥和数据区,每个区域都可以单独配置。以下是可以配置的内容的一些描述,以及在适用的情况下的示例配置。
配置区(config zone)总是可以被外部(如MCU)读取,配置数据可以在配置锁定之前写入,但不能在之后写入。
MSE_WRITE_CONFIG_ZONE // 写配置区
MSE_READ_CONFIG_ZONE // 读配置区
当然,MODSEMI的SDK会提供标准的配置demo,标准的配置已经能满足大部分的安全应用场景,如果工程师有其他定制的应用场景,也可以联系MODSEMI的FAE直接提供定制化的配置数据,快速集成。
一旦芯片被配置并且配置区域被锁定,就有可以访问锁定前不可用的功能:例如真随机数生成器。此生成器输出一个32字节的真随机数,并将其作为对命令的响应输出:
mse_random ( rand_num )/ / 获取随机数
这里举几个操作例子:
配置数据示例:
//For the MOD8ID:
0x01,0x23,0x00,0x00,0x00,0x00,0x60,0x00,0x04,0x05,0x06,0x07,0xEE,0x01,0x01,0x00,
0xC0,0x00,0xA1,0x00,0xAF,0x2F,0xC4,0x44,0x87,0x20,0xC4,0xF4,0x8F,0x0F,0x0F,0x0F,
0x9F,0x8F,0x83,0x64,0xC4,0x44,0xC4,0x64,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0xFF,0x84,0x03,0xBC,0x09,0x69,0x76,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0E,0x40,0x00,0x00,0x00,0x00,
0x33,0x00,0x1C,0x00,0x13,0x00,0x1C,0x00,0x3C,0x00,0x3E,0x00,0x1C,0x00,0x33,0x00,
0x1C,0x00,0x1C,0x00,0x38,0x10,0x30,0x00,0x3C,0x00,0x3C,0x00,0x32,0x00,0x30,0x00
加密读/写示例
加密读写是MOD8ID的一个安全功能之一:它对主MCU和MOD8ID芯片之间通信的数据进行加密,然后存储在slot中。必须为加密的读写操作设置此slot(插槽)。在所提供的配置示例中,密钥slot4被启用为可以在外部写入slot(用于对称加密)但不能读取的密钥。
对于配置示例中提供的配置,用于数据加密和解密的密钥被命名为“SLOT_4_KEY”,并被写入slot4。用于加密读写示例的数据插槽是slot8。
注意:如果插槽4没有被锁定,所有用户可以写入他们自己的密钥,并使用它来读取内容:因此,如果在应用程序中使用它,锁定是必要的。同样如果另一个槽可以用于加密的读/写功能,那么它也必须被锁定。 比如示例提供了一个“假”密钥,只修改了第一个字节。如预期的那样,芯片上的加密使用之前实现的密钥执行,但不能使用这个假密钥正确解密。 使用的命令包括:
/ / 将加密密钥写入插槽,并写入数据
MSE_write_zone ( zone , s lot , block , offset , data , length )
/ / 将加密的数据写入插槽,并写入数据
MSE_write_enc ( slot_w_data , block , data , enc_key , slot_w_key )
/ / 读取从插槽X解密的数据
MSE_read_enc ( slot_w_data , block , data , enc_key , slot_w_key )
ECDH示例
在ECDH示例中,设置了两个“身份:Felix和Tom。基于ECDH, Felix和Tom可以使用共享的密钥进行加密通信而不需要在链路上传输加密的密钥。它们都选择自己的ECC私钥,并使用此方法派生公共的512bit依赖密钥,并双方共享。 结合安全元素特性,私钥无法读取,从而确保了Felix和Tom之间的交互的安全性。 这里为了演示ECDH的功能,两个私钥存储在同一个芯片上。该示例通常为这类应用程序使用真随机数生成器来为两者生成私钥。这些都存储在插槽0和2中,并且可以在串行监视器上检索公钥。 使用的命令包括:
MSE_genkey ( priv_slot_id , pubkey ) / / 将64−字节的公钥存储到公钥区
MSE_ecdh ( priv_slot_Felix , pubkey_Tom , ECDH_Felix ) / / 读取pubkey_Tom的公钥,并将ECDH共享密钥存储在ECDH_Felix
这些例子只展示了部分功能,需要彻底了解芯片的命令,后续我们将继续讲解如何使用其他的功能,当然也可以联系MODSEMI FAE进行咨询,这样更直接:
• AES CBC: cipher Block Chaining (key dependent on previous message)
• AES CTR: Counter (another key obscuring method)
• AES CMAC: Block cipher Message Authentication Code method
• Message signing and verifying
• AES-GCM
• Key derivation
• SHA hashing
• HMAC: Hashing Message Authentication Code method
• ECDSA,Secp256k1,secp256r1,secp224r1
** • Secure Boot: firmware and software source authentication(固件和软件源身份验证)**
• Message digests
• Limited-use keys, using one of two monotonic incremental counters
MOD8ID MOD81D
版权归原作者 加密芯片和安全芯片 所有, 如有侵权,请联系我们删除。