Đối tượng: Bài viết này dành cho các cán bộ phụ trách quyền riêng tư, kiến trúc sư IT tại các sở/ban ngành giáo dục và học khu, đối tác OEM tích hợp bảng điều khiển tình trạng đội thiết bị, và các nhà nhập khẩu B2B cần trả lời câu hỏi "thiết bị đọc sách này gửi những dữ liệu gì về nhà máy?" cho khách hàng tại EU, Mỹ, Vùng Vịnh và Mỹ Latin. Bài viết giả định bạn đã nắm khái niệm cơ bản về GDPR và COPPA, nhưng cần biết chính xác các lớp sự kiện nào rời khỏi các dòng máy B1/B2/F8/K7/KF1/L5/P2/Q6/Q8/T2/Y6, sự kiện nào được ẩn danh hóa, sự kiện nào yêu cầu đồng thuận (opt-in), và sự kiện nào không bao giờ được gửi đi.
Một hợp tác xã trường học tại Tây Ban Nha mua 12.000 thiết bị đã đặt câu hỏi chính xác cho đội ngũ tuân thủ của chúng tôi trong quý trước: "Theo Điều 25 GDPR, dữ liệu nào rời khỏi thiết bị, dữ liệu nào ở lại thiết bị, và phụ huynh có thể từ chối mà không mất quyền bảo hành không?" Câu trả lời đầy đủ dài 23 trang. Câu trả lời ngắn gọn, mà chúng tôi công bố tại đây, là: các sự kiện telemetry được mặc định opt-out tại EU, mặc định opt-in tại Mỹ theo COPPA, mặc định opt-in tại Ả Rập Xê-út theo SFDA, và mặc định không bao giờ bật đối với các đội thiết bị do OEM tự lưu trữ. Dưới đây là chi tiết kỹ thuật đằng sau các chính sách đó.
Bài viết này trình bày về vòng đệm log trên thiết bị, lược đồ sự kiện, quy trình ẩn danh hóa, lịch trình tải lên, quan điểm tuân thủ GDPR/COPPA/PIPL/LGPD, các chỉ số tình trạng đội thiết bị mà dashboard cung cấp, và chi phí vận hành telemetry trên hơn 47.000 thiết bị tại 47 quốc gia.
1. Vòng Đệm Log Trên Thiết Bị
Mỗi thiết bị có một vòng đệm 512 KB trên phân vùng dữ liệu người dùng. Vòng đệm chỉ ghi thêm (append-only), có đánh chỉ mục theo thời gian, và chỉ tồn tại qua thao tác khôi phục cài đặt gốc nếu phụ huynh chọn "giữ lại nhật ký chẩn đoán" — đây là mặc định đối với triển khai doanh nghiệp và tắt theo mặc định đối với bán lẻ.
1.1 Tham Số Vòng Đệm Theo Từng Dòng Máy
| Dòng máy | Phân vùng | Dung lượng vòng đệm | Số bản ghi sự kiện | Thời gian lưu trữ (ngày) |
|---|---|---|---|---|
| B1 | NOR dữ liệu người dùng | 256 KB | 2.800 | 14 |
| B2 | NOR dữ liệu người dùng | 256 KB | 2.800 | 14 |
| F8 | NAND dữ liệu người dùng | 512 KB | 5.600 | 21 |
| K7 / KF1 | NAND dữ liệu người dùng | 512 KB | 5.600 | 21 |
| L5 | NAND dữ liệu người dùng | 1 MB | 11.200 | 30 |
| P2 | NOR dữ liệu người dùng | 256 KB | 2.800 | 14 |
| Q6 / Q8 | NAND dữ liệu người dùng | 1 MB | 11.200 | 30 |
| T2 / Y6 | NAND dữ liệu người dùng | 2 MB | 22.400 | 45 |
Vòng đệm được tính toán để chứa được lớp sự kiện có tần suất cao nhất (app.evt) trong 14–45 ngày, tùy theo dòng máy. Vòng đệm hoạt động theo cơ chế cuộn: các sự kiện cũ nhất sẽ bị ghi đè trước.
1.2 Lược Đồ Sự Kiện
Mỗi bản ghi là một cấu trúc cố định 96 byte gồm 1 byte kiểu, 4 byte dấu thời gian, 2 byte phiên bản lược đồ, và 89 byte dữ liệu riêng theo từng kiểu.
struct telemetry_event_t {
uint8_t type; // 0x01..0x2C
uint32_t timestamp; // giây kể từ lúc khởi động
uint16_t schema_ver; // ví dụ: 0x0007
uint8_t severity; // 0..3 (info, warn, error, critical)
uint8_t reserved;
uint8_t payload[80];
uint16_t crc; // CRC-16-CCITT
uint8_t sig_pad[6]; // dành riêng cho chữ ký ngắn Ed25519
} __attribute__((packed));
Tải trọng (payload) phụ thuộc vào từng loại. Sự kiện boot.end mang theo một uint32 thời lượng khởi động; sự kiện oid.lookup mang theo một uint16 độ trễ và một uint16 nhóm trang từ điển; sự kiện app.crash mang theo một mã băm dấu vết ngăn xếp 64 byte.
2. Các lớp sự kiện
Chúng tôi định nghĩa 44 lớp sự kiện. Không phải tất cả đều được tải lên. Việc phân loại là LOCAL (không bao giờ tải lên), TELEMETRY (tải lên, đã ẩn danh), hoặc SUPPORT (chỉ tải lên khi có sự đồng ý rõ ràng của người dùng).
| Lớp | Số lượng | Chế độ mặc định | Ví dụ |
|---|---|---|---|
| Chỉ lưu cục bộ | 18 | LOCAL | key.press, book.open, app.locale |
| Đo từ xa (đã ẩn danh) | 19 | TELEMETRY | boot.end, oid.lookup, pwr.drain, fw.update |
| Hỗ trợ (tùy chọn tham gia) | 7 | SUPPORT | voice.clip, asr.utterance, dict.override |
18 sự kiện LOCAL được giữ trên thiết bị và chỉ được dùng cho các tính năng trong ứng dụng như "tiếp tục từ vị trí đã dừng lại". 19 sự kiện TELEMETRY được tải lên theo lô qua Wi-Fi. 7 sự kiện SUPPORT chỉ được tải lên khi phụ huynh hoặc quản trị viên đội thiết bị bật rõ ràng chế độ hỗ trợ.
3. Quy tắc ẩn danh
Mỗi sự kiện TELEMETRY đi qua một pipeline ẩn danh gồm 4 giai đoạn trước khi tải lên. Pipeline chạy trên thiết bị và được bootloader thực thi; ngay cả một ứng dụng bị xâm nhập cũng không thể vượt qua.
- Loại bỏ mã định danh — Số serial thiết bị được thay bằng một salt xoay vòng theo mỗi lần khởi động. Salt là một giá trị ngẫu nhiên 128-bit được tạo lại mỗi lần khởi động nguội.
- Quy gộp giá trị — Độ trễ được làm tròn đến 10 ms gần nhất. Mức pin được làm tròn đến 5% gần nhất. Tra cứu từ điển được nhóm theo các cấp CEFR.
- Băm dấu vết — Dấu vết ngăn xếp được băm với salt theo đội thiết bị. Salt được xoay vòng hằng tháng và không bao giờ được tải lên.
- Tổng hợp tại nguồn — Các sự kiện đơn lẻ được tổng hợp thành các cửa sổ 15 phút trên thiết bị. Thiết bị tải lên một bản ghi cho mỗi cửa sổ, không phải 30 sự kiện riêng lẻ.
Bản ghi tổng hợp chứa: mốc thời gian cửa sổ, ID đội thiết bị (một mã băm 32-bit của khóa con OEM phụ), model, phiên bản firmware, mã vùng và 6 bộ đếm chỉ số. Bản ghi không chứa serial thiết bị, tên phụ huynh, tên trẻ, hoặc bất kỳ nội dung nào trẻ đã chạm vào.
4. Lịch tải lên và ghép lô
Việc tải lên chỉ diễn ra qua Wi-Fi, không bao giờ qua mạng di động (chúng tôi không tích hợp modem di động). Lịch mặc định là:
| Điều kiện | Hành vi |
|---|---|
| Đã kết nối Wi-Fi, nhàn >5 phút | Tải lên lô đang chờ |
| Pin <20% | Hoãn tải lên |
| Pin <10% | Huỷ tải lên, giữ lô dữ liệu trong thiết bị |
| Cắm sạc, không kể mức pin | Tải lên ngay |
| Quản trị viên đội thiết bị ép buộc tải lên | Tải lên ngay, bất kể trạng thái |
Một bút điển hình tải lên 1–3 bản ghi đã gom theo lô mỗi ngày, tổng cộng 18–54 KB. Trên một đội thiết bị 12.000 bút trong một tuần học, dung lượng tải lên là 1,6–4,8 GB mỗi tuần, nằm gọn trong một đường truyền băng thông rộng doanh nghiệp.
5. Quan điểm GDPR / COPPA / PIPL / LGPD
Hành vi telemetry mặc định khác nhau theo khu vực pháp lý. Nhà máy thiết lập mặc định dựa trên quy định của nơi đến giao hàng.
| Khu vực pháp lý | Telemetry mặc định | Hỗ trợ mặc định | Cơ chế từ chối |
|---|---|---|---|
| EU (GDPR) | OPT-OUT | OFF | Cài đặt → Quyền riêng tư → Telemetry |
| Vương quốc Anh (GDPR + DPA) | OPT-OUT | OFF | Cài đặt → Quyền riêng tư → Telemetry |
| Hoa Kỳ (COPPA, dưới 13 tuổi) | OPT-IN | OFF | Trình hướng dẫn khởi động lần đầu |
| Hoa Kỳ (13 tuổi trở lên, luật tiểu bang) | OPT-OUT | OFF | Cài đặt → Quyền riêng tư → Telemetry |
| Ả Rập Xê-út (SFDA, PTA) | OPT-IN | OFF | Trình hướng dẫn khởi động lần đầu + cổng PTA |
| UAE (TDRA) | OPT-IN | OFF | Trình hướng dẫn khởi động lần đầu + cổng TDRA |
| Trung Quốc (PIPL) | OPT-IN | OFF | Trình hướng dẫn khởi động lần đầu + đồng thuận PIPL |
| Brazil (LGPD) | OPT-OUT | OFF | Cài đặt → Quyền riêng tư → Telemetry |
| Mexico (LFPDPPP) | OPT-OUT | OFF | Cài đặt → Quyền riêng tư → Telemetry |
| Mọi khu vực khác | OPT-OUT | OFF | Cài đặt → Quyền riêng tư → Telemetry |
Ở mọi khu vực pháp lý, phụ huynh hoặc quản trị viên đội thiết bị có thể tắt telemetry mà không mất quyền bảo hành, không mất quyền truy cập cập nhật OTA, và không mất quyền hỗ trợ. Tính năng duy nhất bị tắt khi từ chối là bảng điều khiển sức khoẻ đội thiết bị, vì bảng điều khiển này cần telemetry tổng hợp để hoạt động.
6. Bảng điều khiển chỉ số sức khoẻ đội thiết bị
Với các đối tác OEM và nhà khai thác đội thiết bị lớn, bảng điều khiển telemetry hiển thị 9 chỉ số ở cấp đội thiết bị. Không chỉ số nào có thể truy xuất xuống đến số serial của một thiết bị đơn lẻ.
| Chỉ số | Định nghĩa | Mục đích sử dụng |
|---|---|---|
| Tỷ lệ hoạt động hằng ngày | (bút có ≥1 lần khởi động trong 24 h) / (quy mô đội bút) | Mức độ sử dụng |
| Phiên không lỗi | (phiên không có ngoại lệ chưa xử lý) / (phiên) | Độ ổn định |
| Tra cứu OID p95 | Phân vị thứ 95 của OID sang phát âm | Hiệu năng |
| Tình trạng pin | Bút báo cáo <80% dung lượng ban đầu | Vòng đời phần cứng |
| Tỷ lệ chấp nhận OTA | (bút chạy firmware mới nhất) / (quy mô đội bút) | Tốc độ cập nhật |
| Tỷ lệ trúng từ điển | (lượt tra cứu được phục vụ từ bộ đệm) / (lượt tra cứu) | Hiệu năng |
| Tải thành công gói ngôn ngữ | (lượt tải LP không lỗi chữ ký) / (lượt tải) | Tính toàn vẹn nội dung |
| Tần suất sự kiện sạc | (phiên sạc trên mỗi bút mỗi tuần) | Mô hình sử dụng |
| Phân bố mức độ nghiêm trọng lỗi | Phân bố sự kiện mức nghiêm trọng 0–3 | Sức khỏe |
Bảng điều khiển được miễn phí cho đội bút trên 5.000 chiếc. Dưới mức đó, chi phí là 0,04 USD mỗi bút mỗi năm, thanh toán hàng tháng.
7. Trực quan hóa SVG quy trình Telemetry và hỗn hợp chỉ số
8. Chi phí
| Dịch vụ | Chi phí | Ghi chú |
|---|---|---|
| Bảng điều khiển telemetry được lưu trữ (5.000+ bút) | đi kèm với cổng OEM | Miễn phí |
| Bảng điều khiển telemetry được lưu trữ (<5.000 bút) | 0,04 USD/bút/năm | Thanh toán hàng tháng |
| Đầu cuối telemetry tự lưu trữ | 1.800 USD/năm | Mỗi nhà phân phối |
| Lớp sự kiện tùy chỉnh (mỗi loại) | 2.400 USD một lần + 0,06 USD/bút/năm | Mỗi đối tác OEM |
| Hỗ trợ đánh giá tác động quyền riêng tư | 1.200 USD | Mỗi khu vực |
| Giấy chứng nhận xóa dữ liệu (GDPR Điều 17) | 0 USD | Tự phục vụ qua cổng thông tin |
Mẹo cho người mua: Đối với triển khai tại EU trên 10.000 bút, hãy yêu cầu một giấy chứng nhận xóa dữ liệu mẫu từ cổng thông tin trước khi ký PO. Giấy chứng nhận là PDF 1 trang ghi dấu thời gian xóa và SHA-256 của tập bản ghi đã xóa.
8. Phụ lục: Ví dụ thực tế về ẩn danh hóa và danh mục lớp sự kiện
8.1 Ví dụ thực tế về ẩn danh hóa
Lấy chuỗi sự kiện thô dưới đây, được ghi lại trên một chiếc Q8 thực tế trong triển khai tại một trường học ở Ả Rập Xê Út. Chúng tôi truy vết từng bước của quy trình ẩn danh hóa 4 giai đoạn.
Thô oid.lookup sự kiện được ghi trên thiết bị (cửa sổ mẫu, 14:00–14:15 giờ địa phương):
14:02:11 oid.lookup serial=QC8-24-118-00472 lat=98ms page=412 word="الفيل"
14:03:48 oid.lookup serial=QC8-24-118-00472 lat=104ms page=412 word="يمشي"
14:05:22 oid.lookup serial=QC8-24-118-00472 lat=88ms page=412 word="ببطء"
14:09:17 oid.lookup serial=QC8-24-118-00472 lat=101ms page=412 word="في"
14:11:46 oid.lookup serial=QC8-24-118-00472 lat=94ms page=412 word="الحديقة"
Giai đoạn 1 — loại bỏ định danh. Số serial được thay bằng một salt xoay theo từng lần khởi động 128-bit, sau đó băm thành ID bucket 32-bit. ID bucket 0x4A12F8E1 không thể bị đảo ngược về serial mà không có salt, và salt sẽ bị xóa ở lần khởi động nguội kế tiếp.
Giai đoạn 2 — phân nhóm giá trị. Độ trễ được làm tròn đến 10 ms gần nhất. Trang được phân nhóm thành CEFR A1 (trang 1–500), A2 (trang 501–1,200), B1 (trang 1,201–2,000).
Giai đoạn 3 — băm vân tay. Không có stack trace trong cửa sổ này.
Giai đoạn 4 — tổng hợp tại nguồn. 5 sự kiện được gộp lại thành một bản ghi.
Kết quả: một bản ghi được tải lên lúc 14:15:
{
"fleet_id": "0x4A12F8E1",
"model": "Q8",
"fw": "3.3.1",
"region": "SA",
"window": "2026-09-12T14:15:00Z",
"events": {
"oid_lookup_count": 5,
"oid_lookup_p95_ms": 100,
"cefr_bucket": "A2"
}
}
Đây là những gì dashboard đội thiết bị nhìn thấy. Không có đường nào quay lại trẻ, phụ huynh hay cây bút cụ thể — ID nhóm sẽ xoay vòng ở mỗi lần khởi động.
8.2 Bảng Liệt Kê Đầy Đủ Các Lớp Sự Kiện (n = 44)
Toàn bộ phân loại sự kiện, được nhóm theo hệ thống con và chế độ mặc định:
| ID | Sự kiện | Chế độ | Cửa sổ tổng hợp | Ghi chú |
|---|---|---|---|---|
| 0x01 | boot.start | TELEMETRY | 15 min | Đếm số lần khởi động nguội |
| 0x02 | boot.end | TELEMETRY | 15 min | Thời lượng khởi động nguội |
| 0x03 | pwr.drain | TELEMETRY | 15 min | Tốc độ tiêu hao pin |
| 0x04 | pwr.charge | TELEMETRY | 15 min | Đỉnh dòng sạc |
| 0x05 | key.press | LOCAL | n/a | Sơ đồ nút bấm |
| 0x06 | book.open | LOCAL | n/a | Vị trí tiếp tục |
| 0x07 | book.close | LOCAL | n/a | Vị trí tiếp tục |
| 0x08 | oid.lookup | TELEMETRY | 15 min | Độ trễ được phân nhóm |
| 0x09 | oid.miss | TELEMETRY | 15 min | Mã không có trong bất kỳ sách nào đang mở |
| 0x0A | dict.hit | TELEMETRY | 15 min | Tỷ lệ truy cập đúng bộ nhớ đệm |
| 0x0B | dict.miss | TELEMETRY | 15 min | Độ trễ tra cứu lạnh |
| 0x0C | lp.load | TELEMETRY | 15 min | Xác minh chữ ký LP |
| 0x0D | tts.speak | TELEMETRY | 15 min | Độ trễ byte đầu tiên |
| 0x0E | asr.utterance | SUPPORT | per session | Chỉ khi đồng ý |
| 0x0F | asr.result | SUPPORT | per session | Chỉ khi đồng ý |
| 0x10 | app.crash | TELEMETRY | 15 min | Hash ngăn xếp |
| 0x11 | app.err | TELEMETRY | 15 min | Mức nghiêm trọng 0–3 |
| 0x12 | fw.update | TELEMETRY | per release | Triển khai OTA theo giai đoạn |
| 0x13 | fw.rollback | TELEMETRY | per release | Số lần khôi phục |
| 0x14 | dict.update | TELEMETRY | per release | OTA từ điển |
| 0x15 | lp.update | TELEMETRY | per release | OTA LP |
| 0x16 | wifi.assoc | TELEMETRY | 15 min | Thời gian xác thực |
| 0x17 | wifi.fail | TELEMETRY | 15 min | Lỗi xác thực |
| 0x18 | ble.pair | TELEMETRY | 15 min | Xác nhận SSP |
| 0x19 | ble.fail | TELEMETRY | 15 min | Lỗi ghép nối |
| 0x1A | nfc.read | LOCAL | n/a | Chỉ UID thẻ |
| 0x1B | usbc.plug | LOCAL | n/a | Số lần cắm USB-C |
| 0x1C | usbc.pd | TELEMETRY | 15 min | PDO được chấp nhận |
| 0x1D | batt.health | TELEMETRY | daily | Suy giảm dung lượng |
| 0x1E | therm.warn | TELEMETRY | 15 min | Nhiệt PMIC |
| 0x1F | wear.delta | TELEMETRY | daily | Bộ đếm mòn Flash |
| 0x20 | err.s0 | TELEMETRY | per event | Kích hoạt dừng toàn cục |
| 0x21 | err.s1 | TELEMETRY | 15 min | Số lần S1 |
| 0x22 | err.s2 | TELEMETRY | 15 min | Số lần S2 |
| 0x23 | err.s3 | TELEMETRY | 15 min | Số lần S3 |
| 0x24 | app.locale | LOCAL | n/a | Ngôn ngữ giao diện |
| 0x25 | app.theme | LOCAL | n/a | Giao diện chủ đề |
| 0x26 | voice.clip | SUPPORT | per session | Chỉ khi đồng ý |
| 0x27 | voice.share | SUPPORT | per session | Chỉ khi đồng ý |
| 0x28 | voice.delete | SUPPORT | per session | Chỉ khi đồng ý |
| 0x29 | dict.override | SUPPORT | per session | Chỉ khi đồng ý |
| 0x2A | parent.pin | LOCAL | n/a | Kiểm soát của phụ huynh |
| 0x2B | screen.time | LOCAL | n/a | Thời lượng phiên hàng ngày |
| 0x2C | session.end | TELEMETRY | 15 min | Thời lượng phiên |
Trong tổng số 44 sự kiện, có 18 sự kiện LOCAL, 19 sự kiện TELEMETRY và 7 sự kiện SUPPORT. Danh mục đầy đủ được công bố trên cổng OEM trong mẫu đánh giá tác động quyền riêng tư.
10. Trực quan: Phân bố lớp sự kiện và ngân sách băng thông
Hình minh họa dưới đây kết hợp biểu đồ tròn của ba lớp sự kiện (LOCAL/TELEMETRY/SUPPORT) với cột ngân sách băng thông hàng tháng trên mỗi bút. Con số 152 KB là giá trị hợp đồng công khai mà chúng tôi chia sẻ với bộ phận mua sắm của trường.