Atsha204a使用心得

       最近公司要用到Atsha204a做軟件和硬件的綁定加密,於是就調了它的驅動,將使用過程中遇到的坑整理下,也好讓各位同仁少加點班;廢話少說,直接入正題。

0.加密原理:

主控端和Atsha204a端有相同的16 組密碼,用一串明文(一般生成一組32byte隨機數),主控端用約定的一組密碼使用sha256()加密算法將明文生成Hash值(32 byte),同時主控將明文傳遞給Atsha204a端,用與主控約定好的一組(SlotNum)密碼內部生成sha256  Hash值。然後主控讀取Atsha204a生成的hash,與自身生成的hash進行對比,若相同則成功。

注意:通訊線路中(iic)不傳遞密碼,Atsha204a端密碼區先燒錄好16組密碼(根據配置,密碼可以設置不可讀,就算出來的,也是0xff),只傳遞加密前的明文和約定密碼的組號即可。

1.往Atsha204a裏寫密鑰:

1.1 配置 config zone:

主要是16組密碼的屬性(如是否明文顯示,是否可讀,是否可寫),如下的幾個配置:

int8_t data1[4]={0x80,0x80,0x80,0x80}; //data鎖定後不可讀,也不可寫
uint8_t data2[4]={0x80,0x00,0x80,0x00}; //
uint8_t data3[4]={0x00,0x00,0x00,0x00};//data鎖定可明文讀,也可寫
uint8_t data4[4]={0xC0,0x80,0xC0,0x80};//
uint8_t data5[4]={0xC0,0x00,0xC0,0x00};//

設備16組密碼的屬性:

    Set_Zone_4byte(0,20,data1);
    Set_Zone_4byte(0,24,data2);
    Set_Zone_4byte(0,28,data3);
    Set_Zone_4byte(0,32,data4);
    Set_Zone_4byte(0,36,data5);

    Set_Zone_4byte(0,40,data3);
    Set_Zone_4byte(0,44,data3);
    Set_Zone_4byte(0,48,data3);

1.2:lock config zone;一旦lock無法無法解鎖;

Lock(0x80);
1.3:  write opt zone(我的沒有使用);


1.4:  確保2後可以進行 slot zone 密碼區進行讀寫;

在zone 3寫入16組密碼(每組32byte)
1.5: lock slot zone;一旦lock無法無法解鎖;

Lock(0x81);

6.操作完成,可以進入2的加密和驗證操作。

2.加密和驗證:

char ch;
    static   int  slotNum = 0;
    unsigned char recBuf[35]={0};           //接收ATSHA204計算結果
    unsigned char randomNum[35]={0};        //隨機數BUF
    CATsha204();                     //定義一個類    
    ch = GenerateRandomNum(randomNum);  //產生隨機數
    if(ch != 0){
        printk("==atsha204 iic com failed,exit==\n");
        return -1;
    }
    printk("slotNum =%d\n",slotNum);
    if(check_lock() != 1){
        printk("\n this is a new atsha204,will fac_lock_atsha204\n");
        //fac_lock_atsha204();
    }
    ch=Mac(slotNum,randomNum+1,recBuf);   //進行密碼驗證
    if(ch)
    {
        printk("-------------mac ok---------------\n");
    }
    else
    {
        printk("-------------mac fail---------------\n");
    }
    slotNum++;
    if(slotNum >=16)
        slotNum = 0;
    return 0;

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