Instalar Mpcium

Esta guía te acompaña en el proceso de instalar y configurar nodos de MPCIUM en tu entorno.

Requisitos previos

Antes de comenzar, asegúrate de tener:

  • Go 1.23+ instalado: instala Go aquí
  • Un servidor NATS en ejecución
  • Un servidor Consul en ejecución

Clonar e instalar Mpcium

Clona el repositorio

git clone https://github.com/fystack/mpcium.git
cd mpcium

Compila el proyecto

Con Make:

make

O con Go:

go install ./cmd/mpcium
go install ./cmd/mpcium-cli

Comandos disponibles

  • mpcium: inicia un nodo de MPCium
  • mpcium-cli: utilidad de CLI para configurar peers, identidades e iniciadores

Ejecutar NATS y Consul (solo para desarrollo)

⚠️ Esta configuración no es segura y solo debe usarse para desarrollo. Para producción, usa un entorno de clúster seguro con certificados TLS.

Configuración de Docker Compose

Crea un archivo docker-compose.yaml:

version: "3"

services:
  nats-server:
    image: nats:latest
    container_name: nats-server
    command: -js --http_port 8222
    ports:
      - "4222:4222"
      - "8222:8222"
      - "6222:6222"
    tty: true
    restart: always

  consul:
    image: consul:1.15.4
    container_name: consul
    ports:
      - "8500:8500"
      - "8601:8600/udp"
    command: "agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0"
    restart: always

Inicia los servicios

docker compose up -d

Generar la configuración de peers

mpcium-cli generate-peers -n 3

Ejemplo de salida:

{
  "node0": "12345678-1234-1234-1234-123456789abc",
  "node1": "23456789-2345-2345-2345-23456789abcd",
  "node2": "34567890-3456-3456-3456-3456789abcde"
}

Configuración del clúster

1. Crea y actualiza config.yaml

cp config.yaml.template config.yaml

Edita config.yaml:

nats:
  url: nats://127.0.0.1:4222
consul:
  address: localhost:8500

mpc_threshold: 2
environment: development
badger_password: "your_badger_password"
event_initiator_pubkey: "your_event_initiator_pubkey"

Genera una contraseña segura (recomendado)

< /dev/urandom tr -dc 'A-Za-z0-9!@#$^&*()-_=+[]{}|;:,.<>?/~' | head -c 16; echo

Ejemplo:

badger_password: "F))ysJp?E]ol&I;^"

2. Registra los peers en Consul

mpcium-cli register-peers

Configuración del iniciador de eventos

Genera el iniciador

mpcium-cli generate-initiator

💡 Usa --encrypt en producción.

Agrega la clave pública a config.yaml

Desde event_initiator.identity.json:

{
  "public_key": "09be5d070816aadaa1b6638cad33e819a8aed7101626f6bf1e0b427412c3408a"
}

Actualiza config.yaml:

event_initiator_pubkey: "09be5d070816aadaa1b6638cad33e819a8aed7101626f6bf1e0b427412c3408a"

Configurar las identidades de los nodos

1. Crea las carpetas de los nodos

mkdir node{0..2}
for dir in node{0..2}; do cp config.yaml peers.json "$dir/"; done

2. Genera la identidad de cada nodo

Ejemplo para node0:

cd node0
mpcium-cli generate-identity --node node0

💡 Para producción, usa cifrado:

mpcium-cli generate-identity --node node0 --encrypt

Genera una contraseña segura para el cifrado

< /dev/urandom tr -dc 'A-Za-z0-9!@#$^&*()-_=+[]{}|;:,.<>?/~' | head -c 16; echo

3. Distribuye los archivos de identidad a todos los nodos

cp identity/node0_identity.json ../node1/identity/node0_identity.json
cp identity/node0_identity.json ../node2/identity/node0_identity.json

Repite esto para node1 y node2.

Ejemplo de estructura de carpetas

├── node0
│   ├── config.yaml
│   ├── identity
│   │   ├── node0_identity.json
│   │   ├── node0_private.key
│   │   ├── node1_identity.json
│   │   └── node2_identity.json
│   └── peers.json
├── node1
│   ├── config.yaml
│   ├── identity
│   │   ├── node0_identity.json
│   │   ├── node1_identity.json
│   │   ├── node1_private.key
│   │   └── node2_identity.json
│   └── peers.json
├── node2
│   ├── config.yaml
│   ├── identity
│   │   ├── node0_identity.json
│   │   ├── node1_identity.json
│   │   ├── node2_identity.json
│   │   └── node2_private.key
│   └── peers.json

Iniciar los nodos de Mpcium

Inicia cada nodo:

cd node0
mpcium start -n node0
cd node1
mpcium start -n node1
cd node2
mpcium start -n node2

💡 En producción, evita las contraseñas escritas en el código:

mpcium start -n node0 --prompt-credentials

Todos los nodos listos

Despliegue en producción (alta seguridad)

  1. Usa clústeres de NATS y Consul de nivel productivo.
  2. Habilita certificados TLS en todos los endpoints.
  3. Cifra todas las claves:
    mpcium-cli generate-initiator --encrypt
    mpcium-cli generate-identity --node node0 --encrypt
    
  4. Usa --prompt-credentials para introducir de forma segura las contraseñas de Badger (evita escribirlas directamente en config.yaml).

Apéndice

Descifra la clave privada del iniciador con age

age --decrypt -o event_initiator.key event_initiator.key.age