PDA

View Full Version : Giải thuật mật mã hóa XTEA với ASM30


bien_van_khat
06-08-2007, 01:29 PM
Mục đích: Bài viết giới thiệu 1 phương pháp mật mã hóa rất mạnh ở thời điểm hiện tại, đồng thời đưa ra đoạn code thực hiện giải thuật này trên dsPIC với chỉ khoảng 300 word program memory, và 2 byte ram (thậm chí có thể sửa lại để ko cần đến 2 byte ram này).

XTEA viết tắt của Extended Tiny Encryption Aglorithm, được thiết kế bởi David Wheeler and Roger Needham của phòng thí nghiệm máy tính Cambridge. Giải thuật này không hề được đăng ký bản quyền do đó bất kỳ ai cũng có thể sử dụng nó một cách tự do.

XTEA là dạng mã hóa mật mã khối, kích thước khối 64 bit, khóa bí mật 128 bit.

Đúng theo tên gọi Tiny, XTEA là 1 giải thuật cực kỳ đơn giản và rất dễ code. Nó vốn được thiết kế với mục đích áp dụng trong các hệ thống với cấu hình phần cứng hạn chế. Với số vòng lặp từ 32 trở lên đây thực sự là một giải thuật mật mã hóa rất mạnh (tham khảo wikipedia).

void encipher(unsigned int num_rounds, unsigned long* v, unsigned long* k) {
unsigned long v0=v[0], v1=v[1], i;
unsigned long sum=0, delta=0x9E3779B9;
for(i=0; i<num_rounds; i++) {
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
}
v[0]=v0; v[1]=v1;
}

void decipher(unsigned int num_rounds, unsigned long* v, unsigned long* k) {
unsigned long v0=v[0], v1=v[1], i;
unsigned long delta=0x9E3779B9, sum=delta*num_rounds;
for(i=0; i<num_rounds; i++) {
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
}
v[0]=v0; v[1]=v1;
}

Đính kèm là project chứa source viết = Microchip C30 và Microchip ASM30, bạn có thể dùng MPLAB sim để test giải thuật.