Differential cryptanalysis is a general form of cryptanalysis applicable to block ciphers, but also can be applied to stream ciphers and cryptographic hash functions. It is the study of how differences in the input can affect the resultant differences at the output. In the case of a block cipher, it refers to a set of techniques and methods for tracing differences through the network of transformations, discovering where the cipher demonstrates non-random behaviour, and extend such properties to recover the secret key.