Skip to main content
HoneyBadgerMPC is Stoffel’s default MPC backend. Use it when secret application values are represented as field-compatible shares and the outside system consumes an opened result or client-output shares from private computation. It is an asynchronous, robust MPC protocol family. In practical terms, Stoffel can run a known set of MPC parties without relying on a fixed network round clock, while tolerating Byzantine parties up to the configured threshold.

What it is good for

HoneyBadgerMPC is the right starting point when the secret values are application data represented as field-compatible shares:
  • the program computes over secret integers, fixed-point values, or other field-compatible values;
  • public parameters can stay public while private inputs remain ordinary MPC shares;
  • the main cost questions are multiplication count, multiplication depth, comparisons, and reveal boundaries;
  • the output boundary is an opened value or client-output shares.
It is less natural when the output boundary is a public commitment, curve-encoded value, opened scalar response, or signature-related artifact. Use AVSS when the secret value is a cryptographic scalar that must match an external curve or verifier.

Protocol model

HoneyBadgerMPC-style protocols are built around finite-field secret sharing:
  • secrets are encoded as field elements;
  • parties hold shares of those field elements;
  • addition and subtraction are local operations on shares;
  • multiplication consumes preprocessed material such as Beaver triples;
  • opening/revealing reconstructs a clear value from enough valid shares.
The sharing model is closely related to Shamir secret sharing and Reed-Solomon/error-correcting-code ideas: polynomial evaluations are shares, and interpolation/reconstruction can detect or tolerate faulty shares under the protocol threshold.

Security posture

For developer configuration, remember three points:
  1. HoneyBadgerMPC is designed for asynchronous, Byzantine-robust MPC.
  2. HoneyBadgerMPC is the default path for private computation over application values; concrete deployments still rely on ordinary cryptography for transport, authentication, signatures, and implementation details.
  3. Stoffel’s current local/network config enforces parties >= 4 * threshold + 1.
That last rule is what developers should use when choosing local or network topology values, even though the underlying asynchronous MPC literature often starts from n >= 3t + 1 thresholds.

Configure HoneyBadgerMPC

honeybadger is the default backend.
CLI override:
Rust SDK:
Program builder:

Preprocessing

Multiplication of two secret shares needs preprocessed material. Stoffel records preprocessing demand in the bytecode manifest and exposes preprocessing configuration in the Rust SDK network builders.
Local CLI/SDK paths hide most of this setup. If a program consumes more multiplication/randomness material than the run prepared, increase preprocessing configuration or simplify the circuit. For advanced MPC workloads, use the preprocessing warning as a signal to inspect multiplication count, multiplication depth, type choices, and reveal boundaries. See Performance and circuit shaping for the full checklist.

Operation costs

Use-case examples

HoneyBadgerMPC is the best fit when the application is mostly field arithmetic over private inputs. The protocol’s share representation makes additions and scalar shifts local, while multiplication uses the backend’s preprocessed multiplication material. The examples below use Stoffel features that matter in real applications: typed fixed-point shares, loops, variable client counts, client-output channels, and explicit reveal boundaries.

Federated fixed-point aggregation

Use this shape when clients contribute model updates, risk vectors, or analytics rows and the application needs per-position aggregates without revealing individual contributions:
This uses HoneyBadgerMPC for a field-heavy workload: each matrix element is summed as a fixed-point share, the aggregate can be routed back to an output client as shares, and only the average values selected by the program are opened.

Private score routing with client-specific outputs

Use this shape when the host application should learn only coordination metadata while selected clients receive private result shares:
This keeps the score as a share instead of opening it to the host application. HoneyBadgerMPC is doing the general private arithmetic, while Stoffel’s ClientStore, Mpc.has_capability, and MpcOutput APIs define which clients supply and receive private values.

Further reading