X3DH là một giao thức trao đổi khóa được sử dụng cho ứng dụng nhắn tin Signal, cho phép tin nhắn được gửi đi giữa hai thiết bị mã hóa đầu cuối (E2EE) một cách an toàn. X3DH là viết tắt của eXtended Triple Diffie-Hellman – bản thân cái tên cũng đã gợi ý về việc sử dụng Diffie-Hellman 3 lần cùng với một số cải tiến để khắc phục những nhược điểm của giao thức Diffie-Hellman cơ sở và đạt được những trạng thái an toàn cho đối tượng được bảo vệ.

Các ứng dụng nhắn tin sử dụng X3DH

Trong những năm gần đây, khi blockchain bùng nổ đi kèm với nhu cầu bảo vệ các cuộc trò chuyện nở rộ, X3DH đã được tích hợp vào nhiều ứng dụng nhắn tin. Tại Việt Nam, 2 ứng dụng nhắn tin phổ biến có tích hợp X3DH là Facebook Messenger và Zalo. Vậy, X3DH hoạt động như thế nào và mang lại giá trị gì cho người dùng?

Trong bài này, chúng ta sẽ tìm hiểu một ví dụ gần gũi về việc gửi thư để thấy được sự tương đồng giữa nó và X3DH.

 

Món quà sinh nhật đặc biệt – X3DH hoạt động như thế nào?

Ánh và Bảo là hai người bạn quen nhau online. Cả hai đều biết rõ họ tên, địa chỉ và số điện thoại của nhau. Khu chung cư của Bảo chia thành nhiều lô, mỗi lô có một tủ thư có nhiều ô, mỗi ô có là một chiếc hộp tương ứng, có đánh số và chỉ có thể mở hộp bằng khóa. Bảo đăng ký sử dụng một số ô trong tủ thư và giữ khóa của các ô tủ này. Sau mỗi lần lấy thư từ hộp của ô tủ, Bảo sẽ trả lại khóa của ô đó cho tủ thư và không dùng khóa đó nữa.

Ví dụ về chiếc tủ tại chung cư của Bảo

Chung cư nơi Bảo sống cung cấp dịch vụ chuyển thư đảm bảo. Tất cả mọi người muốn gửi thư cho Bảo đều có thể liên lạc với tòa nhà để đăng ký gửi thư đảm bảo và sẽ được nhận ngẫu nhiên một chiếc hộp của một trong số những ô tủ mà Bảo đã đăng ký. Thư sẽ được bỏ vào hộp này và gửi về đúng ô trên tủ. Người nhận muốn nhận thư phải đọc đúng thông tin của người gửi kiện hàng, bao gồm các đặc điểm nhận dạng nếu có, cùng ô tủ của mình và có chìa khóa của nó.

Để vào được khu chung cư của Bảo, người ra vào phải có thẻ cư dân để ra vào chung cư và thẻ ra vào lô. Cư dân trong khu chung cư được phép đổi lô, và khi đó họ cần có thẻ vào lô mới.

Để ra vào được chung cư và lô chung cư, bắt buôc phải có thẻ cư dân của chung cư và của lô chung cư

Nhân dịp sinh nhật Bảo, Ánh muốn tới tận nơi tặng một món quà cho Bảo. Nhưng vì Bảo thường xuyên đi công tác và không chắc có thể ở nhà vào ngày sinh nhật, Bảo hướng dẫn cô cách gửi quà cho mình tại tòa nhà để cậu có thể về lấy sau đó. Cậu còn dặn cô hãy để lại một mã tem trên chiếc hộp để cậu có thể xác nhận. Sau khi đã liên lạc với chung cư của Bảo và nhận được chiếc hộp tương ứng với ô tủ T mà Bảo đang nắm chìa khóa, Ánh bỏ quà vào hộp, dán tem và ghi thông tin.

[Người gửi: Ánh, 033498xyz, Khu chung cư A, R]

[Người nhận: Bảo, 0986432abc, Khu chung cư B, Lô L]

Trong đó, 033498xyz là số điện thoại của Ánh. 0986432abc là số điện thoại của Bảo. L là tên lô mà Bảo đang ở trong khu chung cư của mình. R là mã của chiếc tem mà Ánh đã dán vào.

Ánh gửi chiếc hộp của mình đến bưu điện. Bưu điện nhận hộp từ Ánh và gửi tới đúng vị trí chung cư B. Bảo lúc này đang ở văn phòng, không trực tiếp ở nhà, nhưng vẫn có thể nhận được thư. Cậu nhận được một thông báo rằng Ánh đã gửi cho cậu một bưu kiện tại tủ T với mã tem R.

Sơ đồ các bước Bảo mở được món quà của mình

 

Bảo lái xe về nhà và dùng thẻ cư dân của mình để vào khu chung cư. Cậu hỏi quản lý chung cư rằng có kiện hàng nào với mã R được gửi ở đây không. Quản lý xác nhận có và nói rằng kiện hàng sẽ được chuyển tiếp về lô L của cậu.

Bảo tiếp tục sử dụng thẻ vào lô để qua cửa vào lô của mình. Tới đây, Bảo nói với người quản lý tủ thư rằng có một kiện hàng với mã R đang được gửi ở đây. Quản lý tủ thư xác nhận và lấy chiếc hộp ra cho cậu.

Sau khi nhận chiếc hộp, Bảo gọi điện cho Ánh để xác nhận rằng kiện hàng của cô có mã R. Ánh nhận được cuộc điện thoại từ số của Bảo, chắc chắn Bảo là người gọi điện, liền đọc xác nhận R và chúc Bảo một sinh nhật vui vẻ. Bảo khi này sử dụng khóa hộp T của mình để mở hộp, nhận món quà từ Ánh.

 

Những lớp bảo vệ cho món quà sinh nhật Ánh tặng Bảo

Chỉ với việc gửi quà tới đúng ô tủ của Bảo thông qua hệ thống chuyển thư đảm bảo của chung cư B, nhưng món quà đã được trang bị những lớp bảo mật rất kỹ lưỡng:

Lớp ngoài cùng: Chính là định danh tại chung cư của Ánh và định danh tại lô của Bảo. Hai định danh này bảo vệ chiếc hộp về mặt pháp lý: chỉ Ánh và Bảo mới có quyền mở thư

Lớp thứ hai: Chính là định danh tại chung cư của Bảo và mã tem của Ánh. Bảo bắt buộc phải có thẻ ra vào chung cư và mã tem của Ánh thì mới có cơ hội mở hộp

Lớp thứ ba: Chính là định danh tại lô nhà của Bảo và mã tem của Ánh. Bảo bắt buộc phải có thẻ ra vào lô và mã tem của Ánh thì mới có cơ hội mở hộp

Lớp thứ tư: Chính là khóa hộp và mã tem của Ánh. Bảo cần xác nhận hộp quà là của Ánh để tránh không nhận nhầm hộp và có chìa khóa của hộp thì mới mở được hộp.

4 lớp bảo vệ này cũng tương tự như 4 lớp khóa trong X3DH. Sự đối chiếu được trình bày trong bảng bên dưới. Lưu ý rằng, với mỗi khóa công khai được ký hiệu bởi chữ chân in hoa trong bảng, luôn có một khóa bí mật do mỗi bên nắm giữ.

Câu chuyện gửi quà Ký hiệu X3DH Tên khóa X3DH
Định danh của Ánh Tên, số điện thoại, địa chỉ chung cư của Ánh Identity Key A
Định danh của Bảo Tên, số điện thoại, địa chỉ chung cư của Bảo Identity Key B
Định danh cụ thể của Bảo Tên, số điện thoại, số lô của Bảo Signed Prekey B
Khóa một lần của Bảo Khóa hộp tại các tủ T của Bảo One-time Prekey B
Khóa phiên của Ánh Mã tem R của Ánh Empheral Prekey A

Bảng so sánh tương đồng giữa quy trình gửi quà giữa Ánh – Bảo và giao thức X3DH

Trong thuật toán X3DH, quy trình “đóng gói” tin nhắn diễn ra tương tự câu chuyện món quà của Ánh và Bảo: Một khóa sẽ được sinh ra từ các bước Diffie-Hellman (DH):

Sơ đồ kết hợp khóa trong X3DH. Nét liền là bước kết hợp bắt buộc. Nét đứt là bước kết hợp không bắt buộc

Khóa SK  này sẽ được dùng để mã hóa tin nhắn gửi từ Ánh tới Bảo. Bảo sẽ sử dụng các khóa bí mật của mình để giải mã tin nhắn.

 

Những khả năng có thể xảy ra với món quà của Ánh – Tính chất của X3DH

Tới đây, hãy xét những khả năng có thể xảy ra với món quà của Ánh để hiểu hơn về tính chất của X3DH. Chúng ta coi như hộp T là không thể bị cắt hay đập nát như những chiếc hộp thông thường.

Điều đầu tiên có thể thấy được, đó là món quà được vận chuyển nhờ sự góp mặt của dịch vụ chuyển phát của tòa nhà – đóng vai trò như server trong X3DH. Sự tham gia của bên thứ ba này cho phép hai bên giao tiếp với nhau mà không cần đồng thời trực tuyến – giống như Bảo đang không có nhà nhưng vẫn có thể nhận được quà Ánh gửi. Dịch vụ chuyển phát chỉ biết các thông tin công khai của Ánh và Bảo, do đó không có khả năng mở kiện hàng trước khi Bảo dùng khóa mở hộp.

X3DH cho phép 2 bên giao tiếp mà không cần đồng thời trực tuyến

Để chuyến hàng được gửi và nhận thành công, cả hai phải biết thông tin về nhau trước đó. Ánh phải biết về địa chỉ của Bảo để lấy hộp gửi thư, và Bảo cũng phải biết thông tin của Ánh để trình bày cho bảo vệ chung cư và bảo vệ lô nhà. Các thông tin này cần phải được trao đổi trước đó qua một kênh an toàn. Bảo vệ chung cư và bảo vệ lô nhà không chịu trách nhiệm cho việc Bảo không biết ai là người gửi kiện hàng cho mình, và cũng không có nhiệm vụ đi tìm xem đó là ai. Đây cũng là vấn đề xác thực ban đầu (Initial Authentication) của X3DH.

Giả sử tại bưu điện, một nhân viên xấu tính tên là Mạnh nhìn thấy địa chỉ người nhận của Bảo, nhưng không có thẻ ra vào, cậu ta cũng không thể vào được chung cư và lô L.

Giả sử Mạnh vì lý do nào đó (mua chuộc tòa nhà chẳng hạn), mà có được cả hai thẻ ra vào, cậu ta cũng không biết được tủ nào là tủ chứa đồ Ánh gửi, do đó cậu ta cũng không thể tới được tủ T.

Giả sử Mạnh biết được tủ T và biết cả mã số R trên hộp, cậu cũng không có khóa để mở hộp T tương ứng do khóa này chỉ có Bảo nắm. Ngay cả quản lý tủ thư cũng không có được khóa này.

Khi này nguy cơ đến từ việc Bảo đánh rơi khóa hộp T và Mạnh biết được. Lúc ấy, cậu ta có đầy đủ các thông tin thể mở hộp và tráo món quà bên trong bằng một món đồ khác. Việc có nhiều lớp khóa chỉ bảo vệ tin nhắn trong trường hợp lộ khóa bí mật từng phần.

Bảo nhận quà và nhắn tin cảm ơn Ánh để rồi nhận thông tin từ Ánh rằng đó không phải là món đồ cô gửi Bảo. Biết rằng đồ đã bị tráo, Ánh đành gửi lại một món quà khác cho Bảo với phương thức tương tự, chỉ khác ở chỗ khi này T và R đã khác đi, trở thành T1 và R1.

Lần này, Mạnh lén lút tới lô L nơi Bảo ở và tìm cách mở hộp T1 với chìa khóa T và R, vì đó là 2 thứ gần nhất với chiếc hộp mà cậu có. Dĩ nhiên cậu không mở được. Các kiện hàng mà Ánh gửi cho Bảo về sau này chắc chắn không có mã R, và cũng không thể được mở bằng khóa mà cậu đang có. Đây chính là tính chất forward secrecy của X3DH: các tin nhắn trong tương lai sẽ không bị lộ khi khóa bị lộ. Mã R và chiếc hộp T trong câu chuyện, EK và khóa OPTK của X3DH, chính là thứ cung cấp khả năng forward secrecy cho món quà của Ánh.

Sơ đồ chung của các thuật toán cung cấp forward secrecy, trong đó có X3DH. Ephemeral Key (EK) đóng vai trò quan trọng trong việc đảm bảo tính chất này 

Trong lúc buồn rầu đi về, Mạnh phát hiện ra ở góc hành lang của lô T có rất nhiều chiếc hộp cùng với những chiếc chìa khóa được vứt bừa bãi. Mạnh thử những chiếc khóa này và bất ngờ mở được một vài hộp trong số đó (rất tiếc là không có gì, nhưng nếu có gì thì chắc chắn cậu ta sẽ lấy). Đây cũng là tính chất của X3DH: không backward secrecy, nếu bị lộ khóa, các tin nhắn trong quá khứ sẽ bị lộ.

 

Nhưng tại sao lại là X3DH?

Trong ví dụ vừa rồi, chúng ta thấy được rõ ràng có tới 4 lớp bảo vệ cho món quà của Ánh gửi Bảo. Vậy tại sao lại gọi giao thức này là X3DH?

Thực tế, tòa nhà vẫn cho phép Ánh vẫn có thể gửi quà cho Bảo mà không cần thông qua chiếc hộp T. Giả sử tất cả các hộp của Bảo đều đã có người gửi thư, Ánh buộc phải chờ Bảo có thêm những chiếc hộp trống mới, hoặc gửi quà luôn không thông qua hộp.

Trong trường hợp thứ 2, hộp quà sẽ chỉ có 3 lớp bảo vệ – và ngay lập tức, nó đứng trước nguy cơ bị kẻ gian lấy mất. Giả sử, Mạnh khi này đã vượt qua được bảo vệ chung cư và bảo vệ lô nhà, cậu chỉ cần đọc mã R để lấy được bưu kiện. Thậm chí, Mạnh có thể giả mạo một chiếc hộp y hệt và gửi về đúng địa chỉ của Bảo. Bảo sẽ nhận một thông báo thứ hai rằng Ánh đã gửi cho cậu một kiện hàng có mã R và có nguy cơ mắc phải replay attack. Bảo cần phải có cách kiểm tra xem có đúng rằng Ánh đã gửi thêm một hộp quà nữa cho mình không – nếu không, rất nhiều khả năng Bảo sẽ được nhận một món quà có gắn camera giấu kín để Mạnh có thể thấy được mọi thứ trong nhà cậu.

Bảo rất có thể sẽ nhận món quà không mong muốn từ Mạnh nhưng nhầm tưởng rằng đó là của Ánh

Tương tự, X3DH không bắt buộc SK có sự góp mặt từ OTPK (tức là có thể có hoặc không có DH4). Tuy nhiên điều này khiến cho khả năng tin nhắn bị đọc lén và khả năng xảy ra replay attack trở nên cao hơn. Để tránh nguy cơ này, X3DH thường được xây dựng kèm với một số các cơ chế bổ trợ khác.

Với cách thức làm việc như vậy, X3DH đã giúp bảo vệ tin nhắn của hàng triệu người dùng Signal, Facebook Messenger và Zalo khỏi nguy cơ bị đọc lén mà vẫn đảm bảo sự trực tuyến linh hoạt của người dùng.

66 lượt xem