Notes on NEAR's MPC

 

tl;dr: The good: Audit went well. Lúcás Meier’s Caith-Sith threshold ECDSA protocol seems like a reasonable, conservative choice. The bad: Near’s MPC currently works in a 5 out of 8 setting, without any proactive refresh.

Notes

Good

  • MPC’s configuration is transparent, on-chain $\Rightarrow$ can monitor for suspicious membership changes
  • “uses the Cait-Sith protocol in a secure manner”1
  • “we did not identify any issues related to Beaver triple or nonce reuse that could compromise the security of a shared key”1
  • NEAR currently only uses Cait-Sith on mainnet (May 1st, 2026)
    • (The MPC committee can change this over time, of course.)

Unclear

Somewhat concerning

  • Claude Code identified four unaddressed items from the Trails of Bits audit; they are not high-severity though:
    • #4 Ciphertext swapping (DB AAD missing) – Informational, Cryptography
    • #5 Hash function used as KDF (derive_tweak) – Informational, Cryptography
    • #6 P2P identity misbinding (duplicate p2p public keys) – Medium, Data Validation
    • #10 AES-GCM nonce reuse (96-bit random, no rotation) – Medium, Cryptography
  • NEAR modified the Cait-Sith scheme1
    • multiplicative rerandomization of presignatures

Concerning

  • TEE-backed MPC nodes are off on mainnet (as of May 1st, 2026)
  • NEAR had a lot of GitHub CI security issues in the Trail of Bits report (#12, #13, #141)
    • #14 could’ve allowed an attacker to release a completely malicious binary (was rated “difficult” though)

Deeply concerning

  • 5 out of 8 secret-sharing on mainnet (see here)
  • No proactive refresh, even though re-sharing (for nodes leaving and joining) is implemented and would be trivial to call periodically
    • Not sure why: without proactive refresh an attacker can slowly take its time and compromise all 5 keys
    • The last re-sharing (and thus refresh) was on March 3rd, 2026
      • $\Rightarrow$ any progress an attacker made in the last 2 months (as of May 1st, 2026) is still good progress
    • Maybe proactive refresh would invalidate the ECDSA presignatures?
  • The Cait-Sith threshold ECDSA library was not part of the audit; only its use by NEAR’s MPC node implementation was audited1
    • This library may not have been production-ready.

Resources

NEAR MPC nodes

Operators:

  • lacksandtech.near,
  • mpc-lgns.near,
  • multichain-mainnet-aurora.near,
  • near-mpc-staking4all-01.near,
  • nodemonster.near,
  • n1-multichain.near,
  • everstake-mpc-1.near,
  • stakin-mpc.near

NEAR-affiliated names visible:

  • n1-multichain.near (NEAR One)
  • multichain-mainnet-aurora.near (Aurora)

The rest are independent operators (Everstake, Stakin, etc.).

Fetch all NEAR participants

curl -s -X POST https://rpc.mainnet.near.org -H "Content-Type: application/json" -d '{
    "jsonrpc":"2.0","id":"1","method":"query",
    "params":{"request_type":"call_function","finality":"final",
              "account_id":"v1.signer","method_name":"state","args_base64":"e30="}
  }' | jq -r '.result.result | implode' | jq .

MPC evolution

Based on visible on-chain history, no pure refresh (same set) has happened on mainnet. Every reshare was triggered by a membership change.

Here’s what each epoch’s vote_new_parameters proposal actually contained (winning proposals only, ordered by epoch):

Epoch Finalized n / threshold Membership delta from previous
3 2025-08-25 8 / 5 (earliest vote_new_parameters call against this contract — see note)
4 2025-09-17 10 / 7 + everstake-mpc-1.near, + stakin-mpc.near
5 2025-11-21 9 / 6 − lifted-mainnet.near
6 2026-03-03 8 / 5 − chain-signatures-hot.near ← current

Run this vibe-coded script to reproduce these results.

References

For cited works, see below 👇👇

  1. NEAR One MPC Chain Signatures, by Fredrik Dahlgren, Marc Ilunga, and Jim Miller, 2025, [URL]  2 3 4 5

  2. Fast Threshold {ECDSA} with Honest Majority, by Ivan Damgård and Thomas Pelle Jakobsen and Jesper Buus Nielsen and Jakob Illeborg Pagter and Michael Bæksvang Østergård, in Cryptology {ePrint} Archive, Paper 2020/501, 2020, [URL]  2

  3. Caith-Sith threshold ECDSA signatures, by Lúcás Meier, GitHub repo