npxio/ lattice

$ ./break --target lattice-4

Break LATTICE-4

An experimental 256-bit stream cipher with a multiply-enhanced add-rotate-xor core. We attacked it ourselves with 55 recorded attempts and broke 5 of its 20 rounds. Now it's your turn: recover the secret key of any version below and your name goes on the board.

LATTICE-4 is experimental and has had no outside review. That's what this challenge is for. Nobody should use it to protect real data yet.
20rounds in the full cipher
5rounds broken by the designers
–challenges solved
–blocks left for you today

the ladder

RoundsStatusDesigners' best attackKey commitment: sha256(key)
Loading…

Each commitment was published when the keys were generated. A winning key hashes to it, which proves the keys were never swapped. Click a commitment to copy it.

how to play

1. Read the cipher. Full spec in SPEC.md, reference code in lattice.mjs (call LATTICE4.block(key, nonce, counter, rounds)), test vectors in kat.json, and everything we tried in ATTACK_LOG.md.

2. Query the oracle. Ask for keystream blocks at any nonce and counter you choose. That's the chosen-input model every published attack on ChaCha uses.

3. Submit the key. If it's right, you're on the board. First solver of each tier is marked.

Submit a key

oracle api

# ladder, commitments, solvers, your remaining budget
curl https://lattice.npxio.com/break/api/challenges

# up to 1024 consecutive blocks for one nonce
curl "https://lattice.npxio.com/break/api/keystream?rounds=3&nonce=000102030405060708090a0b&counter=0&count=4"

# up to 1024 chosen (nonce, counter) pairs at once, e.g. a differential pair
curl -X POST https://lattice.npxio.com/break/api/keystream -H 'Content-Type: application/json' -d '{
  "rounds": 4,
  "queries": [ {"nonce":"000102030405060708090a0b","counter":0},
               {"nonce":"000102030405060708090a0b","counter":16777216} ] }'

# submit a key
curl -X POST https://lattice.npxio.com/break/api/submit -H 'Content-Type: application/json' \
  -d '{"rounds":2,"key":"<64 hex chars>","name":"you"}'

Each block is the 64-byte output block(key, nonce, counter) in hex, for the secret key of that tier. Every tier uses the full 20-round key schedule rules: round constants and key re-injection, reduced to that many rounds.

rules