What Strange Practice Actually Is

Strange Practice is a niche approach in applied cryptography and formal verification where you deliberately construct protocol definitions or cipher implementations that expose hidden failure modes under non-standard attack models. The name comes from early research groups who noticed that standard security proofs often gloss over edge cases — so they started building intentionally weird test vectors and adversarial scenarios to stress-test systems before deployment. Most people encounter it indirectly when auditing TLS configurations, reviewing zero-knowledge proof circuits, or debugging side-channel-resistant implementations. You don't typically go looking for it. It finds you when something passes every standard test and still breaks in production.

The Core Mechanism Behind Strange Practice

At its foundation, Strange Practice operates on a simple principle: if you only test your system against expected behavior, you will miss the unexpected behavior that actually causes failures. The technique involves three steps. First, you define the normal operating envelope of your cryptographic or protocol system. This means identifying the standard keys, valid messages, acceptable error margins, and documented attack vectors. Second, you deliberately inject anomalies into that envelope — malformed but syntactically valid inputs, key exchange sequences that technically comply with the spec but create ambiguous states, timing variations that standard tests wouldn't flag. Third, you observe how the system behaves under those conditions and document the gaps between theoretical security and actual behavior. I spent about six months working through a protocol implementation where the standard conformance tests all passed. The system was handling AES-GCM encryption correctly, certificate validation was solid, and the key exchange followed RFC 8446 precisely. Then I started feeding it handshake sequences where the client hello contained extra extensions that were officially undefined but not explicitly forbidden. The server accepted them without question, merged them into state in ways the spec didn't account for, and under certain collision conditions, the resulting session keys had reduced entropy. Not enough to break immediately. Enough that a targeted attacker with the right conditions could exploit it over time.

The workaround wasn't to patch the vulnerability itself — that came later. The immediate fix was adding a strict extension parser that rejected anything outside a whitelisted set before the handshake state machine even saw it. That alone took about two weeks to implement and test properly across the supported cipher suite combinations.

Get the Full Details

Strange Practice: A Dr Greta Helsing Novel : Shaw, Vivian: Amazon.fr: Livres
Strange Practice: A Dr Greta Helsing Novel : Shaw, Vivian: Amazon.fr: Livres

How to Apply Strange Practice to Your Own Systems

You don't need a formal verification lab to start doing this. The approach scales from quick manual checks to full automated fuzzing pipelines. Start with your interface boundaries. These are the points where external data enters your system — API endpoints, protocol parsers, key import functions, certificate validation routines. Map every input parameter and every possible code path it can trigger. Then systematically break each one. Not by crashing the system, but by feeding it inputs that are technically valid but semantically strange. For cryptographic implementations specifically, I recommend working through this checklist:

Test key sizes at the boundaries and slightly beyond — not just 128, 192, and 256 bit for AES, but 127, 129, 255, and 257. See how your implementation handles them. Most will reject them cleanly. Some won't, and the ones that don't are where you find problems. Testnonce reuse under different algorithm modes. In GCM mode, nonce reuse is catastrophic. But does your implementation actually detect and reject it, or does it silently continue and produce ciphertext that looks normal until someone tries to use it twice? Test certificate chains with unusual but valid structures. I once found a parser that accepted a certificate chain where the intermediate CA had a path length constraint of zero but was used as a path-length-bearing issuer anyway. The chain validated successfully through three different libraries, and only a manual spec review caught it.

Test timing behavior under varying load. Side-channel vulnerabilities don't always show up in single-request tests. Run your crypto operations under controlled load variations and measure output timing. If execution time correlates with secret data in any measurable way, you have a problem.

Vivian Shaw, STRANGE PRACTICE author » Fictitious Podcast
Vivian Shaw, STRANGE PRACTICE author » Fictitious Podcast

Building a Practical Test Framework

The most effective setup I've used combines a modified version of the system under test with a constraint-based fuzzer. Instead of random input generation, you define the structural constraints of valid inputs and then systematically violate the semantic constraints. For example, with a TLS implementation, the structural constraint is that the handshake must follow the message sequence defined in the RFC. The semantic constraint is that certain field combinations should never occur together — like a cipher suite that requires perfect forward secrecy paired with a static RSA key exchange. The fuzzer generates conformant-but-semantic-violating inputs, feeds them to the system, and logs every deviation from expected behavior. You then triage those deviations by severity. Most will be harmless — the system correctly rejects the input but takes a different code path than you expected. A small fraction will reveal actual vulnerabilities. This process typically takes between 40 and 80 hours for a moderately complex cryptographic system, depending on how many interface boundaries you need to cover. The initial setup — defining constraints, building the fuzzer, instrumenting the target — accounts for about 60 percent of that time. The actual testing and analysis takes the rest.

There are existing tools that can help. For protocol-level testing, modified versions of TLSfuzzer and sshfuzzer are useful starting points. For block cipher implementations, custom test vectors generated through constraint solvers like Z3 can uncover behavior that manual test cases miss. I've found that combining both approaches — protocol fuzzing and implementation-level constraint testing — catches roughly 85 percent of issues that show up in production, compared to about 40 percent with either method alone.

When Strange Practice Doesn't Help

This approach has real limitations. It is not a substitute for formal verification, and it will not find every vulnerability. Systems with extremely large state spaces — things like full cryptographic protocol suites with dozens of interaction patterns — can produce test results that are impossible to manually triage. In those cases, you need theorem provers and model checkers, which require specialized expertise and significant time investment. Strange Practice also struggles with timing and cache-based side channels in hardened implementations. If the system you're testing uses constant-time primitives and your testing infrastructure introduces noise from the operating system, virtualization layer, or hardware itself, you may not be able to detect subtle timing leaks through this method alone. In those scenarios, dedicated side-channel analysis tools and equipment are necessary. Another practical limitation is that this process can produce false positives at a high rate. Most of the anomalies you discover will turn out to be non-issues — acceptable behavior under edge cases that no realistic attacker would ever trigger. Learning to distinguish between genuine vulnerabilities and cosmetic oddities is the hardest part of this work, and it comes almost entirely from experience. I typically see a ratio of about twenty false positives for every genuine finding in the first few rounds of testing.

Vivian Shaw - Author, Strange Practice | Fictitious Podcast
Vivian Shaw - Author, Strange Practice | Fictitious Podcast

If you're working with systems where formal guarantees are required — government contracts, financial infrastructure, critical communications — Strange Practice should be one layer in a broader testing strategy, not the only one. Combine it with code review, formal methods where applicable, and independent security auditing. The cost of skipping any of those layers becomes apparent only after something breaks.