ATSHA204加密芯片介紹
1、認證流程:
(1)主機(Host)生成256位摘要(挑戰),發送給ATSHA204芯片(Client),進行挑戰;
(2)ATSHA204芯片使用HASH算法將摘要信息和自己的密鑰進行計算,得到響應1;
(3)同時,主機使用HASH算法將該摘要信息和自己的密鑰進行計算,得到響應2;
(4)主機將響應1和響應2進行比較,如果匹配,則認證成功。
2、RAM:存儲輸入命令和輸出結果; EEPROM:包括數據區、配置區和OTP(一次性編程)區域。
3、(1)數據(data)區:數據區的總大小是512 Kb,包含16個通用的容量為32字節的數據槽,這些數據槽可用來存儲秘鑰、校準數據以及型號信息。
(2)配置(config)區:配置區的大小為88字節,配置區包含芯片的序列號、ID信息以及每個數據槽的訪問權限信息,寫入數據槽中的數據將參與後續的MAC運算。
(3)一次性編程(OTP)區:大小為64字節,在鎖定OTP區域之前,可以通過寫命令對OTP區域進行寫入操作,OTP中存放的密鑰也將作為SHA-256輸入。
4、(1)序列號(serial number)用於區分其他芯片;
(2)內置16*32字節的slot(EEPROM)可以存儲用戶數據和秘鑰;
(3)SHA算法(本文使用SHA256)最主要的特點就是,任意長度的輸入能生成固定長度的輸出,並且從輸出的結果中不能還原輸入的內容,而且要找到不同兩個輸入導致相同輸出的情況在計算上不能實現;
(4)在單線上並沒有傳送秘鑰,而是傳送根據秘鑰和一些列的值計算出來的digest,因此在單線上截獲秘鑰不可實現;
(5)在自己的MCU上也存了秘鑰,別人獲取了16進制文件後是否有可能得到秘鑰,我只能說,的確存了,但是對於一個龐大的程序hex文件中尋找一個32字節的秘鑰,豈不是大海撈針?
(6)CheckMAC命令也是帶有驗證功能的,簡單來講,就是讓你計算好digest,發給ATSHA204A,然後ATSHA204A告訴你這個digest算的對不對,返回bool值;
(7)當我們原有的秘鑰泄露的時候,可以使用DeriveKey命令來產生新的秘鑰繼續使用。
5、重要命令:
DerriveKey:更新一個slot區中的秘鑰命令;
Nonce:使用隨機數來更新TempKey中的值;
CheckMAC:驗證一個摘要是否計算正確,返回的是Bool值類型(0是正確,1是錯誤);
MAC:使用SHA-256計算並返回一個摘要;
Read:讀取芯片區域中的數據;
Write:寫入芯片區域中的數據(這個命令一般用在配置時)。
6、防程序拷貝:
首先我們在ATSHA204A芯片的slot0中寫入一個32字節的秘鑰,設置為不可讀。這個秘鑰只有幾個人知道,並且不外泄,主控MCU與芯片相連,在啟動時候,首先我們要獲取芯片序列號,為後面計算MAC。然後我們發送一個nonce命令給ATSHA204A,讓其更新內部的TempKey中的值,MCU內部也根據nonce的模式計算一下Tempkey的值,我們稱之為host_tempkey,如果一切正常,那麽Tempkey和host_tempkey中的值是一致的,接下來MCU自己就可以根據host_tempkey、序列號、以及秘鑰計算,出一個摘要digest,我們稱之為digest1,接下來給ATSHA204A發送MAC命令,ATSHA204A根據存儲在slot區域中的秘鑰來計算digest2並返回給MCU,MCU判斷digest1和digest2是否匹配,不匹配將程序掛起即可。
ATSHA204加密芯片介紹