日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

加密芯片ATSHA204之使用

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加密芯片ATSHA204之使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 看手冊
  • Command Packets
  • Configuration Zone
  • Lock Command
  • Nonce Command
  • GenDig Command
  • Write Command
  • Read Command
  • MAC Command
  • DeriveKey Command
  • 相關參考

本文旨在記錄 ATSHA204 的使用過程。ATSHA204 是一個安全認證和驗證設備,可防止設備被抄襲,應該可以算一個加密芯片。

看手冊

??了解一個芯片先看手冊,先看硬件相關部分,此芯片有多種封裝,3管腳芯片為單線通信,8引腳芯片為 I2C 通信,本文主要記錄 I2C 通信。


??由于設備在使用時需要先行喚醒,需要使用 SDA 管腳發送超過 tWLO = 60us 的時間,也是下面截圖提到的 I2C 的頻率在低于133kHz時,發送0x00能夠達到喚醒的效果。發送完成,需延時至少大于 tWHI = 2.5ms ,讓 SDA 管腳為高,其后可進行正常通信。雖然本器件的 I2C 速率可達 1MHz,但為了方便喚醒操作,直接設置速率為 100kMz。




以上簡單的描述了發送的數據與回復的數據,例如設備喚醒后,會回復4字節:0x04,0x11,2字節CRC

Command Packets

設備喚醒后就可正常通信,使用 Command 0x03

此處為發送的命令包格式:
Command 的一般命令為 0x03
Count 為 Count 及其之后的所有數據的個數

回復的數據包
Count 為 回復的所有值,包括 Count
Data 為 回復的數據值,有 1字節,4字節,32字節



以上分別列出了 Command 包的 Opcode、Param1、Param2 值列表。

相關的命令操作碼如上圖 Table 8-6 Command Opcodes ,主要用到了以下幾個,下面具體說說。

  • DeriveKey Command
  • GenDig Command
  • Lock Command
  • MAC Command
  • Nonce Command
  • Read Command
  • Write Command

Configuration Zone

要想使用芯片,需要先對 Configuration Zone 進行數據進行配置。

主要配置 Slot Configuration:


數據 Slot 總共有16個區域,每個區域可以存儲 32 字節。

作為密鑰存儲,禁止讀寫,IsSecret(bit7)為1,EncryptRead(bit6)為0,WriteConfig(bit15-12)為never(x01x 或 10xx)

普通數據可以使用加密讀寫,也可以普通讀寫,本文主要說明加密讀寫。加密寫 WriteConfig(Bit14)設置為1;加密讀 IsSecret(bit7)為1,EncryptRead(bit6)為1

密鑰區設置 0x80 0x80
加密讀寫設置 0xC0 0xF0 (此處的兩個字節的低 4 位分別為加密讀與寫所使用的槽號,此處為 slot0)

Lock Command

寫完配置后,需要對 Configuration Zone 中的 Lock Config 加鎖

使用 Lock 命令 ,發送 0x03 0x07 0x17 0x80 0x00 0x00 + 2字節CRC

完成配置區域的鎖定,就可以寫入16個 slot 數據了

這里不加密些的話直接使用 0x12 命令即可,若要使用加密寫,則需要先發送 Nonce 與 Gendig, 生成值保存于 TempKey 中

Nonce Command



Nonce 發送 0x03 0x1B 0x16 0x00 0x00 0x00 + 20個隨機數 + 2字節CRC
此時芯片會返回 32 字節,按上圖就行 SHA-256 計算,得出存儲在芯片內部的 TempKey 值。

GenDig Command

下一步則是發送 GenDig ,GenDig 命令使用 SHA-256 將存儲的值與 TempKey 的內容組合起來。


GenDig 發送 0x03 0x07 0x15 0x00 0x00 0x00 + 2字節CRC
初次加密寫,此處使用 config 中的 slot0,芯片返回 0 則成功,通過上圖紅框計算出新的值,同時該值也會由芯片計算,存儲 TempKey 中。

Write Command


加密發送之前,需要先計算出 Mac 值(這里的 Mac 與 Mac Command 是兩碼事),
TempKey 為 GenDig 后,通過 SHA-256 計算出的值,32字節
PlainTextData 為要發送的數據,32字節
Opcode :0x12
Param1 : 0xC2
Param2 : 所要寫入數據的 Slot 值,如下所示:(32字節寫入,為其中的 Block)

上圖中要發送的 Value 為 GenDig 后,通過 SHA-256 計算出的值 與 所要發送的值 PlainTextData 異或后計算出的值。

數據寫完成后,還可對OTP寫入,同上。

完成后,鎖定數據區:
使用 Lock 命令 ,發送 0x03 0x07 0x17 0x81 0x00 0x00 + 2字節CRC

這時,完成了 config 與 data 區域的鎖定,configuration 設置 0x80 0x80 的就無法讀寫,設置 0xCx 0xFx 則可根據設置加密讀寫的 Slot 來進行加密讀寫。

Read Command



例如:讀取未加密 Data slot1 32字節值,直接發送 0x03 0x07 0x02 0x82 0x08 0x00 + 2字節CRC
則返回 0x23 + 32字節 slot1 存儲值 + 2字節CRC
讀取未加密 Data slot1 最后 4 字節值,直接發送 0x03 0x07 0x02 0x02 0x0F 0x00 + 2字節CRC

加密讀時需要先運行GenDig命令,以生成用于解密的密鑰。GenDig 使用上面已經提及,先發送 Nonce,然后 GenDig。
例如讀取設置 0xCF 0xFF 配置的 Slot1,使用密鑰 Slot15 數據,則發送 Nonce 命令,
后發送GenDig 命令 0x03 0x07 0x15 0x02 0x0F 0x00 + 2字節CRC
計算解密密鑰時,前32字節為 Slot15 數據,其他沒啥變化


而后發送讀命令則會返回加密后的 32 字節數據,與上面 GenDig 后計算的解密密鑰異或,則可得到 Slot1 中的值。

MAC Command

Mac 命令可返回一個 32字節的 SHA-256 digest,也就是一個在密鑰區計算后得出的一個 32字節的 SHA-256 計算值,可與程序內部的已知密鑰比較,正確則程序繼續運行。可用于相對簡單的防抄襲。

例如使用 Slot15 區域的密鑰,發送 Mac 命令時也是先發送 Nonce 命令。
Mac 命令發送 0x03 0x07 0x08 0x41 0x0F 0x00 + 2字節CRC,
mode值 0x41,具體如下圖,只使用 SN[2:3] 和 SN[4:7]

發送成功,則返回 32字節的 SHA-256 digest,

通過程序內部計算得出一個新的 SHA-256 digest 值,與返回值比較,相同則通過檢查,程序可繼續運行。相關 是否使用 OTP 與 SN,與發送 Mac 命令時的 Mode 值有關。

DeriveKey Command


該命令主要進行密鑰的滾動或者創建新密鑰,要使用它,需要在配置 Slot Configuration 時,將其中 Write Config 的 Bit 13 設置為1,同時還分為 Target 和 Parent key,Target key 主要指本身 Slot 值,Parent key 指配置 Slot Configuration 時 WriteKey 設置的 Slot 中的值

使用 DeriveKey 命令時,需要先發送 Nonce(設置mode 為 0x00),

則 DeriveKey 命令中的 TempKey.SourceFlag 為 0(Rand),SlotConfig[TargetKey].Bit15 若是設置,則需要計算 Mac 值,計算數據中的 ParentKey 是 SlotConfig[TargetKey].WriteKey 設置時的 Slot 中的值。

發送 DeriveKey 命令,則所在 Slot 的值發生變化,按上圖使用 SHA-256 計算得出值即為所在 Slot 的更新值。

對于 Slot 0~7( Slot 8~14 忽略 SingleUse 位) ,如果 SlotConfig [TargetKey] 的 Bit12 或 SlotConfig [TargetKey] 的 Bit15 被設置為1,且 SlotConfig[ParentKey].SingleUse 也設置為1,在 UseFlag[ParentKey] 為0x00 的情況下,DeriveKey 命令會返回錯誤。

UseFlag 值 0xFF 為 8 次使用,0x7F為 7次使用,以此類推。

當成功執行時,DeriveKey 總是將 Target key 的 UseFlag 重置為 0xFF,這是重置UseFlag位的唯一機制。

數據 Slot 15 比較特殊,其沒有重置機制,在 配置中的 LastKeyUse 都是描述 Slot 15 的有限使用次數,16個 LastKeyUse, 共 128 次使用(可更改使用次數),在128次使用之后,密鑰 Slot 15 將永久禁用。

在DeriveKey命令中,SingleUse 位用于 Parent key,但被 Target key 忽略。

相關參考

https://blog.csdn.net/a5882230/article/details/52214845
源碼 :https://github.com/nsood/sha204

總結

以上是生活随笔為你收集整理的加密芯片ATSHA204之使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。