為了更好地保護(hù)對(duì)器件的訪問(wèn),電池電量監(jiān)測(cè)計(jì)還可用于對(duì)主機(jī)進(jìn)行認(rèn)證(允許電池電量監(jiān)測(cè)計(jì)更改安全狀態(tài)),以及將電池電量監(jiān)測(cè)計(jì)解鎖(允許主機(jī)更新電池電量監(jiān)測(cè)計(jì))。為了執(zhí)行此功能,主機(jī)必須首先對(duì)經(jīng)授權(quán)公鑰進(jìn)行編程。當(dāng)電池電量監(jiān)測(cè)計(jì)處于“完全訪問(wèn)”狀態(tài)時(shí),必須通過(guò)將 30 個(gè)字節(jié)的壓縮公鑰發(fā)送到 MAC 子命令 0x0034 來(lái)寫入公鑰。必須讀取該相同的命令,以確認(rèn)當(dāng)前編程的公鑰用于主機(jī)認(rèn)證。
如果沒(méi)有編程的公鑰,則使用舊的“安全密鑰”解封操作。然而,一旦對(duì)公鑰進(jìn)行編程,舊的解封命令將被禁用。
注: 確保在編程后讀取公鑰,以確認(rèn)該值已正確存儲(chǔ),然后再發(fā)送密封 (SEAL) 命令。如果沒(méi)有相應(yīng)的私鑰,則無(wú)法恢復(fù)處于已密封 (SEALED) 狀態(tài)的器件。
必須按照 圖 5-1 圖(使用 SMBus ManufacturerAccess()(MAC) 命令對(duì)電池電量監(jiān)測(cè)計(jì)進(jìn)行認(rèn)證)執(zhí)行該操作程序。
整個(gè)流程概述如下:
- 主機(jī)使用以下數(shù)據(jù)塊之一發(fā)送帶數(shù)據(jù)的 MAC 子命令 0x003a:
- 要請(qǐng)求解封 (UNSEAL) 訪問(wèn)操作,請(qǐng)使用數(shù)據(jù)塊 0x14、0x04、0x72、0x36
- 要請(qǐng)求 FULL_ACCESS 訪問(wèn)操作,請(qǐng)使用數(shù)據(jù)塊 0xff、0xff、0xff、0xff
- 主機(jī)使用 0x003a 讀取 MAC 結(jié)果,以接收所生成的 8 字節(jié)質(zhì)詢代碼。
- 主機(jī)將 8 字節(jié)質(zhì)詢和命令組合成一條消息,并使用私鑰對(duì)消息進(jìn)行簽名,生成一個(gè) 30 字節(jié) r 和 30 字節(jié) s。
- 例如,如果電池電量監(jiān)測(cè)計(jì)生成了質(zhì)詢 0x12、0x34、0x56、0x78、0x9a、0xbc、0xde、0xf0,則要為解封 (UNSEAL) 操作簽名的完整消息字符串為 0x12、0x34、0x56、0x78、0x9a、0xbc、0xde、0xf0、0x14、0x04、0x72、0x36
- 主機(jī)將生成的 r 和 s 寫入電池電量監(jiān)測(cè)計(jì)。
- ECC_R (0x003c) 子命令接受 30 字節(jié) r 值或完整的 60 字節(jié) r、s 值。
- ECC_S (0x003d) 子命令接受在將 r 值發(fā)送到電池電量監(jiān)測(cè)計(jì)之后寫入的 30 字節(jié) s 值。
- 一旦測(cè)量?jī)x同時(shí)具有 r 和 s,測(cè)量?jī)x就會(huì)驗(yàn)證簽名。
- 如果簽名有效,則執(zhí)行命令所請(qǐng)求的操作。
更詳細(xì)的執(zhí)行流程圖如 圖 5-2 所示。