Tác giả: @Web3_Mario
Tóm tắt: Gần đây tôi đã tìm kiếm hướng đi mới cho dự án, trong quá trình thiết kế sản phẩm tôi đã gặp một công nghệ mà trước đây chưa tiếp xúc, vì vậy tôi đã thực hiện một nghiên cứu và sắp xếp lại những kiến thức đã học để chia sẻ với mọi người. Nói chung, zkTLS là một công nghệ mới kết hợp giữa chứng minh không kiến thức (ZKP) và TLS (Giao thức bảo mật tầng truyền tải), chủ yếu được sử dụng trong môi trường máy ảo trên chuỗi trong Web3, cho phép xác minh tính xác thực của dữ liệu HTTPS ngoài chuỗi mà không cần tin tưởng bên thứ ba. Tính xác thực ở đây bao gồm ba khía cạnh: nguồn dữ liệu thực sự đến từ một tài nguyên HTTPS nào đó, dữ liệu trả về không bị giả mạo, và tính hiệu lực của dữ liệu có thể được đảm bảo. Thông qua cơ chế thực hiện mật mã này, các hợp đồng thông minh trên chuỗi có khả năng truy cập đáng tin cậy vào tài nguyên HTTPS Web2 ngoài chuỗi, phá vỡ các hòn đảo dữ liệu.
Giao thức TLS là gì
Để có thể hiểu sâu sắc giá trị của công nghệ zkTLS, cần thiết phải tóm tắt một cách đơn giản về giao thức TLS. Đầu tiên, TLS (Giao thức bảo mật tầng truyền tải) được sử dụng để cung cấp mã hóa, xác thực và tính toàn vẹn dữ liệu trong giao tiếp mạng, đảm bảo việc truyền tải dữ liệu an toàn giữa máy khách (như trình duyệt) và máy chủ (như trang web). Đối với những bạn không làm trong lĩnh vực phát triển mạng có thể nhận thấy rằng khi truy cập trang web, một số tên miền có tiền tố là https, trong khi một số khác có tiền tố là http. Khi truy cập loại thứ hai, các trình duyệt chính thường sẽ cảnh báo rằng không an toàn. Còn loại đầu tiên thì dễ gặp phải thông báo “Liên kết của bạn không phải là liên kết riêng tư” hoặc lỗi chứng chỉ HTTPS. Nguyên nhân của những thông báo này chính là tính khả dụng của giao thức TLS.
Cụ thể, giao thức HTTPS được hiểu là dựa trên giao thức HTTP, sử dụng giao thức TLS để đảm bảo tính riêng tư và toàn vẹn của việc truyền tải thông tin, và biến tính xác thực của máy chủ trở nên có thể xác minh. Chúng ta biết rằng giao thức HTTP là một giao thức truyền tải dạng văn bản, và giao thức này không thể xác minh tính xác thực của máy chủ, điều này dẫn đến một số vấn đề về an toàn:
1. Thông tin bạn và máy chủ truyền tải có thể bị bên thứ ba nghe lén, dẫn đến rò rỉ quyền riêng tư;
2. Bạn không thể xác minh tính xác thực của máy chủ, tức là liệu yêu cầu của bạn có bị các nút độc hại khác chiếm đoạt và trả về thông tin độc hại hay không;
3. Bạn không thể xác minh tính toàn vẹn của thông tin trả về, tức là có khả năng mất dữ liệu do lý do mạng hay không;
Giao thức TLS được thiết kế để giải quyết những vấn đề này. Ở đây cần giải thích, một số bạn có thể biết về giao thức SSL, thực tế giao thức TLS được phát triển dựa trên phiên bản SSL 3.1, chỉ là do một số vấn đề liên quan đến thương mại, nó đã đổi tên, nhưng thực sự là một dòng phát triển liên tục. Vì vậy, đôi khi trong một số ngữ cảnh, hai từ này có thể được hoán đổi cho nhau.
Giao thức TLS giải quyết những vấn đề nêu trên chủ yếu có ý tưởng:
1. Giao tiếp mã hóa: sử dụng mã hóa đối xứng (AES, ChaCha20) để bảo vệ dữ liệu, ngăn chặn nghe lén.
2. Xác thực danh tính: xác minh danh tính của máy chủ thông qua chứng chỉ số do bên thứ ba cấp phát cho tổ chức chỉ định (như chứng chỉ X.509), ngăn chặn tấn công trung gian (MITM).
3. Tính toàn vẹn dữ liệu: sử dụng HMAC (Mã xác thực tin nhắn băm) hoặc AEAD (Mã hóa xác thực) để đảm bảo dữ liệu không bị giả mạo.
Chúng ta sẽ giải thích đơn giản về chi tiết kỹ thuật của giao thức HTTPS dựa trên giao thức TLS trong quá trình giao tiếp dữ liệu, toàn bộ quá trình chia thành hai giai đoạn, đầu tiên là giai đoạn bắt tay (Handshake), tức là máy khách và máy chủ thương lượng các tham số an toàn và thiết lập phiên mã hóa. Thứ hai là giai đoạn truyền tải dữ liệu, tức là sử dụng khóa phiên để thực hiện giao tiếp mã hóa. Cụ thể, quá trình này chia thành bốn bước:
1. Máy khách gửi ClientHello:
Máy khách (như trình duyệt) gửi thông điệp ClientHello đến máy chủ, nội dung bao gồm:
Phiên bản TLS được hỗ trợ (như TLS 1.3)
Thuật toán mã hóa được hỗ trợ (Cipher Suites, như AES-GCM, ChaCha20)
Số ngẫu nhiên (Client Random) (để tạo khóa)
Tham số chia sẻ khóa (như khóa công khai ECDHE)
SNI (chỉ thị tên máy chủ) (tùy chọn, để hỗ trợ HTTPS đa miền)
Mục đích là để máy chủ biết khả năng mã hóa của máy khách và chuẩn bị các tham số an toàn.
2. Máy chủ gửi ServerHello:
Máy chủ phản hồi thông điệp ServerHello, nội dung bao gồm:
Thuật toán mã hóa đã chọn
Số ngẫu nhiên máy chủ (Server Random)
Chứng chỉ của máy chủ (Chứng chỉ X.509)
Tham số chia sẻ khóa của máy chủ (như khóa công khai ECDHE)
Đã hoàn thành thông điệp (để xác nhận hoàn tất bắt tay)
Mục đích là để máy khách biết danh tính của máy chủ và xác nhận các tham số an toàn.
3. Máy khách xác thực máy chủ:
Máy khách thực hiện các thao tác sau:
Xác thực chứng chỉ máy chủ: đảm bảo chứng chỉ được cấp bởi CA (cơ quan cấp chứng chỉ) đáng tin cậy, đồng thời xác thực xem chứng chỉ có hết hạn hoặc bị thu hồi không;
Tính toán khóa chia sẻ: sử dụng khóa công khai ECDHE của chính mình và máy chủ để tính toán khóa phiên (Session Key), khóa này được sử dụng cho mã hóa đối xứng trong giao tiếp tiếp theo (như AES-GCM).
Gửi thông điệp Finished: chứng minh tính toàn vẹn dữ liệu bắt tay, ngăn chặn tấn công trung gian (MITM).
Mục đích là để đảm bảo máy chủ đáng tin cậy và tạo ra khóa phiên.
4. Bắt đầu giao tiếp mã hóa:
Máy khách và máy chủ hiện sử dụng khóa phiên đã thương lượng để thực hiện giao tiếp mã hóa.
Sử dụng mã hóa đối xứng (như AES-GCM, ChaCha20) để mã hóa dữ liệu, nâng cao tốc độ và độ an toàn.
Bảo vệ tính toàn vẹn dữ liệu: sử dụng AEAD (như AES-GCM) để ngăn chặn giả mạo.
Vì vậy, sau bốn bước thao tác này, có thể hiệu quả giải quyết vấn đề của giao thức HTTP. Tuy nhiên, công nghệ cơ sở được áp dụng rộng rãi trong mạng Web2 đã gây trở ngại cho việc phát triển ứng dụng Web3, đặc biệt là khi các hợp đồng thông minh trên chuỗi muốn truy cập một số dữ liệu ngoài chuỗi, do vấn đề khả dụng của dữ liệu, máy ảo trên chuỗi sẽ không mở khả năng gọi dữ liệu bên ngoài để đảm bảo tính truy vết của tất cả dữ liệu, từ đó đảm bảo tính an toàn của cơ chế đồng thuận.
Tuy nhiên, sau một loạt các vòng lặp, các nhà phát triển đã nhận ra rằng DApp vẫn có nhu cầu về dữ liệu ngoài chuỗi, do đó một loạt các dự án Oracle như Chainlink và Pyth đã xuất hiện. Họ đóng vai trò như cầu nối giữa dữ liệu trên chuỗi và dữ liệu ngoài chuỗi, để phá vỡ hiện tượng hòn đảo dữ liệu này. Đồng thời, để đảm bảo tính khả dụng của dữ liệu trung gian, những Oracle này thường sử dụng cơ chế đồng thuận PoS, tức là làm cho chi phí gian lận của các nút trung gian cao hơn lợi nhuận, từ đó về mặt kinh tế sẽ không cung cấp thông tin sai cho chuỗi. Ví dụ, nếu chúng ta muốn truy cập giá BTC trên các sàn giao dịch tập trung như Binance, Coinbase thì cần phải dựa vào những Oracle này để truy cập và tổng hợp dữ liệu ngoài chuỗi, sau đó truyền tải vào hợp đồng thông minh trên chuỗi để có thể sử dụng.
zkTLS giải quyết vấn đề gì
Tuy nhiên, người ta phát hiện ra rằng giải pháp thu thập dữ liệu dựa trên Oracle này có hai vấn đề:
1. Chi phí quá cao: Chúng ta biết rằng để đảm bảo dữ liệu mà Oracle truyền tải lên chuỗi là dữ liệu thực sự, không bị giả mạo, cần phải được đảm bảo bởi cơ chế đồng thuận PoS, tuy nhiên, tính an toàn của cơ chế đồng thuận PoS được xây dựng dựa trên số lượng vốn ký quỹ, điều này tạo ra chi phí duy trì. Hơn nữa, trong hầu hết các trường hợp, cơ chế đồng thuận PoS có nhiều sự giao tiếp dữ liệu dư thừa vì khi tập hợp dữ liệu cần phải được truyền tải, tính toán và tổng hợp trên mạng nhiều lần để có thể thông qua đồng thuận, điều này cũng làm tăng chi phí sử dụng dữ liệu. Vì vậy, trong hầu hết các trường hợp, các dự án Oracle chỉ miễn phí duy trì một số dữ liệu chính thống như giá của BTC và các tài sản chính thống khác. Còn đối với nhu cầu riêng biệt, cần phải trả phí. Điều này cản trở sự đổi mới ứng dụng, đặc biệt là một số nhu cầu dài và tùy chỉnh.
2. Hiệu suất quá thấp: Trong hầu hết các trường hợp, cơ chế đồng thuận PoS cần một khoảng thời gian nhất định, điều này dẫn đến độ trễ của dữ liệu trên chuỗi, điều này không thuận lợi cho một số kịch bản sử dụng truy cập cao, vì dữ liệu nhận được trên chuỗi có độ trễ lớn so với dữ liệu ngoài chuỗi thực sự.
Để giải quyết các vấn đề nêu trên, công nghệ zkTLS ra đời, ý tưởng chính của nó là thông qua việc áp dụng thuật toán ZKP chứng minh không kiến thức, cho phép các hợp đồng thông minh trên chuỗi hoạt động như bên thứ ba, có thể trực tiếp xác minh dữ liệu mà một nút cung cấp thực sự là dữ liệu được trả về sau khi truy cập một tài nguyên HTTPS nào đó và không bị giả mạo, từ đó tránh được chi phí sử dụng cao do thuật toán đồng thuận của Oracle truyền thống.
Có thể có bạn sẽ hỏi, tại sao không tích hợp khả năng gọi API Web2 trực tiếp vào môi trường VM trên chuỗi. Câu trả lời là không thể, vì lý do cần giữ một môi trường dữ liệu khép kín trong môi trường trên chuỗi nhằm đảm bảo tính khả truy vết của mọi dữ liệu, tức là trong quá trình đồng thuận, tất cả các nút phải có một logic đánh giá thống nhất về tính chính xác của một dữ liệu hoặc một kết quả thực thi nào đó, hoặc nói cách khác là một logic xác minh khách quan. Điều này đảm bảo rằng trong một môi trường hoàn toàn không tin cậy, đa số các nút thiện chí có thể dựa vào dữ liệu dư thừa của mình để đánh giá trực tiếp tính đúng sai của kết quả. Nhưng do dữ liệu Web2, bạn rất khó để xây dựng một logic đánh giá thống nhất như vậy, bởi vì có thể do một số lý do về độ trễ mạng, các nút khác nhau truy cập tài nguyên HTTPS Web2 sẽ nhận được kết quả khác nhau, điều này làm tăng khó khăn cho quá trình đồng thuận, đặc biệt là đối với một số lĩnh vực dữ liệu truy cập cao. Ngoài ra, một vấn đề quan trọng khác là tính an toàn của giao thức HTTPS phụ thuộc vào giao thức TLS, và tính an toàn này lại phụ thuộc vào số ngẫu nhiên do máy khách tạo ra (Client Random) (để tạo khóa) và tham số chia sẻ khóa, để thực hiện thương lượng khóa mã hóa với máy chủ, nhưng chúng ta biết rằng môi trường trên chuỗi là công khai và minh bạch, nếu để hợp đồng thông minh duy trì số ngẫu nhiên và tham số chia sẻ khóa, thì dữ liệu quan trọng sẽ bị tiết lộ, từ đó làm tổn hại đến tính riêng tư của dữ liệu.
zkTLS thì sử dụng một phương pháp khác, ý tưởng của nó là thông qua bảo vệ mật mã, thay thế chi phí cao do Oracle truyền thống mang lại để mang lại tính khả dụng cho dữ liệu dựa trên cơ chế đồng thuận. Tương tự như việc tối ưu hóa ZK-Rollup trong L2 so với OP-Rollup. Cụ thể, thông qua việc áp dụng ZKP chứng minh không kiến thức, và yêu cầu các nút trung gian ngoài chuỗi truy cập dữ liệu HTTPS nào đó, thông tin xác thực chứng chỉ CA liên quan, chứng minh thời gian và chứng minh tính toàn vẹn dữ liệu dựa trên HMAC hoặc AEAD để tính toán tạo ra Proof, và duy trì thông tin xác thực cần thiết cũng như thuật toán xác thực trên chuỗi, để các hợp đồng thông minh có thể xác minh tính xác thực, tính hiệu lực và độ tin cậy của nguồn dữ liệu mà không tiết lộ thông tin quan trọng. Chi tiết thuật toán cụ thể sẽ không được thảo luận ở đây, những bạn có hứng thú có thể tự nghiên cứu sâu hơn.
Lợi ích lớn nhất của giải pháp công nghệ này chính là giảm chi phí khả dụng của tài nguyên HTTPS Web2. Điều này đã kích thích nhiều nhu cầu mới, đặc biệt là trong việc giảm chi phí thu thập giá của tài sản dài và tùy chỉnh trên chuỗi, sử dụng các trang web có thẩm quyền trong thế giới Web2 để thực hiện KYC trên chuỗi, từ đó tối ưu hóa thiết kế kiến trúc công nghệ cho DID, Web3 Game, v.v. Dĩ nhiên, chúng ta có thể nhận thấy rằng zkTLS cũng tác động đến các doanh nghiệp Web3 hiện có, đặc biệt đối với các dự án Oracle hiện tại. Do đó, để đối phó với tác động này, các ông lớn trong ngành như Chainlink, Pyth đang tích cực theo dõi nghiên cứu trong các lĩnh vực liên quan, cố gắng duy trì vị thế dẫn đầu trong quá trình phát triển công nghệ, đồng thời cũng sẽ tạo ra các mô hình kinh doanh mới, ví dụ như chuyển từ phí theo thời gian sang phí theo lượng sử dụng, Compute as a service, v.v. Dĩ nhiên, khó khăn ở đây giống như hầu hết các dự án ZK khác, vẫn là làm thế nào để giảm chi phí tính toán, để có giá trị thương mại.
Tóm lại, các bạn trong quá trình thiết kế sản phẩm cũng có thể chú ý đến động thái phát triển của zkTLS và tích hợp công nghệ này vào những lĩnh vực phù hợp, có thể tìm thấy một số hướng mới trong đổi mới kinh doanh và kiến trúc công nghệ.