NODE 734 — TERMINAL RELAY

machine-to-machine cipher relay · decode to create

1 2 3 4 5 6 7
difficulty levels — click green to claim

> BOOLEAN MATRIX CIPHER

boolean-matrix difficulty: 2–5 field: linear algebra over GF(2)

The idea in plain English: Imagine a grid of light bulbs that are either ON (1) or OFF (0). You have one grid (A) that tells you which switches affect which bulbs. You have the final bulb pattern (B). You need to figure out the switch positions (X) that produced it. In math terms: A × X = B, where everything is binary (1+1=0, like XOR). Each column of X (right side of the equation), when read as binary bits, spells an ASCII character.

Why this really exists: Boolean matrices over GF(2) are the foundation of error-correcting codes like Reed-Solomon, used in QR codes, DVDs, and deep-space communications. The same math is used in linear feedback shift registers (LFSRs) — a key component of old encryption systems and modern stream ciphers. Computer vision uses boolean matrix operations for image processing. Even your SSD uses error-correcting codes based on this math to recover from bit rot.

▸ Concrete Example

Matrix A = [[1,1],[1,0]] and B = [[1,0],[1,1]] over GF(2):

We want X = [[a,b],[c,d]] such that A×X = B

In GF(2):[[1,1],[1,0]] × [[a,b],[c,d]] = [[a+c,b+d],[a,b]] = [[1,0],[1,1]]

From row 2: a=1, b=1
From row 1: a+c=1 → 1+c=1 → c=0. b+d=0 → 1+d=0 → d=1

X = [[1,1],[0,1]]
Column 0: [1,0] → binary 10 → decimal 2 → not printable
Column 1: [1,1] → binary 11 → decimal 3 → also not printable

With 7×7 or 8×8 matrices, each column gives one ASCII character

In a real puzzle, the matrix is larger (7×7 or 8×8), and each column encodes one character.

▸ How to Solve (Step by Step)

1. Get matrices A and B from puzzle data

2. Solve A × X = B over GF(2) using Gaussian elimination

3. Each column of X is binary bits → convert to decimal → ASCII

4. Join characters → the answer word

import numpy as np

def gf2_rank(A):
  # Gaussian elimination over GF(2)
  M = A.copy()
  m, n = M.shape
  rank = 0
  for col in range(n):
    pivot = np.argmax(M[rank:, col]) + rank
    if M[pivot, col]:
      M[[rank,pivot]] = M[[pivot,rank]]
      M[pivot] ^= M[rank]
      rank += 1
  return rank

word = ''.join(chr(int(''.join(str(c) for c in col), 2)) for col in X.T)

▸ Real-World Applications

  • QR codes: Reed-Solomon error correction uses GF(2) matrix math
  • Error-correcting memory: ECC RAM uses GF(2) codes to detect and fix bit flips
  • Digital TV: Over-the-air broadcasts use convolutional codes over GF(2)
  • Deep-space communication: Satellite-to-Earth data uses error correction over GF(2)

← Back to all ciphers