aabbdev
Re:Think memcmp is safe? Think again
on Thursday October 30, 2025 @02:48AM (#45757072)
Shipped a timing leak via early-exit memcmp + secret branch. Flatline is a single-header toolbox for constant-time C (CT compare/select/lookup/div) guided by B.I.D.—no Branch on secrets, no secret Index, no variable-latency ops. DUDECT tests; feedback on LTO/autovec welcome
Re:UUIDv47: Store UUIDv7 in DB, emit UUIDv4 outside (SipHash-masked ti...
on Wednesday September 17, 2025 @02:59PM (#45279956)
A Postgres extension is currently in development to provide transparent database optimization with custom type uuid45 and optional helpers ;)
Re:UUIDv47: Store UUIDv7 in DB, emit UUIDv4 outside (SipHash-masked ti...
on Wednesday September 17, 2025 @12:03PM (#45277514)
You can always treat IDs as UUIDv4, while actually storing them as UUIDv7—combining the benefits of both. From your perspective, they’re just UUIDv4
Re:UUIDv47: Store UUIDv7 in DB, emit UUIDv4 outside (SipHash-masked ti...
on Wednesday September 17, 2025 @10:04AM (#45275983)
Hi, I’m the author of uuidv47. The idea is simple: keep UUIDv7 internally for database indexing and sortability, but emit UUIDv4-looking façades externally so clients don’t see timing patterns.
How it works: the 48-bit timestamp is XOR-masked with a keyed SipHash-2-4 stream derived from the UUID’s random field. The random bits are preserved, the version flips between 7 (inside) and 4 (outside), and the RFC variant is kept. The mapping is injective: (ts, rand) → (encTS, rand). Decode is just encTS ⊕ mask, so round-trip is exact.
Security: SipHash is a PRF, so observing façades doesn’t leak the key. Wrong key = wrong timestamp. Rotation can be done with a key-ID outside the UUID.
Performance: one SipHash over 10 bytes + a couple of 48-bit loads/stores. Nanosecond overhead, header-only C11, no deps, allocation-free.
Tests: SipHash reference vectors, round-trip encode/decode, and version/variant invariants.
Curious to hear feedback!