Đối với dự án mà tôi đã đề cập trong chủ đề này, tôi đang xây dựng một mạng lưới các nút sẽ giao tiếp với nhau thông qua gRPC. Tôi sẽ sử dụng SSL/TLS (thực tế là mTLS) không chỉ để mã hóa mà quan trọng nhất là để xác thực, để mỗi nút biết chính xác nút nào nó đang nói chuyện, hay đúng hơn là khóa công khai/địa chỉ ví của đối tác. Tất nhiên, một dự án phi tập trung hoàn toàn không thể có bất kỳ thành phần trung tâm nào, vì vậy sẽ không có các cơ quan chứng nhận nào và tất cả các chứng chỉ SSL sẽ được tự ký.
Bây giờ, đây là vấn đề. Về nguyên tắc, một chứng chỉ tự ký chứng minh quyền sở hữu của khóa riêng, vì vậy tôi có thể đơn giản sử dụng cùng một cặp khóa cho cả ví và chứng chỉ tự ký, theo cách đó đối tác biết chính xác ví nào nó đang nói chuyện, mặc dù chứng chỉ là tự ký. Tuy nhiên, tôi gần như chắc chắn sẽ sử dụng sơ đồ chữ ký Schnorr trên đường cong Pallas cho các ví của mình (hãy thoải mái hỏi tại sao), và thật không may SSL không hỗ trợ cả hai.
Giải Pháp Khả Thi
Như bạn có thể thấy trong cùng chủ đề, tôi đã bắt đầu học về mật mã đường cong elliptic và sơ đồ Schnorr. Và tôi đã học được rằng việc suy ra khóa độc lập với sơ đồ chữ ký, nó chỉ phụ thuộc vào đường cong cụ thể. Vì vậy điều đó đã cho tôi một ý tưởng: liệu tôi có thể sử dụng cùng một vô hướng khóa riêng cho cả ví và chứng chỉ tự ký, và sau đó bằng cách nào đó chứng minh rằng hai khóa công khai kết quả (khóa công khai Ed25519 của chứng chỉ và khóa công khai Pallas của ví) được tương quan và chia sẻ cùng một khóa riêng?
Có vẻ như tôi có thể đến gần với điều đó. Và tôi sẽ phải triển khai một phần khá lớn mật mã tùy chỉnh, điều này có thể là một rủi ro nhưng vẫn đáng theo đuổi theo ý kiến của tôi.
Ngoài các trường thông thường, chứng chỉ mTLS của tôi cũng sẽ chứa:
- khóa Pallas công khai của ví của nút,
- một bằng chứng không tri thức để thuyết phục đối tác rằng khóa công khai Ed25519 và khóa công khai Pallas được tương quan mà không tiết lộ khóa riêng.
Cái sau cơ bản là một chữ ký kiểu "kép" Schnorr được tính toán trên cả hai đường cong (25519 và Pallas). Nếu chữ ký kiểm tra được trên cả hai đường cong với cả hai khóa công khai thì đối tác sẽ được thuyết phục.
Một khía cạnh cần chú ý là vô hướng khóa riêng phải hợp lệ trong các trường của cả hai đường cong, vì vậy nó phải nghiêm ngặt nhỏ hơn min(n_{25519}, n_{Pallas})min(n25519,nPallas) với n_CnC là thứ tự trường vô hướng của đường cong CC (không được nhầm lẫn với thứ tự trường cơ sở). Điều đó dường như không phải là vấn đề vì cả hai đường cong đều có thứ tự trường vô hướng ở mức 2^{25something}225something (2^{252}2252 cho 25519 và 2^{255}2255 cho Pallas, có vẻ như vậy).



