天天看點

ATSHA204A(三)——config區配置1. config區的組成2 Config 區的配置決定DATA區的操作權限

成功喚醒之後,才可以做很多事情,實作它的指令功能。

  • 晶片的config區和data區一旦鎖定,沒有辦法解鎖,鎖的方法隻能通過lock command來進行鎖定。
  • config區在沒鎖定的時候,可以使用write command來進行寫操作,但注意,0x00-0x03位址(word位址,詳情請參考手冊)不能被寫,0x15word位址不能使用write command來寫。
  • 在config鎖定前,data區(包括slot區和OTP區)既不能寫也不能讀。而在config鎖定後,data區鎖定前,data區隻能寫不能讀,在data區鎖定後,可以根據config中的配置來進行讀寫。

1. config區的組成

包含序列号和其他 ID資訊以及通路資料存儲器各槽權限資訊的 88位元組(704位)EEPROM區域。

配置區域鎖定(LockConfig 設定為!=0x55)之前可進行修改。

 該區域預設設定如下:

ATSHA204A(三)——config區配置1. config區的組成2 Config 區的配置決定DATA區的操作權限
ATSHA204A(三)——config區配置1. config區的組成2 Config 區的配置決定DATA區的操作權限

Config的配置都是按照word(字)位址進行的,每個word為4位元組。 

1.1 0x00-0x03(始終可讀)

ATSHA204A中包含了各種固定資訊,無論鎖定位的狀态如何,在任何情況下都不能寫入,但始終可以讀取。

1.1.1 SerialNum

9 個位元組(SN<0:8>),一起形成 CryptoAuthentication 系列中任何器件都不會重複的惟一值。序列号分為兩組:

(1) SN<0:1> SN<8>

在 ATSHA204A 的大多數版本中,這些位的值是在制造時固定的。其預設值為(0x01 0x23 0xEE),這 24 位始終包含在 ATSHA204A 所執行的 SHA-256 計算中,也就是所有晶片都有這幾個值都是有的。 

(2)SN<2:7>

這些位的值由 Microchip 在制造過程中程式設計,對于每個晶片均有所不同。這 6 個位元組(48 位)可視情況包含在 ATSHA204A 所執行的一些 SHA-256 計算中。

1.1.2 RevNum

Microchip用來提供制造版本資訊的 4位元組資訊。這些位元組可以自由讀取為 RevNum<0:3>,但始終不應被系統軟體使用,因為它們可能會因晶片版本發生變化。

1.2 字0x03(始終可讀)

位元組2為I2C_Enable:

Bit7-1

Bit0

忽略,由 Microchip 設定。

0 = 單線接口模式。

1 = I2C 接口模式。

本文為I2C接口操作。

1.3 0x04(始終讀,鎖前可寫)

(1)位元組0為I2C_Address:

Bit7-1

Bit3

Bit0

I2C 器件位址

TTL 使能(雙用途位)

I2C 位址的一部分,設定門檻值。

0 = 輸入電平使用固定參考。

1 = 輸入電平使用 VCC 作為參考。

忽略。

能看到該器件預設I2C位址為C8。

(2) 位元組1為CheckMacConfig

此位元組僅适用于 CheckMac、Read 和 Write 指令:

  •  Read Write: CheckMacConfig<0>控制slot 0和 1,CheckMacConfig<1>控制slot 2 和 3,依此類推,一個位元組8位,控制16個slot。如果 TempKey.SourceFlag中的值與此位元組中的相應位不比對,則任何加密 Read 或 Write 指令都将失敗。對于明文讀取和寫入,此位元組被忽略。
  •  CheckMac: CheckMacConfig<0>控制slot 1,CheckMacConfig<1>控制slot 3,依此類推。隻有在目标槽對應的 CheckMacSource值與 CheckMac 指令的 Modebit2的值比對時才會使能複制功能。如果Modebit2與 TempKey.SourceFlag不比對,則此指令将失敗,是以這相當于要求此位元組中的相應位與 TempKey.SourceFlag比對。

 (3) 位元組2為OTP模式

0xAA(隻讀模式)=當 OTP 區域鎖定時,禁止寫操作,允許所有字的讀操作。

       0x55(消耗模式)=當 OTP 區域鎖定時寫入 OTP 區域會導緻位僅從 1 轉換為 0。允許讀取所有字。

       0x00(傳統模式)=當 OTP 區域鎖定時,禁止寫操作,并會禁止字 0 和 1 的讀操作以及 32 位元組讀操作。

       所有其他模式均保留。

(4)位元組3為選擇器模式

如果為 0x00,将用 UpdateExtra 更新 Selector。

       如果為其他值,将隻允許 Selector 在值為零時更新。

1.4 word address為0x05-0x0c的區域(始終讀,鎖前可寫)

每個slot配置占2個位元組,也就是由16個位組成,它們控制特定槽或密鑰的使用和通路。當資料區域鎖定時,SlotConfig字段根據下表進行解析。當資料區域解鎖時,這些限制不适用,所有槽均可自由寫入,但不能讀取。

配置每個槽的16位,具體作用如下:

Bit
15-12 WriteConfig 請參見下面的詳細功能定義。
11-8 WriteKey 要用于驗證加密寫操作的密鑰的槽。跟bit0-3類似,隻不過這裡是寫操作,使用write command指令。
7 IsSecret

0 =  槽并非機密資訊槽,允許明文讀取、明文寫入,無 MAC 檢查且無 Derivekey 指令

1 =  槽為機密資訊槽。讀操作和寫操作(如果允許)必須進行加密。

6 EncryptRead

0 = 允許明文讀取。

1 = 要求槽為機密資訊槽,并以加密讀取的方式進行通路。

5 LimitedUse(1)

0 = 密鑰可使用的次數無限制。

1 = 根據槽的 UseFlag(或 LastKeyUse)對密鑰的使用次數進行限制。

4 CheckOnly

0 = 此槽可用于所有加密指令。

1 = 此槽隻能用于 CheckMac 以及後跟 CheckMac 的 GenDig 指令。

3-0 ReadKey

要用于加密讀取的密鑰的槽。如果你想把某個slot設定成可以加密讀取,則在這裡要指定加密讀取的密鑰存放的slot。

如果為 0x0,則此槽可用作 CheckMac/Copy 指令的源槽。

(1)WriteConfig寫配置位—— Derivekey指令

Bit 15 Bit 14 Bit 13 Bit 12 源秘鑰
X 1 目标 DeriveKey 指令可在未授權 MAC 的情況下運作(滾動)。
1 X 1 目标 DeriveKey 指令需要授權 MAC(滾動)。
X 1 1 父項 DeriveKey 指令可在未授權 MAC 的情況下運作(建立)。
1 X 1 1 父項 DeriveKey 指令需要授權 MAC(建立)。
X X X 在 WriteConfig 字段中具有此值的槽不可用作 DeriveKey 指令的目标。

(2)WriteConfig寫配置位—— Write指令

Bit 15 Bit 14 Bit 13
始終 始終允許對此槽進行明文寫入。設定為“始終”的槽始終不應用來存儲密鑰。可以向此槽寫入 4 個或 32 個位元組。
X 1 從不 始終不允許使用 Write 指令寫入此槽。設定為“從不”的槽仍可用來存儲密鑰。
1 X 從不 始終不允許使用 Write 指令寫入此槽。設定為“從不”的槽仍可用來存儲密鑰。
X 1 X 加密 寫入此槽的内容需要一個正确計算的 MAC,并且輸入資料必須由系統通過 WriteKey 使用 Write 指令說明中記錄的加密算法進行加密。禁止對此槽進行 4 位元組寫入。

(3)IsSecret和EncryptRead位的配置對slot讀操作的影響

IsSecret EncryptRead

始終允許從此槽進行明文讀取。

設定為此狀态的槽始終不應用來存儲密鑰。一次可以讀取 4 個或 32 個位元組。

1 禁止。使用此代碼的槽不能保證安全性。
1

始終不允許從此槽進行讀取。

設定為此狀态的槽仍可用來存儲密鑰。

1 1

從此槽中讀取的内容使用 Read指令描述中記錄的加密算法進行加密。

加密密鑰位于由 ReadKey  指定的槽中。禁止 4 位元組讀寫操作。

1.5 0x0d-0x10

UseFlag:

用于“限制使用的槽”。“1”位的數量表示在禁止前槽 0 至 7 可使用的次數。也就是指明了對應的slot區(隻限slot0-7)中的key還能使用多少次,但前提是slot config.SingleUse = 1,UseFlag才會有用。

UpdateCount:

表示槽 0 至 7 已用 DeriveKey 更新的次數。

1.6 0x11-0x14

LastKeyUse:

用于控制槽 15 的限制使用次數。每個“1”位表示槽 15 的一次剩餘使用次數。僅适用于 SlotConfig<5>LimitedUse 置 1 的情況。而計算剩餘使用次數的方法是,所有LastKeyUse位1的個數加起來,那麼總共就有16*8 = 128次了,用完後,slot15就徹底不能再使用,無法被DeriveKey更新。

1.7 0x15

UserExtra:

對于一般的系統使用,可通過 UpdateExtra 指令進行修改。

UpdateExtra指令格式:

ATSHA204A(三)——config區配置1. config區的組成2 Config 區的配置決定DATA區的操作權限
ATSHA204A(三)——config區配置1. config區的組成2 Config 區的配置決定DATA區的操作權限

【注】

  • Mode.bit1 = 1時,這條指令做的操作是,減少NewValue中指定的SlotID的使用次數。
  • UserExtra中的值不為0,那麼此條指令如果更新UserExtra的話将會傳回失敗。
  • 如果SelectorMode不為0,而且Selector不為0,那麼那麼此條指令如果更新Selector的話将會傳回失敗。

選擇器:

選擇哪個器件将在執行 Pause 指令後保持工作模式。

LockValue:

控制資料和 OTP 區域是否解鎖、可自由寫入但不能讀取。

0x55 = 資料和 OTP 區域已解鎖,且具有寫通路權限。

0x00 = 資料和 OTP 區域已鎖定,并采用配置區域中定義的通路政策。資料區域中的槽隻能根據相應WriteConfig 字段進行修改。OTP 區域隻能根據 OTP 模式進行修改。

LockConfig:

配置區域通路。

0x55 = 配置區域具有寫通路(已解鎖)。

0x00 = 配置區域沒有寫通路(已鎖定)。

LOCK指令格式:

ATSHA204A(三)——config區配置1. config區的組成2 Config 區的配置決定DATA區的操作權限

2 Config 區的配置決定DATA區的操作權限

每個slot占兩個位元組,每一位什麼作用上面都寫了,利用I2C寫入就可以了,就實作了配置,可以直接按照位址寫,位址直接用word就可以,4位元組或者32位元組。在讀寫操作的資料包中,該區zone的值為0x00,如果直接用0x00隻能讀寫4bytes,如果zone = 0x00 | 0x80就可以讀寫32bytes。

确定各slot的使用權限,全部寫入,成功後,确定正确,就可以clock了。按照clock的指令資料包的格式,寫config區的最後一個位元組LockConfig,寫成0x00就鎖上了。

繼續閱讀