ãy tưởng tượng bạn bạn thả xúc sắc rơi vào một cái hộp đen của một người khác. Bạn không thể nhìn thấy con xúc sắc có giá trị bao nhiêu mà phải nhờ người đó kiểm tra hộ để xem xúc sắc có kết quả bao nhiêu. Người đó sẽ nói cho bạn kết quả của xúc sắc và một bằng chứng rằng con xúc sắc đó không hề bị thay đổi giá trị. Đó là ý tưởng chính của Verifiable Random Function.
Bài viết này, mình giới thiệu về VRF và có một ví dụ đơn giản để các bạn không chuyên sâu dễ hình dung, trong thực tế, mọi tính toán của VRF thường được thực hiện trên đường cong Elliptic, và cặp ghép, và sẽ phức tạp hơn rất nhiều.
VRF có hai đặc tính cốt lõi:
Ngẫu nhiên (Randomness): Với cùng một đầu vào, chỉ người giữ khóa bí mật mới có thể tạo ra con số ngẫu nhiên. Người ngoài không thể đoán trước được kết quả.
Có thể kiểm chứng (Verifiability): Bất kỳ ai cũng có thể dùng khóa công khai để kiểm tra và xác nhận rằng con số ngẫu nhiên đó là hợp lệ cho đầu vào tương ứng.
Một quy trình VRF luôn bao gồm ba bước cơ bản:
Tạo Khóa (KeyGen): Alice tạo ra một cặp khóa: một khóa bí mật (SK) mà cô ấy giữ kín và một khóa công khai (PK) mà cô ấy chia sẻ cho mọi người.
Tạo Bằng Chứng (Prove): Khi cần tạo số ngẫu nhiên cho một dữ liệu đầu vào, Alice sẽ dùng khóa bí mật (SK) của mình để tính toán ra hai thứ: một giá trị ngẫu nhiên và một bằng chứng - proof
Kiểm Chứng (Verify): Người khác có thể lấy khóa công khai (PK) của Alice, cùng với dữ liệu đầu vào, giá trị ngẫu nhiên , và bằng chức đề xác thực. Nếu việc kiểm tra thành công, Bob có thể chắc chắn 100% rằng là kết quả ngẫu nhiên hợp lệ do chính Alice tạo ra.
Alice tạo một cặp khóa cho VRF
Chọn hai số nguyên tố (bí mật):
Tính N:
Tính phi(N):
Chọn số e: là số nguyên tố cùng nhau với . Ta chọn
Tính số d: là nghịch đảo modular của theo . Tức là
Kết quả:
Khóa bí mật (SK):
Khóa công khai (PK):
Bây giờ, Alice muốn tạo ra một giá trị ngẫu nhiên có thể kiểm chứng cho một đầu vào.
Đầu vào:
Bước 1: Hashing: Alice cần chuyển thành một con số. Ta dùng hàm hash công khai (để đơn giản ở ví dụ này mình lấy tổng mã Ascii đem mod cho ) và lấy kết quả theo modulo
Bước 2: Tạo bằng chứng (Proof): Alice dùng khóa bí mật của mình để tính toán bằng chứng . Đây chính là cốt lõi của việc "ký" bằng RSA.
Vậy bằng chứng là
Bước 3: Tạo giá trị ngẫu nhiên (Random Output): Giá trị ngẫu nhiên được tạo ra bằng cách hashbằng chứng
Vậy, Giá trị ngẫu nhiên (Output) là
Alice sẽ công bố tức là:
Bob nhận được bộ ba thông tin từ Alice và muốn kiểm chứng. Bob chỉ có khóa công khai
Bước 1: Kiểm tra Bằng chứng: Bob dùng bằng chứng và khóa công khai để tính ngược lại giá trị ban đầu
Bước 2: Băm lại đầu vào: Bob tự hash đầu vào mà Alice đã cung cấp
Bước 3: So sánh: Bob so sánh và
Chúng khớp nhau! Điều này chứng tỏ bằng chứng là hợp lệ cho đầu vào “Hello World“ và được tạo bởi người giữ khóa bí mật tương ứng với khóa công khai
Bước 4: Kiểm tra giá trị ngẫu nhiên: Bob băm bằng chứng để xem có khớp với giá trị mà Alice đưa ra không.
Vậy khớp với
Kết luận: Vì tất cả các bước đều hợp lệ, Bob có thể tin rằng là giá trị ngẫu nhiên duy nhất và không thể đoán trước, được tạo ra một cách hợp lệ cho đầu vào “Hello World” bởi Alice.
Để đơn giản, hàm hash sẽ được định nghĩa bằng cách mình lấy tổng mã Ascii mod cho
No comments yet. Be the first to comment!