Thử tìm hiểu về hệ thống lần vết tiếp xúc và cảnh báo COVID-19

Bài này mình viết và đăng lên tinhte.vn, copy về blog để lưu trữ
Chào anh em,


Hôm nay lại rảnh, lại là một cuối tuần tẻ nhạt ở nhà (Singapore đang partial-lockdown) nên tầm 2 tháng rồi mình chưa thể đi câu cá hay leo núi giải stress được được nên kiếm thứ này nghiên cứu chơi. Bên dưới đây là một bài viết mang thuần tính giải trí, nên anh em có thể đọc cũng được nhưng đừng yêu cầu nó quá cao nha. Lưu ý là nó sẽ hơi dài.. Vì mình chỉ viết bài này trong vài tiếng thôi, và cũng khá lâu rồi mình không có lập trình liên quan đến bluetooth hoặc trên các thiết bị di động nên có thể nhiều kiến thức sẽ không còn đúng khi mình diễn đạt. Anh em chém nhẹ tay nha. Đây không phải là một spec kỹ thuật, chỉ là một diễn giải những gì mình biết và hiểu thôi.


Quay lại vấn đề chính, nội dung hôm nay mình muốn đề cập cùng anh em chính là về hệ thống cảnh báo COVID-19 (mình thì coi nó là #WuHanVirus #ChineseVirus nhưng WHO cũng tốn công đặt tên mới cho nó rồi thì thôi trong bài viết này mình sẽ chỉ dùng COVID-19).


Hẳn rất nhiều anh em cũng đã đọc tin tức là Apple và Google trong một khoảng khắc hiếm hoi đã bắt tay nhau cùng xây dựng một ứng dụng (app) để có thể cảnh báo về nguy cơ có tiếp xúc với ca nhiễm COVID-19. Có thể nhiều người sẽ tò mò xem nó sẽ hoạt động ra sao (giống như mình) nên cùng nghiên cứu thôi.


Bên dưới đây là một giải thích đơn giản mình lấy từ trang blog của Google và gõ vài câu caption vui vẻ. (https://blog.google/documents/57/Overview_of_COVID-19_Contact_Tracing_Using_BLE.pdf)


Screenshot 2020-04-25 at 03.24.28.png

Mình đã đọc qua các tài liệu đã được Apple/Google release bản draft vào ngày 22 tháng 4 (chi tiết thêm về thông tin này tại đây: https://www.apple.com/covid19/contacttracing/ ). Bởi API sẽ chỉ được cung cấp sớm nhất vào trong tháng 5, và phần mềm tích hợp sâu vào hệ điều hành có thể mất một thời gian nữa họ mới release, chưa kể các quốc gia còn cần phát triển app để gọi vào các API… nên mình chuyển qua tìm hiểu về cách một ứng dụng tương tự mà mình đang sử dụng trong hơn 1 tháng nay. Đó là TraceTogether do chính phủ Singapore viết (https://www.tracetogether.gov.sg/) . Bên cạnh đó sẽ có đôi dòng chém gió về BlueZone (ứng dụng Make in Vietnam do BKAV phát triển https://bluezone.vn ). Mình tự hào khi giới thiệu các sản phẩm Make in VN cho bạn bè..

Privacy-Preserving Contact Tracing - Apple and Google

Contact Tracing makes it possible to combat the spread of the COVID-19 virus.
 APPLE.COM


Screenshot 2020-04-25 at 07.00.20.png


Screenshot 2020-04-25 at 07.00.44.png

1. Tại sao cần ứng dụng truy vết và cảnh báo COVID-19.


Một vài lý do mình gõ đại, sẽ không đầy đủ nhưng đây là những gì mình có thể nghĩ được

1.1. Chi phí cách ly số đông rất tốn kém


Việt Nam vừa trải qua một khoảng thời gian “cách ly xã hội” trong vài tuần, và cũng trong ngần ấy thời gian gần một trăm triệu con người phải hạn chế ra ngoài, không còn được đi nhậu hàn huyên hay quẩy trong bar/pub. Lý do là để hạn chế sự lây lan và cách ly những con người có triệu chứng nhiễm virus.

1.2. Trí nhớ của con người có thể không chính xác hoặc sửa đổi vì tư lợi.


Nói tới đây, anh em thử nhớ xem ngày thứ 13 trước đó (tính từ hôm nay) anh em đã đi những đâu và gặp những ai trong bao lâu? Game quá khó, hẳn 99% người bình thường sẽ không thể nhớ hết được. Cũng có lẽ thế nên việc lọc danh sách F0-Fn quá khó khăn và mệt mỏi. Chưa hết, vì không có bằng chứng nên việc thu thập thông tin tiếp xúc thế này có thể bị sửa đổi. e.g bệnh nhân #34 ai thích có thể google thêm về ca này. Tiện thể a/e nào lỡ dính thì khai luôn crush là người có tiếp xúc gần để được cách ly chung với crush nha.

1.3. Để dập dịch, cần lượng dữ liệu đủ lớn và có thể liên hệ nhanh nhất có thể


Bởi nguyên lý lây lan của COVID-19 quá nhanh và khủng khiếp nên việc có được thông tin đầy đủ, chính xác và mau chóng nhất để thông báo thông tin sẽ giúp cho lượng người bị ảnh hưởng sẽ ít hơn và dễ cách ly những đối tượng cần cách ly theo dõi (sẽ không cần cả huyện hay cả thành phố nữa – có lẽ thế..)


2. Tại sao sử dụng Bluetooth


Việc ứng dụng được viết cho điện thoại mà không phải laptop hay các thiết bị khác thì là dễ hiểu rồi, bởi sự phổ biến và cơ động của nó. Nhưng tại sao lại là Bluetooth, tất cả các ứng dụng mình tìm hiểu đều sử dụng công nghệ này.


Để theo dõi vị trí người dùng có hai công nghệ chính có thể sử dụng là Bluetooth và GPS (GPS, BeiDo, Galileo, GLONASS).


Theo WHO thì có vẻ như nguy cơ lây nhiễm cao nhất khi bạn tiếp xúc với một người mang virus trong tầm 30 phút tại một khoảng cách dưới 2 mét.


Bên dưới đây sẽ là một vài phân tích hiza không copy table trong word qua được nên ae xem hình tạm:


upload_2020-4-25_7-28-32.png


Với bảng so sánh cơ bản bên trên, dễ hiểu là Bluetooth là lựa chọn tối ưu nhất hiện thời. Nói thêm thì Airdrop cũng hoạt động dựa trên cơ chế gần xa của Bluetooth/wifi.

Tối ưu nhất theo mình nghĩ có thể là tracking thông qua con chip U1 được Apple trang bị trên các thiết bị từ iPhone 11+ bởi không chỉ track được gần xa mà còn có đang hướng về nhau không. Nhưng lượng máy quá ít nên vô nghĩa.


3. Cơ chế hoạt động


Những thông tin dưới đây là cách hoạt động của các app mà ví dụ là TraceTogether.

Cơ chế chính của các hệ thống này là ghi nhận số lượt tiếp xúc giữa các thiết bị. Việc này sẽ giúp cho quá trình lần vết để có thể tìm được lượng người có tiếp xúc với ca bệnh để từ đó cách ly đúng và đủ. Chỉ có vậy chúng ta mới có thể làm “phẳng đường cong” của số ca lây nhiễm được.


3.1. Đăng ký


Với TraceTogether, người dùng cần đăng ký sau khi tải app, thông tin này sẽ được lưu trữ tại máy chủ, bao gồm: Số điện thoại + UserID

Số điện thoại là thông tin định danh duy nhất mà họ thu thập, bởi cấu trúc mix tập trung/phi tập trung của app. UserID sẽ được tạo ra ngẫu nhiên.


Với BlueZone, có vẻ như không có cần làm gì hết. ID 6 ký tự được tự khởi tạo. !!! Nghĩa là nếu mất điện thoại hoặc vô tình xóa app thì sẽ không bao giờ được thông báo nguy cơ lây nhiễm.


Với app do Google/Apple viết thì ID chắc cũng tự động tạo luôn rồi, họ nắm cả cái OS nên chắc cũng chẳng cần đăng ký gì.


3.2. Mã định danh tạm thời


Mô tả sơ đồ hoạt động, khi hai thiết bị tìm thấy nhau, chúng sẽ trao đổi những thông điệp bao gồm thông tin không thể định danh hay lần vết (chỉ bao gồm những định danh tạm random). Những định danh tạm này thì sẽ luân phiên được thay đổi nhằm hạn chế việc các bên thứ ba có thể giám sát người dùng.


Cũng bởi tính chất tập trung/ phi tập trung nên mã định danh tạm thời này sẽ được generate tại máy chủ và định kỳ gửi cấp phát cho app trên điện thoại (đương nhiên việc cấp phát sẽ đủ nhiều để phần mềm không cần luôn luôn có kết nối internet).


Dưới đây là format của mã định danh tạm thời được mã hóa 2 tầng với AED-256-GCM và Base64.

Screenshot 2020-04-25 at 07.38.22.png

Các bạn có thể nhận thấy TraceTogether và app sẽ ra mắt của Apple/Google đều nói rõ về vấn đề này, rằng họ sử dụng mã định danh tạm và sẽ được làm mới mỗi 10-15 phút.


Nói chút về BlueZone, sau khi thử dùng qua thì mình nhận thấy mã định danh được khởi tạo khi cài máy và mã này có vẻ không đổi cho tới khi mình xóa và cài lại app. Mã định danh này cũng có thể xem được trên thiết bị khác nếu họ gần nhau. Rõ là độ ưu tiên về tính riêng tư của người dùng không được một công ty bảo mật coi trọng cho lắm. Mình không rõ lý do tại sao họ lại viết app và cho người dùng thấy ID của mình và ID của những người gần cạnh bên… không cần phải sniff luôn cũng có được ID của một người gần bên.
upload_2020-4-25_7-29-34.png

3.3. Tiếp xúc tầm gần hoạt động ra sao


Giải thích cũng không đơn giản, nói chung bạn nào thích thì tìm hiểu thêm về Bluetooth/Bluetooth Low Energy (BLE) và cách nó hoạt động, cách scan và đọc thông tin của nhau. Bên dưới mình vẽ đại một mô hình diễn tả cách hoạt động của nó. Nói chung là khi ở cạnh nhau đủ gần thì hai thiết bị có thể giao tiếp được với nhau. Lúc này app sẽ dựa trên cường độ của sóng bluetooth và các ngưỡng đặt trước của hệ thống mà xác định xem 2 thiết bị có ở cạnh nhau đủ gần hay chưa. Đủ gần thì lấy đọc data gửi bởi máy kia rồi ghi vào bộ nhớ và ngược lại thì cũng ghi data của mình vào máy còn lại.

Screenshot 2020-04-25 at 06.03.42.png

3.4. Dữ liệu tiếp xúc chỉ được lưu trữ trên điện thoại


Các hệ thống đều được thiết kế và đảm bảo tính năng này. Chắc hẳn ở mọi quốc gia thì phần mềm dạng này đều sẽ làm như vậy bởi không một ai muốn lịch sử mình tiếp xúc với những ai lại được lưu trữ trên mây mà ở đó thì một số kẻ muốn là truy cập kiểm tra. Đó là quyền riêng tư.


Tuy nhiên có một ngoại lệ là Trung Quốc, ai cũng rõ rồi nhỉ :v. Mình chưa đọc được hán tự nên không nghiên cứu được các app tracking của Tàu nó thế nào nhưng có vẻ như là bên đó không có khái niệm riêng tư, mọi dữ liệu đều được nhà nước quản lý.

Điểm cộng cho Bluezone là theo phong cách bảo mật của Âu Mỹ không chơi theo quản lý kiểu Tàu, dù mình không rõ họ có upload lên máy chủ hay không? Ai rảnh thì cài máy ảo rồi kiểm tra coi app có định kỳ gửi data đi đâu không?


3.5. Cách cảnh báo khi có nguy cơ nhiễm


Với cách tiếp cận là một app để tăng cường thêm độ chính xác cho việc lần vết (kèm với lần vết qua trí nhớ và camera…) nên TraceTogether sẽ cảnh báo theo một mô hình khác so với app sẽ được cung cấp bởi Apple/Google và Bluezone. Có thể nói một cách khác, app này là có tính chất decentralised (phi tập trung) trong việc thu nhận thông tin và centralised (tập trung) trong việc lần vết. Cách tiếp cận này giúp cho bộ y tế nắm thông tin sớm và dễ hành động hơn.


Nếu là ca nhiễm => MOH (bộ y tế) sẽ yêu cầu người dùng cung cấp thông tin tiếp xúc => họ vào app nhập mã PIN do MOH cung cấp và tiến hành upload dữ liệu lên hệ thống trung tâm => sau khi giải mã và khớp thông tin trong hệ thống tập trung => MOH sẽ liên hệ trực tiếp với các trường hợp có tiếp xúc.


Với Google/Apple hay BlueZone, cách tiếp cận này giúp cho thông tin được hoàn toàn de-centralised (dữ liệu được bảo mật phi tập trung). Tuy nhiên, sẽ có trường hợp sida nhưng xông pha hiến máu (e.g Nhật Bản có case sau khi nhận kết quả dương tính liền ra bar quẩy banh nóc) bởi MOH không nắm được thông tin người có nguy cơ nhiễm do có tiếp xúc.


Nếu là ca nhiễm => người dùng đồng ý cung cấp thông tin định danh để MOH nhập vào máy chủ => Hệ thống sẽ gửi các ID này xuống tất cả điện thoại => app sẽ scan ID trong máy và nếu khớp sẽ cảnh báo rủi ro và đề nghị người dùng liên hệ MOH.


Dưới đây là mô tả của BlueZone.
Screenshot 2020-04-25 at 07.41.10.png

Bởi cách tiếp cận này nên TraceTogether sẽ có độ tối ưu hơn trong việc nhanh chóng khoanh vùng và tiếp cận người có nguy cơ (F1). Bên cạnh đó là cũng không yêu cầu phải có kết nối internet thường xuyên, dù điện thoại hết pin hay hỏng thì vẫn có thể biết được mình bị nhiễm do được MOH liên hệ trực tiếp.


Lại nói về BlueZone, mình không rõ là họ làm cách nào khi cảnh báo được tới F2. Với cách design không gửi ngược data về hệ thống thì không thể nào MOH có được thông tin F1 (vốn dĩ app không thu thập thông tin gì để liên hệ như số đt hay email). Nên mình nghĩ họ đang có gì đó không rõ ràng về đoạn này, có vẻ như khi một người là F1 thì ID của người đó cũng được tự động gửi lên hệ thống để gửi cảnh báo cho các máy F2 (hay cả tới Fn nếu có nhu cầu).

3.6. Cách hoạt động của app


Có một vấn đề cần đề cập ở đây chính là phương thức hoạt động của app. Để tối ưu cho việc lần vết thì app này cần được luôn hoạt động và ghi nhận thông tin. Nên yêu cầu bắt buộc là phải chạy ngầm được.


Với Android thì TraceTogether có thể hoạt động chính xác khi app đang được mở (foreground) hoặc chạy ngầm (background) mà không có ảnh hưởng gì bởi đó là thiết kế của Android.

Với iOS là một vấn đề khác, Apple có những giới hạn đặc biệt cho app chạy ngầm. e.g sau 2 phút app được chuyển qua chạy ngầm và không được thực hiện 1 số hoạt động đầy đủ như bình thường. kiểu như muốn tải nhạc Spotify offline thì cần mở app mà không được cho app về background. Riêng với Bluetooth cũng thế, khi chuyển sang chế độ chạy ngầm, các app truyền tải thông tin trên bluetooth của iOS sẽ chỉ được gửi những thông tin không có theo tiêu chuẩn chung nên các thiết bị không phải iOS sẽ không đọc được…

Bởi các lý do trên nên TraceTogether phiên bản iOS buộc phải viết thêm tính năng power-saving (tiết kiệm pin) bởi phần mềm phải luôn bật thì hệ thống mới ghi nhận được các tiếp xúc gần… lúc này khi lật ngược máy (khi di chuyển) hoặc để úp (trong các cuộc họp) thì phần mềm sẽ chỉ hiển thị 1 nền tối (tiết kiệm điện cho màn hình OLED).
upload_2020-4-25_7-31-50.png


App do Google/Apple viết thì sẽ không gặp phải các giới hạn này bởi họ dễ dàng tích hợp phần mềm vào tầng hệ thống lõi.


Lại nói về BlueZone, đọc qua thì họ bảo là như bên dưới nên mình no-idea. Theo như họ nói thì app do họ viết sẽ không có hạn chế khi chạy ngầm, và lượng thông tin vẫn được trao đổi đầy đủ giữa các nền tảng iOS hay Android. Còn đoạn họ nói rằng app của Singapore không có thông tin tiếp xúc qua lại giữa iOS và Android là đang chém gió đó, đừng tin. Chưa kể, bạn nào rảnh thì test thử đi nếu iOS cho app chạy ngầm sau 2 phút và lấy BlueZone trên Android quét coi có thấy máy iOS không?. Mình hiện không có thiết bị Android nào để thử nhưng chỉ đoán là Apple ko dễ nhằn đến thế đâu.
Screenshot 2020-04-25 at 06.27.03.png

Ah quên, bonnus thêm cái review về việc app của BlueZone tìm không thấy iPhone trên Google Play
Screenshot 2020-04-25 at 06.32.07.png


4. Kết luận


Theo tìm hiểu thì đa phần các app sẽ có chung một thiết kế tương đồng nhau là dựa trên BLE. Mỗi app với kiến trúc sư trưởng khác nhau sẽ cho ra những các tiếp cận khác nhau để phù hợp hơn với từng quốc gia.

Cái quan trọng nhất không phải là app nào tốt hơn app nào, hay app nào chém gió hơn app nào. Mà là cần lượng cài đặt đủ lớn để có thể giúp mô hình hoạt động được và đẩy lùi virus.


Với TraceTogether thì hiện có hơn 1 triệu trên tổng 6 triệu dân tại Singapore tham gia. Cũng dễ hiểu khi đây là app do chính phủ viết và tuyên truyền. Nói thêm rằng đây là app truy vết dựa trên bluetooth đầu tiên được một quốc gia giới thiệu trên thế giới để hỗ trợ việc phòng chống COVID-19. Quốc gia thứ 2 là Ấn Độ với tầm 50 triệu user. BlueZone hiện có vẻ như đang có tầm 15 ngàn user. Mong anh em sẽ promote app này vài cài nhiều hơn nữa.


5. Tham khảo:


Mã nguồn cho những ai cần.

5.1.SGP có mở mã nguồn cho một implement cơ bản của TraceTogether tại đây.

https://github.com/OpenTrace-community

OpenTrace

OpenTrace is the reference implementation of BlueTrace, a privacy-preserving protocol for epidemiological contact tracing to fight COVID-19 - OpenTrace
 GITHUB.COM


5.2. BKAV bảo họ sẽ mở mã nguồn

tại link sau https://bluezone.ai nhưng hiện tại “Mã nguồn sẽ được mở trong vài ngày tới”
Bluezone - Bảo vệ mình, bảo vệ cộng đồng
 BLUEZONE.VN



Ps: Israel và Hàn Quốc có chơi thêm việc sử dụng vị trí các trạm BTS nữa để bổ sung vùng thông tin địa điểm kèm với bluetooth, nhưng cái này không được chấp nhận tại nhiều quốc gia bởi quy định về privacy nên mình không ghi vào bài phân tích này. Lạ cái là tại sao BKAV lại không thêm đoạn collect BTS infos nhỉ? Chúng ta hình như luật đâu có nói rõ về quyền riêng tư đâu (đó là mình đoán thế).


Cám ơn tất cả các bạn đã có kiên nhẫn đọc tới hết bài này.

Nhận xét

Bài đăng phổ biến từ blog này

Hướng dẫn viết báo cáo theo chuẩn báo cáo của trường đại học Hoa Sen

Dịch tài liệu PDF giữ định dạng tự động

Peter và sợi dây thần