Các trường hợp kiểm thử mật mã

Trang này mô tả các quy trình kiểm thử mà nhà cung cấp có thể viết để xác minh các thành phần mã hoá khi triển khai nhà cung cấp.

Bạn nên sớm triển khai các kiểm thử này để dễ dàng tích hợp tính năng Ghép nối nhanh.

Các trường hợp kiểm thử

Những trường hợp này bao gồm:

  • Băm
  • Bộ lọc Bloom
  • Mã hoá AES và Trao đổi khoá công khai
  • Mã hoá và giải mã thư

Băm SHA-256

Giá trị nhập:

0x11, 0x22, 0x33, 0x44, 0x55, 0x66

Kết quả đã băm:

0xBB, 0x00, 0x0D, 0xDD, 0x92, 0xA0, 0xA2, 0xA3, 0x46, 0xF0, 0xB5, 0x31,
0xF2, 0x78, 0xAF, 0x06, 0xE3, 0x70, 0xF8, 0x69, 0x32, 0xCC, 0xAF, 0xCC,
0xC8, 0x92, 0xD6, 0x8D, 0x35, 0x0F, 0x80, 0xF8

Mã hoá AES

Giá trị nhập:

0xF3, 0x0F, 0x4E, 0x78, 0x6C, 0x59, 0xA7, 0xBB, 0xF3, 0x87, 0x3B, 0x5A,
0x49, 0xBA, 0x97, 0xEA

Khoá bí mật:

0xA0, 0xBA, 0xF0, 0xBB, 0x95, 0x1F, 0xF7, 0xB6, 0xCF, 0x5E, 0x3F, 0x45,
0x61, 0xC3, 0x32, 0x1D

Kết quả đầu ra đã mã hoá:

0xAC, 0x9A, 0x16, 0xF0, 0x95, 0x3A, 0x3F, 0x22, 0x3D, 0xD1, 0x0C, 0xF5,
0x36, 0xE0, 0x9E, 0x9C

Trao đổi khoá ECDH

Khoá riêng tư của Bob:

0x02, 0xB4, 0x37, 0xB0, 0xED, 0xD6, 0xBB, 0xD4, 0x29, 0x06, 0x4A, 0x4E,
0x52, 0x9F, 0xCB, 0xF1, 0xC4, 0x8D, 0x0D, 0x62, 0x49, 0x24, 0xD5, 0x92,
0x27, 0x4B, 0x7E, 0xD8, 0x11, 0x93, 0xD7, 0x63

Khoá công khai của Bob:

0xF7, 0xD4, 0x96, 0xA6, 0x2E, 0xCA, 0x41, 0x63, 0x51, 0x54, 0x0A, 0xA3,
0x43, 0xBC, 0x69, 0x0A, 0x61, 0x09, 0xF5, 0x51, 0x50, 0x06, 0x66, 0xB8,
0x3B, 0x12, 0x51, 0xFB, 0x84, 0xFA, 0x28, 0x60, 0x79, 0x5E, 0xBD, 0x63,
0xD3, 0xB8, 0x83, 0x6F, 0x44, 0xA9, 0xA3, 0xE2, 0x8B, 0xB3, 0x40, 0x17,
0xE0, 0x15, 0xF5, 0x97, 0x93, 0x05, 0xD8, 0x49, 0xFD, 0xF8, 0xDE, 0x10,
0x12, 0x3B, 0x61, 0xD2

Khoá riêng tư của Alice:

0xD7, 0x5E, 0x54, 0xC7, 0x7D, 0x76, 0x24, 0x89, 0xE5, 0x7C, 0xFA, 0x92,
0x37, 0x43, 0xF1, 0x67, 0x77, 0xA4, 0x28, 0x3D, 0x99, 0x80, 0x0B, 0xAC,
0x55, 0x58, 0x48, 0x38, 0x93, 0xE5, 0xB0, 0x6D

Khoá công khai của Alice:

0x36, 0xAC, 0x68, 0x2C, 0x50, 0x82, 0x15, 0x66, 0x8F, 0xBE, 0xFE, 0x24,
0x7D, 0x01, 0xD5, 0xEB, 0x96, 0xE6, 0x31, 0x8E, 0x85, 0x5B, 0x2D, 0x64,
0xB5, 0x19, 0x5D, 0x38, 0xEE, 0x7E, 0x37, 0xBE, 0x18, 0x38, 0xC0, 0xB9,
0x48, 0xC3, 0xF7, 0x55, 0x20, 0xE0, 0x7E, 0x70, 0xF0, 0x72, 0x91, 0x41,
0x9A, 0xCE, 0x2D, 0x28, 0x14, 0x3C, 0x5A, 0xDB, 0x2D, 0xBD, 0x98, 0xEE,
0x3C, 0x8E, 0x4F, 0xBF

Khoá dùng chung đã tạo (công khai của Alice + riêng tư của Bob hoặc công khai của Bob + riêng tư của Alice):

0x9D, 0xAD, 0xE4, 0xF8, 0x6A, 0xC3, 0x48, 0x8B, 0xBA, 0xC2, 0xAC, 0x34,
0xB5, 0xFE, 0x68, 0xA0, 0xEE, 0x5A, 0x67, 0x06, 0xF5, 0x43, 0xD9, 0x06,
0x1A, 0xD5, 0x78, 0x89, 0x49, 0x8A, 0xE6, 0xBA

Khoá AES từ khoá bí mật chia sẻ của ECDH

Đây là bước 1b (tạo khoá AES) trong quy trình GATT.

Khoá dùng chung của ECDH:

0x9D, 0xAD, 0xE4, 0xF8, 0x6A, 0xC3, 0x48, 0x8B, 0xBA, 0xC2, 0xAC, 0x34,
0xB5, 0xFE, 0x68, 0xA0, 0xEE, 0x5A, 0x67, 0x06, 0xF5, 0x43, 0xD9, 0x06,
0x1A, 0xD5, 0x78, 0x89, 0x49, 0x8A, 0xE6, 0xBA

Khoá AES đã tạo:

0xB0, 0x7F, 0x1F, 0x17, 0xC2, 0x36, 0xCB, 0xD3, 0x35, 0x23, 0xC5, 0x15,
0xF3, 0x50, 0xAE, 0x57

Bộ lọc hoa nở

Dữ liệu ngẫu nhiên:

0xC7C8

Khoá tài khoản đầu tiên được thêm vào bộ lọc (kết hợp với dữ liệu ngẫu nhiên ở trên):

0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 0xAA, 0xBB,
0xCC, 0xDD, 0xEE, 0xFF

Bộ lọc hoa nở thu được:

0x02, 0x0C, 0x80, 0x2A

Dữ liệu về pin (nếu có trong quảng cáo):

0b00110011, // length = 3, show UI indication.
0b01000000, // left bud: not charging, battery level = 64.
0b01000000, // right bud: not charging, battery level = 64.
0b01000000  // case: not charging, battery level = 64.

Bộ lọc kết quả hoa nở với dữ liệu về pin:

0x01, 0x01, 0x46, 0x0A

Khoá tài khoản thứ hai đã được thêm vào bộ lọc (kết hợp với dữ liệu ngẫu nhiên ở trên):

0x11, 0x11, 0x22, 0x22, 0x33, 0x33, 0x44, 0x44, 0x55, 0x55, 0x66, 0x66,
0x77, 0x77, 0x88, 0x88

Kết quả bộ lọc "bloom" từ cả hai khoá tài khoản đã thêm:

0x84, 0x4A, 0x62, 0x20, 0x8B

Dữ liệu về pin (nếu có trong quảng cáo):

0b00110011, // length = 3, show UI indication.
0b01000000, // left bud: not charging, battery level = 64.
0b01000000, // right bud: not charging, battery level = 64.
0b01000000  // case: not charging, battery level = 64.

Kết quả bộ lọc hình ảnh hoa hồng từ cả hai khoá tài khoản đã thêm cùng với dữ liệu về pin:

0x46, 0x15, 0x24, 0xD0, 0x08

Mã hoá AES-CTR

Dữ liệu đầu vào: "Tai nghe Google của ai đó" có phương thức mã hoá utf-8

0x53, 0x6F, 0x6D, 0x65, 0x6F, 0x6E, 0x65, 0x27, 0x73, 0x20, 0x47, 0x6F,
0x6F, 0x67, 0x6C, 0x65, 0x20, 0x48, 0x65, 0x61, 0x64, 0x70, 0x68, 0x6F,
0x6E, 0x65

Khoá bí mật:

0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67,
0x89, 0xAB, 0xCD, 0xEF

Số chỉ dùng một lần:

0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07

Kết quả mã hoá dự kiến:

0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4, 0x4E, 0x9B, 0x2A, 0x14,
0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, 0xE5, 0x53, 0x6A, 0xF4, 0x38, 0xE1,
0xE5, 0xC6

HMAC-SHA256

Dữ liệu đầu vào:

0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0xEE, 0x4A, 0x24, 0x83,
0x73, 0x80, 0x52, 0xE4, 0x4E, 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA,
0x44, 0xB9, 0xE5, 0x53, 0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6

Khoá bí mật:

0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67,
0x89, 0xAB, 0xCD, 0xEF

Kết quả HMAC-SHA256 dự kiến:

0x55, 0xEC, 0x5E, 0x60, 0x55, 0xAF, 0x6E, 0x92, 0x61, 0x8B, 0x7D, 0x87,
0x10, 0xD4, 0x41, 0x37, 0x09, 0xAB, 0x5D, 0xA2, 0x7C, 0xA2, 0x6A, 0x66,
0xF5, 0x2E, 0x5A, 0xD4, 0xE8, 0x20, 0x90, 0x52

Mã hoá tên được cá nhân hoá vào gói dữ liệu bổ sung

Dữ liệu đầu vào: "Tai nghe Google của ai đó" có phương thức mã hoá utf-8

0x53, 0x6F, 0x6D, 0x65, 0x6F, 0x6E, 0x65, 0x27, 0x73, 0x20, 0x47, 0x6F,
0x6F, 0x67, 0x6C, 0x65, 0x20, 0x48, 0x65, 0x61, 0x64, 0x70, 0x68, 0x6F,
0x6E, 0x65

Khoá bí mật:

0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67,
0x89, 0xAB, 0xCD, 0xEF

Số chỉ dùng một lần:

0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07

Gói dữ liệu bổ sung dự kiến:

0x55, 0xEC, 0x5E, 0x60, 0x55, 0xAF, 0x6E, 0x92, 0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07, 0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4,
0x4E, 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, 0xE5, 0x53,
0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6

Giải mã gói dữ liệu bổ sung để nhận tên được cá nhân hoá

Dữ liệu đầu vào:

0x55, 0xEC, 0x5E, 0x60, 0x55, 0xAF, 0x6E, 0x92, 0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07, 0xEE, 0x4A, 0x24, 0x83, 0x73, 0x80, 0x52, 0xE4,
0x4E, 0x9B, 0x2A, 0x14, 0x5E, 0x5D, 0xDF, 0xAA, 0x44, 0xB9, 0xE5, 0x53,
0x6A, 0xF4, 0x38, 0xE1, 0xE5, 0xC6

Khoá bí mật:

0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67,
0x89, 0xAB, 0xCD, 0xEF

Tên dự kiến: "Tai nghe Google của ai đó" với phương thức mã hoá utf-8

0x53, 0x6F, 0x6D, 0x65, 0x6F, 0x6E, 0x65, 0x27, 0x73, 0x20, 0x47, 0x6F,
0x6F, 0x67, 0x6C, 0x65, 0x20, 0x48, 0x65, 0x61, 0x64, 0x70, 0x68, 0x6F,
0x6E, 0x65

Trường trạng thái kết nối đã mã hoá

Độ dài và loại trường:

0b001100101 (length = 3, type = connection status field)

Trạng thái kết nối:

0b10000101:

* on head detection = 1
* connection availability = 0
* focus mode = 0
* auto-reconnected = 0
* connection state = 0x5 (A2DP with AVRCP)

Dữ liệu tuỳ chỉnh:

0x38

Bitmap thiết bị đã kết nối:

0b00001001

Dữ liệu thô của trường trạng thái kết nối (kết hợp trên 4 byte):

0x35853809

Khoá tài khoản đang sử dụng (đây là Khoá):

0x04, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 0xAA, 0xBB,
0xCC, 0xDD, 0xEE, 0xFF

Khoá tài khoản không sử dụng:

0x04, 0x11, 0x22, 0x22, 0x33, 0x33, 0x44, 0x44, 0x55, 0x55, 0x66, 0x66,
0x77, 0x77, 0x88, 0x88

Dữ liệu ngẫu nhiên:

0xC7C8

Bộ lọc khoá tài khoản (đây là IV): bộ lọc này được tạo bằng cách thay đổi byte đầu tiên của khoá tài khoản đang sử dụng từ 0b00000100 thành 0b00000110.

0x8C, 0xA9, 0x0C, 0x08, 0x1C

Trường trạng thái kết nối đã mã hoá:

0xF4, 0xBB, 0x40, 0x6F