Back to Home

Verifiable Random Function (VRF) và một ví dụ đơn giản

ã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:

  1. 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ả.

  2. 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.

Cách hoạt động

Một quy trình VRF luôn bao gồm ba bước cơ bản:

  1. 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.

  2. 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 yy và một bằng chứng - proof π\pi

  3. 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 yy, và bằng chức π\pi đề 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 yy là kết quả ngẫu nhiên hợp lệ do chính Alice tạo ra.

Ví dụ

1. Tạo Khóa (KeyGen)

Alice tạo một cặp khóa cho VRF

  • Chọn hai số nguyên tố (bí mật): p=5,q=11p=5,q=11

  • Tính N: N=p×q=55N=p \times q = 55

  • Tính phi(N): ϕ(N)=(p1)×(q1)=40\phi(N)=(p-1) \times (q-1) = 40

  • Chọn số e: ee là số nguyên tố cùng nhau với ϕ(N)\phi(N). Ta chọn e=3e=3

  • Tính số d: dd là nghịch đảo modular của ee theo modϕ(N)\mod \phi(N). Tức là d×e1(mod40),d=27d \times e \equiv 1 (\mod 40), d=27

Kết quả:

  • Khóa bí mật (SK): d=27d=27

  • Khóa công khai (PK): (N=55,e=3)(N=55, e=3)

2. Chứng Minh (Prove)

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: α="Hello World"\alpha = \text{"Hello World"}

  • Bước 1: Hashing: Alice cần chuyển α\alpha 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 NN) và lấy kết quả theo modulo NN

  • Bước 2: Tạo bằng chứng (Proof): Alice dùng khóa bí mật dd của mình để tính toán bằng chứng π\pi. Đây chính là cốt lõi của việc "ký" bằng RSA.

    • π=mdmodN=727mod55=28\pi = m^d \bmod N = 7^{27}\bmod 55 = 28

    • Vậy bằng chứng là π=28\pi=28

  • Bước 3: Tạo giá trị ngẫu nhiên (Random Output): Giá trị ngẫu nhiên yy được tạo ra bằng cách hashbằng chứng π\pi

    • y=Hash(π)=Hash("28")=51y=Hash(\pi) = Hash(\text{"28"})=51

    • Vậy, Giá trị ngẫu nhiên (Output) y=51y=51

Alice sẽ công bố (α,y,π)(\alpha, y, \pi) tức là: ("Hello World", 51, 28)(\text{"Hello World", 51, 28})

3. Kiểm Chứng (Verify)

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 (N=55,e=3)(N=55, e=3)

  • Bước 1: Kiểm tra Bằng chứng: Bob dùng bằng chứng π\pi và khóa công khai ee để tính ngược lại giá trị mm ban đầu

    • m=πemodN=283mod55=7m'=\pi^e \bmod N = 28^3 \bmod 55 = 7

  • Bước 2: Băm lại đầu vào: Bob tự hash đầu vào α\alpha mà Alice đã cung cấp

    • mhash=Hash("Hello World")=7m_{hash} = Hash(\text{"Hello World"}) = 7

  • Bước 3: So sánh: Bob so sánh mm'mhashm_{hash}

    • 7=77=7 Chúng khớp nhau! Điều này chứng tỏ bằng chứng π=28\pi=28 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 (55,3)(55,3)

  • Bước 4: Kiểm tra giá trị ngẫu nhiên: Bob băm bằng chứng π\pi để xem có khớp với giá trị yy mà Alice đưa ra không.

    • y=Hash(π)=Hash("28")=51y' = Hash(\pi)=Hash(\text{"28"})=51

    • Vậy y=51y=51 khớp với y=51y'=51

Kết luận: Vì tất cả các bước đều hợp lệ, Bob có thể tin rằng y=51y=51 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.

Interactive Demo

Để đơ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 NN

Comments

0/300

Leave name/email blank to comment anonymously

No comments yet. Be the first to comment!