Tiêu đề gốc: "NEAR Frontier|Cách thức hoạt động của các đèn hiệu ngẫu nhiên dựa trên chữ ký ngưỡng"
Nguồn gốc: NEAR Chinese Community
Hồ sơ tác giả gốc:
Alexander Skidanov là một trong hai người đồng sáng lập NEAR Protocol, từng đoạt huy chương vàng ACM-ICPC năm 2008 (Lưu ý: ICPC là cuộc thi lập trình dành cho sinh viên đại học cấp cao nhất thế giới). Alex từng làm việc cho Microsoft và gia nhập MemSQL với tư cách là kỹ sư đầu tiên, anh tham gia viết và xây dựng cơ sở dữ liệu quan hệ phân tán nhanh nhất thế giới, được Uber, Goldman Sachs, Sony, Intel và các công ty khác áp dụng.

Biên tập viên: Alex, đồng sáng lập NEAR và Zaki, cựu đồng sáng lập Cosmos, thảo luận về bảo vệ trạng thái và các vấn đề hiện tại khác trước hội đồng bảng trắng Các vấn đề kỹ thuật khác nhau mà công nghệ chuỗi khối cơ bản gặp phải
Văn bản:
Trở lại năm 2015, DFinity đã khiến cộng đồng vô cùng phấn khích với thiết kế đèn hiệu ngẫu nhiên tận dụng chữ ký ngưỡng BLS để tạo ra đầu ra ngẫu nhiên vừa không thiên vị vừa khó đoán.
Trở lại năm 2015, Dfinity đã thiết kế một đèn hiệu ngẫu nhiên khiến mọi người trong cộng đồng công nghệ vô cùng phấn khích. Đèn hiệu sử dụng công nghệ chữ ký ngưỡng BLS (Boneh-Lynn-Shacham) để tạo ra đầu ra ngẫu nhiên không thiên vị và không thể đoán trước.
Tính đến năm 2020, việc xây dựng một đèn hiệu ngẫu nhiên không thể sai lệch và không thể đoán trước vẫn còn vô cùng thách thức và rất ít giao thức có một đèn hiệu này hoạt động. Chữ ký ngưỡng không phải là cách tiếp cận duy nhất được đề xuất và trước đây chúng tôi đã xuất bản một bản tổng quan ngắn gọn về nhiều cách tiếp cận khác đối với tính ngẫu nhiên, bao gồm cả cách tiếp cận mà chúng tôi đã xem xét trước đó trong bài đăng trên blog này. Hãy tham khảo nó để biết chi tiết về đèn hiệu ngẫu nhiên là gì, ý nghĩa của việc không thiên vị và không thể đoán trước, cũng như những cách tiếp cận nào ngoài chữ ký ngưỡng đã được đề xuất.
Vào năm 2020, việc xây dựng các báo hiệu ngẫu nhiên không thiên vị và không thể đoán trước vẫn là thách thức lớn để đạt được mục tiêu thực tế sử dụng trong một số giao thức. Chữ ký ngưỡng không phải là giải pháp duy nhất và trước đây chúng tôi đã xuất bản một bài đăng trên blog cung cấp tổng quan ngắn gọn về nhiều phương pháp ngẫu nhiên khác, bao gồm cả phương pháp mà chúng tôi đang xem xét vào thời điểm đó. Để tìm hiểu thêm về đèn hiệu ngẫu nhiên là gì, ý nghĩa của việc không thiên vị và không thể đoán trước cũng như những phương pháp nào tồn tại ngoài ngưỡng chữ ký, hãy xem bài đăng trên blog này.
Sau nhiều lần lặp lại thiết kế, cuối cùng chúng tôi đã xây dựng được thứ gì đó rất giống với những gì DFinity sử dụng và đó là cơ hội tuyệt vời để tìm hiểu sâu hơn đi sâu vào cách thức hoạt động của các đèn hiệu ngẫu nhiên đó.
Sau nhiều lần lặp lại thiết kế, cuối cùng chúng tôi đã hoàn thành thiết kế của các đèn hiệu ngẫu nhiên và Dfinity. Có nhiều điểm tương đồng và đây là cơ hội tuyệt vời để tìm hiểu thêm về cách hoạt động chính xác của loại đèn hiệu ngẫu nhiên này.
Trong bài đăng này, chúng tôi sẽ mô tả giao thức phức tạp sử dụng chữ ký ngưỡng để tạo số ngẫu nhiên bằng những thuật ngữ rất đơn giản. Hãy cùng tìm hiểu sâu hơn !
Trong bài đăng trên blog này, chúng tôi sẽ mô tả một cách rất đơn giản giao thức phức tạp này để tạo số ngẫu nhiên bằng cách sử dụng chữ ký ngưỡng. hãy bắt đầu!
Các nguyên tắc cơ bản về tiền điện tử
Để hiểu các dấu hiệu ngẫu nhiên trong bài viết này, chúng ta cần hiểu một số mật mã rất cơ bản. Chúng ta cần phân biệt giữa hai khái niệm: vô hướng hoặc chỉ là số thông thường , mà trong suốt bài viết này, chúng tôi sẽ biểu thị bằng các chữ cái viết thường (ví dụ: x, y) và các điểm đường cong elip, chúng tôi sẽ biểu thị bằng các chữ cái viết hoa.
Để hiểu được các tín hiệu ngẫu nhiên được mô tả trong bài viết này, chúng ta cần biết một số kiến thức rất cơ bản về mật mã. Chúng ta cần phân biệt giữa hai khái niệm: vô hướng hoặc số thông thường, chúng ta sử dụng các chữ cái viết thường xuyên suốt (ví dụ: x, y); và các điểm trên đường cong elip, chúng ta sử dụng các chữ cái viết hoa.
Chúng ta không cần hiểu nhiều về các điểm trên đường cong elip, ngoài một số tính chất:
Các điểm trên đường cong elip có thể được cộng lại với nhau và một điểm trên đường cong elip có thể được nhân với một đại lượng vô hướng (chúng ta sẽ biểu thị nó là xG, mặc dù ký hiệu G ^x cũng rất phổ biến). Kết quả của cả hai phép toán là một điểm đường cong elip khác.
Biết G và xG về mặt tính toán không thể tính được x.
Cho một đa thức p(x) bậc k-1, thì đó là ai cũng biết rằng nếu người ta biết giá trị của p(x) tại bất kỳ k giá trị phân biệt nào của x, thì họ cũng có thể đánh giá p(x) tại bất kỳ x nào khác. Đối với cùng một đa thức và một số điểm G trên đường cong elip, nếu một người biết giá trị của p(x)G tại bất kỳ k giá trị riêng biệt nào của x, thì họ cũng có thể đánh giá p(x)G tại bất kỳ x nào khác.
Chúng ta không cần biết thêm về các thuộc tính của các điểm trên đường cong elip ngoại trừ những điều sau:
Đường cong elip Các điểm trên có thể được cộng lại với nhau hoặc nhân với một đại lượng vô hướng (chúng tôi gọi nó là xG, nhưng nó cũng thường được biểu thị bằng G^x). Kết quả của cả hai thao tác sẽ là một điểm trên một đường cong elip khác.
Không thể suy ra x khi biết G và xG.
Cho một đa thức p(x) cấp k-1, như chúng ta đều biết, nếu chúng ta biết các giá trị p(x) tương ứng với bất kỳ x nào khác nhau, họ có thể tính giá trị p(x) tương ứng với bất kỳ x nào khác. Đối với cùng một đa thức và một số điểm G, nếu họ biết giá trị của p(x)G với k giá trị khác nhau của x thì họ cũng có thể tính p(x)G cho x khác.
Đó là những đặc tính duy nhất của các điểm trên đường cong elip mà chúng ta cần hiểu ở mức độ cao hơn về cách thức hoạt động của đèn hiệu ngẫu nhiên.
Bài viết này chỉ yêu cầu hiểu biết ở mức độ cao về cách thức hoạt động của đèn hiệu ngẫu nhiên, vì vậy, biết những đặc tính này về đường cong elip là đủ.
Đèn hiệu ngẫu nhiên Đèn hiệu ngẫu nhiên
Giả sử có n người tham gia và nói rằng chúng tôi muốn yêu cầu rằng phải mất ít nhất k người trong số họ để tạo ra một số ngẫu nhiên và một đối thủ kiểm soát tối đa k-1 người tham gia không thể dự đoán đầu ra của đèn hiệu ngẫu nhiên và không thể tác động đến nó theo bất kỳ cách nào.
Giả thuyết Có là n người tham gia và chúng tôi muốn đạt được đặc điểm như vậy: cần ít nhất k người tham gia để tạo số ngẫu nhiên và đối thủ kiểm soát không quá k-1 người tham gia không thể dự đoán đầu ra của đèn hiệu ngẫu nhiên và không thể sử dụng bất kỳ phương pháp dự đoán đầu ra của đèn hiệu ngẫu nhiên và cách tác động đến nó.

Giả sử tồn tại một số đa thức p(x) bậc k-1 sao cho người tham gia đầu tiên biết p(1), người tham gia thứ hai biết p(2) , và người tham gia thứ n biết p(n). Cũng nói rằng đối với một số điểm G trên đường cong elip đã thỏa thuận, mọi người đều biết p(x)G cho tất cả các giá trị của x. Chúng ta sẽ gọi p(i) là một chia sẻ riêng tư của người tham gia i (vì chỉ người tham gia tôi biết điều đó) và p(i)G chia sẻ công khai của người tham gia i (vì mọi người đều biết điều đó). Hãy nhớ lại ở phần trước rằng kiến thức về p(i)G là không đủ để suy ra p (i ).
Giả sử có một đa thức p(x) cấp k-1 và người chơi đầu tiên biết p(1 ), Người chơi thứ hai biết p(2) và người chơi thứ n biết p(n). Cũng giả sử rằng, đối với một số điểm G trên đường cong elip đã thỏa thuận, tất cả những người tham gia đều biết p(x)G với tất cả các giá trị của x. Chúng ta gọi p(i) phần riêng tư của người chơi i (vì chỉ người chơi i mới biết điều đó) và p(i)G phần chia sẻ công khai của người chơi i (vì mọi người đều biết điều đó). Hãy nhớ lại các tính chất đã nêu ở phần trước rằng việc suy ra p(i) từ p(i)G là không đủ.
Tạo ra một đa thức theo cách mà mỗi người tham gia biết chia sẻ riêng tư của họ nhưng không có cái nhìn sâu sắc về chia sẻ riêng tư của những người tham gia khác là phần phức tạp nhất của đèn hiệu ngẫu nhiên và được gọi là Tạo khóa phân tán. Chúng tôi sẽ đề cập đến phần này trong phần tiếp theo. Bây giờ, hãy giả sử một đa thức như vậy tồn tại và tất cả những người tham gia đều biết phần của họ.
Tạo một đa thức trong đó mỗi người tham gia biết phần chia sẻ riêng tư của mình mà không nhìn thấy phần chia sẻ riêng tư của những người tham gia khác là Phần phức tạp nhất của đèn hiệu ngẫu nhiên được gọi là DKG (Tạo khóa phân tán). Chúng tôi sẽ đề cập đến nó trong phần tiếp theo. Bây giờ, giả sử rằng tồn tại một đa thức như vậy và tất cả người chơi đều biết phần của họ.
Hãy xem cách sử dụng nó để có đèn hiệu ngẫu nhiên trong bối cảnh giao thức chuỗi khối. Nói một khối có hàm băm h được tạo ra và những người tham gia cùng nhau muốn tạo ra một số ngẫu nhiên được tạo bởi h. Cách họ tiến hành trước tiên là sử dụng một số hàm đã được thống nhất để chuyển h thành một điểm trên đường cong elip:
Hãy xem cách sử dụng tính năng này trong bối cảnh giao thức chuỗi khối để tạo ra các báo hiệu ngẫu nhiên. Giả sử hàm băm của khối được tạo là h và những người tham gia muốn tạo chung các số ngẫu nhiên được gieo hạt h. Điều này được thực hiện bằng cách trước tiên chuyển đổi h thành một điểm trên đường cong elip bằng cách sử dụng một số hàm đã được thống nhất:
H = scalarToPoint(h)
Sau đó, mỗi người tham gia tôi tính H_i = p(i)H, điều mà họ có thể làm vì họ biết p(i) và H. Tiết lộ H_i sẽ không tiết lộ phần chia sẻ riêng tư của họ, do đó, các phần chia sẻ riêng tư tương tự có thể được sử dụng lại cho mỗi khối, do đó DKG chỉ cần được thực hiện một lần.
Sau đó, mỗi người chơi i sẽ tính H_i = p(i)H, điều mà họ có thể làm vì họ biết p(i) và H. Hiển thị H_i không tiết lộ các chia sẻ riêng tư của nó, các chia sẻ riêng tư tương tự có thể được sử dụng lại trong mọi khối, do đó DKG chỉ cần được thực thi một lần.
Khi có ít nhất k người tham gia tiết lộ phần chia sẻ của họ H_i = p(i)H, mọi người có thể xây dựng lại bất kỳ phần chia sẻ nào H_x = p(x) H với bất kỳ x nào do thuộc tính thứ ba trong phần trước. Tại thời điểm này, mỗi người tham gia có thể tính toán cục bộ H_0 = p(0)H và sử dụng hàm băm của nó làm đầu ra đèn hiệu ngẫu nhiên. Lưu ý rằng vì không người tham gia nào biết p( 0), cách duy nhất để tính p(0)H là nội suy p(x)H, điều này chỉ có thể thực hiện được nếu ít nhất k của p(i)H được tiết lộ. không có cái nhìn sâu sắc về giá trị của p(0)H.
Khi có ít nhất k người tham gia đã hiển thị lượt chia sẻ của họ H_i = p(i ) H, từ thuộc tính thứ ba ở phần trước, mọi người có thể xây dựng lại phần chia tương ứng H_x = p(x)H cho bất kỳ x nào. Tại thời điểm này, mỗi người tham gia có thể tính toán cục bộ H_0 = p(0)H và sử dụng giá trị băm của nó làm đầu ra đèn hiệu ngẫu nhiên. Lưu ý rằng vì không người tham gia nào biết p(0), nên cách duy nhất để tính p(0)H là nội suy p(x)H, điều này chỉ có thể thực hiện được nếu ít nhất k p(i)H được hiển thị. Chứng tỏ rằng giá trị của p(0)H không thể suy ra được ít hơn số p(i)H này.

Đèn hiệu ở trên có tất cả các đặc tính mà chúng tôi mong muốn: đối thủ kiểm soát k-1 hoặc ít người tham gia hơn không thể hiểu rõ hơn về đầu ra cuối cùng của đèn hiệu ngẫu nhiên, trong khi bất kỳ k người tham gia nào cũng có thể tính toán kết quả cuối cùng và bất kỳ tập hợp con nào của k người tham gia trở lên sẽ luôn đạt cùng một giá trị.
Trên Beacons có tất cả các thuộc tính mà chúng tôi mong đợi: đối thủ kiểm soát k-1 người tham gia trở xuống không thể tìm hiểu đầu ra cuối cùng của đèn hiệu ngẫu nhiên, trong khi bất kỳ người tham gia k nào cũng có thể tính toán đầu ra cuối cùng và k người tham gia trở lên. Bất kỳ tập hợp con nào sẽ luôn nhận được cùng một giá trị.
Có một vấn đề chúng tôi đã bỏ qua ở trên. Để nội suy hoạt động, chúng tôi cần đảm bảo rằng giá trị H_i mà i- thứ người tham gia được tiết lộ thực sự bằng p(i)H. Vì không có người tham gia nào khác biết p(i), nên họ không thể xác minh một cách ngây thơ rằng H_i thực sự đúng và nếu không có một số bằng chứng mật mã cùng với H_i, một tác nhân độc hại có thể tiết lộ giá trị tùy ý và các giá trị khác người tham gia sẽ không có cách nào phát hiện ra nó.
Có một vấn đề mà chúng tôi hiện đang bỏ qua. Để phép nội suy hợp lệ, chúng ta cần đảm bảo rằng H_i được hiển thị bởi người tham gia thứ i thực sự bằng p(i)H. Vì không có người tham gia nào khác biết p(i), nên họ đương nhiên không thể xác minh tính chính xác của H_i và nếu không có bất kỳ bằng chứng mật mã nào được đính kèm với H_i, kẻ xấu có thể hiển thị các giá trị tùy ý mà những người tham gia khác sẽ không thể phát hiện được.

Có ít nhất hai cách để cung cấp bằng chứng mật mã cho thấy H_i là chính xác, chúng tôi sẽ đề cập đến cả hai cách đó trong hai phần bên dưới, sau khi nói về DKG.
Có ít nhất hai cách để cung cấp bằng chứng mật mã chính xác về H_i mà chúng tôi sẽ giới thiệu sau hai phần tiếp theo, sau khi thảo luận về DKG Hai phương pháp này.
Tạo khóa phân tán Tạo khóa phân tán
Để tín hiệu ngẫu nhiên ở phần trước hoạt động, chúng tôi cần n người tham gia cùng nhau đưa ra đa thức p(x) bậc k-1 sao cho mỗi người tham gia tôi biết giá trị của p( i), nhưng không có người tham gia nào khác có cái nhìn sâu sắc về giá trị đó. Đối với các cách xây dựng trong phần tiếp theo, điều cần thiết là tất cả những người tham gia phải biết p(x)G đối với một số G đã thống nhất và tất cả x.
Để đèn hiệu ngẫu nhiên ở phần trước hoạt động, chúng ta cần n người tham gia để cùng rút ra đa thức p bậc k-1 (x), để mỗi người chơi tôi biết giá trị của p(i) và những người chơi khác không thể biết được. Đồng thời, để xây dựng phần tiếp theo, tất cả những người tham gia phải biết p(x)G đối với một số G đã thống nhất và tất cả x.
Trong suốt phần này, chúng tôi giả định rằng mọi người tham gia đều có một số khóa riêng x_i được liên kết với họ và tất cả những người tham gia đều biết khóa chung X_i đó tương ứng với khóa riêng như vậy.
Trong phần này, chúng tôi giả định rằng mỗi người tham gia có một khóa riêng x_i và tất cả những người tham gia đều biết khóa chung X_i tương ứng với khóa riêng.
Một cách để hiểu về DKG là như sau:
Việc triển khai DKG như sau:

1.Mỗi người tham gia i tính toán cục bộ một số đa thức p_i(x) bậc k-1. Sau đó, họ gửi p_i(j) cho mỗi người tham gia j được mã hóa bằng khóa công khai X_j, để chỉ người tham gia thứ j mới có thể giải mã p_i(j). Người tham gia i cũng công bố p_i(j)G cho tất cả j từ 1 đến k.
1. Mỗi người tham gia i tính toán cục bộ đa thức p_i(x) của bậc k-1. Sau đó, họ gửi cho nhau những người tham gia khác, giả sử người tham gia thứ j, p_i(j) được mã hóa bằng khóa chung tương ứng X_j, để chỉ người tham gia thứ j mới có thể giải mã p_i(j). Người chơi i cũng khai báo công khai tất cả p_i(j)G cho j từ 1 đến k.
2.Tất cả những người tham gia đều đồng ý chung về một số tập hợp ít nhất k đa thức cam kết như vậy. Vì một số người tham gia có thể ngoại tuyến nên họ có thể 』không đợi cho đến khi tất cả n trong số họ cam kết, nhưng khi ít nhất k đã cam kết, họ có thể sử dụng bất kỳ loại thuật toán đồng thuận nào (ví dụ: Tendermint) để đồng ý về một số tập con Z của ít nhất k đa thức.
2. Tất cả những người tham gia cùng đồng ý về ít nhất k bộ đa thức được gửi theo phương pháp trên. Vì một số người tham gia có thể ngoại tuyến, họ không thể đợi tất cả n người tham gia cam kết, nhưng miễn là có ít nhất k người tham gia đã gửi, họ có thể sử dụng bất kỳ dạng thuật toán đồng thuận nào (chẳng hạn như Tendermint) để đợi ít nhất k đa thức. đạt trên tập con Z.
3.Những người tham gia cùng nhau xác minh rằng p_i(j) được mã hóa tương ứng với p_i(j)G được công bố công khai. Các đa thức cho trường hợp không đúng sẽ bị xóa khỏi Z.
3. Những người tham gia cùng nhau xác minh rằng p_i(j) được mã hóa tương ứng với p_i( được phát hành công khai j)G. và loại bỏ các đa thức không phù hợp khỏi Z.
4.Mỗi người tham gia j tính phần chia sẻ riêng tư của họ p(j) bằng tổng của p_i(j) cho mỗi i trong Z. Mỗi người tham gia cũng có thể tính mỗi phần chia sẻ công khai p(x)G là tổng của p_i(x)G cho mỗi i trong Z.
4. Mỗi người chơi j tính phần chia sẻ riêng tư của mình p(j) bằng tổng của p_i(j) cho mỗi i trong Z. Mỗi người chơi cũng có thể tính phần chia chung p(x)G của bất kỳ người chơi x nào bằng tổng của p_i(x)G cho mỗi i trong Z.

Nhận xét rằng p(x) thực sự là một đa thức bậc k-1, vì nó là tổng của từng p_i(x), mỗi p_i(x) là một đa thức bậc k-1. Sau đó, lưu ý rằng mặc dù mỗi người tham gia j biết p(j), nhưng họ không hiểu rõ về các giá trị của p(x) khác đối với x ≠ j. Thật vậy, để biết một giá trị như vậy họ』 d cần biết tất cả p_i(x) và miễn là người tham gia j không biết ít nhất một trong các đa thức đã cam kết thì họ không có bất kỳ thông tin nào về p(x).
Lưu ý rằng p(x) thực sự là một đa thức cấp k-1, vì nó là tổng của từng p_i(x) và mỗi p_i(x) là Đa thức cấp k-1. Sau đó, lưu ý rằng mặc dù mỗi người chơi j biết p(j), nhưng không ai trong số họ biết các giá trị khác của p(x) cho x ≠ j. Thật vậy, để biết một giá trị như vậy họ cần biết tất cả p_i(x), và miễn là người chơi j biết ít nhất một ít hơn một trong số các đa thức được đưa ra, anh ta không thể biết p(x).
Điều này cấu thành toàn bộ quy trình DKG. Các bước 1, 2 và 4 ở trên tương đối đơn giản. Bước 3 là lúc DKG gặp khó khăn .
Đây là toàn bộ quá trình của DKG. Các bước 1, 2 và 4 ở trên tương đối dễ dàng. Bước 3 là lúc DKG gặp khó khăn.
Cụ thể, chúng ta cần một số cách để chứng minh rằng mỗi p_i(j) được mã hóa thực sự tương ứng với p_i(j)G được phát sóng công khai. Nếu không có cách xác minh, đối thủ tôi có thể gửi một số thông tin vô nghĩa cho người tham gia j thay vì p_i(j được mã hóa thực tế) và người tham gia j sẽ không có cách nào để tính toán phần riêng tư của họ sau này.
Cụ thể, chúng ta cần một số cách để chứng minh rằng mỗi p_i(j) được mã hóa thực sự tương ứng với một p_i(j)G công khai. Nếu không có phương pháp xác minh, đối thủ i có thể gửi một số thông tin ngẫu nhiên cho người tham gia j thay vì p_i(j) được mã hóa thực tế, do đó người tham gia j sẽ không thể tính toán phần riêng tư của nó sau này.
Có một cách để tạo bằng chứng mật mã về tính chính xác của chia sẻ được mã hóa. Tuy nhiên, quy mô của bằng chứng đó cực kỳ lớn , và vì O(nk) những bằng chứng như vậy cần phải được xuất bản nên kích thước của bằng chứng sẽ trở thành một nút thắt cổ chai.
Có một cách Một bằng chứng mật mã có thể được tạo ra để chứng minh tính chính xác của các chia sẻ được mã hóa. Tuy nhiên, kích thước của bằng chứng này quá lớn và kích thước của bằng chứng sẽ trở thành điểm nghẽn vì mức độ tiết lộ được yêu cầu cao tới O(nk).
Thay vì chứng minh bằng mật mã rằng p_i(j) tương ứng với p_i(j)G trong NEAR, chúng tôi phân bổ nhiều thời gian trong DKG giữa thời điểm tập hợp đa thức được thống nhất và thời điểm các lượt chia sẻ cuối cùng được tổng hợp, trong đó mỗi người tham gia có thể cung cấp bằng chứng mật mã rằng chia sẻ được mã hóa p_i(j) gửi cho họ không tương ứng với p_i(j) được phát sóng công khai )G. Nó giả định rằng mỗi người tham gia sẽ trực tuyến ít nhất một lần trong khung thời gian đó (kéo dài khoảng nửa ngày) và thử thách họ gửi sẽ được đưa vào blockchain. khá thực tế, vì các nhà sản xuất khối dự kiến sẽ vẫn trực tuyến trong suốt thời đại và để một thông điệp được kiểm duyệt, phần lớn các nhà sản xuất khối cần phải thông đồng và không đưa nó vào khối của họ, trong trường hợp đó họ có những cách tấn công có lợi hơn đáng kể hệ thống.
Chúng tôi không chứng minh bằng mật mã rằng p_i(j) tương ứng với p_i(j)G trong NEAR; Trong DKG, còn lại một khoảng thời gian lớn giữa thời điểm đạt được sự đồng thuận về tập hợp đa thức và thời điểm các phần chia sẻ cuối cùng được tổng hợp. Trong thời gian này, mỗi người tham gia có thể gửi bằng chứng mật mã cho biết rằng phần chia sẻ được mã hóa p_i(j) gửi cho họ không tương ứng với p_i(j)G được phát sóng công khai. Nó giả định rằng mỗi người tham gia sẽ trực tuyến ít nhất một lần trong khoảng thời gian đó (khoảng nửa ngày) để thực hiện các thử thách đã gửi của họ trên chuỗi. Đối với các nhà sản xuất khối, cả hai giả định đều khá thực tế. Bởi vì các nhà sản xuất khối dự kiến sẽ vẫn trực tuyến trong suốt thời đại và nếu các tin nhắn bị cắt bớt, phần lớn các nhà sản xuất khối cần phải thông đồng để họ không tính thách thức vào khối. Nếu họ đã có những khả năng như vậy thì họ đã có ngày càng nhiều cách có lợi hơn để tấn công hệ thống.

Nếu một nhà sản xuất khối cụ thể nhận được phần chia sẻ không hợp lệ và sau đó không xuất hiện trong DKG và thách thức nó, họ sẽ không thể tham gia tạo ngẫu nhiên Lưu ý rằng miễn là k người tham gia trung thực khác còn có cổ phần của họ (bằng cách không nhận bất kỳ cổ phiếu không hợp lệ nào hoặc thách thức tất cả các cổ phiếu không hợp lệ kịp thời), giao thức sẽ vẫn hoạt động.
Nếu một nhà sản xuất khối cụ thể nhận được cổ phần không hợp lệ và sau đó không xuất hiện trong DKG để thách thức nó, họ sẽ không thể tham gia vào cùng một kỷ nguyên Tham gia tạo số ngẫu nhiên. Lưu ý rằng giao thức sẽ vẫn có hiệu lực miễn là k người tham gia trung thực khác sở hữu cổ phần của họ (bằng cách không nhận bất kỳ cổ phiếu không hợp lệ nào hoặc bằng cách thách thức kịp thời tất cả cổ phiếu không hợp lệ).
Bằng chứng
Phần cuối cùng của dấu hiệu ngẫu nhiên vẫn chưa được khám phá là cách người ta có thể chứng minh rằng giá trị được công bố H_i bằng p(i)H mà không tiết lộ p(i).
Phần cuối cùng chưa được tiết lộ của đèn hiệu ngẫu nhiên là cách chứng minh giá trị công khai H_i bằng p(i)H mà không tiết lộ p(i).
Hãy nhớ rằng các giá trị H, G, p(i)G đều được mọi người biết đến. Phép tính tính p( i) cho p(i)G và G được gọi là logarit rời rạc hay gọi tắt là dlog và điều mà mỗi người tham gia muốn chứng minh cho người khác là
dlog(p(i)G, G) = dlog(H_i, H)
Hãy nhớ rằng mọi người đều biết Giá trị H, G, p(i)G. Phép tính p(i) cho p(i)G và G được gọi là logarit rời rạc hay gọi tắt là dlog và điều mà mỗi người tham gia muốn chứng minh cho người khác là:
dlog(p(i)G, G) = dlog(H_i, H)
Không tiết lộ p(i). Các cấu trúc cho bằng chứng như vậy vẫn tồn tại, một cấu trúc như vậy được gọi là Giao thức Schnorr. Với cấu trúc như vậy, bất cứ khi nào người tham gia gửi H_i, họ cũng gửi bằng chứng về tính đúng đắn của H_i.
Không cần tiết lộ p(i), những bằng chứng như vậy có thể được xây dựng. Một ví dụ được gọi là giao thức Schnorr. Với cách xây dựng này, bất cứ khi nào người tham gia gửi H_i, họ cũng gửi bằng chứng về tính đúng đắn của H_i.
Hãy nhớ rằng đầu ra đèn hiệu ngẫu nhiên cuối cùng là giá trị nội suy của H_0. Thông tin nào cần được phân phối cùng với H_0 cho những người tham gia bên ngoài đã không tham gia vào quá trình tạo ra nó để có thể xác minh tính chính xác của nó? Vì mọi người đều có thể nội suy cục bộ G_0, một bằng chứng cho thấy
dlog(G_0, G) = dlog(H_0, H)
Hãy nhớ rằng đầu ra cuối cùng của đèn hiệu ngẫu nhiên là H_0. Thông tin nào cần được phân phối với H_0 để có thể xác minh tính chính xác của nó cho các tác nhân bên ngoài không liên quan đến việc tạo ra nó? Vì mọi người đều có thể nội suy G_0 cục bộ, hãy chứng minh:
dlog(G_0, G) = dlog(H_0, H)
Sẽ đủ, nhưng chúng tôi không thể sử dụng Giao thức Schnorr để tạo ra một bằng chứng như vậy vì nó đòi hỏi kiến thức về p(0) và đèn hiệu ngẫu nhiên dựa vào không ai biết giá trị. Vì vậy, người ta cần giữ tất cả các giá trị của H_i cùng với các bằng chứng tương ứng để chứng minh tính đúng đắn của H_0 với người quan sát bên ngoài.
Nhưng chúng ta không thể sử dụng giao thức Schnorr để rút ra bằng chứng như vậy vì nó đòi hỏi kiến thức về p(0) và đèn hiệu ngẫu nhiên dựa vào việc không ai biết giá trị của nó. Do đó, cần phải bảo toàn tất cả các giá trị của H_i cũng như bằng chứng tương ứng cho người quan sát bên ngoài rằng H_0 là đúng.
Tuy nhiên, nếu có một số thao tác giống về mặt ngữ nghĩa với phép nhân các điểm trên đường cong elip, việc chứng minh rằng H_0 được tính toán chính xác sẽ trở nên tầm thường, bởi chỉ cần xác minh rằng
H_0 × G = G_0 × H
Tuy nhiên, nếu có một số thao tác tương tự như phép nhân các điểm trên đường cong elip, chúng ta có thể chứng minh rằng H_0 được tính đúng bằng cách chứng minh phương trình sau:
H_0 × G = G_0 × H
Nếu đường cong elip được chọn hỗ trợ cái gọi là ghép nối đường cong elip , một bằng chứng như vậy trở nên khả thi. Trong trường hợp như vậy, H_0 không chỉ đóng vai trò là đầu ra của đèn hiệu ngẫu nhiên có thể được xác minh một cách tầm thường bởi bất kỳ ai biết G, H và G_0, mà còn đóng vai trò là một chữ ký đa tập thể chứng thực rằng tại ít nhất k trong số n nhà sản xuất khối đã ký tên vào khối.
Nếu đường cong elip được chọn hỗ trợ cái gọi là ghép nối đường cong elip, thì một bằng chứng trở nên khả thi. Trong trường hợp này, H_0 không chỉ có thể được sử dụng làm đầu ra của đèn hiệu ngẫu nhiên, cho phép bất kỳ ai biết G, H và G_0 dễ dàng xác minh mà còn có thể được sử dụng làm chữ ký đa tập thể để chứng minh rằng ít nhất k out trong số n nhà sản xuất khối Đã ký vào khối.
Hôm nay, chúng tôi không sử dụng các cặp đường cong elip trong NEAR, mặc dù chúng tôi có thể sử dụng chúng trong tương lai và sau đó là thủ thuật gọn gàng đã thảo luận ở trên sẽ thay thế các chữ ký riêng lẻ mà chúng ta sử dụng ngày nay. Mặt khác, DFinity sử dụng chữ ký BLS và có thể tận dụng các cặp chữ ký để làm cho nhiều chữ ký như vậy hoạt động.
Mặc dù NEAR hiện không sử dụng ghép nối đường cong elip, nhưng có thể trong tương lai nó sẽ sử dụng và các kỹ thuật được thảo luận ở trên sẽ thay thế chữ ký duy nhất mà NEAR hiện đang sử dụng. Mặt khác, DFinity sử dụng chữ ký BLS trong thiết kế của mình và có thể tận dụng các cặp đường cong elip để làm cho nhiều chữ ký hoạt động.
Kết luận mở đầu
Việc triển khai đèn hiệu ngẫu nhiên hầu như đã hoàn tất trong quá trình triển khai ứng dụng khách tham chiếu của chúng tôi (xem cam kết này), tuy nhiên, phiên bản đầu tiên của Giao thức NEAR có thể sẽ khởi chạy mà không có nó, để có thêm thời gian ổn định đèn hiệu. Một khi đã xong tuy nhiên, được vận chuyển, tất cả các hợp đồng trên NEAR sẽ có quyền truy cập vào trình tạo số ngẫu nhiên không thiên vị và không thể đoán trước, cho phép nhiều trường hợp sử dụng mà hiện nay không thể thực hiện được trên các mạng khác.
Đèn hiệu ngẫu nhiên gần như đã hoàn tất trong quá trình triển khai ứng dụng khách tham chiếu của chúng tôi nhưng có thể sẽ không được phát hành cùng với phiên bản đầu tiên của giao thức NEAR để có thêm thời gian cải thiện tính ổn định của nó. Sau khi đèn hiệu ngẫu nhiên được phát hành, tất cả các hợp đồng thông minh trên nền tảng NEAR sẽ có thể tận hưởng trình tạo số ngẫu nhiên trung lập và không thể đoán trước, điều này sẽ mang lại nhiều trường hợp sử dụng hơn hiện không thể thực hiện được trên các chuỗi khối khác.
Bản phát hành đầu tiên của Giao thức NEAR sẽ sử dụng đèn hiệu ngẫu nhiên đơn giản hơn đáng kể (xem yêu cầu kéo này), trong đó giá trị ngẫu nhiên chỉ là giá trị đầu ra của một hàm ngẫu nhiên có thể kiểm chứng trên đầu ra trước đó của đèn hiệu ngẫu nhiên của nhà sản xuất khối hiện tại. Đèn hiệu ngẫu nhiên như vậy là không thể đoán trước, nhưng không phải là không thiên vị: nhà sản xuất khối hiện tại có một chút ảnh hưởng vì họ có thể chọn không tạo khối Nó rất giống với đèn hiệu ngẫu nhiên mà Ethereum 2.0 sẽ sử dụng trước khi chúng có sẵn đèn hiệu VDF (đầu ra ngẫu nhiên là VRF do nhà sản xuất khối hiện tại trên hàm băm kỷ nguyên) và cũng là cách hoạt động của đèn hiệu ngẫu nhiên trong Elrond.
Bản phát hành đầu tiên của giao thức NEAR sẽ sử dụng đèn hiệu ngẫu nhiên đơn giản hơn, trong đó giá trị ngẫu nhiên chỉ là khối hiện tại. đầu ra trước đó của đèn hiệu ngẫu nhiên của nhà sản xuất và sau đó là giá trị đầu ra của hàm ngẫu nhiên có thể kiểm chứng. Dấu hiệu ngẫu nhiên này, mặc dù không thể đoán trước, nhưng không mang tính trung lập: nhà sản xuất khối hiện tại có tác động vì họ có thể chọn không sản xuất khối. Điều này rất giống với đèn hiệu ngẫu nhiên được Ethereum 2.0 sử dụng trước khi đèn hiệu VDF có sẵn (đầu ra ngẫu nhiên là VRF của nhà sản xuất khối hiện tại ở hàm băm kỷ nguyên) và giống như cơ chế đèn hiệu ngẫu nhiên của Elrond.
Nếu bạn quan tâm đến cách thức hoạt động của các giao thức blockchain, hãy xem Chuỗi bảng trắng của chúng tôi với NEAR, trong đó chúng tôi nói chuyện với những người sáng lập và nhà phát triển cốt lõi của các giao thức khác, chẳng hạn như Ethereum Serenity, Cosmos, Polkadot, v.v., đồng thời đi sâu vào chi tiết về công nghệ của họ. Tất cả các tập video được tập hợp một cách thuận tiện thành danh sách phát tại đây.
Nếu bạn quan tâm đến cách thức hoạt động của các giao thức chuỗi khối, hãy xem Chuỗi bảng trắng với NEAR, nơi chúng tôi sẽ nói về cách các giao thức khác như Ethereum Serenity, Cosmos, Polkadot , v.v.) và các nhà phát triển cốt lõi trò chuyện về các chi tiết kỹ thuật.
NEAR Protocol là cơ sở hạ tầng dành cho web mở và giao thức chuỗi khối phân đoạn. Bạn có thể tìm hiểu thêm về công nghệ của chúng tôi trong tài liệu thiết kế sharding của chúng tôi, thông qua các video chuyên sâu hoặc bằng cách khám phá cách triển khai ứng dụng khách tham khảo Rust của chúng tôi.
NEAR là cơ sở hạ tầng của Open Web và một khu vực phân chia Giao thức chuỗi khối. Bạn có thể tìm hiểu thêm về công nghệ của chúng tôi thông qua tài liệu thiết kế sharding, chuỗi video chuyên sâu hoặc triển khai ứng dụng khách tham khảo Rust của chúng tôi.
Tác giả Alexander Skidanov
Dịch bởi Marco, Yan Zhu
Bowen hiệu đính
Biên tập viên Amos
Liên kết nguồn: weixin.qq.com
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia
