How it Works

Overview

This demo evaluates Conway's Game of Life directly on CKKS ciphertext state. The server never decrypts the board.

System Profile

Crypto
Scheme CKKS
Ring degree (n) -
Runtime
Checkpoint stride - generations

The Server Loop

Tick Server evaluates the transition circuit on encrypted state on GPU (ciphertext in, ciphertext out).
Checkpoint Encrypted checkpoints are saved at a fixed generation interval.
Sync Client fetches new checkpoints and decrypts them locally

Adding Patterns

Encrypt Client encodes a pattern placement into CKKS slots and encrypts a ciphertext update.
Submit Encrypted pattern is uploaded to the server's encrypted update queue
Merge At each tick boundary, the server applies the next queued encrypted input via homomorphic addition.

Client-side Prediction

The server advances faster than the client can fetch and decrypt every generation over the network. The client therefore samples periodic checkpoints and runs a local Game of Life simulation between them. Incoming checkpoints are queued and applied in order when the local timeline reaches them.

Crypto Engine

The client derives CKKS key material from the access code. WebGPU accelerates client-side CKKS encrypt/decrypt kernels (NTT/iNTT + pointwise ops); if unavailable, the same pipeline runs in Rust compiled to WASM, which also handles encode/decode and serialization.

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 applies it without ever seeing which cells you placed.

Performance Console

Open the console from the bottom bar to see real-time sync, decryption, and encryption timing logs.

Built by 0xPARC

Gen -
Grid computed homomorphically on encrypted data
Console 0 events