Mã hóa AES cho VĐK tốc độ thấp

Khi làm việc với mạng nhúng (có dây/không dây), chắc hẳng để có được tính bảo mật tối thiểu chúng ta phải mã hóa các gói trước khi tung vào mạng.

Tới thời điểm hiện nay, các thuật toán có thể kể tới như RC5/6, Serpent, Twofish, XTEA, AES (Rijndeal). Có một bài báo khá chi tiết so sánh thuật toán mã hóa trên VĐK MSP430 của TI, đáng để đọc cho những người muốn tìm hiểu kỹ, nằm ở cuối blog. Đáng chú ý hơn cả là AES đã được chuẩn hóa bởi NIST, và AES được đầu tư vào phần cứng của hầu hết các chíp IEEE 802.15.4.

Chương trình AES của GS Gladman viết được bảo trì thường xuyên, thậm chí được dùng trong WinZip. GS Gladman cũng viết AES cho VDK cấp thấp. Khi biên dịch cho dòng MSP430 (với mspgcc) chỉ tốn khoảng 4kb RAM, do đã được tối ưu hóa với các dữ liệu khai báo theo kiểu unsigned char.

Bạn có thể tải chương trình (aes.h/c) tại trang nguồn. Tùy theo trình biên dịch, aes.c có thể có lỗi ở hàm  static void copy_block_nn, sửa lại như sau:

static void copy_block_nn( void * d,  void *s, uint_8t nn )
{
    while( nn– ) {
//        *((uint_8t*)d)++ = *((uint_8t*)s)++;
        ((uint_8t*)d)[nn] = ((uint_8t*)s)[nn];
    }
}

Có thể viết chương trình với Visual C++ hoặc gcc để kiểm tra giao diện aes.h như sau:

#include "aes.h"

uint_8t key[16];
uint_8t in_block[N_BLOCK];
uint_8t ou_block[N_BLOCK];
uint_8t outdecr_block[N_BLOCK];
uint_8t klen;
aes_context ekey;

int main(void) {
    uint_8t set_key;

    sprintf(key,"yourkey");
    sprintf(in_block,"input^^input–");
    klen = 128;
    set_key = aes_set_key(key, klen, &ekey);

    printf("input string: %s, encrypted string: %s, decrypted string: %s\n", in_block, ou_block, outdecr_block);
    aes_encrypt(in_block, ou_block, &ekey);
    printf("input string: %s, encrypted string: %s, decrypted string: %s\n", in_block, ou_block, outdecr_block);
    printf("String length: %d — %d — %d\n", strlen(in_block), strlen(ou_block), strlen(outdecr_block));

    aes_decrypt(ou_block, outdecr_block, &ekey);
    printf("input string: %s, encrypted string: %s, decrypted string: %s\n", in_block, ou_block, outdecr_block);
    return EXIT_SUCCESS;
}

Tận dụng chương trình sẵn có để đời sống coding thỏa mái hơn Smile.

 

3 thoughts on “Mã hóa AES cho VĐK tốc độ thấp”

  1. Anh ơi anh cho em hỏi em chỉ học về VĐK avr của ATmega em dùng cái này để tối ưu code biên dịch được không.
    anh cho em hỏi luôn cách hướng dẫn dùng các file này được không?

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s