
Công nghệ tạo số ngẫu nhiên an toàn dành cho ứng dụng blockchain
Tuyển chọn TechFlowTuyển chọn TechFlow

Công nghệ tạo số ngẫu nhiên an toàn dành cho ứng dụng blockchain
Có nhiều phương pháp tạo số ngẫu nhiên trên blockchain. Bài viết này giải thích và phân tích một số phương pháp trong đó cùng với ưu nhược điểm của chúng.

Nhiều ứng dụng blockchain cần sử dụng các số ngẫu nhiên được tạo ra từ các nguồn dữ liệu an toàn.
Ví dụ, một chiến dịch airdrop NFT PFP cần chọn tổ hợp thuộc tính ngẫu nhiên cho từng hình ảnh NFT; một trò chơi trên chuỗi có thể cần rút ngẫu nhiên vật phẩm khi mở rương kho báu. Trong cả hai trường hợp, một bộ tạo số ngẫu nhiên an toàn có thể đảm bảo sự công bằng cho người dùng trước ứng dụng. Đây chỉ là một vài ví dụ về ứng dụng của số ngẫu nhiên — nói chung, tính ngẫu nhiên là một công cụ hữu ích để giải quyết nhiều loại vấn đề thuật toán khác nhau.
Thật không may, đặc tính vốn có của blockchain khiến việc tạo số ngẫu nhiên trở nên không dễ dàng. Trạng thái của blockchain phát triển theo một tập quy tắc xác định, trong đó mỗi giao dịch sẽ tạo ra một trạng thái đầu ra cụ thể dựa trên các giá trị đầu vào đã cho. Các quy tắc này phải mang tính xác định vì blockchain yêu cầu mọi trình xác thực đều có khả năng kiểm chứng quá trình xử lý mỗi giao dịch. Nếu các quy tắc không xác định, các trình xác thực có thể khác biệt quan điểm về trạng thái.
Có rất nhiều phương pháp tạo số ngẫu nhiên trên blockchain. Bài viết này giải thích và phân tích một số phương pháp cùng ưu và nhược điểm của chúng.
Các bên tham gia
Giao thức tạo số ngẫu nhiên thường liên quan đến nhiều bên tham gia khác nhau. Mỗi bên tham gia là một thành phần trong giao thức hoặc có lợi ích trong kết quả tạo ra. Tùy theo phương pháp, các bên tham gia có thể bao gồm các nhóm con khác nhau. Các bên tham gia tiềm năng bao gồm:
Nhà phát triển ứng dụng — nhà phát triển chịu trách nhiệm viết phần mềm yêu cầu và sử dụng số ngẫu nhiên. Mặc dù thường không trực tiếp tham gia vào quá trình tạo số ngẫu nhiên, nhưng nhà phát triển vẫn mong muốn kết quả là thực sự ngẫu nhiên. Ví dụ, nhà phát triển một bộ sưu tập NFT muốn đảm bảo rằng không ai có thể gian lận trong quá trình mint NFT để giành lấy những NFT sở hữu tất cả thuộc tính hiếm.
Người dùng — người dùng khởi tạo yêu cầu tạo số ngẫu nhiên thông qua tương tác với giao thức. Ví dụ, người dùng có thể là người đang mint NFT.
Trình xác thực — nhiều giao thức tạo số ngẫu nhiên sử dụng dữ liệu đầu vào từ blockchain. Các trình xác thực (hoặc thợ đào/máy sắp xếp, tùy ngữ cảnh) có thể kiểm soát một phần dữ liệu đầu vào này.
Nhà cung cấp dịch vụ — nhiều giao thức có một nhà cung cấp dịch vụ ngoài chuỗi được chỉ định, chịu trách nhiệm cho một phần quy trình tạo số ngẫu nhiên. Nhà cung cấp này nên là một bên trung lập thứ ba, nhưng điều này đòi hỏi các phương pháp tạo số ngẫu nhiên phức tạp hơn nhằm giảm thiểu mức độ tin cậy đặt vào bên tham gia này.
Lưu ý rằng một người có thể đóng nhiều vai trò khác nhau. Ví dụ, người dùng có thể tự vận hành một trình xác thực trên mạng blockchain. Nhiều vector tấn công đối với các giao thức này xuất phát từ việc bí mật hợp tác giữa nhiều bên tham gia.
Các thuộc tính
Trước khi thảo luận về các phương pháp tạo số ngẫu nhiên, chúng ta cần thống nhất về các thuộc tính mong muốn ở một bộ tạo số ngẫu nhiên.
Mỗi bộ tạo số ngẫu nhiên hoạt động theo hai giai đoạn. Trước tiên, trong giai đoạn yêu cầu, người dùng gửi yêu cầu tạo số ngẫu nhiên đến bộ tạo. Sau đó, trong giai đoạn công bố, bộ tạo sinh ra số ngẫu nhiên và đăng nó lên blockchain. Mỗi giai đoạn cần ít nhất một giao dịch blockchain — không thể an toàn tạo số ngẫu nhiên trên chuỗi trong một giao dịch duy nhất. Tuy nhiên, các phép tính chính xác thực hiện tại mỗi giai đoạn sẽ khác nhau tùy theo giao thức.
Chúng ta tập trung vào ba thuộc tính an toàn chính:
Tính không thể đoán trước — trước khi yêu cầu số ngẫu nhiên, không bên tham gia nào có thể dự đoán được giá trị của nó. Thuộc tính này là định nghĩa chính thức của khái niệm “ngẫu nhiên”.
Tính xác định — sau khi yêu cầu, số ngẫu nhiên chỉ có một giá trị duy nhất. Thuộc tính này đảm bảo rằng các bên tham gia không thể tác động đến kết quả sau khi yêu cầu.
Tính sẵn sàng — sau khi yêu cầu, giao thức hoàn tất ngay lập tức. Nghĩa là giai đoạn yêu cầu và giai đoạn tiết lộ xảy ra đồng thời.
Câu hỏi then chốt về các giao thức tạo số ngẫu nhiên là: các thuộc tính này tồn tại dưới điều kiện nào? Ví dụ, giao thức có thể yêu cầu nhà cung cấp dịch vụ phải trung thực. Những điều kiện này chính là các giả định tin cậy của giao thức. Càng ít giả định tin cậy, giao thức càng an toàn.
Các phương pháp tạo số ngẫu nhiên
Bên thứ ba đáng tin cậy
Giao thức đơn giản nhất là để một nhà cung cấp dịch vụ tạo số ngẫu nhiên. Khi người dùng yêu cầu, nhà cung cấp chỉ cần tạo số ngẫu nhiên ngoài chuỗi và đăng lại lên blockchain.
Phương pháp này rất đơn giản, nhưng đòi hỏi giả định tin cậy mạnh: các bên tham gia phải tin tưởng vào sự trung thực của nhà cung cấp. Nhà cung cấp có thể tự do lựa chọn số ngẫu nhiên và có khả năng làm gián đoạn giao thức. Giả định này có thể được cải thiện một phần bằng cách yêu cầu nhà cung cấp thực hiện tính toán trong môi trường cách ly an toàn (ví dụ như Intel SGX), tuy nhiên các môi trường cách ly này đã nhiều lần bị chứng minh là không hoàn hảo (các cuộc tấn công SgxPectre).
Hàm băm khối
Một chiến lược phổ biến là sử dụng hàm băm của một khối trong tương lai. Giao dịch yêu cầu sẽ lưu trữ số hiệu khối hiện tại (hoặc tương lai). Sau đó, các trình xác thực mạng sẽ tính toán hàm băm của khối đó. Khi hàm băm khối sẵn sàng, bộ tạo sẽ thực hiện giao dịch công bố kết quả.
Phương pháp này đơn giản và dễ triển khai trên mọi blockchain. Tuy nhiên, nó cũng yêu cầu giả định tin cậy mạnh: các bên tham gia phải tin tưởng vào sự trung thực của trình xác thực. Trình xác thực có thể thay đổi thứ tự hoặc bỏ qua giao dịch để điều chỉnh hàm băm khối. Do đó, người dùng chạy trình xác thực hoặc cấu kết với trình xác thực tạo ra rủi ro tấn công tiềm tàng nhằm đảm bảo nhận được số ngẫu nhiên thuận lợi.
Hàm ngẫu nhiên có thể xác minh (VRF)
Vấn đề với các phương pháp trước đây chủ yếu xuất phát từ việc một bên tham gia đơn lẻ có thể ảnh hưởng đến kết quả tạo số ngẫu nhiên (gây mất tính ngẫu nhiên). Hàm ngẫu nhiên có thể xác minh (VRF) loại bỏ vector tấn công này bằng cách yêu cầu nhiều bên cùng tham gia để ảnh hưởng đến kết quả.
VRF là một hàm f_s(x) = (y, p), trong đó đầu ra y trông giống ngẫu nhiên nhưng được tính toán xác định từ đầu vào x và khóa bí mật s. Ngoài ra, hàm trả về một bằng chứng p, cho phép bất kỳ ai cũng có thể xác minh y có đúng là đầu ra chính xác hay không (đây là giải thích sơ lược. Để biết thêm chi tiết về VRF, xem IETF RFC).
Trên blockchain, VRF thường hoạt động như sau. Đầu vào x được tạo từ phần do người dùng cung cấp và phần từ hàm băm khối. Nhà cung cấp dịch vụ ngoài chuỗi theo dõi các yêu cầu trên blockchain và sử dụng khóa s để gửi cặp giá trị (y, p) lên chuỗi. Giao dịch công bố kiểm tra bằng chứng p để đảm bảo y là giá trị đúng, rồi tiến hành công bố.
Ưu điểm của VRF là cải thiện giả định tin cậy so với các phương pháp trước: người dùng, trình xác thực và nhà cung cấp dịch vụ phải cấu kết với nhau mới có thể đoán trước số ngẫu nhiên. Điểm lo ngại chính của VRF là tính sẵn sàng: các bên tham gia phải tin tưởng nhà cung cấp không từ chối xử lý giao dịch. Nhà cung cấp có thể nhìn thấy số ngẫu nhiên được tạo ra và chọn có đưa nó lên blockchain hay không. Ví dụ, một cuộc tấn công khả thi là: người dùng gửi yêu cầu tung đồng xu, rồi cấu kết với nhà cung cấp VRF để chỉ hoàn tất yêu cầu nếu kết quả là mặt ngửa. Tuy nhiên, nhà phát triển ứng dụng có thể giảm thiểu các cuộc tấn công này — đặc biệt là khi người dùng không được lợi gì từ việc công bố thất bại, họ sẽ không có động cơ thực hiện tấn công.
Một nhược điểm khác của VRF là mật mã tương đối phức tạp và tốn nhiều tài nguyên tính toán. Hầu hết các blockchain không hỗ trợ sẵn tất cả các nguyên thủy mật mã cần thiết, do đó việc công bố số ngẫu nhiên có thể tiêu tốn nhiều gas hoặc yêu cầu nhiều giao dịch.
Gửi cam kết - Công bố (Commit-Reveal)
VRF không phải là cách duy nhất để cải thiện giả định tin cậy trong tạo số ngẫu nhiên. Một phương pháp khác là giao thức Gửi cam kết - Công bố giữa hai bên không tin tưởng lẫn nhau. Nguyên lý hoạt động cơ bản như sau:
-
Trong giai đoạn yêu cầu, người dùng và nhà cung cấp dịch vụ đều tạo một số ngẫu nhiên bí mật. Họ gửi hàm băm của số đó lên blockchain. Giá trị băm này gọi là giá trị cam kết.
-
Trong giai đoạn công bố, người dùng và nhà cung cấp dịch vụ công bố số ngẫu nhiên gốc. Mỗi bên kiểm tra xem số mà bên kia công bố có khớp với giá trị cam kết đã gửi hay không. Sau bước này, số ngẫu nhiên cuối cùng sẽ là hàm băm của hai số này. Đối với triển khai trên blockchain, hàm băm khối từ giao dịch yêu cầu cũng có thể được đưa vào bước băm cuối cùng.
So với các phương pháp ban đầu, giao thức Gửi cam kết - Công bố cũng cải thiện giả định tin cậy: người dùng, trình xác thực và nhà cung cấp dịch vụ phải cấu kết mới có thể đoán trước số ngẫu nhiên. Hơn nữa, giao thức này chỉ sử dụng các kỹ thuật mã hóa đơn giản — chỉ cần một hàm băm — nên rất dễ triển khai. Tuy nhiên, nó có vấn đề về tính sẵn sàng tương tự VRF: bất kỳ bên nào (người dùng hay nhà cung cấp) cũng có thể làm gián đoạn giao thức bằng cách không công bố số ngẫu nhiên của mình. Như với VRF, nhà phát triển ứng dụng có thể áp dụng các biện pháp giảm thiểu tương tự để đối phó với vector tấn công này.
Lưu ý rằng cách triển khai cơ bản nhất của giao thức này cần hơn hai giao dịch, vì cả người dùng và nhà cung cấp đều phải gửi giao dịch riêng biệt ở mỗi giai đoạn. Nhược điểm này có thể được khắc phục bằng các triển khai phức tạp hơn, cho phép nhà cung cấp cam kết trước nhiều số ngẫu nhiên. Pyth Entropy là một triển khai nâng cao của giao thức Gửi cam kết - Công bố.
Cả VRF và giao thức Gửi cam kết - Công bố đều cho phép nhà phát triển ứng dụng đánh đổi tính sẵn sàng để đạt được tính không thể đoán trước. Nếu nhà phát triển lo ngại về rủi ro phụ thuộc vào một nhà cung cấp duy nhất, họ có thể đơn giản là yêu cầu số ngẫu nhiên từ N nhà cung cấp và kết hợp kết quả. Cách này tăng tính không thể đoán trước — tất cả N nhà cung cấp phải cấu kết mới ảnh hưởng được kết quả — nhưng lại giảm tính sẵn sàng — bất kỳ một trong N nhà cung cấp nào cũng có thể ngăn việc công bố số ngẫu nhiên. Tuy nhiên, cần lưu ý rằng không một nhà cung cấp đơn lẻ nào trong số N bên biết được số ngẫu nhiên cuối cùng là gì, do đó họ không thể dùng thông tin này để quyết định khi nào thì làm gián đoạn giao thức.
Các phương pháp khác
Còn có những phương pháp nâng cao hơn để tạo số ngẫu nhiên an toàn. Những phương pháp này nhằm cải thiện sự đánh đổi giữa tính không thể đoán trước và tính sẵn sàng ở tầng cao hơn, sao cho cần nhiều hơn một nhà cung cấp mới có thể làm gián đoạn giao thức. Một trong số đó là VRF ngưỡng (threshold VRF), trong đó khóa bí mật s của VRF được chia nhỏ giữa nhiều bên tham gia. Một phương pháp khác là tín hiệu ngẫu nhiên (random beacon). Mặc dù các phương pháp này thực sự có sự cân bằng an ninh tốt hơn so với các phương pháp trên, nhưng đối với hầu hết ứng dụng, chúng lại quá mức cần thiết, bởi vì vấn đề tính sẵn sàng có thể được cải thiện thông qua thiết kế ứng dụng.
Kết luận
Bài viết này đã giới thiệu một số phương pháp tạo số ngẫu nhiên trên blockchain và phân tích ưu nhược điểm của chúng. Nếu bạn đang phát triển một ứng dụng cần bộ tạo số ngẫu nhiên an toàn, bạn có thể tìm hiểu Pyth Entropy và liên hệ với các cộng sự viên Pyth qua Discord, Telegram hoặc các kênh xã hội khác để tìm hiểu cách sử dụng sản phẩm đột phá này của Pyth.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














