<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>blog.gtfo.dev</title><description>Technical writing on software engineering, systems design, and the tools that make it possible.</description><link>https://blog.gtfo.dev/</link><item><title>Encryption Protects the Column, Not the Schema</title><link>https://blog.gtfo.dev/blog/encryption-protects-the-column-not-the-schema/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/encryption-protects-the-column-not-the-schema/</guid><description>Encryption secures the ciphertext. The schema answers questions the privacy contract never considered — sharing graphs, behavioral timelines, search-token frequency maps. How to read a database the way an attacker does.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate></item><item><title>The Read-Write Gap: Web Race Conditions Beyond TOCTOU</title><link>https://blog.gtfo.dev/blog/race-conditions-read-write-gap/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/race-conditions-read-write-gap/</guid><description>A technical taxonomy of web race conditions beyond TOCTOU, explaining read-write gaps, HTTP/2 single-packet attacks, and the storage-layer primitives that close them.</description><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Layer 2 vs. Layer 3 Switches</title><link>https://blog.gtfo.dev/blog/layer-2-vs-layer-3-switches/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/layer-2-vs-layer-3-switches/</guid><description>Most inter-VLAN routing in enterprise networks isn&apos;t done by a router. It&apos;s done by a switch that understands IP. This post breaks down how Layer 2 and Layer 3 switches differ, how SVIs and routed ports work, and why TCAM makes hardware-based routing possible.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Zero-Knowledge Proofs from Scratch: Schnorr Identification and the Sigma Protocol</title><link>https://blog.gtfo.dev/blog/schnorr-zkp-from-scratch/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/schnorr-zkp-from-scratch/</guid><description>A worked-example introduction to zero-knowledge proofs using the Schnorr identification protocol, building to the sigma protocol abstraction that underpins modern ZKP systems.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Account Takeover: The Composite Attack Class</title><link>https://blog.gtfo.dev/blog/account-takeover-composite-attack-class/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/account-takeover-composite-attack-class/</guid><description>ATO isn&apos;t a CWE — it&apos;s an outcome. This post models account takeover as a composite attack class, maps the five vector families to their root causes, and builds the defense architecture that exploitation checklists leave out.</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate></item><item><title>TLS Fingerprinting — The First Gate</title><link>https://blog.gtfo.dev/blog/tls-fingerprinting-the-first-gate/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/tls-fingerprinting-the-first-gate/</guid><description>TLS fingerprinting catches automation tools by their handshake — until the attacker uses a real browser. Part 1 of a series on why client-side bot defense is structurally limited.</description><pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate></item><item><title>The Oracle Problem — How HTTP Compliance Leaks Information</title><link>https://blog.gtfo.dev/blog/the-oracle-problem-http-compliance/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/the-oracle-problem-http-compliance/</guid><description>HTTP status codes are designed to be informative. That&apos;s exactly what makes them dangerous. Part 1 of a series on how RFC-compliant behavior creates exploitable information channels — and when breaking the spec is the right call.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate></item><item><title>The Chicken-and-Egg Problem of Zero-Knowledge User Lookup</title><link>https://blog.gtfo.dev/blog/zero-knowledge-user-lookup/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/zero-knowledge-user-lookup/</guid><description>How do you find a user without the server ever knowing who they are? A deep dive into the paradox of zero-knowledge user lookup, why every client-side blind indexing approach collapses, and how OPRF-based truncated bucket routing solves it without leaking identity.</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Why I Wrote an AAD Canonicalization Spec</title><link>https://blog.gtfo.dev/blog/aad-canonicalization-why-it-matters/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/aad-canonicalization-why-it-matters/</guid><description>A Python service encrypts secrets with AEAD. A Go service tries to decrypt them. Same keys, same AAD fields—authentication fails. The culprit? JSON serialization isn&apos;t deterministic. This is Part 1 of a series on AAD canonicalization: why it matters, and how to do it right.</description><pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate></item><item><title>A Vendor-Agnostic Guide to Network Engineering</title><link>https://blog.gtfo.dev/blog/vendor-agnostic-networking-intro/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/vendor-agnostic-networking-intro/</guid><description>This 70-part series covers everything a network engineer needs to understand—from how devices communicate to how automation is reshaping the field. Structured around CCNA 200-301 objectives, but built on open standards. No vendor lock-in required.</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Routers: What They Do and Why They Exist</title><link>https://blog.gtfo.dev/blog/routers-how-packet-forwarding-works/</link><guid isPermaLink="true">https://blog.gtfo.dev/blog/routers-how-packet-forwarding-works/</guid><description>Your laptop knows one thing — the address of its default gateway. That gateway is a router, and every network you&apos;ve ever used depends on at least one.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate></item></channel></rss>