HI Cyber Con CTF 2026. Steganography.
No Bit Sings Alone
25 teams had solved it when the lab started. It pulled an AES key out of parity bits in 12 minutes.
Published 2 November 2026. Challenge by Hidden Investigations.
The brief
A suspicious audio file. Nothing more. Or maybe that is exactly what it wants you to think. Listen carefully. Look deeper.
- no-bit-sings-alone.zip, 9.6 MB
In short
Pure tones at the end of the right channel give one step size per block. The steps pick samples in the left channel whose low bits carry a Hamming syndrome, and the recovered numbers are a transform of the AES key that decrypts the flag.
Two channels with two jobs
The file is 59.77 seconds of stereo at 44.1 kHz. The left channel draws text into its spectrogram, AES256GCM, a 12 byte nonce and 80 bytes of ciphertext with tag. The right channel ends in pure high tones.
Tones that are step sizes
The right channel's last 58 blocks of 4,096 samples each hold one strong bin between 14 and 19.4 kHz. Each bin number is a step, from 1,305 to 1,801. All of them are odd, so stepping through a block reaches every position.
Each step picks 31 samples
In the matching block of the left channel, the step k picks the samples at (i + 1) times k mod 4,096, for i from 0 to 30. In block 585, k is 1,781, so the picks land at 1,781, 3,562, 1,247 and on around the block.
The message is in the parity
The 31 low bits look random, and they are not the message. Each set bit names a Hamming column, rotated by k, and the XOR of those columns gives 5 bits. In block 585, 18 set bits fold into 01100. 58 blocks give 290 bits.
32 numbers that live mod 257
Read 9 bits at a time, the stream makes 32 numbers and none is above 256. That fits arithmetic mod 257. An inverse number theoretic transform with root 240 turns them into a 32 byte AES key.
The tag checks out
AES-256-GCM with the nonce from the spectrogram decrypts the 64 byte ciphertext, and the 16 byte tag verifies, so the key is right. The plaintext is a length of 50, then the flag.
The insight
The chosen low bits look like noise because they are not the data. Their parity is, a 5 bit Hamming syndrome per block that carries the key in plain sight.
The flag
hiCTF{m4th3m4t!c5_g4v3_m3_4_l0t_Of_p4!n_8d52ae513}