A recent branch of cryptography focuses on the physical constraints that a real-life cryptographic device must face, and attempts
to exploit these constraints (running time, power consumption, ...) to expose the device’s secrets. This gave birth to implementation-specific
attacks, which often turned out to be much more efficient than the best known cryptanalytic attacks against the underlying
primitive as an idealized object. This paper aims at providing a tutorial on the subject, overviewing the main kinds of attacks
and highlighting their underlying principles.