MIRAGE: Mitigating Conflict-Based Cache Attacks with a Practical Fully-Associative Design