Tải bản đầy đủ (.pdf) (95 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.69 MB, 95 trang )

LỜI CAM ĐOAN

Tôi cam đoan đây là công trình nghiên cứu của
riêng tôi.
Các số liệu, kết quả nêu trong luận văn là trung
thực và chưa từng được ai công bố trong bất kỳ công
trình nào khác.

Tác giả luận văn

Dƣơng Phú Tuấn

1


MỤC LỤC

DANH MỤC CÁC THUẬT NGỮ TIẾNG ANH VÀ CHỮ VIẾT TẮT ......... 5
DANH MỤC CÁC BẢNG ................................................................................... 6
DANH MỤC CÁC HÌNH VẼ ............................................................................. 7
LỜI MỞ ĐẦU ....................................................................................................... 9
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 của 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ử ra đờ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ử ra đời ................................................................................. 29
2.2.2 Mô tả thuật toán ............................................................................. 29
2.3 THUẬT TOÁN MÃ HÓA AES .............................................................. 32
2


2.3.1 Lịch sử ra đờ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 về chip ATMEGA8 ..................................................... 37
3.1.2 Tổng quan về 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
3



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

4


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 trên 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ị

5


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

6


DANH MỤC CÁC HÌNH VẼ
Hình 1-1: Các khóa cứng đầu tiên trên thế giới ............................................................. 13
Hình 1-2: Mô hình cơ chế làm việc của 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 của các 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 đồ cơ chế hoạt động của thuật toán DES ............................................... 28
Hình 2-2: Lƣu đồ cơ chế hoạt động của thuật toán RSA ............................................... 31
Hình 2-3: Lƣu đồ cơ chế hoạt động của thuật toán AES ............................................... 33
Hình 3-1: Sơ đồ khối chức năng thiết bị khóa cứng ...................................................... 36
Hình 3-2: Sơ đồ bố trí chân cổng theo chuẩn TQFP của 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 của 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 khi 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 năng MAXQ1050 ............................................................. 49

7


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 khi hàn linh kiện ...................................................................... 53
Hình 3-21: Hình ảnh so sánh giữa 2 sản phẩm và thiết bị lƣu trữ USB thông dụng có
trên 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 khi 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ị khi thực hiện 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 khi thực
hiện thủ tục Hand Shake ................................................................................................ 61
Hình 4-4: Nội dung các gói tin đƣợc gửi xuống cho thiết bị khóa của chƣơng trình điều
khiển khi thực hiện lệnh cấp phát ID ............................................................................. 62
Hình 4-5: Chuỗi dữ liệu trả lời từ thiết bị sau khi đƣợc cấp phát ID ............................. 63
Hình 4-6: Giao diện chƣơng trinh .................................................................................. 64
Hình 4-7: Gói dữ liệu tƣờng minh gửi xuống cho thiết bị ............................................. 65
Hình 4-8: Gói dữ liệu mã hóa đƣợc gửi lên từ thiết bị................................................... 66


8


LỜI MỞ ĐẦU
Trong thời đại công nghệ số phát triển nhƣ vũ bão hiện nay, có sự đóng góp lớn
của các chƣơng trình phần mềm ứng dụng. Các chƣơng trình này đƣợc thiết kế nhằm
hỗ trợ cho ngƣời sử dụng đạt đƣợc các tiêu chí cũng nhƣ nâng cao chất lƣợng hoàn
thiện trong một 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 và việc sử dụng là hoàn toàn miễn phí, tuy nhiên phần lớn các
chƣơng trình phần mềm đƣợc viết ra ngoài mục đích nêu trên còn giúp cho tác giả thu
đƣợc lợi nhuận. Nhƣng, vì nhiều lý do mà phần lợi nhuận này không đƣợc đảm bảo
cho tác giả, hay nói cách khác bản quyền của tác giả bị xâm phạm. Điều này sẽ khiến
cho tác giả, những ngƣời tạo ra các phần mềm hữu ích góp phần phát triển thế giới số
phần nào đó không còn hào hứng với việc tạo ra các phần mềm. Việc này vô hình
chung khiến thế 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 một phần nhỏ bé vào việc nghiên cứu các giái pháp nhằm
đảm bảo bản quyền cho các phần mềm ứng dụng và đó cũng chính là mục đích của
luận văn “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
phần mềm ứng dụng.”
Luận văn có bố cục nhƣ sau:
- 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.
- Chƣơng 2: Lý thuyết về mộ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 trên 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 sự giúp đỡ của các đồng nghiệp và giảng viên
hƣớng dẫn vì vậy tôi xin đƣợc chân thành gửi lời cám ơn sâu sắc đến các đồng nghiệp


9


và đặc biệt, thầy giáo PGS. TS. Nguyễn Quốc Cƣờng, trƣởng bộ môn Kỹ Thuật Đo và
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 đỡ tôi có thể hoàn thành luận văn này.
Tôi xin chân thành cám ơn!

10


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

Trong chƣơng này, luận văn tập trung tìm hiểu về 2 giải pháp là khóa cứng
(hardware key), và KeyLock, thêm vào đó là các phân tích về bảng mô tả thiết bị (HID
descriptor) của giao thức USB.
Vấn đề bản quyền tác giả trong lĩnh vực phần mềm ứng dụng đã đƣợc đề cập từ
rất lâu và cũng nhiều giải pháp đƣợc đƣa ra, tuy nhiên cho đến nay vẫn chƣa có giải
pháp nào là hoàn toàn khả thi tuyệt đối. Việc sống chung với vi phạm bản quyền đã trở
thành một điều gì đó giống nhƣ là “sống chung với lũ” khi mà đội ngũ “hacker”
chuyên nghiệp cũng nhƣ không chuyên nghiệp phát triển không kém so với đội ngũ
phát triển phần mềm.
Ở thị trƣờng Việt Nam, vấn đề bảo vệ bản quyền và an toàn cho phần mềm ngày
càng đƣợc quan tâm hơn, với sự phát triển mạnh của hàng trăm doanh nghiệp phát triển
các phần mềm từ hỗ trợ dự toán xây dựng, quản trị dự án, nhân lực, kế toán…
Giải pháp thƣờng thấy để bảo vệ bản quyền hiện nay là phƣơng pháp dùng tổ
hợp các chữ số, chữ cái hoặc kết hợp cả hai, để xác thực cho bản quyền phần mềm. Các
tổ hợp này đƣợc cấp cho khách hàng và yêu cầu xác thực khi cài đặt phần mềm. Việc
chứng thực chuỗi số này có hợp lệ hay không có thể ở chế độ “off line” hoặc “online”.

Chế độ “online” nghĩa là, việc chứng thực sẽ đƣợc thực hiện thông qua máy chủ bằng
kết nối internet. Tuy nhiên giải pháp này còn nhiều nhƣợc điểm:
- Tính bảo mật không cao
- Không thuận tiện cho công ty sản xuất phần mềm trong việc hỗ trợ khách hàng
khi ổ cứng máy tính bị hỏng hoặc phải cài đặt lại hệ điều hành.

11


- Khách hàng chỉ sử dụng phần mềm ở máy tính nào đã đƣợc cài phần mềm và
cung cấp mã số, muốn chuyển sang máy khác, họ buộc phải nhờ công ty phần mềm hỗ
trợ.
- Với chế độ “online”, yêu cầu máy tính của ngƣời sử dụng phải có kết nối
internet. Điều này tƣởng chừng nhƣ đơn giản, nhƣng với những máy tính không đƣợc
phép kết nối internet, để tránh rò rỉ thông tin thì đây lại là một trở ngại.
Qua tìm hiểu, các giải pháp bảo vệ bản quyền phần mềm ứng dụng có tính khả
thi cao đó là giải pháp sau:
1.1 KHÓA CỨNG[13][3]
Để tránh nhầm lẫn giữa khóa cơ khí và các thiết bị khóa điện tử, ngƣời ta sử
dụng thuật ngữ “dongle” thay vì hardware key nhƣ trình bày ban đầu. Dongle đƣợc
định nghĩa là một thiết bị phần cứng có kích thƣớc nhỏ gọn, đƣợc gắn vào máy tính, ti
vi hoặc các thiết bị điện tử nhằm mục đích bổ sung tính năng nhƣ bảo vệ việc sao chép
âm thanh, dữ liệu hay các dịch vụ khác. Và những dịch vụ này chỉ hoạt động đƣợc khi
và chỉ khi có “dongle”.
Trong luận văn này chỉ đề cập đến các “dongle” đƣợc sử dụng với máy tính.
Những phiên bản “dongle” thời kỳ đầu thƣờng giao tiếp với máy tính qua cổng song
song (LPT) hay cổng nối tiếp (COM), khi giao thức USB đƣợc phát triển các thiết bị
“dongle” gần nhƣ hoàn toàn chuyển sang sử dụng giao thức này bởi tính gọn nhẹ về
mặt vật lý, sự tiện lợi khi sử dụng (plug and play) cũng nhƣ số lƣợng cổng USB trên
một máy tính thƣờng lớn hơn một, cho nên khi có một “dongle” gắn vào cũng không

ảnh hƣởng đến các thiết bị cũng nhƣ giao thức khác (cổng internet, COM, LPT…) của
ngƣời dùng.

12


Hình 1-1: Các khóa cứng đầu tiên trên thế giới[13]
Cơ chế hoạt động của “dongle” xoay quanh các phƣơng pháp cơ bản sau:
- Mỗi dongle sẽ lƣu giữ một chuỗi dữ liệu đƣợc gọi là key hoặc một hàm sinh
key, khi chƣơng trình ứng dụng đƣợc kích hoạt sẽ có sự trao đổi với dongle, chƣơng
trình sẽ khả dụng khi chuỗi dữ liệu trao đổi là đúng.
- Mỗi dongle sẽ lƣu giữ một đoạn mã của chƣơng trình, để chƣơng trình có thể
chạy đƣợc cần upload toàn bộ đoạn mã này lên để kết hợp với mã khả thi cho chƣơng
trình.
- Mỗi dongle sẽ lƣu giữ một hàm cố định của chƣơng trình, chƣơng trình sẽ gửi
các đối của hàm và dongle sẽ tính toán và trả lại kết quả cho chƣơng trình.
Do giới hạn về thời gian, luận văn không đi sâu vào tìm hiểu cả 3 phƣơng pháp
trên mà tập trung vào phƣơng pháp đầu tiên để tìm hiểu và xây dựng thiết bị. Theo
đúng nhƣ cách thức hoạt động của phƣơng pháp này, có tên gọi là “Key Lock”
1.2 KEYLOCK
Đây là phƣơng pháp cơ bản nhất của các thiết bị dongle, khi này các thiết bị
không cần phải có dung lƣợng và tài nguyên lớn cũng nhƣ tốc độ tính toán cao vẫn có
thể đảm bảo các yêu cầu của bài toán.

13


Cơ chế hoạt động có thể mô hình hóa đơn giản nhƣ sau:

Hình 1-2: Mô hình cơ chế làm việc của USB Dongle

Mỗi ngƣời dùng (tƣơng ứng với một thiết bị USB Dongle) sẽ có một mã số, mã
số này chính là các tham số tƣơng ứng với một hàm sinh mã, F1(x), đƣợc lƣu trong
khóa cứng. Trên chƣơng trình ứng dụng, đƣơng nhiên cũng có hàm sinh mã giống hệt,
F2(x) hoặc hàm giải mã (hàm nghịch) F2(y). Khi chƣơng trình ứng dụng đƣợc kích
hoạt, nó sẽ gửi chuỗi kiểm tra, X, xuống thiết bị dongle. Thiết bị dongle nhận đƣợc
chuỗi này sẽ tính toán (biến đổi) bằng hàm sinh mã, kết quả thu đƣợc là chuỗi Y, sẽ
đƣợc gửi lên so sánh trên chƣơng trình ứng dụng, nếu kết quả giống nhau, Y=F2(x),
hoặc kết quả giải mã giống nhau, X=F2(y), sẽ cho phép chƣơng trình ứng dụng hoạt
động bình thƣờng.
Để tăng tính bảo mật, thì các chuỗi số (x) kiểm tra sẽ đƣợc sinh ra một cách
ngẫu nhiên và đƣợc kiểm tra một cách ngẫu nhiên liên tục để đảm bảo chƣơng trình chỉ
hoạt động đƣợc khi có thiết bị dongle gắn vào. Thêm vào đó, hàm sinh mã cũng đƣợc
thiết kế theo một thuật toán mã hóa có độ bảo mật cao, khi này, hacker có thu đƣợc các
gói tin trao đổi x và y cũng không có khả năng nội suy ra đƣợc các hàm sinh mã trên.
Ngoài những ƣu điểm của dòng thiết bị dongle nhƣ:
- Cách sử dụng dễ dàng, ngƣời dùng có thể triển khai đƣợc trên nhiều máy tính
khác nhau, chỉ cần khi chƣơng trình trên máy tính đƣợc kích hoạt phải có thiết bị
dongle cắm vào.

14


- Đảm bảo đƣợc tính cá nhân của ngƣời sử dụng mua phần mềm khi mà ngƣời
dùng bắt buộc phải có dongle mới kích hoạt đƣợc chƣơng trình.
Với phƣơng pháp này những nhà phát triển phần mềm cũng dễ dàng tích hợp
các mô đun chƣơng trình dành cho thiết bị dongle vào sản phẩm, chƣơng trình phần
mềm ứng dụng, để tạo thành giải pháp bảo vệ phần mềm trọn vẹn. Hơn nữa, với khả
năng tính toán xử lý tốc độ cao, sẽ không ảnh hƣởng đến các chu trình làm việc của
chƣơng trình phần mềm trên máy tính, hay nói một cách khác, thiết bị đáp ứng đƣợc
khả năng thời gian thực.

Nhƣợc điểm của phƣơng pháp này là do có sự trao đổi gói tin với thiết bị ngoài
nên dễ dàng bị “nghe lén” và nếu hàm sinh mã không có thuật toán có độ bảo mật cao,
thì những kẻ tấn công, hacker, có thể tìm ra hàm sinh mã cũng nhƣ giao thức giữa thiết
bị dongle và chƣơng trình phần mềm.
Nhƣ đã trình bày ở trên, hàm sinh mã cần có tính bảo mật cao tuy nhiên lại
không đƣợc quá phức tạp để có thể thực hiện đƣợc bằng phần cứng hay có thể chạy
khả thi trên các chip cứng. Các hệ mã mật hiện nay trên thế giới đang dùng phổ biến có
thể kể đến nhƣ: RSA, DES, 3-DES, hay AES… đều có khả năng thiết kế hay lập trình
để chạy trên các chip cứng. Tại phần 2 của luận văn này sẽ giới thiệu đến một số loại
mã hóa kể trên.
1.3 THIẾT BỊ KHÓA CỨNG VỚI GIAO THỨC USB
Vai trò của thiết bị khóa cứng đã đƣợc trình bày ở trên, tuy nhiên để đem lại sự
thuận tiện khi sử dụng cần thiết phải có một giao thức thân thiện, dễ sử dụng giữa thiết
bị khóa và ngƣời sử dụng chƣơng trình ứng dụng. Khi giao thức USB đƣợc phát minh,
xu hƣớng sử dụng giao thức USB cho các thiết bị khóa cứng đã trở thành điều tất yếu.

15


1.3.1 Lịch sử phát triển của giao thức USB[14]
Một nhóm gồm 7 công ty bắt đầu tìm hiểu và phát triển giao thức này từ năm
1994, gồm Compaq, NEC, DEC, IBM, Intel, Nortel và Microsoft. Mục đích là tạo ra
một kết nối dễ sử dụng, tốc độ truyền tải dữ liệu cao, phần mềm cấu hình đơn giản để
thay thế cho các kết nối kiểu cũ cho các thiết bị ngoại vi của máy tính.
- Phiên bản USB 1.0 đƣợc ra đời vào tháng 1 năm 1996 với tốc độ truyền
1.5MBit/s (Low speed) và 12 MBit/s (Full speed).
- Phiên bản 1.1 đƣợc công bố vào tháng 9 năm 1998 với nhiều cải tiến để đƣa
vào sử dụng phổ biến.
- Tháng 4 năm 2000 giao thức USB 2.0 ra đời với 3 cấp tốc độ truyền 1.5
MBit/s (Low speed), 12 MBit/s (Full speed), 480 MBit/s (High speed).

- Tháng 11 năm 2008 giao thức USB 3.0 ra đời với tốc độ truyền 5 GBit/s. Sản
phẩm sử dụng USB 3.0 đầu tiên đƣợc ra đời vào tháng 1 năm 2010.
1.3.2 Khai báo bảng mô tả thiết bị (USB Descriptor)[9][10]
Hiện nay, giao thức USB đã đƣợc đƣa vào sử dụng một cách phổ biến. Trung
bình trên một máy tính thƣờng có tối thiểu 2 cổng kết nối có sử dụng giao thức USB.
Các thiết kế phần cứng sử dụng giao thức USB đều nhắm đến tính năng “plug and
play” của giao thức. Đó là do các chƣơng trình điều khiển thiết bị, driver, hỗ trợ cho
giao thức đã đƣợc tích hợp sẵn vào hệ điều hành và ngƣời sử dụng giao thức này gần
nhƣ không cần phải cài thêm chƣơng trình bổ sung. Để tận dụng đƣợc ƣu thế này,
ngoài sự hỗ trợ của phần cứng thiết bị, khi viết firmware, phần mềm trên thiết bị, ngƣời
thiết kế phải tuân theo các bảng mô tả thông tin dƣới dạng chuẩn đã đƣợc công bố của
giao thức.
Các bảng mô tả này sẽ cung cấp các thông tin cần thiết (về thiết bị, cấu hình,
giao diện và các endpoint…) để hệ điều hành có thể hiểu thiết bị, xây dựng trình điều

16


khiển cho thiết bị cũng nhƣ tạo các phiên làm việc với thiết bị để tạo nên giao tiếp giữa
thiết bị và hệ điều hành đúng nhƣ chức năng thiết kế.
Với giao thức USB, các thiết bị có thể là bộ lƣu trữ (storage), thiết bị đa phƣơng
tiện (mutil media), chuột (mouse) hay bàn phím (key board)… và các giao thức này
đƣợc quản lý chung thành lớp các thiết bị tƣơng tác với ngƣời dùng HID (Human
Interface Device class). Khi các thiết bị này đƣợc gắn vào máy tính đòi hỏi phải cung
cấp các thông tin chi tiết về cấu trúc dữ liệu của bản thân thiết bị đƣợc gọi là các mô tả
thiết bị (USB Descriptor) cho hệ điều hành, các mô tả thiết bị bao gồm: mô tả thiết bị
(Device Descriptor), mô tả cấu hình (Configuration Descriptor), mô tả giao diện
(Interface Descriptor) và mô tả văn bản (String Descriptor). Đây thực chất là các bảng
chứa đựng các thông tin chi tiết về thiết bị bao gồm mã thiết bị (PID), mã nhà cung cấp
thiết bị (VID), loại thiết bị… Các thông tin này đƣợc cung cấp cho hệ điều hành trên

máy tính, để hệ điều hành quản lý và tổ chức các phiên làm việc theo đúng chức năng
của thiết bị.
a. Device Descriptor
Bảng mô tả Device Descriptor có dạng nhƣ sau:

17


Device Descriptor:
bcdUSB:
0x0200
bDeviceClass:
0xEF
bDeviceSubClass:
0x02
bDeviceProtocol:
0x01
bMaxPacketSize0:
0x40 (64)
idVendor:
0x045E (Microsoft
Corporation)
idProduct:
0x0728
bcdDevice:
0x0100
iManufacturer:
0x01
0x0409: "Microsoft"
iProduct:

0x02
0x0409: "Microsoft LifeCam VX-5000"
0x0409: "Microsoft LifeCam VX-5000"
iSerialNumber:
0x00Descriptor
Hình 1-3: Device
bNumConfigurations:
0x01

Đây là một bảng mẫu do hãng Microsoft cung cấp, mô tả này chứa gần nhƣ toàn
bộ thông tin của thiết bị, hệ điều hành máy tính (Windows) sử dụng những thông tin
này để nội suy tìm trình điều khiển cho thiết bị và quản lý thiết bị.
Bảng 1-1: Bảng mô tả thiết bị
Vị trí

Thông số

Kích thƣớc

Giá trị

Ý nghĩa

Số học

Cho biết độ dài của gói mô tả

Byte
0


bLength

1

Device Descriptor
1

bDescriptor Type

1

Hằng số

Ý nghĩa của gói mô tả (với
Device Descriptor = 0x01)

2

bcdUSB

2

BCD

Cho biết tốc độ cao nhất của
thiết bị (USB1.0, 1.1 hay 2.0)

4

bDeviceClass


1

Class

Mã Class (đƣợc quy ƣớc bởi
USB Org)

5

bDeviceSubClass

1

Class

18

Mã Subclass (đƣợc quy ƣớc bởi


USB Org)
6

bDeviceProtocol

1

Protocol


Mã Protocol (đƣợc quy ƣớc bởi
USB Org)

7

bMaxPacketSize

1

Số học

Kích thƣớc gói dữ liệu lớn nhất
của Endpoint 0. Các giá trị có
thể là 8, 16, 32, 64

8

idVendor

2

ID

Mã nhà cung cấp thiết bị (đƣợc
cấp phát bởi USB Org)

10

idProduct


2

ID

Mã thiết bị (đƣợc cấp phát bởi
chính nhà sản xuất)

12

bcdDevice

2

BCD

Phiên bản thiết bị

14

iManufacture

1

Index

Ba mô tả cung cấp thêm thông
tin chi tiết và nhà sản xuất, về

15


iProduct

1

Index

thiết bị và số hiệu sản phẩm.
Các chỉ số này cho biết thông tin
mô tả đƣợc cung cấp riêng trong

16

iSerialNumber

1

Index

String Descriptor, có thể mang
giá trị 0 nếu không sử dụng

17

bNumConfigurati
ons

1

Số
nguyên


19

Cung cấp số cấu hình thiết bị có
thể hỗ trợ với tốc độ hiện tại


b. Configuration Descriptor
Configuration Descriptor:
wTotalLength:
0x02CA
bNumInterfaces:
0x02
bConfigurationValue: 0x01
iConfiguration:
0x00
bmAttributes:
0x80 (Bus
Powered )
MaxPower:
0xFA (500 mA)

Hình 1-4 Configuration Descriptor
Bảng mô tả cấu hình Configuration Descriptor cung cấp chi tiết các khả năng
của thiết bị, nó cung cấp các thông tin về giao diện của thiết bị, các cài đặt tƣơng ứng
và thông tin về các endpoint có trong thiết bị.
Bảng 1-2: Bảng mô tả cấu hình
Vị

Thông số


Kích thƣớc

trí
0

Giá trị

Ý nghĩa

Số học

Cho biết độ dài của gói mô tả

byte
bLength

1

Configuration Descriptor
1

bDescriptorType

1

Hằng

Ý nghĩa của gói mô tả (với


số

Configuration

Descriptor

=

0x02)
3

wTotalLength

2

Số học

Chiều dài gói Configuration
Descriptor theo đơn vị Byte

5

bConfigurationVa 1

Số học

Giá trị đƣợc xác định nhƣ một
đại lƣợng khi cần chọn gói

lue


Configuration Descriptor

20


6

iConfiguration

1

Index

Thông

tin



tả

của

Configuration Descriptor
7

bmAttributes

1


Bitmap

D7 (dữ trự) đƣợc thiết lập 1
D6 tự cấp nguồn
D5 chế độ Wakeup từ xa
D4..0 (dự trữ) đƣợc thiết lập 0

8

bMaxPower

1

Công suất tiêu thụ lớn nhất, đơn

mA

vị mA

Trong mô tả cấu hình có thể bao gồm các mô tả về giao diện (Interface) và mô
tả về Endpoint

Hình 1-5: Sơ đồ phân cấp của các bảng mô tả
Bảng mô tả giao diện Interface Descriptor sẽ cung cấp thông tin về số lƣợng các
Endpoint cấu thành nên chức năng của một giao diện của thiết bị.

21



BYTE
BYTE
BYTE
BYTE
BYTE
BYTE
BYTE

bLength
0x09
bDescriptorType
0x04
bInterfaceNumber
0x00
bAlternateSetting
0x00
bNumEndpoints
0x01
bInterfaceClass
0x0E
bInterfaceSubClass

BYTE

bInterfaceProtocol

BYTE

iInterface


0x01
0x00
0x05

Hình 1-6: Interface Descriptor

Bảng 1-3: Bảng mô tả giao diện
Vị trí

Thông số

Kích thƣớc

Ý nghĩa

Giá trị

Byte
0

bLength

1

Số học

Cho biết độ dài gói mô tả
Interface Descriptor

1


bDescriptorType

1

Hằng số

Ý nghĩa gói mô tả (với
Interface

Descriptor

=0x04)
2

bInterfaceNumber

1

Số học

Số thứ tự của giao diện
Interface

3

bAlternateSetting

1


Số học

Cung cấp chức năng khác
của giao diện

4

bNumEndpoints

1

Số học

Số lƣợng Endpoint đƣợc sử
dụng trong giao diện

5

bInterfaceClass

1

Class

Mã class (đƣợc quy ƣớc
bởi USB Org)

22



6

bInterfaceSubClass 1

SubClass

Mã SubClass (đƣợc quy
ƣớc bởi USB Org)

7

bInterfaceProtocol

1

Protocol

Mã Protocol (đƣợc quy
ƣớc bởi USB Org)

8

iInterface

1

Số thứ tự

Số thứ tự của chuỗi dữ liệu
mô tả giao diện


Bảng mô tả Endpoint cung cấp thông tin về bản thân Endpoint và hệ điều hành
sử dụng những thông tin này để quyết định cấp phát tài nguyên (độ rộng băng thông
BUS, khe thời gian…) cho Endpoint.
Bảng 1-4: Bảng mô tả Endpoint
Vị trí

Thông số

Kích thƣớc

Ý nghĩa

Giá trị

Byte
0

bLength

1

Số học

Kích thƣớc gói mô tả
Endpoint

1

bDescriptorType


1

Hằng số

Ý nghĩa gói mô tả (với
Endpoint

Descriptor

=0x05)
2

bEndpointAddress

1

Endpoint

Địa chỉ Endpoint
Bit 0..3 số thứ tự của
Endpoint
Bit 4..6 dùng dự trữ (thiết
lập 0)
Bit 7 chiều dữ liệu của
Endpoint: 0=Out, 1=In

23



3

bmAttributes

1

Bitmap

Bit 0..1 kiểu truyền
00= điều khiển (Control)
01=

đẳng

thời

(Isochronous)
10=khối (Bulk)
11= Ngắt (Interrupt)
Bit 2..7 không dùng, riêng
với Endpoint đẳng thời (
Iso) cung cấp thêm các
thông tin về kiều truyền
4

wMaxpacketSize

2

Số học


Kích thƣớc lớn nhất của
gói dữ liệu mà Endpoint
có thể nhận hoặc truyền

5

bInterval

1

Số học

Khe thời gian dành cho
việc truyền nhận dữ liệu

c. String Descriptor
Trong các mô tả về thiết bị, cấu hình và giao diện của thiết bị có thể cần các mô
tả dạng văn bản nhằm cung cấp các thông tin giúp cho ngƣời dùng quản lý thiết bị, các
mô tả dạng này đƣợc gọi là mô tả văn bản (String Descriptor). Các mô tả văn bản này
đƣợc tham chiếu đến mô tả kể trên bởi chính số thứ tự của chúng

24


USB_STRING_DESCRIPTOR USD, *pFullUSD;
UsbBuildGetDescriptorRequest(
pURB, // points to the URB to be filled
in
sizeof(struct

_URB_CONTROL_DESCRIPTOR_REQUEST),
USB_STRING_DESCRIPTOR_TYPE,
i, // index of string descriptor
langID, // language ID of string.
&USD, // points to a
USB_STRING_DESCRIPTOR.
NULL,
sizeof(USB_STRING_DESCRIPTOR),
NULL
);

Hình 1-7: String Descriptor
Bảng 1-5: Bảng mô tả chuỗi mô tả
Vị trí

Kích thƣớc

Thông số

Giá trị

Ý nghĩa

Byte
0

bLength

1


Số học

Kích thƣớc gói mô tả String

1

bDescriptorType

1

Hằng số

Ý nghĩa gói mô tả (với
String Descriptor =0x03)

2

wLANGID[0]

2

Số học

Mã ngôn ngữ chuỗi văn bản
hỗ trợ mô tả thứ nhất

4

wLANGID[1]


2

Số học

Mã ngôn ngữ chuỗi văn bản
hỗ trợ mô tả thứ hai

N

wLANGID[x]

2

Số học

Mã ngôn ngữ chuỗi văn bản
hỗ trợ mô tả thứ x

25


×