Oracle ngẫu nhiên dựa trên chữ ký số trong blockchain

Từ ý tưởng đến triển khai: chúng tôi sửa đổi sơ đồ chữ ký số đường cong elip hiện có để nó mang tính xác định và dựa vào đó, chúng tôi cung cấp các hàm để lấy các số giả ngẫu nhiên có thể xác minh được trong chuỗi khối.

Oracle ngẫu nhiên dựa trên chữ ký số trong blockchain

Ý tưởng

Vào mùa thu năm 2018, chuỗi khối Waves đã bao gồm hợp đồng thông minh đầu tiên được kích hoạt, câu hỏi ngay lập tức nảy sinh về khả năng có được số giả ngẫu nhiênbạn có thể tin tưởng.

Băn khoăn về câu hỏi này, cuối cùng tôi đã đi đến kết luận: bất kỳ blockchain nào cũng là một tế bào; không thể có được nguồn entropy đáng tin cậy trong một hệ thống khép kín.

Nhưng tôi vẫn thích một ý tưởng: nếu lời tiên tri ngẫu nhiên sẽ ký dữ liệu người dùng bằng thuật toán xác định, sau đó người dùng sẽ luôn có thể xác minh chữ ký đó bằng khóa chung và sẽ chắc chắn rằng giá trị kết quả là duy nhất. Nhà tiên tri dù muốn thế nào cũng không thể thay đổi được điều gì, thuật toán tạo ra một kết quả rõ ràng. Về cơ bản, người dùng ghi lại kết quả nhưng không biết cho đến khi nhà tiên tri công bố nó. Hóa ra bạn không thể tin tưởng vào lời tiên tri chút nào mà hãy kiểm tra kết quả công việc của nó. Sau đó, trong trường hợp xác minh thành công, chữ ký như vậy có thể được coi là nguồn entropy cho số giả ngẫu nhiên.

Nền tảng chuỗi khối Waves sử dụng sơ đồ chữ ký EdDSA tùy chọn Ed25519. Trong sơ đồ này, chữ ký bao gồm các giá trị R và S, trong đó R phụ thuộc vào một giá trị ngẫu nhiên và S được tính dựa trên thông báo được ký, khóa riêng và cùng số ngẫu nhiên với R. Hóa ra là không có sự phụ thuộc duy nhất cho cùng một chữ ký. Có nhiều chữ ký hợp lệ cho một tin nhắn của người dùng.

Rõ ràng, ở dạng thuần túy, chữ ký như vậy không thể được sử dụng làm nguồn của các số giả ngẫu nhiên, vì nó không mang tính xác định và do đó, có thể dễ dàng bị nhà tiên tri thao túng.

Nhưng hóa ra, thực sự có thể làm cho nó mang tính quyết định.

Tôi đã có những hy vọng lớn lao cho hàm ngẫu nhiên có thể kiểm chứng (VRF), nhưng sau khi nghiên cứu phần cứng, tôi phải bỏ phương án này. Mặc dù VRF cung cấp một phiên bản xác định của chữ ký và bằng chứng của nó, nhưng có một vị trí kỳ lạ trong thuật toán mở ra một lỗ đen để thao túng lời tiên tri. Cụ thể, khi tính giá trị của k (phần 5.1) một khóa riêng được sử dụng, người dùng vẫn chưa biết, điều đó có nghĩa là người dùng không thể xác minh tính đúng đắn của phép tính k, điều đó có nghĩa là nhà tiên tri có thể sử dụng bất kỳ giá trị nào của k mà nó cần và đồng thời duy trì cơ sở dữ liệu tương ứng của k và dữ liệu đã ký để luôn có thể tính lại kết quả đúng theo quan điểm của VRF. Nếu bạn nhìn thấy một bản vẽ dựa trên VRF mà không tiết lộ khóa riêng, bạn có thể thông minh: cho biết cần phải tiết lộ khóa hoặc loại nó khỏi phép tính k, khi đó khóa riêng sẽ tự động hiển thị khi chữ ký đầu tiên xuất hiện . Nói chung, như đã đề cập, một kế hoạch kỳ lạ cho một nhà tiên tri ngẫu nhiên.

Sau một chút suy nghĩ và tranh thủ sự hỗ trợ của các nhà phân tích địa phương, kế hoạch làm việc của VECRO đã ra đời.

VECRO là tên viết tắt của Verificable Elliptic Curve Random Oracle, trong tiếng Nga có nghĩa là lời tiên tri ngẫu nhiên có thể kiểm chứng trên các đường cong elip.

Mọi thứ hóa ra khá đơn giản; để đạt được tính tất định, bạn cần sửa giá trị của R trước khi thông báo được ký xuất hiện. Nếu R được cam kết và là một phần của thông báo đang được ký, điều này đảm bảo hơn nữa rằng R được cam kết trong thông báo được ký, thì giá trị của S được xác định duy nhất bởi thông báo của người dùng và do đó có thể được sử dụng làm nguồn cho các số giả ngẫu nhiên.

Trong sơ đồ như vậy, việc R cố định như thế nào không quan trọng; đây vẫn là trách nhiệm của nhà tiên tri. Điều quan trọng là S được xác định duy nhất bởi người dùng, nhưng giá trị của nó không được biết cho đến khi nhà tiên tri công bố nó. Tất cả mọi thứ chúng tôi muốn!

Nói về R cố định, lưu ý rằng R tái sử dụng khi ký các tin nhắn khác nhau, nó sẽ tiết lộ duy nhất khóa riêng trong sơ đồ EdDSA. Điều cực kỳ quan trọng đối với chủ sở hữu oracle là loại bỏ khả năng sử dụng lại R để ký các tin nhắn khác nhau của người dùng. Nghĩa là, với bất kỳ sự thao túng hoặc thông đồng nào, oracle sẽ luôn có nguy cơ mất khóa riêng của mình.

Tổng cộng, oracle phải cung cấp cho người dùng hai chức năng: khởi tạo, cố định giá trị R và chữ ký, trả về giá trị S. Trong trường hợp này, cặp R, S là chữ ký có thể kiểm chứng thông thường của một thông báo người dùng chứa một giá trị cố định. giá trị R và dữ liệu người dùng tùy ý.

Có thể lập luận rằng sơ đồ này dành cho blockchain không gì khác hơn là bình thường lược đồ mở rộng cam kết. Về cơ bản thì đúng là cô ấy. Nhưng có một số sắc thái. Thứ nhất, oracle luôn hoạt động với cùng một khóa trong mọi hoạt động, ví dụ, điều này rất thuận tiện khi sử dụng trong các hợp đồng. Thứ hai, có nguy cơ oracle mất khóa riêng nếu nó hoạt động không chính xác, ví dụ: oracle cho phép bạn tạo mẫu kết quả, sau đó chỉ cần thực hiện hai lần kiểm tra để tìm ra khóa riêng và lấy đầy đủ truy cập vào ví. Thứ ba, một chữ ký vốn có thể được xác minh trên blockchain và là nguồn ngẫu nhiên thì phải đẹp.

Trong sáu tháng, ý tưởng thực hiện nung nấu trong đầu tôi cho đến khi động lực cuối cùng xuất hiện dưới hình thức tài trợ từ Waves Labs. Khoản tài trợ lớn đi kèm với trách nhiệm lớn, vì vậy dự án sẽ ở đó!

Thực hiện

Vì vậy, trong dự án này VECRO đã được triển khai trên chuỗi khối Waves ở chế độ phản hồi yêu cầu bằng cách sử dụng các giao dịch chuyển giao giữa người dùng và nhà tiên tri. Đồng thời, một tập lệnh được cài đặt trên tài khoản oracle để kiểm soát công việc theo đúng logic được mô tả ở trên. Các giao dịch của Oracle được xác minh và toàn bộ chuỗi tương tác của người dùng được khôi phục. Tất cả bốn giao dịch đều liên quan đến việc xác minh giá trị cuối cùng; hợp đồng thông minh xâu chuỗi chúng lại với nhau bằng một chuỗi xác minh nghiêm ngặt, kiểm tra tất cả các giá trị từng bước và không có chỗ cho bất kỳ thao tác nào.

Một lần nữa, hãy đặt nó sang một bên và làm cho nó rõ ràng hơn. Nhà tiên tri không chỉ hoạt động theo sơ đồ đề xuất. Công việc của nó được kiểm soát hoàn toàn ở cấp độ blockchain bởi cơ quan đã được thiết lập. chặt chẽ với hợp đồng thông minh. Bước sang bên trái và giao dịch sẽ không được thực hiện. Vì vậy, nếu một giao dịch được đưa vào blockchain, người dùng thậm chí không cần phải kiểm tra bất cứ điều gì; hàng trăm nút mạng đã kiểm tra mọi thứ cho anh ta.

Hiện tại, có một VECRO chạy trên mạng chính Waves (bạn có thể chạy mạng riêng của mình, không khó, chỉ cần hãy xem ví dụ cấu hình). Mã hiện tại chạy bằng PHP (trên SóngKit, về cái gì tôi đã nói với bạn sớm hơn).

Để sử dụng dịch vụ oracle bạn phải:

  • Sửa R;
    • Gửi ít nhất 0.005 Waves tới bí danh oracle init@vecr;
    • Nhận mã R trong trường đính kèm khi chuyển 1 mã thông báo R-vecr từ oracle tới người dùng;
  • Lấy chữ ký;
    • Gửi ít nhất 0.005 Waves tới bí danh oracle Random@vecr và PHẢI cho biết mã R đã nhận trước đó và dữ liệu người dùng bổ sung trong trường đính kèm;
    • Nhận mã S trong trường đính kèm khi chuyển 1 mã thông báo S-vecr từ oracle tới người dùng;
  • Sử dụng mã S làm nguồn số giả ngẫu nhiên.

Các sắc thái của việc thực hiện hiện tại:

  • Các Wave được gửi tới oracle được sử dụng như một khoản hoa hồng cho giao dịch hoàn trả cho người dùng, tối đa là 1 Wave;
  • Mã R là sự kết hợp của một byte ký tự 'R' và giá trị R được mã hóa base32 58 byte;
  • Mã R trong tệp đính kèm phải ở đầu tiên, dữ liệu người dùng ở sau mã R;
  • Mã S là sự kết hợp của một byte ký tự 'S' và giá trị được mã hóa base32 58 byte của S;
  • S là kết quả của phép chia modulo, do đó bạn không thể sử dụng S làm số giả ngẫu nhiên 256 bit đầy đủ (số này có thể được coi là tối đa là số giả ngẫu nhiên 252 bit);
  • Tùy chọn đơn giản nhất là sử dụng hàm băm mã S làm số giả ngẫu nhiên.

Ví dụ về nhận S-code:

Từ quan điểm kỹ thuật, oracle đã hoàn toàn sẵn sàng hoạt động, bạn có thể sử dụng nó một cách an toàn. Từ quan điểm sử dụng của người dùng bình thường, thiếu giao diện đồ họa thuận tiện, điều này sẽ phải chờ.

Tôi sẽ vui lòng trả lời các câu hỏi và chấp nhận ý kiến, cảm ơn bạn.

Nguồn: www.habr.com

Thêm một lời nhận xét