215E225 TÜBİTAK 3001 PROJESİ SONUÇ RAPORU
Doğrulama Protokolü WISP Kodu
Tasarlanan doğrulama protokolü WISP RFID etiketi üzerinde denenmiştir. Oluşturulan WISP kodu etiket üzerine yüklenerek çalıştırılmıştır. Şekil 12 ‘de doğrulama protokolü WISP kodu görülebilmektedir.
#include "wispFonctions.h"
#include "AES/aes.h"
#include "RND/rand.h"
// ****************************************************************************
// AES Şifreleme İşlemlerinde Kullanılan Anahtarlar
// kg Grup şifreleme anahtarı
uint8_t kg[16]= {0x40, 0xD1, 0x00, 0x99, 0x10, 0x11, 0x40, 0x71, 0x10, 0xA5, 0x00, 0x22, 0x40, 0x12, 0x00, 0x2A};
// kt Etiket şifreleme anahtarı
uint8_t kt[16]= {0x99, 0xA5, 0x00, 0x40, ,0x22 0x2A, 0x40, 0x21, 0x69, 0xD1, 0x12, 0x10, 0x40, 0x00, 0x00, 0x11 };
// ****************************************************************************
// Ön tanımlı Grup ve Etiket ID bilgileri
uint8_t IDg[16] = {0x19,0x35,0x20,0x02,0x22,0x42,0x12,0x69,0x10,0x00,0x00,0x01,0x2A,0x9B,0xC1,0xD5};
uint8_t IDt[16] = {0x12,0xC1,0x01,0x02,0x00,0x10,0x69,0x12,0x42,0x00,0x22,0xD5,0x2A,0x9B,0x35,0x20};
// ****************************************************************************
void main(void) {
WISP_init();
// Geri çağırma işlevlerini WISP iletişim rutinleri ile kaydet
WISP_registerCallback_ACK(&my_ackCallback);
WISP_registerCallback_READ(&my_readCallback);
WISP_registerCallback_WRITE(&my_writeCallback);
WISP_registerCallback_BLOCKWRITE(&my_blockWriteCallback);
// BlockWrite veri arabelleğini başlat.
uint16_t bwr_array[6] = {0};
RWData.bwrBufPtr = bwr_array;
// EPC, READ ve WRITE veri arabelleğine erişim
WISP_getDataBuffers(&wispData);
// WISP iletişim rutinleri için çalışma parametrelerini ayarlama
WISP_setMode( MODE_READ | MODE_WRITE | MODE_USES_SEL);
WISP_setAbortConditions(CMD_ID_READ | CMD_ID_WRITE /*| CMD_ID_ACK*/);
// RFID Okuyucu ile iletişim döngüsü.
while (FOREVER) {
// RFID Okuyucudan gelen mesajı oku.
rfid_ReadHandle();
fill_getData(M1,Nr);
// Etiket için Rastgele Sayı Üret
Nt = rastgele_sayi_olustur();
aes_decrypt(M1, kg);
if(IDg != IDgi){
//işlemi sonlandır!
}else{
M2 = IDg ^ Nr ^ Nt;
M3 = IDt;
aes_encrypt(M3, kt);
M4 = M2 ^ M3;
aes_encrypt(M4, kg);
// wispData Yapısını M4 ve Nt ile dolduruyor.
fill_wispData(wispData,M4,Nt);
WISP_doRFID();
}
}
}
#include "wispFonctions.h"
#include "AES/aes.h"
#include "RND/rand.h"
// ****************************************************************************
// AES Şifreleme İşlemlerinde Kullanılan Anahtarlar
// kg Grup şifreleme anahtarı
uint8_t kg[16]= {0x40, 0xD1, 0x00, 0x99, 0x10, 0x11, 0x40, 0x71, 0x10, 0xA5, 0x00, 0x22, 0x40, 0x12, 0x00, 0x2A};
// kt Etiket şifreleme anahtarı
uint8_t kt[16]= {0x99, 0xA5, 0x00, 0x40, ,0x22 0x2A, 0x40, 0x21, 0x69, 0xD1, 0x12, 0x10, 0x40, 0x00, 0x00, 0x11 };
// ****************************************************************************
// Ön tanımlı Grup ve Etiket ID bilgileri
uint8_t IDg[16] = {0x19,0x35,0x20,0x02,0x22,0x42,0x12,0x69,0x10,0x00,0x00,0x01,0x2A,0x9B,0xC1,0xD5};
uint8_t IDt[16] = {0x12,0xC1,0x01,0x02,0x00,0x10,0x69,0x12,0x42,0x00,0x22,0xD5,0x2A,0x9B,0x35,0x20};
// ****************************************************************************
void main(void) {
WISP_init();
// Geri çağırma işlevlerini WISP iletişim rutinleri ile kaydet
WISP_registerCallback_ACK(&my_ackCallback);
WISP_registerCallback_READ(&my_readCallback);
WISP_registerCallback_WRITE(&my_writeCallback);
WISP_registerCallback_BLOCKWRITE(&my_blockWriteCallback);
// BlockWrite veri arabelleğini başlat.
uint16_t bwr_array[6] = {0};
RWData.bwrBufPtr = bwr_array;
// EPC, READ ve WRITE veri arabelleğine erişim
WISP_getDataBuffers(&wispData);
// WISP iletişim rutinleri için çalışma parametrelerini ayarlama
WISP_setMode( MODE_READ | MODE_WRITE | MODE_USES_SEL);
WISP_setAbortConditions(CMD_ID_READ | CMD_ID_WRITE /*| CMD_ID_ACK*/);
// RFID Okuyucu ile iletişim döngüsü.
while (FOREVER) {
// RFID Okuyucudan gelen mesajı oku.
rfid_ReadHandle();
fill_getData(M1,Nr);
// Etiket için Rastgele Sayı Üret
Nt = rastgele_sayi_olustur();
aes_decrypt(M1, kg);
if(IDg != IDgi){
//işlemi sonlandır!
}else{
M2 = IDg ^ Nr ^ Nt;
M3 = IDt;
aes_encrypt(M3, kt);
M4 = M2 ^ M3;
aes_encrypt(M4, kg);
// wispData Yapısını M4 ve Nt ile dolduruyor.
fill_wispData(wispData,M4,Nt);
WISP_doRFID();
}
}
}