MPCium là một MPC engine bảo mật với khả năng phục hồi cao
Mpcium là một framework hiệu năng cao viết bằng Go, triển khai các lược đồ chữ ký ngưỡng phân tán an toàn bằng tính toán đa bên (Multi-Party Computation, MPC). Khác với các hệ thống mật mã truyền thống lưu khóa riêng tư ở một nơi duy nhất, Mpcium phân tán các mảnh khóa riêng tư trên nhiều node độc lập, đòi hỏi sự phối hợp của một số lượng node đạt ngưỡng để thực hiện các thao tác mật mã như ký giao dịch.
Kiến trúc này mang lại:
- Bảo mật nâng cao: Không có điểm xâm phạm đơn lẻ
- Niềm tin phân tán: Không cần tin tưởng bất kỳ thực thể đơn lẻ nào
- Khả năng chịu lỗi: Hệ thống vẫn hoạt động ngay cả khi một số node gặp sự cố
- Bảo vệ quyền riêng tư: Không node nào sở hữu khóa hoàn chỉnh
Ở lõi mật mã, Mpcium tích hợp tss-lib, một thư viện lược đồ chữ ký ngưỡng đạt chuẩn production do Binance phát triển. Thư viện hỗ trợ:
-
ECDSA (secp256k1): Bitcoin, Ethereum, BNB, Polygon và các chuỗi L2 tương thích EVM
-
EdDSA (Ed25519): cho Solana, Polkadot, Cardano và các blockchain hiện đại khác
Tài liệu kiến trúc

Ngưỡng và node
Mpcium sử dụng lược đồ ngưỡng t-of-n để tạo và ký bằng khóa riêng tư một cách an toàn.
n= tổng số node MPC (số phần khóa)t= số node tối thiểu cần thiết để ký
Chỉ cần t trên n node tham gia, và khóa riêng tư đầy đủ không bao giờ được tái tạo.
Để duy trì bảo mật trước các node bị xâm phạm, Mpcium áp dụng:
t ≥ ⌊n / 2⌋ + 1
Ví dụ: ngưỡng 2-of-3
- ✅
node0 + node1→ ký thành công - ✅
node1 + node2→ ký thành công - ❌ chỉ
node0→ không đủ phần khóa
Điều này đảm bảo:
- Không có điểm xâm phạm đơn lẻ
- Khả năng chịu lỗi khi một số node ngừng hoạt động
- Bảo mật có thể cấu hình bằng cách điều chỉnh
tvàn
Kiến trúc
Tổng quan
Mỗi node Mpcium:
- Giữ một phần khóa trong kho lưu trữ cục bộ được mã hóa AES-256 (qua Badger KV)
- Tham gia ký ngưỡng bằng
tss-lib - Giao tiếp qua một lớp nhắn tin có khả năng phục hồi sử dụng NATS
- Tự đăng ký với Consul để khám phá dịch vụ và kiểm tra tình trạng
- Xác minh thông điệp đến bằng xác thực lẫn nhau dựa trên Ed25519
Luồng thông điệp và xác minh chữ ký
- Một yêu cầu ký được phát tới cụm MPC thông qua NATS dưới dạng một sự kiện đã xác thực. Mỗi node xác minh chữ ký Ed25519 của bên gửi trước khi xử lý yêu cầu.
- NATS phát yêu cầu tới các node MPC.
- Mỗi node tham gia xác minh:
- Chữ ký của bên gửi (Ed25519)
- Tính xác thực của thông điệp (không thể phát lại, phiên duy nhất)
- Nếu node hoạt động bình thường và nằm trong quorum (
t), node sẽ:- Tính chữ ký từng phần bằng phần khóa của mình
- Công bố kết quả trở lại qua NATS
- Khi nhận đủ
tchữ ký từng phần, chúng được tổng hợp thành một chữ ký đầy đủ.
Đặc tính
- Không có điểm xâm phạm đơn lẻ: Khóa không bao giờ được ghép lại đầy đủ
- Chịu lỗi Byzantine: Chỉ cần
ttrênnnode để tiếp tục - Có khả năng mở rộng và tích hợp linh hoạt: Dễ dàng mở rộng cụm hoặc tích hợp thêm công cụ
- Xác thực peer an toàn: Mọi thông điệp giữa các node đều được ký và xác minh bằng Ed25519
Cài đặt và chạy
Xem trước cách sử dụng
Khởi động các node
$ mpcium start -n node0
$ mpcium start -n node1
$ mpcium start -n node2
Các bản triển khai client
- Go: Có sẵn trong thư mục
pkg/client. Xem thư mụcexamplesđể tham khảo các ví dụ sử dụng. - TypeScript: Có sẵn tại github.com/fystack/mpcium-client-ts
Client
import (
"github.com/fystack/mpcium/client"
"github.com/nats-io/nats.go"
)
func main () {
natsConn, err := nats.Connect(natsURL)
if err != nil {
logger.Fatal("Failed to connect to NATS", err)
}
defer natsConn.Close()
mpcClient := client.NewMPCClient(client.Options{
NatsConn: natsConn,
KeyPath: "./event_initiator.key",
})
err = mpcClient.OnWalletCreationResult(func(event mpc.KeygenSuccessEvent) {
logger.Info("Received wallet creation result", "event", event)
})
if err != nil {
logger.Fatal("Failed to subscribe to wallet-creation results", err)
}
walletID := uuid.New().String()
if err := mpcClient.CreateWallet(walletID); err != nil {
logger.Fatal("CreateWallet failed", err)
}
logger.Info("CreateWallet sent, awaiting result...", "walletID", walletID)
}