Skip to content

Proposal: Preventing Forged Keygen/Sign result #78

@anhthii

Description

@anhthii

Executive Summary

This proposal suggests implementing cryptographic authentication for MPC result events as a security improvement to strengthen the overall authentication model in the mpcium system. While the current system has robust input authentication, adding result authentication would provide end-to-end verification and improve the security posture.

Current State Analysis

The mpcium system currently has strong authentication for input messages but lacks authentication for result events:

Input Authentication (Well-Protected): All incoming MPC requests use the InitiatorMessage interface with Ed25519 signature verification client.go:224-241 .

Output Events (Improvement Opportunity): Result events are published without cryptographic signatures:

Key generation results are composed and published directly event_consumer.go:218-237
Signing results follow the same pattern `sign.go:11-25

Security Enhancement Opportunity

While not a critical vulnerability, adding result authentication would provide:

  • Enhanced Integrity: Cryptographic proof that results originated from legitimate nodes
  • Improved Traceability: Clear attribution of results to specific nodes
  • Defense in Depth: Additional security layer complementing existing protections
  • Consistency: Uniform authentication model across all message types

Proposed implementation

type KeygenResultEvent struct {
	WalletID    string `json:"wallet_id"`
	ECDSAPubKey []byte `json:"ecdsa_pub_key"`
	EDDSAPubKey []byte `json:"eddsa_pub_key"`

	ResultType  ResultType `json:"result_type"`
	ErrorReason string     `json:"error_reason"`
	ErrorCode   string     `json:"error_code"`

       	NodeID       string     `json:"node_id"`       // Unique ID of the node (e.g., pubkey hash)
	Signature      []byte     `json:"signature"`       // Signature over canonical serialized event
	SignatureAlgo  string     `json:"signature_algo"`  // e.g., "ed25519"
}

Potential Timestamp + Expiry Check (Optional) to avoid replay protection


Timestamp int64 `json:"timestamp"` // Unix epoch seconds

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions