Posts from 2026
Once the key is safe, who gets to ask for a signature? Custody lessons from Binance in 2019
Test whether a compromised withdrawal service can obtain an unwanted signature, using a custody model, a Python example and explicit acceptance checks.
Valid signatures, wrong transaction: the Bybit and Safe signing supply chain
Bybit's 2025 loss involved a tampered Safe front end. Independent SafeTx hash checks can detect substituted fields when signing and display disagree.
FreeCell deal numbers: reproducing Microsoft's deals, the Internet FreeCell Project and #11982
Reproduce Microsoft FreeCell deals in Python, check deals 1 and 11982 against published layouts, and see why a deal number alone does not guarantee solvability.
Tetris 7-Bag: The I-Piece Drought Bound and How to Count a Drought
The 7-bag caps I-piece gaps at 12; pure random and idealised NES rerolls have no cap. In the NES model, a 12-piece drought has odds of 14.0% after an I and 12.5% in any window.
The Third SET Card: Mod 3 Pair Completion and the 1,080 SETs
Any two distinct SET cards determine a unique third card via mod 3. This gives 1,080 SETs in 81 cards and at most 66 lookups to search a 12-card layout.
Uniform Solvable 15-Puzzle Boards: Parity Test and Two Generators
Uniform shuffling with a fixed parity-correcting swap gives every solvable 15-puzzle board the same chance. Random walks guarantee a solution but give uneven samples.
Sampling Bias in Maze Generation: Randomised Kruskal vs Wilson's Algorithm
Kruskal samples spanning trees unevenly; Wilson samples uniformly. Across all 7! edge orders on a 2x3 grid, Kruskal produces each tree either 360 or 300 times.