ATSHA204A(三)——config區配置

成功喚醒之後,纔可以做很多事情,實現它的命令功能。

  • 芯片的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)之前可進行修改。

 該區域默認設置如下:

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 源祕鑰
0 X 1 0 目標 DeriveKey 命令可在未授權 MAC 的情況下運行(滾動)。
1 X 1 0 目標 DeriveKey 命令需要授權 MAC(滾動)。
0 X 1 1 父項 DeriveKey 命令可在未授權 MAC 的情況下運行(創建)。
1 X 1 1 父項 DeriveKey 命令需要授權 MAC(創建)。
X X 0 X 在 WriteConfig 字段中具有此值的槽不可用作 DeriveKey 命令的目標。

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

Bit 15 Bit 14 Bit 13
0 0 0 始終 始終允許對此槽進行明文寫入。設置爲“始終”的槽始終不應用來存儲密鑰。可以向此槽寫入 4 個或 32 個字節。
X 0 1 從不 始終不允許使用 Write 命令寫入此槽。設置爲“從不”的槽仍可用來存儲密鑰。
1 0 X 從不 始終不允許使用 Write 命令寫入此槽。設置爲“從不”的槽仍可用來存儲密鑰。
X 1 X 加密 寫入此槽的內容需要一個正確計算的 MAC,並且輸入數據必須由系統通過 WriteKey 使用 Write 命令說明中記錄的加密算法進行加密。禁止對此槽進行 4 字節寫入。

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

IsSecret EncryptRead
0 0 始終允許從此槽進行明文讀取。
設置爲此狀態的槽始終不應用來存儲密鑰。一次可以讀取 4 個或 32 個字節。
0 1 禁止。使用此代碼的槽不能保證安全性。
1 0 始終不允許從此槽進行讀取。
設置爲此狀態的槽仍可用來存儲密鑰。
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命令格式:

【注】

  • 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命令格式:

 


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

每個slot佔兩個字節,每一位什麼作用上面都寫了,利用I2C寫入就可以了,就實現了配置,可以直接按照地址寫,地址直接用word就可以,4字節或者32字節。在讀寫操作的數據包中,該區zone的值爲0x00,如果直接用0x00只能讀寫4bytes,如果zone = 0x00 | 0x80就可以讀寫32bytes。

確定各slot的使用權限,全部寫入,成功後,確定正確,就可以clock了。按照clock的命令數據包的格式,寫config區的最後一個字節LockConfig,寫成0x00就鎖上了。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章