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

95 152 0
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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

LỜI CAM ĐOAN Tôi cam đoan công trình nghiên cứu riêng Các số liệu, kết nêu luận văn trung thực chưa công bố công trình khác Tác giả luận văn Dƣơng Phú Tuấn MỤC LỤC DANH MỤC CÁC THUẬT NGỮ TIẾNG ANH VÀ CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG DANH MỤC CÁC HÌNH VẼ LỜI MỞ ĐẦU Chƣơng 1: LÝ THUYẾT VỀ BẢO MẬT BẢN QUYỀN CHO CHƢƠNG TRÌNH ỨNG DỤNG VỚI GIAO THỨC USB 11 1.1 KHÓA CỨNG 12 1.2 KEYLOCK 13 1.3 THIẾT BỊ KHÓA CỨNG VỚI GIAO THỨC USB 15 1.3.1 Lịch sử phát triển giao thức USB 16 1.3.2 Khai báo bảng mô tả thiết bị (USB Descriptor) 16 Chƣơng 2: LÝ THUYẾT VỀ MỘT SỐ THUẬT TOÁN MÃ HÓA 27 2.1 THUẬT TOÁN MÃ HÓA DES 27 2.1.1 Lịch sử đời 27 2.1.2 Mô tả thuật toán 27 2.2 THUẬT TOÁN MÃ HÓA RSA 29 2.2.1 Lịch sử đời 29 2.2.2 Mô tả thuật toán 29 2.3 THUẬT TOÁN MÃ HÓA AES 32 2.3.1 Lịch sử đời thuật toán 32 2.3.2 Mô tả thuật toán 32 Chƣơng 3: THIẾT KẾ CHẾ TẠO THIẾT BỊ KHÓA CỨNG USB DONGLE VỚI GIAO THỨC USB 35 3.1 CHẾ TẠO THIẾT BỊ KHÓA CỨNG SỬ DỤNG CHIP ATMEGA8 37 3.1.1 Tổng quan chip ATMEGA8 37 3.1.2 Tổng quan chip CP2012 38 3.1.3 Quy trình thiết kế 40 3.1.4 Nguyên lý làm việc 43 3.1.5 Chƣơng trình điều khiển (firmware) 44 3.2 THIẾT KẾ THIẾT BỊ KHÓA CỨNG TRÊN CHIP MAXQ1050 47 3.2.1 Tổng quan MAXQ1050 47 3.2.2 Quy trình thiết kế 50 3.2.3 Nguyên lý làm việc 53 3.2.4 Chƣơng trình điều khiển (firmware) 54 Chƣơng 4: CHƢƠNG TRÌNH PHẦN MỀM CHẠY TRÊN MÁY TÍNH KẾT NỐI VỚI KHÓA CỨNG 58 4.1 CHƢƠNG TRÌNH PHẦN MỀM TRÊN MÁY TÍNH 58 4.2 CHƢƠNG TRÌNH CHO THIẾT BỊ KHÓA SỬ DỤNG ATMEGA8 58 4.3 CHƢƠNG TRÌNH CHO THIẾT BỊ KHÓA SỬ DỤNG MAXQ1050 63 KẾT LUẬN 67 TÀI LIỆU THAM KHẢO 69 PHỤ LỤC 1: BỘ CHƢƠNG TRÌNH FIRMWARE CHO THIẾT BỊ KHÓA ĐƢỢC THIẾT KẾ TRÊN ATMEGA8 70 PHỤ LỤC 2: BỘ CHƢƠNG TRÌNH FIRMWARE CHO THIẾT BỊ KHÓA ĐƢỢC THIẾT KẾ TRÊN MAXQ1050 85 DANH MỤC CÁC THUẬT NGỮ TIẾNG ANH VÀ CHỮ VIẾT TẮT Dongle Thiết bị khóa cứng gắn vào máy tính Online Trực tuyến Offline Ngoại tuyến Device Descriptor Bảng mô tả thiết bị Configure Descriptor Bảng mô tả cấu hình thiết bị Interface Descriptor Bảng mô tả giao diện thiết bị String Descriptor Bảng mô tả chuỗi mô tả thiết bị Endpoint Kênh truyền nhận thông tin USB PID (Product ID) Mã thiết bị VID (Vendor ID) Mã ngƣời cung cấp thiết bị Driver Chƣơng trình điều khiển thiết bị DANH MỤC CÁC BẢNG Bảng 1-1: Bảng mô tả thiết bị 18 Bảng 1-2: Bảng mô tả cấu hình 20 Bảng 1-3: Bảng mô tả giao diện 22 Bảng 1-4: Bảng mô tả Endpoint 23 Bảng 1-5: Bảng mô tả chuỗi mô tả 25 Bảng 1-6: Bảng mô tả chuỗi mô tả thứ cấp 26 DANH MỤC CÁC HÌNH VẼ Hình 1-1: Các khóa cứng giới 13 Hình 1-2: Mô hình chế làm việc USB Dongle 14 Hình 1-3: Device Descriptor 18 Hình 1-4 Configuration Descriptor 20 Hình 1-5: Sơ đồ phân cấp bảng mô tả 21 Hình 1-6: Interface Descriptor 22 Hình 1-7: String Descriptor 25 Hình 2-1: Lƣu đồ chế hoạt động thuật toán DES 28 Hình 2-2: Lƣu đồ chế hoạt động thuật toán RSA 31 Hình 2-3: Lƣu đồ chế hoạt động thuật toán AES 33 Hình 3-1: Sơ đồ khối chức thiết bị khóa cứng 36 Hình 3-2: Sơ đồ bố trí chân cổng theo chuẩn TQFP ATMEGA8 38 Hình 3-3: Sơ đồ khối CP2012 39 Hình 3-4: Sơ đồ bố trí chân cổng theo chuẩn QFN-28 CP2012 39 Hình 3-5: Sơ đồ khối thiết bị 40 Hình 3-6: Sơ đồ nguyên lý 41 Hình 3-7: Sơ đồ mặt in lớp BOTTOM 42 Hình 3-8: Sơ đồ mạch in lớp TOP 42 Hình 3-9: Sơ đồ mạch in lớp TOP OVERLAY 42 Hình 3-10: Hình ảnh thiết bị sau hàn linh kiện 42 Hình 3-11: Lƣu đồ chƣơng trình main() 45 Hình 3-12: Sơ đồ khối chức MAXQ1050 49 Hình 3-13: Sơ đồ bố trí chân cổng MAXQ1050 49 Hình 3-14: Sơ đồ khối thiết bị 50 Hình 3-15: Sơ đồ nguyên lý thiết bị 51 Hình 3-16: Sơ đồ mạch in mặt TOP 52 Hình 3-17: Sơ đồ mạch in mặt BOTTOM 52 Hình 3-18: Sơ đồ bố trí linh kiện mặt BOTTOM 52 Hình 3-19: Sơ đồ bố trí linh kiện mặt TOP 53 Hình 3-20: Thiết bị sau hàn linh kiện 53 Hình 3-21: Hình ảnh so sánh sản phẩm thiết bị lƣu trữ USB thông dụng có thị trƣờng 53 Hình 3-22: Lƣu đồ chƣơng trình main() 56 Hình 3-23: Lƣu đồ chƣơng trình mã hóa AES 56 Hình 4-1: Giao diện chƣơng trình kích hoạt 59 Hình 4-2: Nội dung gói tin chƣơng trình điều khiển gửi xuống thiết bị thực thủ tục Hand Shake 60 Hình 4-3: Nội dung gói tin thiết bị khóa gửi lên cho chƣơng trình điều khiển thực thủ tục Hand Shake 61 Hình 4-4: Nội dung gói tin đƣợc gửi xuống cho thiết bị khóa chƣơng trình điều khiển thực lệnh cấp phát ID 62 Hình 4-5: Chuỗi liệu trả lời từ thiết bị sau đƣợc cấp phát ID 63 Hình 4-6: Giao diện chƣơng trinh 64 Hình 4-7: Gói liệu tƣờng minh gửi xuống cho thiết bị 65 Hình 4-8: Gói liệu mã hóa đƣợc gửi lên từ thiết bị 66 LỜI MỞ ĐẦU Trong thời đại công nghệ số phát triển nhƣ vũ bão nay, có đóng góp lớn chƣơng trình phần mềm ứng dụng Các chƣơng trình đƣợc thiết kế nhằm hỗ trợ cho ngƣời sử dụng đạt đƣợc tiêu chí nhƣ nâng cao chất lƣợng hoàn thiện nội dung công việc Nhiều chƣơng trình phần mềm đƣợc viết với tiêu chí phục vụ cộng đồng việc sử dụng hoàn toàn miễn phí, nhiên phần lớn chƣơng trình phần mềm đƣợc viết mục đích nêu giúp cho tác giả thu đƣợc lợi nhuận Nhƣng, nhiều lý mà phần lợi nhuận không đƣợc đảm bảo cho tác giả, hay nói cách khác quyền tác giả bị xâm phạm Điều khiến cho tác giả, ngƣời tạo phần mềm hữu ích góp phần phát triển giới số phần không hào hứng với việc tạo phần mềm Việc vô hình chung khiến giới công nghệ chậm phát triển hay thụt lùi Với thực trạng nhƣ vậy, luận văn muốn đóng góp phần nhỏ bé vào việc nghiên cứu giái pháp nhằm đảm bảo quyền cho phần mềm ứng dụng mục đích luận văn “Nghiên cứu giải pháp sử dụng khóa USB cho việc đảm bảo quyền cho phần mềm ứng dụng.” Luận văn có bố cục nhƣ sau: - Chƣơng 1: Lý thuyết bảo mật quyền cho chƣơng trình ứng dụng với giao thức USB - Chƣơng 2: Lý thuyết số thuật toán mã hóa - Chƣơng 3: Thiết kế chế tạo thiết bị khóa cứng USB Dongle với giao thức USB - Chƣơng 4: Chƣơng trình phần mềm chạy máy tính kết nối với khóa cứng - Kết luận Luận văn đƣợc hoàn thành với giúp đỡ đồng nghiệp giảng viên hƣớng dẫn xin đƣợc chân thành gửi lời cám ơn sâu sắc đến đồng nghiệp đặc biệt, thầy giáo PGS TS Nguyễn Quốc Cƣờng, trƣởng môn Kỹ Thuật Đo Tin Học Công Nghiệp, Viện Điện, trƣờng Đại học Bách Khoa Hà Nội, quan tâm giúp đỡ hoàn thành luận văn Tôi xin chân thành cám ơn! 10 USART_Transmit(RIDUser1); USART_Transmit(RIDUser2); }else{ ECount++; } }else{ ECount++; } }else{ ECount++; } } 11 Hàm Đọc mã Public // chương trinh doc lai ma Public void pub_read(void){ unsigned char i; RxData = USART_Receive(); if(RxData == 0x22){ RxData = USART_Receive(); if(RxData == 0x91){ RxData = USART_Receive(); if(RxData == 0x47){ for(i = 0; i < 8; i++){ USART_Transmit(RPubPass[i]); 81 } }else{ ECount++; } }else{ ECount++; } }else{ ECount++; } } 12 Hàm Đọc mã Private // chương trinh doc lai ma Private void pri_read(void){ unsigned char i; RxData = USART_Receive(); if(RxData == 0x22){ RxData = USART_Receive(); if(RxData == 0x91){ RxData = USART_Receive(); if(RxData == 0x47){ for(i = 0; i < 128; i++){ USART_Transmit(RPriPass[i]); } 82 }else{ ECount++; } }else{ ECount++; } }else{ ECount++; } } 13 Hàm Xóa thiết bị // chương trinh xoa cac ban ghi da duoc cap phat cho thiet bi void pass_era(void){ unsigned char i; for(i = 0; i < 128; i++){ EPriPass[i] = 0x00; RPriPass[i] = 0x55; } for(i = 0; i < 8; i++){ EPubPass[i] = 0x55; RPubPass[i] = 0x55; } EECount = 0x00; ECount = 0x00; 83 ECount1 = 0x00; } 84 PHỤ LỤC 2: BỘ CHƢƠNG TRÌNH FIRMWARE CHO THIẾT BỊ KHÓA ĐƢỢC THIẾT KẾ TRÊN MAXQ1050 Các mô tả ‘descriptor’ static unsigned char DeviceDescr[]= // DEVICE Descriptor {0x12, 0x01, // bLength = 18d // bDescriptorType = Device (1) 0x00,0x01, // bcdUSB(L/H) USB spec rev (BCD) 0x00,0x00,0x00, // bDeviceClass, bDeviceSubClass, bDeviceProtocol 0x40, // bMaxPacketSize0 EP0 is 64 bytes 0x66,0x66, // idVendor(L/H) Maxim is 0B6A VID 0x99,0x99, // idProduct(L/H) 5346 0x34,0x12, // bcdDevice 1234 1,2,3, PID // iManufacturer, iProduct, iSerialNumber 1}; static unsigned char ConfigDescr[]= // CONFIGURATION Descriptor {0x09, 0x02, // bLength // bDescriptorType = Config 0x29,0x00, // wTotalLength(L/H) = 41 bytes (co sua) 0x01, // bNumInterfaces 0x01, // bConfigValue 0x00, // iConfiguration 85 0x80, supported // bmAttributes b7=1 b6=self-powered b5=RWU (co sua) 0x05, // MaxPower is 10 ma // INTERFACE Descriptor 0x09, // length = 0x04, // type = IF 0x00, // IF #0 0x00, // bAlternate Setting 0x02, // bNum Endpoints (co sua) 0x03, // bInterfaceClass = HID 0x00,0x00, // bInterfaceSubClass, bInterfaceProtocol 0x00, // iInterface // HID Descriptor It's at CD[18] 0x09, // bLength 0x21, // bDescriptorType = HID 0x10,0x01, // bcdHID(L/H) Rev 1.1 0x00, // bCountryCode (none) 0x01, // bNumDescriptors (one report descriptor) 0x22, // bDescriptorType(report) 33,0, // CD[25]: wDescriptorLength(L/H) (report descriptor size is 33 bytes) // Endpoint Descriptor 0x07, // bLength 0x05, // bDescriptorType (Endpoint) 0x83, // bEndpointAddress (EP3-IN) 86 0x03, // bmAttributes (interrupt) (BULK) 64,0, // wMaxPacketSize (64) 50, // Endpoint Descriptor 0x07, // bLength 0x05, // bDescriptorType (Endpoint) 0x01, // bEndpointAddress (EP1-OUT) 0x03, // bmAttributes 64,0, // wMaxPacketSize (64) 50}; // bInterval (poll every 10 msec) (interrupt) (BULK) static unsigned char ReportDescr[]= // Report descriptor { 0x05, 0x8c, // USAGE_PAGE (ST Page) 0x09, 0x01, // USAGE (Demo Kit) 0xa1, 0x01, // COLLECTION (Application) // byte // The Input report 0x09,0x03, // USAGE ID - Vendor defined 0x15,0x00, // LOGICAL_MINIMUM (0) 0x26,0x00, 0xFF,// LOGICAL_MAXIMUM (255) 0x75,0x08, // REPORT_SIZE (8) 0x95,0x40, // REPORT_COUNT (20) 0x81,0x02, // INPUT (Data,Var,Abs) 87 // 19 byte // The Output report 0x09,0x04, // USAGE ID - Vendor defined 0x15,0x00, // LOGICAL_MINIMUM (0) 0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255) 0x75,0x08, // REPORT_SIZE (8) 0x95,0x40, // REPORT_COUNT (20) 0x91,0x02, // OUTPUT (Data,Var,Abs) // 32 byte 0xc0 // END_COLLECTION }; // End Collection static unsigned char StringDescr[][64]= { // STRING descriptor Language string { 0x04, // bLength 0x03, // bDescriptorType = string 0x09,0x04 // wLANGID(L/H) = English-United Sates }, // STRING descriptor Manufacturer ID { 18, // bLength 0x03, // bDescriptorType = string 'K',0,'T',0,'H',0,'T',0,'2',0,'0',0,'1',0,'3',0 // text in Unicode 88 }, // STRING descriptor - Product ID { 24, // bLength 0x03, // bDescriptorType = string 'M',0,'A',0,'X',0,'Q',0,'1',0,'0',0,'5',0,'0',0,' ',0, 'E',0,'n',0,'u',0,'m',0,' ',0,'C',0,'o',0,'d',0,'e',0 }, // STRING descriptor - Serial Number ID { 20, // bLength 0x03, // bDescriptorType = string 'S',0, '/',0, 'N',0, ' ',0, '1',0, '0',0, '5',0, '0',0, 'E',0, }}; Chương trình void main(void) 89 { // Make sure watchdog is off!! WDCN=0x00; // PMR |= 0x1c; // Wait for ring oscillator to transition onto external 12MHz crystal while (CKCN & CKCN_RGMD_MASK); #if ( TARGET_PROCESSOR==MAXQ1050) USB_Init(HW_MAXQ1050); // Initialize the device #endif USB_Enumerate(); while(1); } Chương trình nhận liệu Endpoint void do_IN1(void) { unsigned char value; CHAR ErrorCode; ErrorCode = USB_HW_ReadEPBuffer(rEP1BUF, SIZE_BUFF); read_usb_register(rEPINT, &value); write_usb_register(rEPINT, value | bmOUT1DAVIRQ); // bmOUT1DAVIRQ=1; 90 Global_Buffer, // Output(s) : returns USB_NO_ERROR, if specified Endpoint is supported // returns USB_ERROR_ENDPOINT_NOT_SUPPORTED, if Endpoint is unsupported // returns USB_ERROR_MAX_BUFFER_LENGTH_EXCEEDED, if write length > 64 memcpy(aeskey,test1_key,sizeof(aeskey)); memcpy(aesdata,Global_Buffer,sizeof(aesdata)); aes_encrypt(aeskey,aesdata); memcpy(Global_Buffer,aesdata,sizeof(aesdata)); if(ErrorCode == USB_NO_ERROR) { inhibit_send = 0x00; } //inhibit_send = 0x00; //#ifdef USE_USB_INTERRUPTS // // When we get here we need to shut down the OUT1 interrupts // USB_DisableOUT1Interrupt(); //#endif // USE_USB_INTERRUPTS } Chương trình gửi liệu Endpoint void do_IN3(void) { 91 unsigned char value; // inhibit_send=0x00; if (inhibit_send==0x00) { // Gui 64 byte len host USB_HW_WriteEPBuffer(rEP3BUF, Global_Buffer, SIZE_BUFF); read_usb_register(rEPINT, &value); write_usb_register(rEPINT, value | bmIN3BAVIRQ); // bmIN3BAVIRQ=1; inhibit_send = 0x01; // #ifdef USE_USB_INTERRUPTS // // When we get here we need to shut down the IN3 interrupts // USB_DisableIN3Interrupt(); // #endif // USE_USB_INTERRUPTS } } Bộ chương trình thực thuật toán AES void aes_copy(uint8_t *dst,uint8_t *src, int length) { int i; dst += length; while (length > 0) { * dst = *src++; 92 length ; } } // Encrypt data with key using AES-128 cypher int aes_encrypt(uint8_t *key,uint8_t *data) { // Select AES Encrypt, 128-bit Key AESC = 0; // Copy key into AES engine aes_copy(AES_KEY,key,16); // Copy data into AES engine aes_copy(AES_DATAIN,data,16); // Start the AES operation AESC |= 0x01; // Wait for AES to complete while ((AESC & 0x01) && !(AESC & 0x80)); // Return error if AES error flag set if (AESC & 0x80) return -1; // Copy return data aes_copy(data,AES_DATAOUT,16); return 0; } // Decrypt data with key using AES-128 cypher 93 int aes_decrypt(uint8_t *key,uint8_t *data) { // Select AES Decrypt, 128-bit Key AESC = 2; // Copy key into AES engine aes_copy(AES_KEY,key,16); // Copy data into AES engine aes_copy(AES_DATAIN,data,16); // Start the AES operation AESC |= 0x01; // Wait for AES to complete while ((AESC & 0x01) && !(AESC & 0x80)); // Return error if AES error flag set if (AESC & 0x80) return -1; // Copy return data aes_copy(data,AES_DATAOUT,16); return 0; } // AES-128 example from FIPS 197 Appendix B const uint8_t test1_key[] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c }; 94 const uint8_t test1_cleartext[] = { 0x32, 0x43, 0xf6, 0xa8, 0x88, 0x5a, 0x30, 0x8d, 0x31, 0x31, 0x98, 0xa2, 0xe0, 0x37, 0x07, 0x34 }; const uint8_t test1_cyphertext[] = { 0x39, 0x25, 0x84, 0x1d, 0x02, 0xdc, 0x09, 0xfb, 0xdc, 0x11, 0x85, 0x97, 0x19, 0x6a, 0x0b, 0x32 }; uint8_t aeskey[16]; uint8_t aesdata[16]; 95 ... phần nhỏ bé vào việc nghiên cứu giái pháp nhằm đảm bảo quyền cho phần mềm ứng dụng mục đích luận văn Nghiên cứu giải pháp sử dụng khóa USB cho việc đảm bảo quyền cho phần mềm ứng dụng. ” Luận văn... ngại Qua tìm hiểu, giải pháp bảo vệ quyền phần mềm ứng dụng có tính khả thi cao giải pháp sau: 1.1 KHÓA CỨNG[13][3] Để tránh nhầm lẫn khóa khí thiết bị khóa điện tử, ngƣời ta sử dụng thuật ngữ “dongle”... THUYẾT VỀ BẢO MẬT BẢN QUYỀN CHO CHƢƠNG TRÌNH ỨNG DỤNG VỚI GIAO THỨC USB Trong chƣơng này, luận văn tập trung tìm hiểu giải pháp khóa cứng (hardware key), KeyLock, thêm vào phân tích bảng mô tả

Ngày đăng: 19/07/2017, 22:34

Từ khóa liên quan

Mục lục

  • loi cam doan

  • muc luc

  • danh muc cac thuat ngu tieng anh va chu viet tat

  • danh muc cac bang

  • danh muc cac hinh ve

  • loi mo dau

  • chuong 1

  • chuong 2

  • chuong 3

  • chuong 4

  • ket luan

  • tai lieu tham khao

  • phu luc

Tài liệu cùng người dùng

Tài liệu liên quan