Chuỗi chứng chỉ - Certificate Chain
Giao thức Mithril có thể được tóm tắt là:
Một giao thức cho phép các bên liên quan trong mạng blockchain Proof-of-Stake ký riêng lẻ các thông điệp được tổng hợp thành một đa chữ ký, đảm bảo rằng chúng đại diện cho một phần tối thiểu trong tổng số tiền đặt cọc.
Phân phối cổ phần được sử dụng để tạo đa chữ ký không thể tin cậy "nguyên trạng" và cũng phải được ký. Thật vậy, bất kỳ ai cũng có thể tương đối dễ dàng tạo Phân phối cổ phần giả và sử dụng nó để tạo ra một chữ ký đa hợp lệ sẽ được nhúng trong Giấy chứng nhận hoàn toàn hợp lệ nhưng không chính hãng. Chứng chỉ này có thể được cung cấp bởi một nút Mithril Aggregator không trung thực và do đó có thể dẫn đến việc khôi phục ảnh chụp nhanh không chính hãng bởi một Mithril Client trung thực.
Để tránh kiểu tấn công nhật thực này, việc phân phối cổ phần được sử dụng để tạo đa chữ ký phải được chứng nhận trước. Đây là nơi diễn ra Chuỗi chứng chỉ.
Cảnh báo
Phân phối cổ phần của một kỷ nguyên được tính toán bởi các Node Cardano vào cuối kỷ nguyên này. Nó sẽ có thể sử dụng được từ đầu kỷ nguyên sau.
Một cách để xác nhận phân phối cổ phần được sử dụng để tạo đa chữ ký là xác minh rằng nó đã được ký trước đó trong một chứng chỉ trước đó. Sau đó, người ta có thể xác minh một cách đệ quy rằng chứng chỉ trước đó là hợp lệ theo cùng một cách. Quy trình này có thể được thiết kế như một Chuỗi chứng chỉ: Chuỗi chứng chỉ Mithril .
Vì nhiều chứng chỉ có thể được tạo trong cùng một kỷ nguyên epoch (tức là với cùng một phân phối cổ phần), chỉ cần liên kết với một chứng chỉ của kỷ nguyên trước là đủ: điều này sẽ cho phép thời gian xác minh nhanh hơn và nó cũng sẽ tránh tắc nghẽn mạng.
Ngoài ra, chứng chỉ ở đầu Chuỗi chứng chỉ có một vai trò đặc biệt. Đây là Giấy chứng nhận Genesis. Cách duy nhất để xác thực bản phân phối cổ phần được nhúng trong Chứng chỉ Genesis là ký nó bằng một khóa cá nhân được liên kết với một khóa công khai có sẵn rộng rãi: Khóa Genesis. Đây là những chìa khóa ký hiệu các hard fork được sử dụng trong quá trình chuyển đổi kỷ nguyên của Cardano Blockchain.
Đây là sơ đồ minh họa thiết kế Chuỗi chứng chỉ :

Trường hợp các ký hiệu sau đã được sử dụng:
C(p,n): Chứng chỉ lúc kích hoạtpvà kỷ nguyênnFC(n): Chứng chỉ kỷ nguyên đầu tiênnGC: Chứng chỉ GenesisH(): hàm băm hashSD(n): Phân phối cổ phần của kỷ nguyênnVK(n): Khóa xác minh tại epochnAVK(n): Khóa xác minh tích hợp tại thời điểmnchẳng hạn nhưAVK(n) = MKT_ROOT(SD(n) || VK(n))MKT_ROOT(): Merkle-tree rootBEACON(p,n): Báo hiệu lúc kích hoạtpvà kỷ nguyênnMETADATA(p,n): Siêu dữ liệu của chứng chỉ lúc kích hoạtpvà kỷ nguyênnMSG(p,n): Thông báo của chứng chỉ lúc kích hoạtpvà kỷ nguyênnMULTI_SIG(p,n): Đã tạo nhiều chữ ký cho tin nhắnH(MSG(p,n) || AVK(n-1))GENESIS_SIG(MSG): Chữ ký Genesis, tức là chữ kýMSGbằng các Chìa khóa Genesis
Hàm băm của một Chứng chỉ H(C(p,n)) được tính như là phép nối ( ||) của tất cả các trường của nó. Do đó, nếu một trường được sửa đổi, hàm băm của nó sẽ khác.
Thông tin được nhúng trong METADATA(p,n)trường là:
Phiên bản của Giao thức Mithril
Tham số của Giao thức Mithril (
k,mvàphi_f)Ngày và giờ bắt đầu tạo nhiều chữ ký
Ngày và giờ chứng chỉ được niêm phong
Danh sách những người ký đã đóng góp tích cực cho đa chữ ký
Thông báo MSG(p,n)là một bản đồ của nhiều giá trị được liên kết với các khóa tương ứng của chúng và cung cấp một cách để thêm nhiều thông tin hơn trong chứng chỉ mà không phá vỡ chính chuỗi. Đây có thể là bất kỳ thông điệp nào mà người ký có thể tính toán một cách xác định nhờ sự đồng thuận của Cardano: ảnh chụp nhanh tệp không thể thay đổi, bộ Utxo, phân phối stahe, ...
Xác minh Chuỗi chứng chỉ có thể được nêu như sau:
Trường hợp các ký hiệu sau đã được sử dụng:
Kỷ nguyên
n(p)phụ thuộc vào trình kích hoạtpCHAIN_VERIFY[]: Xác minh tất cả các chuỗi ngược lại từ một chứng chỉCERT_VERIFY[]: Xác minh một chứng chỉ cụ thể
Chuỗi chứng chỉ hợp lệ nếu từ một Chứng chỉ, cho đến Chứng chỉ Genesis của chuỗi có ít nhất một chứng chỉ hợp lệ cho mỗi kỷ nguyên.
Chứng chỉ không phải Genesis là hợp lệ nếu và chỉ khi được AVKsử dụng để xác minh đa chữ ký cũng là một phần của thông điệp đã ký được sử dụng để tạo đa chữ ký hợp lệ trong Chứng chỉ đã được niêm phong trước đó.
Chứng chỉ Genesis hợp lệ nếu và chỉ khi Chữ ký Genesis của nó được xác minh bằng Khoá Genesis Công khai được quảng cáo .
Việc triển khai thuật toán sẽ hoạt động như sau đối với chứng chỉ:
Bước 1 : Sử dụng chứng chỉ này làm
current_certificateBước 2 : Xác minh (hoặc không thành công) rằng
current_hashcủa chứng chỉcurrent_certificatelà hợp lệ (bằng cách tính toán nó và so sánh vớihashtrường của chứng chỉ)Bước 3 : Nhận giá
previous_hashtrịprevious_certificatebằng cách đọc giá trị của nó trongcurrent_certificateBước 4 : Xác minh (hoặc không thành công) rằng cái
multi_signaturetrong số đócurrent_certificatelà hợp lệBước 5 : Truy xuất
previous_certificatemã có hàm bămprevious_hash:Bước 5.1 : Nếu nó không phải là
genesis_certificate:Bước 5.1.1 : Xác minh (hoặc không thành công) rằng
previous_hashcủa chứng chỉprevious_certificatelà hợp lệ (bằng cách tính toán nó và so sánh vớihashtrường của chứng chỉ)Bước 5.1.2 : Xác minh
current_avkBước 5.1.2.1 : Nếu
current_certificatelàfirst_certificatecủa kỷ nguyên, hãy xác minh (hoặc không thành công) rằngcurrent_avkcủa kỷ nguyên đócurrent_certificatelà một phần của thông báo được ký bởi chữ ký đaprevious_certificateBước 5.1.2.2 : Khác xác minh (hoặc không thành công) rằng cái
current_avkcủacurrent_certificatecái giống với cáicurrent_avkcủa cáiprevious_certificate
Bước 5.1.3 : Xác minh (hoặc không thành công) rằng cái
multi_signaturetrong số đóprevious_certificatelà hợp lệBước 5.1.4 : Sử dụng
previous_certificateascurrent_certificatevà bắt đầu lại ở Bước 2
Bước 5.2 : Nếu là
genesis_certificate:Bước 5.2.1 : Xác minh (hoặc không thành công) rằng
previous_hashcủa chứng chỉprevious_certificatelà hợp lệ (bằng cách tính toán nó và so sánh vớihashtrường của chứng chỉ)Bước 5.2.2 : Xác minh (hoặc không thành công) rằng phần
current_avktrong số đócurrent_certificatelà một phần của thông báo được ký bởi chữ ký ban đầu củaprevious_certificateBước 5.2.3 : Chứng chỉ hợp lệ (Thành công)
Điều gì sẽ xảy ra nếu một số Mithril Aggregator tuyên bố rằng không nhận được đủ chữ ký? Điều này không thực sự quan trọng, vì sẽ có một Mithril Aggregator khác sẽ thu thập đủ chữ ký và tổng hợp chúng thành một Chứng chỉ hợp lệ.
Tương tự như vậy, các Mithril Aggregators khác nhau có thể có các chế độ xem khác nhau về các chữ ký cá nhân được gửi (một trình tổng hợp có thể nhận được 10 chữ ký và một trình tổng hợp khác có thể nhận được 11), điều này sẽ dẫn đến các Chứng chỉ khác nhau ký cùng một thông báo.
Điều này sẽ dẫn đến các Chuỗi chứng chỉ khác nhau , tất cả sẽ liên kết lại với Chứng chỉ Genesis. Thật vậy, chúng sẽ được đại diện bởi một cây chứng chỉ trong đó mỗi đường đi ngang từ gốc đến lá đại diện cho một Chuỗi chứng chỉ hợp lệ.
Chuỗi chứng chỉ được thiết kế để tồn tại lâu dài. Tại một thời điểm nhất định, chúng tôi sẽ cần xử lý việc xác minh đa chữ ký từ các phiên bản kế thừa của thư viện mật mã Mithril .
Để đạt được khả năng tương thích ngược này, một số tùy chọn có sẵn:
Xử lý các chức năng xác minh nhiều chữ ký của các phiên bản kế thừa
Tạo lại Chứng chỉ Genesis theo thời gian
Tạo chứng chỉ cột mốc Milestones Certificates trung gian (với cả chữ ký đa và chữ ký gốc)
Thiết kế một thuật toán di chuyển định dạng
Last updated