Tiến hành thực nghiệm

Một phần của tài liệu (LUẬN văn THẠC sĩ) hàm băm trong mật mã hạng nhẹ luận văn ths công nghệ thông tin 604802 (Trang 46 - 48)

Chương 3 : THỰC NGHIỆM

3.2 Tiến hành thực nghiệm

3.2.1Xây dựng chƣơng trình băm PRESENT

Chương trình PRESENT bao gồm các pha tính toán khóa, addRoundKey, … như mã nguồn bên dưới. Chương trình tham khảo tại [12]. Ngoài ra, trên trang lightweightcrypto.org còn chứa các mã nguồn khác của PRESENT theo các hướng cài đặt tối ưu trên phần cứng với khóa 64 bit, 128 bit (có cả mã nguồn bổ sung của S-Box 8 bit).

// ******************************************************************************

for(int round=0;round<32;round++){

subkey[round]= keyhigh;//61-bit shift trái

temp = keyhigh;

keyhigh <<=61;

keyhigh |=(keylow<<45);

keyhigh |=(temp>>19);

keylow =(temp>>3)&0xFFFF;

temp = keyhigh>>60;//S-Box

keyhigh &= 0x0FFFFFFFFFFFFFFF;

temp = sBox4[temp];

keyhigh |= temp<<60;

keylow ^=(((round+1)&0x01)<<15);

keyhigh ^=((round+1)>>1);

// ****************** Kết thúc pha tính toán khóa ************************************* // ****************** Mã hóa ***************************************************** for(i=0;i<31;i++){ // ****************** Pha addRoundkey ********************************************* state ^= subkey[i]; // ****************** Kết thúc pha addRoundkey ************************************* // ****************** Pha sBoxLayer ***********************************************

for(sBoxNr=0; sBoxNr <16; sBoxNr++){

sBoxValue = state &0xF;

state &=0xFFFFFFFFFFFFFFF0; state |=sBox4[sBoxValue];

state = rotate4l_64(state);

}

// ****************** Kết thúc pha sBoxLayer **************************************** // ****************** Pha pLayer **************************************************

temp =0;

for(int k=0;k<64;k++){

int position =(16*k)%63; // Hoán vị bit của p-Layer

if(k ==63)//Exception cho bit 63

position =63;

temp |=((state>>k)&0x1)<< position; //result writing

} state=temp; // ****************** Kết thúc pha pLayer ******************************************* } // ****************** Hàm addRoundkey vòng thứ 32 ********************************** state ^= subkey[31]; // ****************************************************************************** // ****************** Băm chuỗi có độ dài nhỏ hơn 64 bit ******************************

if(len (H)<64){

H = appendBit (H, len(H));

hashMess = hash (H, K);

}elseif(len (H)>64){// Băm chuỗi có độ dài lớn hơn 64 bit, sử dụng Merkle Damgard

IteratorH = Merkle (H);

numOfH = len (H)%64;

for(int i =0; i < numOfH-1; i ++){

newKey = makeNewKey(temp, K);

K = newKey;

hashMess = temp;

}

if(len (IteratorH[numOfH-1])<64)

{

H = appendBit (H, len(H));

}

hashMess = hash((IteratorH[numOfH-1]), K); }else { hashMess = hash (H, K); } // ****************************** Kết thúc băm ************************************ 3.2.2Tích hợp vào app di động

Build hàm băm PRESENT theo dạng thư viện tĩnh sau đó thông qua Jni để sử dụng như một thư viện của Java/Android. IDE sử dụng Android Studio ver 3.0. Cấu trúc sử dụng như hình 3.1 bên dưới:

Hình 3.1: Sử dụng Jni làm cầu nối để gọi qua lại giữa Java và C/C++

Một phần của tài liệu (LUẬN văn THẠC sĩ) hàm băm trong mật mã hạng nhẹ luận văn ths công nghệ thông tin 604802 (Trang 46 - 48)

Tải bản đầy đủ (PDF)

(54 trang)