ATECC508A芯片開發筆記(十):ConfigZone中 SlotConfig/KeyConfig詳細解釋 & 配置工具Tools

ATECC508A芯片開發筆記(十):ConfigZone中 SlotConfig及KeyConfig詳細配置 &Tools 使用


  • 前言
  • 一、SlotConfig
  • 二、KeyConfig
  • 三、實際應用設置案例

前言

  • 《https://blog.csdn.net/HowieXue/article/details/75212476 》中提到,ATECC508A使用前需要根據需求配置好各Slot/KeyConfig數據,並且要在Provision代碼裏的ConfigData數組中,替換相應的Slot/KeyConfig數據,才能正常使用。

因爲每一個Bit都有其特殊含義,理解起來非常困難,有一個Bit配置不對,都有可能導致508A不work,而且此時芯片Lock住也不能改了(囧),所以單開篇博客詳細解析一下下~~

Ps.: 其實兩年前就想着重寫這一塊,但苦於公司Security政策猛於虎,所以沒發佈,但現在我重新刪減整理了下(本文都是測試用數據哦),針對典型應用作爲案例,希望讓大家更好理解508A的配置使用。

開發過程中, 因爲16個Slot/KeyConfig每一個Bit去配置,再去計算相應的數據太麻煩,所以我做了一個小Excel Tools,裏面集合了整個508A的數據區解釋/配置…
在配置數據時,只需判斷某Bit是否使能,在Tools中通過SlotConfig/KeyConfig Generator置位該Bit,就自動算出代碼中所用的Config數據,嗯,用過的都說好~。

自動計算Slot/Key Config:
在這裏插入圖片描述

Tools 中的SlotConfig Generator(所有數據均爲寫博客用的測試Demo)
在這裏插入圖片描述
KeyConfig Generator
在這裏插入圖片描述

Tools全覽
在這裏插入圖片描述
Tools獲取
需要的話還是留言郵箱吧,雖然裏面刪減後只剩測試數據,但還是涉及Secret,不敢Publish(Secrurity政策猛於虎 哎)


一、SlotConfig

在這裏插入圖片描述
SlotConfig配置DataZone中每一個Slot所存儲的數據、以及相應的權限,裏面詳細的設定了每一個Slot需要存儲哪一種Secret、是否支持加密讀寫、數據是否具有可讀可寫權限等。

根據Datasheet,每個Slot都有16Bit的功能選項去選擇,最後生成的ConfigData在Provisioning中寫入508A,然後在程序裏將ConfigZone Lock完成配置。(SlotConfig數據是在ConfigZone的第20-51Byte)
SlotConfig中某些功能之間還會相互影響,以下針對每一個Bit詳細講解:

注意只有DataZone Lock後這些配置纔會生效。、


1.ReadKey(Bit 0:3)

在這裏插入圖片描述
ReadKey(0-3Bit),是配置該Slot存儲數據的可讀權限,實際就是配置的508A Read命令在該Slot的執行權限,0-3BIt全配置爲0,則讀該Slot沒有任何限制

如果該Slot配置爲存儲私鑰PriKey,則默認永遠不可讀,這種case下配置ReadKey各Bit的含義如下:

  • Bit0:是否使能外部數字簽名,(該PriKey是否可執行外部Sign,設爲1開啓,0關閉)
  • Bit1:使內部數字簽名,一般是在CheckMac/Genkey命令中使用
  • Bit2:使能ECDH操作(如果該Slot存儲PriKey需要ECDH,此項必選,ECDH配置可參見https://blog.csdn.net/HowieXue/article/details/78649559 )
  • Bit3:ECDH操作結果是否明文輸出,1則ECDH產生的Secret會輸出爲明文,0則Secret會寫另入一個指定的Slot。(Bit2爲0則該項忽略)

該Slot存儲的數據實際是否可讀與IsSecret和EncryptedRead的設置都非常相關。。。並且如果設置Slot存儲的是ECC 私鑰Private keys,則該Slot是永遠不能被讀取的。

每個Bit相應的功能在Tools中也已經加了Comments:
在這裏插入圖片描述

在這裏插入圖片描述

2.NoMac

在這裏插入圖片描述

Bit4:使能禁用Mac命令,1則針對508A的MAC/HMAC命令都不能執行了,0則所有命令都能執行

這個Bit一般默認爲0就行了,安全級別要求跟高也可以設爲1將MAC指令禁用。

3.LimitedUse

在這裏插入圖片描述
Bit5:使能限制Key使用次數。

有些Key存儲後,可以限制其使用次數,超出次數該Slot就會disable掉,一般也設置爲0就行了。
我們該功能沒有使用過,具體可以看下面Datasheet說明:

在這裏插入圖片描述針對slot15 該bit有特殊應用:
在這裏插入圖片描述在這裏插入圖片描述

4.EncryptRead

在這裏插入圖片描述Bit6:使能加密讀,設爲0可以明文讀。設爲1爲加密讀,如果設爲1,則該Slot的IsSecret Bit7也要設爲1

必須使能EncryptedRead才能使用加密讀,否則與508芯片通信都是明文傳輸

5.IsSecret

在這裏插入圖片描述Bit7:該slot存儲的數據是否是Confidential Secret(隱私數據)
如果slot存儲的是key就設爲1吧,如果設爲0,則GenKey、Sign命令都不能在該Slot執行了。

可以說IsSecret與EncryptedRead共同決定了某一Slot具備的讀權限,之間關係如下:
在這裏插入圖片描述

6.WriteKey

在這裏插入圖片描述
WriteKey根據WriteConfig配置該Slot支持怎樣的Write,默認我都設置的0,Write命令配置包括Configuration/OTA/Data Zone的寫操作,具體的有興趣的看下Datasheet吧

7.WriteConfig

在這裏插入圖片描述

配置了該Slot的Write Permissions,既Write命令可執行的權限:
有5種權限如下:

在這裏插入圖片描述
Bit12-Bit15全部設爲0,對應的就是Always模式,可以支持明文寫入,Datasheet上也建議,如果存儲Key的話,不要設置爲該模式。

如果存儲的是私鑰等Secret,建議WriteConfig設置爲Never,既該Slot永遠不能被Write

該參數其他對應的Config Table如下:
針對DeriveKey :
在這裏插入圖片描述
針對PrivWrite:
在這裏插入圖片描述

針對GenKey:
在這裏插入圖片描述



二、KeyConfig

在這裏插入圖片描述
KeyConfig配置了每個slot存儲的Key的功能權限,是在ConfigZone的第96 - 127 Byte,也是隻有DataZone Lock後這些配置纔會生效。

1.Private

在這裏插入圖片描述
Bit0:Slot是否存儲ECC PriKey,

  • 設爲1則該Slot存儲ECC私鑰,相應就可以執行一些ECC私鑰相關功能,如Sign、GenKey等。。

  • 設置0則相反,如果存儲公鑰、HMAC/SHA的key或者對稱加密的Key,就設置爲0

2.PubInfo

在這裏插入圖片描述

Bit1:

  • 如果Bit0設置爲1(既存ECC私鑰),則該Bit作用爲是否公開該Key的一些公開的版本信息(Public version)
  • 如果Bit0設爲0,則Bit1決定了該Publickey是否可以執行Verify功能,Verify功能/命令就是用一個存儲的PubKey去校驗簽名信息,然後返回執行結果)(Valid/Invalid)

3.KeyType

在這裏插入圖片描述
Bit2-4:ECC私鑰類型,
508A目前只支持P256 NIST 類型的ECC PriKey…

如下圖,ECC key則KeyType設置爲 1 0 0 (既4),不是ECC Key則設爲 1 1 1 (既7)
在這裏插入圖片描述

5. Lockable

在這裏插入圖片描述
Bit5:使能Slot Lock,
該Bit就是設置Slot是否支持單獨鎖定功能,1則使能該功能,Lock後也是不能數據被改動

6. ReqRandom

在這裏插入圖片描述
Bit6:使能Nonce是否需要隨機數
針對一些命令,Nonce可以是固定的,也可以是隨機數,這一項就是這個功能。開啓後安全性更高一些,但是個人感覺沒太大必要

7. ReqAuth

在這裏插入圖片描述

Bit7:使能Key操作之前的認證功能

508A有這個功能,是說在對slot存儲的Key執行操作時,可以先對這個Key進行認證。怎麼認證呢?是根據Bit8-11中指向的認證密鑰來做。

該功能我們沒有用過,因爲Prikey一般在存儲時已經進行了安全管控,在使用上一般不做這類Check,如果另有安全要求可以使能,但要相應配置下面的AuthKey參數:。

8.AuthKey

在這裏插入圖片描述
Bit8-11:如果使能Bit7,則AuthKey表明了相應認證用的Key在哪個Slot
AuthKey指向的認證密鑰是用來Verify該Key的合法性,一般指向另一個Slot存儲的Key。

9.IntrusionDisable

在這裏插入圖片描述
Bit12:使能禁用該Slot所有命令(除了GenKey命令)
設爲1的話,相當於該Slot除了GenKey命令,其他命令接受了都不會執行了,這個功能我個人理解和Lock還不一樣,相當於更改了執行權限。
一般用的很少

10.X509id

在這裏插入圖片描述
Bit14-15:PubKey是否遵循X509格式
如果不爲0,則代表存儲的PubKey是遵循X509格式,那麼用該PubKey去驗證證書的簽名,需要明確證書長度、PubKey位置等。

如果爲0,則代表PubKey可以驗證任一格式的簽名,或者該Slot不存儲PubKey

這個我們也沒怎麼用過,不多介紹了

KeyConfig介紹完畢。。。寫博客比寫代碼都累。。


三、實際應用設置案例

總結下實際應用案例數據,僅供參考

SlotConfig數據:

SlotConfig Data Usage
0x8780 存儲ECC PriKey
0x8720 存儲ECC PriKey 並需要該Key執行ECDH、GenKey
0xC780 存儲ECC PriKey 使用IIC加密讀
0x0F00 存儲PubKey、Signature等普通Secret數據(非私鑰)

KeyConfig數據:

KeyConfig Data Usage
0x3300 存儲ECC PriKey
0x3C00 存儲PubKey、Signature等普通Secret數據(非私鑰)

在這裏插入圖片描述


歡迎轉載,Howie原創作品,本文地址

http://blog.csdn.net/HowieXue/article/details/92433541

謝謝

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