The first adaptive adversary
What changes when the opponent watches your design and chooses how to attack it?
Everything before this mechanism's topic in a systems course fights an indifferent opponent. Physics does not adapt. Queueing theory does not read your design document and then choose a different pattern of arrivals. Even failure cascades (a slow service causes retries, which make the service slower), which feel hostile, are just feedback loops going wrong in a predictable direction. You can describe all of that with statistics, and you win by improving the typical case and bounding the worst case.
Security brings the first adaptive adversary: an agent that observes your mechanism and chooses its input afterward. Two things break at once.
1. Statistics stop working. Other areas are judged on a distribution: p99 latency (the time that 99% of requests beat), expected cost, mean time to recovery. Security is judged on its minimum, the weakest point. A cache that is right 99.99% of the time is a good cache. An authorization check that is right 99.99% of the time is a breach with extra steps. There is no percentile in which you are allowed to fail, because the attacker is searching specifically for the case where you do.
2. The specification comes from outside. Every constraint in earlier areas could be discovered from inside the system: disk seek time, the speed of light, arrival rate, dollars per terabyte scanned. The constraints here are set by law, contract and regulator. You cannot derive them from the system. They differ by country and region, and they change on a legislative timescale instead of an engineering one. This is the first area where "correct" is defined by someone outside the building, and the definition can change without your code changing.
Performance is no longer the goal. Here it is a budget you spend to buy denial. Every mechanism here makes the system slower, more expensive or harder to operate. That is not a design failure. That is the price.
The core tension
A join combines two data sets on a shared value (for example, patients and lab results on a patient ID). The analyst's whole job is to join. The attacker's whole job is to join (your data with a leaked data set from somewhere else). That is why security and privacy can never be "solved". Every improvement elsewhere in a data stack makes copying, joining and scanning cheaper, which increases the blast radius of every mistake made here. This area gets structurally harder as the rest of the stack gets better at its job.