Có một nhóm phần mềm chuyên theo dõi trẻ làm gì trên điện thoại, và phần lớn trong đó được xây để ẩn mình. Ẩn icon, cài im lặng, “stealth mode” nằm trong danh sách tính năng. Lựa chọn thiết kế đó có lý do thương mại của nó, và tôi cho là nó sai — không chỉ về đạo đức, mà cả về thực tế, vì nó tạo ra một sản phẩm không qua nổi khâu duyệt app store, không sống sót nổi khi một đứa trẻ tuổi teen phát hiện ra, và không sống sót nổi cuộc trò chuyện diễn ra sau đó.
Kidslen đi hướng ngược lại. Mọi tính chất riêng tư dưới đây là ràng buộc tôi thiết kế hệ thống xoay quanh, không phải một tuỳ chọn phụ huynh tắt được. Bài này đi qua từng thứ, cách nó được cài đặt, rồi tới phần người làm sản phẩm hay bỏ qua: app store đòi hỏi gì ở nhóm phần mềm này, và vì sao một sản phẩm trung thực là loại duy nhất lọt qua.
Đồng thuận là một bản ghi, không phải ô tick
Khi phụ huynh enroll thiết bị của con, companion app không nhảy thẳng tới “cấp quyền”. Nó hiện một màn hình nói rõ, bằng ngôn ngữ của thiết bị, ai sẽ thấy được hoạt động của máy này, thu thập chính xác những gì, chính xác không thu thập những gì, giữ trong bao lâu, và làm sao yêu cầu xoá.
Đứa trẻ phải đọc và chấp nhận. Thứ được lưu là một bản ghi đồng thuận: trẻ nào, thiết bị nào, phiên bản nào của nội dung công bố mà em đã đọc, và vào lúc nào. Nếu nội dung công bố thay đổi đáng kể, đồng thuận cũ không tự động mang sang — bản ghi có phiên bản, để câu hỏi “đứa trẻ này thật sự đã đồng ý với cái gì” luôn có câu trả lời.
Chuyện này quan trọng vì ba lý do khác nhau, và chỉ một trong đó là pháp lý.
Lý do pháp lý thì hiển nhiên: ở hầu hết các nơi, xử lý dữ liệu cá nhân của trẻ vị thành niên cần một cơ sở hợp pháp và phải chứng minh được. Một ô tick lưu giá trị boolean chẳng chứng minh được gì.
Lý do thứ hai thuộc về sản phẩm: bản ghi đồng thuận cho phép app hiện lại đúng nội dung đó cho trẻ bất cứ lúc nào, từ màn hình minh bạch. Thông tin không phải bức tường bấm qua lúc cài đặt; nó là một phần thường trực, đọc lại được, của app.
Lý do thứ ba mới là thứ tôi quan tâm nhất. Đồng thuận có ghi nhận làm thay đổi bản chất công dụng của sản phẩm. Một công cụ đứa trẻ đã đồng ý là công cụ cả nhà có thể nói chuyện về nó. Một công cụ cài lén là công cụ mà khi bị phát hiện sẽ kết thúc một cuộc trò chuyện thay vì bắt đầu nó. Bản ghi đồng thuận là hiện vật kỹ thuật của một quyết định xã hội.
Cái banner đứa trẻ không tắt được
Companion app hiện một thông báo thường trực: máy này đang được theo dõi, bởi phụ huynh này. Đó không phải notification vuốt đi được. Cũng không phải mục trong settings phải đi tìm. Nó hiện trong app, và bản thân app thì hiện diện — icon nằm trên màn hình chính, mang tên sản phẩm.
Không có chế độ ẩn. Không có kế hoạch làm chế độ ẩn. Nếu sau này có người dùng yêu cầu, câu trả lời là không, và điều đó được viết vào mô tả sản phẩm để không ai mua rồi kỳ vọng ngược lại.
Giữ cho banner đó không tắt được là một ràng buộc kỹ thuật khó hơn tưởng, vì nó phải sống sót qua mọi thứ: re-render, điều hướng, chuyển nền và quay lại, đổi ngôn ngữ, phóng to cho trợ năng. Trong cái tuần tôi kể ở phần bảy, tôi thấy banner chớp mất vài khung hình trong lúc re-render, và tôi xử lý nó như một lỗi đúng đắn nghiêm trọng ngang một vụ rò rỉ dữ liệu. Với sản phẩm này, nó đúng là như vậy.
Bên cạnh đó là một màn hình minh bạch liệt kê Kidslen thu thập những gì, bằng ngôn ngữ đời thường, kèm ví dụ cho từng loại. Không phải chính sách bảo mật — mà là một màn hình trong app cho thấy hình dạng thật của dữ liệu rời khỏi thiết bị.
Tối giản dữ liệu: những gì Kidslen cố ý không thu
Biện pháp riêng tư mạnh nhất là dữ liệu bạn không bao giờ giữ. Từ chính tài khoản của trẻ trên sáu nền tảng được hỗ trợ, Kidslen ghi lại:
- tiêu đề nội dung đã xem
- nền tảng đã xem trên đó
- thời lượng và thời điểm xảy ra
Hết danh sách. Phần không thu thập dài hơn và quan trọng hơn:
| Không thu thập | Vì sao |
|---|---|
| Quay màn hình hoặc ảnh chụp màn hình | Thứ xâm phạm nhất một app giám sát có thể lấy, và không cần cho mục đích của sản phẩm |
| Tin nhắn hay nội dung chat | Liên lạc riêng tư không phải dữ liệu thời gian màn hình |
| Phím gõ | Như trên, cộng thêm về bản chất là rủi ro thu thập thông tin đăng nhập |
| Vị trí | Kidslen nói về nội dung và thời gian màn hình; vị trí là sản phẩm khác với rủi ro khác |
| Danh bạ, ảnh, tệp | Không tính năng nào cần |
| Duyệt web ngoài các nền tảng hỗ trợ | Cơ chế capture giới hạn trong các tài khoản đã kết nối, không phải mọi thứ thiết bị làm |
Tôi muốn nói chính xác vì sao đây là ràng buộc thiết kế chứ không chỉ là sự tiết chế. Một bản quay màn hình, một khi đã ghi, là nó tồn tại. Nó phải được lưu, truyền, giữ, backup và xoá, và mỗi khâu đó là một chỗ nó có thể rò. Chọn tiêu đề và thời lượng nghĩa là kể cả database của tôi bị xâm phạm hoàn toàn thì thứ lộ ra là danh sách ai đó đã xem gì — tệ, tệ thật sự, nhưng vẫn nhẹ hơn nhiều bậc so với một kho video màn hình của một đứa trẻ tuổi teen.
Tối giản cũng chính là thứ làm cho lời chào hàng trung thực trở nên khả thi. Phụ huynh đọc màn hình minh bạch trong ba mươi giây là hiểu trọn thoả thuận. Nếu danh sách là “mọi thứ”, thì bao nhiêu văn bản chính sách cũng không làm điều đó dễ chịu được.
Retention xoá thật
Dữ liệu giữ mãi thì sớm muộn cũng lộ. Kidslen chạy một job retention theo lịch, xoá các sự kiện hoạt động cũ hơn khoảng thời gian cấu hình, đều đặn, không cần ai yêu cầu.
Những chi tiết quan trọng đều là chi tiết nhàm chán:
- Xoá là xoá thật dòng dữ liệu, không phải cắm cờ
deleted = trueđể nội dung nằm lại trong bảng. - Nó lan sang dữ liệu dẫn xuất — các projection dựng nên biểu đồ không sống lâu hơn sự kiện tạo ra chúng.
- Nó chạy bất kể có ai để ý hay không, vì một chính sách retention phụ thuộc vào trí nhớ của ai đó là một chính sách không tồn tại.
- Backup cũng hết hạn theo. Một khoảng retention mà một lần restore có thể đảo ngược thì chỉ là diễn.
Song song với lịch đó, phụ huynh có hai nút trong dashboard: xuất toàn bộ và xoá toàn bộ. Xuất tạo ra một tệp máy đọc được chứa những gì Kidslen đang giữ về gia đình đó. Xoá loại bỏ dữ liệu của trẻ, thu hồi token của thiết bị, và có hiệu lực ngay chứ không phải “trong vòng ba mươi ngày”.
Không có dark pattern nào trên đường xoá — không mời ở lại, không “bạn có chắc muốn mất lịch sử”, không bắt phải gửi email cho bộ phận hỗ trợ. Nếu rời đi mà khó, thì lòng tin là giả.
Phần bảo mật làm cho các lời hứa riêng tư thành thật
Hứa hẹn về riêng tư vô nghĩa nếu API rò. Backend xây theo deny-by-default: một endpoint không có quyền truy cập nào cho tới khi một luật phân quyền cấp cho nó, và mọi luật đều gắn theo chuỗi sở hữu — phụ huynh này, gia đình này, đứa trẻ này, thiết bị này. Một request không quy được về chuỗi mà người gọi sở hữu sẽ không nhận 403 kèm chi tiết hữu ích; nó được xử lý như thể tài nguyên không tồn tại, vì xác nhận sự tồn tại tự nó đã là một tiết lộ.
Xác thực dùng Argon2id để băm mật khẩu và refresh token xoay vòng có phát hiện tái sử dụng. Cơ chế thứ hai đáng giải thích, vì nó chính là thứ bảo vệ thiết bị của trẻ.
Một refresh token chỉ dùng đúng một lần. Dùng nó trả về token mới và vô hiệu token cũ. Nếu một token đã dùng lại được xuất trình lần nữa, nghĩa là hai bên đang giữ cùng một token — thiết bị hợp lệ và một kẻ đã sao chép. Server không phân biệt được bên nào là bên nào, nên nó làm điều an toàn duy nhất: vô hiệu toàn bộ họ token đó, và cả hai bên buộc phải xác thực lại. Một token bị đánh cắp chỉ mua cho kẻ tấn công đúng một request và một hồi chuông báo động chắc chắn, thay vì quyền truy cập vô thời hạn vào luồng hoạt động của một đứa trẻ.
Trên nữa: rate limit trên mọi đường xác thực và ingest, certificate pinning cưỡng chế ở tầng nền tảng trên cả hai hệ điều hành di động, và một audit log các hành động đặc quyền — ai đã xem gì, ai xuất, ai xoá, ai đổi policy, lúc nào. Audit log bao gồm cả truy cập của chính tôi. Tôi mở xem thứ gì trong ops console thì đó là một bản ghi.
Chính sách app store, nơi phần lớn sản phẩm nhóm này chết
Đây là phần tôi ước có ai viết ra trước khi tôi bắt đầu.
Cả hai app store lớn đều có luật riêng cho phần mềm giám sát con người, và chặt hơn khi đối tượng là trẻ vị thành niên. Hình dạng của các luật đó nhất quán dù câu chữ có đổi:
- Người bị theo dõi phải biết. App thiết kế để hoạt động lén trên thiết bị người khác sẽ bị từ chối, và chữ “stealth” hay “ẩn icon” trong chính nội dung quảng bá của bạn là bằng chứng chống lại bạn.
- Phải có và chứng minh được đồng thuận, và với trẻ vị thành niên là từ cha mẹ hoặc người giám hộ, đồng thời đứa trẻ phải được thông báo.
- App phía trẻ phải công bố nó thu thập gì, một cách hiển thị, ngay trong app.
- Việc thu thập dữ liệu phải tương xứng với mục đích đã nêu. “Chúng tôi thu mọi thứ vì phụ huynh có thể cần” không phải là một mục đích.
- Chức năng kiểm soát của phụ huynh bị soi kỹ hơn, gồm cả cách enroll hoạt động và liệu app có thể bị dùng để theo dõi một người lớn mà họ không biết hay không — bạn đời, nhân viên.
- Nội dung quảng bá của bạn là một phần của khâu duyệt. Store hoàn toàn có thể, và thực tế có, đọc website của bạn. Một trang chủ hứa hẹn giám sát lén sẽ nhấn chìm một app vốn hành xử đúng.
Và đây là điều tôi mất một lúc mới thấm: mọi luật kể trên đều được thoả mãn tự động bởi chính sản phẩm tôi vốn muốn xây. Banner thường trực chính là yêu cầu công bố. Bản ghi đồng thuận chính là yêu cầu chứng minh đồng thuận. Bộ dữ liệu tối giản chính là tính tương xứng. Việc không có chế độ ẩn chính là luật cấm hoạt động lén.
Tôi không thiết kế Kidslen để qua khâu duyệt. Tôi thiết kế nó thành sản phẩm tôi sẵn sàng cài lên máy con mình và giải thích được cho con, còn việc tuân thủ thì rơi ra như phần thưởng kèm theo. Những người làm sản phẩm phải vật lộn với khâu duyệt, gần như luôn là những người đã xây bản lén trước, và giờ đang cố lập luận rằng nó không lén.
Một sản phẩm trung thực là loại duy nhất sống sót qua khâu duyệt, và cũng là loại duy nhất sống sót qua chính đứa trẻ. Một thiếu niên đủ quyết tâm sẽ tìm ra cái app ẩn. Chuyện gì xảy ra tiếp theo phụ thuộc hoàn toàn vào việc em ấy có được nói trước hay không. Một sản phẩm dựng trên sự che giấu mang sẵn chế độ thất bại bên trong: ngày nó bị phát hiện là ngày nó ngừng hoạt động, và lòng tin mà nó lẽ ra bảo vệ còn tệ hơn trước đó.
Rốt cuộc tất cả những thứ này để làm gì
Chẳng có điều nào ở trên biến Kidslen thành một công cụ giám sát dễ chịu hơn. Chúng biến nó thành một loại công cụ khác.
Sản phẩm không được xây để bắt quả tang một đứa trẻ. Nó được xây để cha mẹ và con cùng nhìn vào một màn hình và có một cuộc trò chuyện chính xác về việc thời gian đang được dùng ra sao — với những giới hạn mà đứa trẻ biết là có, những cảnh báo mà đứa trẻ biết là có thể kêu, và một bản ghi mà đứa trẻ đọc được. Đứa trẻ thấy được mọi thứ phụ huynh thấy về em. Sự đối xứng đó chính là thiết kế.
Mọi quyết định kỹ thuật ở trên tồn tại để biến lời tuyên bố đó thành sự thật thay vì nguyện vọng. Bản ghi đồng thuận để thoả thuận là có thật. Banner để nó không bị lặng lẽ rút lại. Tối giản để lời hứa về thứ được thu thập là kiểm chứng được. Retention và xoá để “chúng tôi không giữ nó” có nghĩa gì đó. Audit log để đến cả tôi cũng phải chịu trách nhiệm.
Bài tiếp theo trong series: đặt tên, mua domain, và dựng một trang marketing không nói dối — kể cả lý do tôi đi ngược hướng thiết kế của mọi đối thủ.
Màn hình minh bạch của Kidslen không phải chỉ là ảnh chụp trên website; nó là thứ app hiện ra thật. Xem tại kidslen.app.