Introduction

⚠️ Work in Progress Notice

This documentation is actively being developed and is subject to frequent changes. Some sections may be incomplete or pending review.

About Stoffel VM

Stoffel is a virtual machine architecture designed specifically for secure Multi-Party Computation (MPC) applications. It provides a flexible and efficient foundation for executing MPC protocols while maintaining protocol agnosticism.

Key Features

Current Status

The project is under active development. Current focus areas include:

Documentation Structure

This documentation covers the architectural decisions, implementation details, and future development plans for Stoffel VM. Navigate through the sections to learn more about specific aspects of the system.

What is Multi-Party Computation?

Why Stoffel?

Installation

Quick Start

Basic Usage

Design Rationale

Protocol Agnostic Design

The virtual machine is designed to be protocol-agnostic for several reasons:

  1. Flexibility

    • Support for different MPC protocols without architectural changes
    • Easy integration of new protocols as they are developed
    • Ability to switch protocols based on specific requirements
  2. Future-Proofing

    • Not tied to limitations of specific protocols
    • Can adapt to advances in MPC research
    • Supports hybrid protocol approaches

Extensibility

The architecture emphasizes extensibility through:

  1. Modular Design

    • Clear separation of concerns
    • Plugin system for new instructions
    • Customizable optimization passes
  2. Abstract Interfaces

    • Protocol-independent instruction definitions
    • Flexible memory model
    • Extensible register system

Architecture

Stoffel VM is a register based virtual machine with two sets of registers. Clear registers for manipulating non-secret values. Secret registers are used for manipulating secret values.

Why a Register Machine?

The choice of a register-based architecture over a stack-based design was driven by several key factors:

  1. Parallelization Opportunities

    • Register machines allow for easier identification of independent instructions
    • Multiple instructions can be executed in parallel, reducing overall execution time
    • Better suited for modern hardware architectures
  2. Communication Efficiency

    • Reduced number of memory access operations
    • Fewer rounds of communication in Multi-Party Computation (MPC) contexts
    • More efficient instruction encoding
  3. Optimization Potential

    • Direct access to operands enables better optimization strategies
    • Easier to implement specialized instructions
    • More straightforward analysis of data flow

Why dedicated clear and secret registers

  1. Implicit reveal and hide
    • Having dedicated registers for secret and clear values allows us to implicitly reveal and hide values as they're moved between registers.
    • Separation of registers allows for optimizations to be applied specifically to clear or secret operations.
    • Avoids having to track the type of the virtual register during runtime as values may become secret shared or reveal through the course of execution.

Sources

This is a comprehensive list of resources or referenced when designing and making Stoffel.

This work was created through a mix of independent research and development plus outside sources listed below, though as Newton once said, 'If I have seen further, it is by standing on the shoulders of giants.' Any similarities to existing works not listed are purely coincidental and a testament to the universal nature of good ideas.

Incomplete List Disclaimer

This list of sources attempts to be as complete as possible. Some sources may have been forgotten or haven't found their way into the list yet!