Các nguyên tắc bảo mật cốt lõi của Mpcium

Mpcium triển khai lược đồ chữ ký ngưỡng cùng các thực hành bảo mật theo tiêu chuẩn ngành để bảo vệ các thao tác mật mã:

  1. Niềm tin phân tán: Không một thực thể đơn lẻ nào nắm giữ toàn bộ khóa riêng tư
  2. Mật mã ngưỡng: Cần t+1 node tham gia vào các thao tác ký
  3. Xác minh đầu cuối: Mọi giao tiếp đều được ký và xác minh
  4. Phòng thủ nhiều lớp: Nhiều lớp mã hóa và xác minh

Định danh và xác thực

Quản lý định danh node

  • Cặp khóa Ed25519: Mỗi node sở hữu một cặp khóa Ed25519 duy nhất làm định danh
  • Tạo định danh: Tạo định danh an toàn bằng lệnh generate-identity:
    go run cmd/mpcium-cli/main.go generate-identity --node=node0 --peers=peers.json --encrypt
    
  • Theo dõi metadata: Mỗi định danh bao gồm thông tin tạo, chi tiết máy và dấu thời gian
  • Xác minh định danh: Mọi thao tác đều yêu cầu bằng chứng mật mã về định danh

Xác thực message

Mọi message trong mạng Mpcium đều trải qua quá trình xác minh nghiêm ngặt:

// Messages are signed before transmission
signature, err := s.identityStore.SignMessage(&tssMsg)
if err != nil {
    s.ErrCh <- fmt.Errorf("failed to sign message: %w", err)
    return
}
tssMsg.Signature = signature

// Messages are verified upon receipt
if !s.verifyMessageSignature(message) {
    return fmt.Errorf("invalid message signature")
}
  • Chữ ký tất định: Message được chuẩn hóa trước khi ký để đảm bảo tính nhất quán
  • Xác minh Party ID: Giao thức TSS đảm bảo mọi node tham gia đều có định danh hợp lệ
  • Xác minh chữ ký: Mọi message đến đều được xác minh chữ ký trước khi xử lý

Công nghệ mã hóa

Mã hóa khóa riêng tư

Khóa riêng tư được bảo vệ bằng nhiều cơ chế:

  1. Mã hóa Age:

    • Công cụ mã hóa tệp hiện đại dựa trên X25519
    • Dẫn xuất khóa Scrypt cho mã hóa dựa trên mật khẩu
    • Mã hóa có xác thực, đảm bảo khả năng chống giả mạo
    # Decrypt private key for use
    age --decrypt -o event_initiator.key event_initiator.key.age
    
  2. Yêu cầu về mật khẩu:

    • Được tạo với entropy cao:
      < /dev/urandom tr -dc 'A-Za-z0-9!@#$^&\*()-\_=+[]{}|;:,.<>?/~' | head -c 16; echo
      
    • Người dùng được yêu cầu nhập mật khẩu qua các phương thức nhập an toàn, không hiển thị lên màn hình

Mã hóa lưu trữ cục bộ

Mọi dữ liệu nhạy cảm cục bộ trên node đều được mã hóa:

// BadgerDB with mandatory encryption
	badgerKv, err := kvstore.NewBadgerKVStore(
		dbPath,
		[]byte(viper.GetString("badger_password")),
	)
  • Báo lỗi khi thiếu khóa: Hệ thống từ chối khởi động nếu không được cung cấp khóa mã hóa
  • Chỉ mục được mã hóa: Cả dữ liệu và metadata đều được mã hóa
  • Nén ZSTD: Dữ liệu được nén trước khi mã hóa để tăng hiệu quả

Bảo mật mạng

Triển khai TLS

Mọi giao tiếp trong môi trường production đều sử dụng TLS:

nats:
  url: tls://127.0.0.1:4222 # Required TLS for production
  username: ""
  password: ""

consul:
  address: https://consul.example.com # Required HTTPS for production
  • Xác minh chứng chỉ: Các kết nối Consul và NATS đều xác minh chứng chỉ máy chủ
  • Mutual TLS: Cả client và server đều xác thực lẫn nhau
  • Bộ mã hóa mạnh: Chỉ sử dụng các cipher suite hiện đại và an toàn

Kiến trúc nhắn tin an toàn

Hạ tầng nhắn tin NATS cung cấp:

  • Cô lập topic: Mỗi phiên sử dụng các topic riêng biệt
  • Nhắn tin trực tiếp: Giao tiếp an toàn điểm-điểm
  • Độ bền JetStream: Các message quan trọng được lưu trữ bền vững kèm mã hóa
  • Quản lý hàng đợi: Xử lý hàng đợi phân tán có xác thực

Bảo mật giao thức chữ ký ngưỡng

Tính toán đa bên

Triển khai chữ ký ngưỡng bao gồm:

  • Chia sẻ lại khóa (Key Resharing): Hỗ trợ xoay vòng khóa trong khi vẫn giữ nguyên khóa công khai
  • Ngưỡng linh hoạt: Ngưỡng có thể cấu hình theo yêu cầu bảo mật
  • Xác minh giao thức: Message bao gồm thông tin xác minh vòng và giao thức

Bảo mật phiên

Mỗi phiên ký hoặc tạo khóa đều triển khai:

  • Cô lập phiên: Định danh duy nhất ngăn chặn sự can thiệp giữa các phiên
  • Xử lý hết thời gian chờ: Phiên sẽ hết hạn nếu không hoàn thành trong khoảng thời gian quy định
  • Lan truyền lỗi: Xử lý lỗi an toàn để tránh rò rỉ thông tin
  • Xác minh vòng: Mỗi vòng giao thức đều kiểm tra các đầu vào mong đợi

Bảo mật vận hành

Phân bố node

  • Triển khai các node trên nhiều:
    • Nhà cung cấp đám mây
    • Khu vực địa lý
    • Phân đoạn mạng
    • Miền quản trị

Quản lý khóa

  • Tách biệt vật liệu khóa: Lưu khóa đã mã hóa tách biệt với mật khẩu
  • Bảo mật phần cứng: Cân nhắc tích hợp HSM cho các triển khai production
  • Xoay vòng khóa: Thiết lập quy trình xoay vòng khóa định kỳ
  • Bảo mật bản sao lưu: Duy trì các bản sao lưu an toàn, được mã hóa cho mọi vật liệu khóa

Tăng cường bảo mật mạng

  • Quy tắc tường lửa: Chỉ cho phép giao tiếp qua các cổng cần thiết
  • Danh sách IP cho phép: Giới hạn kết nối từ các địa chỉ IP đã biết
  • Chống DDoS: Triển khai giảm thiểu DDoS cho các thành phần công khai
  • Giám sát mạng: Theo dõi các mẫu lưu lượng bất thường

Bảo mật liên tục

  • Quét dependency: Thường xuyên quét và cập nhật các dependency
  • Kiểm thử xâm nhập: Thực hiện đánh giá bảo mật định kỳ
  • Ghi nhật ký kiểm toán: Duy trì nhật ký kiểm toán đầy đủ cho mọi thao tác
  • Ứng phó sự cố: Xây dựng và diễn tập quy trình ứng phó sự cố bảo mật