How it Works

Overview

This demo runs Conway's Game of Life entirely on encrypted data using Fully Homomorphic Encryption (FHE). The server never sees the board state in plaintext — it computes the next generation directly on ciphertexts.

The Server Loop

Tick Server continuously computes Game of Life generations on encrypted state using FHE
Checkpoint Each generation is saved as an encrypted checkpoint
Sync Client fetches new checkpoints and decrypts them locally (WebGPU or WASM)

Adding Patterns

Encrypt Client encrypts pattern cells using CKKS scheme
Submit Encrypted pattern is uploaded to the server's input queue
Merge Server adds queued inputs into the next tick — without ever seeing the plaintext

Client-side Prediction

Encrypted checkpoints are large, so the client doesn't fetch every generation. Instead, it runs a local Game of Life simulation between checkpoints to maintain smooth animation. When a new checkpoint arrives, the local state snaps to the decrypted result.

Crypto Engine

Decryption uses CKKS (a leveled HE scheme for approximate arithmetic). The client attempts WebGPU NTT for GPU-accelerated number-theoretic transforms, falling back to a WASM implementation if WebGPU isn't available.

Patterns

Drag patterns from the sidebar onto the board at any time. Your pattern is encrypted client-side and queued for the next server tick — the server merges it in without ever seeing which cells you placed.

Performance Console

Open the console from the topbar to see real-time logs of sync cycles, decryption times, encryption operations, and rendering stats. The goal: demonstrate that FHE can run interactive applications at practical speeds.

Built by 0xPARC

Gen -
Grid computed homomorphically on encrypted data
Console 0 events