Chƣơng trình điều khiển (firmware)

Một phần của tài liệu Nghiên cứu giải pháp sử dụng khóa USB cho việc đảm bảo bản quyền cho (Trang 44 - 47)

Firmware cho thiết bị đƣợc thiết kế với giao thức tự định nghĩa và có lƣu đồ thuật toán nhƣ sau:

45

46

Từ lƣu đồ chƣơng trình chính ta có thể thấy rằng, firmware của thiết bị có các chức năng sau:

- Đọc gói dữ liệu nhận đƣợc từ máy tính qua cổng COM UART.

- Kiểm tra gói dữ liệu nhận đƣợc có phải là lệnh thực hiện các chức năng nhƣ trong lƣu đồ.

- Thực hiện các chức năng tƣơng ứng với lệnh nhận đƣợc từ máy tính.

Nhƣ vậy, để đảm bảo an toàn cho thiết bị cũng nhƣ chƣơng trình ứng dụng, giao thức giữa chúng đƣợc thực hiện nhƣ sau:

- Giữa thiết bị và chƣơng trình ứng dụng có một mã “bắt tay” là 0xFE.

- Thiết bị sẽ đƣợc cung cấp một ID riêng, có độ dài 2 Byte, ID này ban đầu sẽ đƣợc cấp phát (mã 0xFD) và sau đó đƣợc lƣu lại (trong bộ nhớ EEPROM) và sử dụng cho các lần tiếp theo khi có lệnh đọc kiểm tra ID (mã 0xFC).

- Thiết bị đƣợc cung cấp mã cá nhân riêng “Private” (mã lệnh 0xFB), có độ dài 128 byte, mã này đƣợc sử dụng nhƣ là một khóa riêng biệt cho mỗi một thiết bị và sẽ đƣợc kiểm tra (mã lệnh 0xFA) bởi chƣơng trình ứng dụng theo một quy ƣớc cho sẵn. Ngoài ra, trong lần cấp phát đầu tiên cho thiết bị, để đảm bảo quá trình truyền nhận giữa thiết bị và chƣơng trình ứng dụng không có sai lệch, mã “Private” này đƣợc yêu cầu đọc lại (mã lệnh 0xF6) để kiểm tra đối sánh.

- Thiết bị đƣợc cung cấp mã phổ thông “Public” (mã lệnh 0xF9), có độ dài 8 byte, mã này đƣợc hiểu nhƣ là các tham số cho một hàm toán học đƣợc định nghĩa trƣớc và lƣu trong thiết bị. Trong quá trình giao tiếp giữa chƣơng trình ứng dụng và thiết bị khóa, sẽ liên tục sử dụng hàm toán học với các tham số đƣợc cung cấp này để hỏi đáp kết quả (mã lệnh 0xF8), nhằm đảm bảo chính xác có khóa đúng đƣợc gắn vào máy tính có cài đặt chƣơng trình ứng dụng. Trong lần đầu đƣợc cấp phát, mã “Public” này cũng đƣợc kiểm tra lại để đổi chứng (mã lệnh 0xF7).

47 Hàm toán học đƣợc định nghĩa nhƣ sau:

F(x)= Pub[0]*(x%8) + Pub[1]*(x%9) + Pub[2]*(x%10) + Pub[3]*(x%11) + Pub[4]*(x%12) + Pub[5]*(x%13) + Pub[6]*(x%14) + Pub[7]*(x%15)

- Trong trƣờng hợp xảy ra sai lệch, hoặc có lỗi trên đƣờng truyền hay bất kỳ một nguyên nhân nào khiến cho kết quả nhận đƣợc giữa thiết bị khóa và chƣơng trình ứng dụng không khớp nhau, thiết bị sẽ bị xóa các bản ghi đƣợc khởi tạo ban đầu (mã lệnh 0xF5), sau đó thiết bị sẽ đƣợc khởi tạo lại với các mã mới cho lần giao tiếp sau đó cho đến khi thành công.

Chƣơng trình firmware của thiết bị đƣợc viết trên phần mềm CodeVisionAVR và đƣợc trình bày trong phụ lục 1 của luận văn.

Một phần của tài liệu Nghiên cứu giải pháp sử dụng khóa USB cho việc đảm bảo bản quyền cho (Trang 44 - 47)