In cryptography, MDC-2 (Modification Detection Code 2, sometimes called Meyer–Schilling, standardized in ISO 10118-2) is a cryptographic hash function. MDC-2 is a hash function based on a block cipher with a proof of security in the ideal-cipher model.[1] The length of the output hash depends on the underlying block cipher used.
For a given message
M
E
n
A1,B1
n
M=M1||..||Mm
Mi
n
Vm||Wm
i=1
m
Vi=Mi ⊕ E(Mi,Ai)
Wi=Mi ⊕ E(Mi,Bi)
L | |
V | |
i |
||
R | |
V | |
i |
=Vi
L | |
W | |
i |
||
R | |
W | |
i |
=Wi
Ai+1=
R | |
V | |
i |
Bi+1=
R | |
W | |
i |
Am+1||Bm+1
When MDC-2 uses the DES block cipher, the 128-bit (16-byte) MDC-2 hashes are typically represented as 32-digit hexadecimal numbers.
A1
B1
A
B
The following demonstrates a 43-byte ASCII input (which is padded with five zero-bytes so its length is a multiple of the DES block size of 8 bytes) and the corresponding MDC-2 hash:
MDC2("The quick brown fox jumps over the lazy og") = 000ed54e093d61679aefbeae05bfe33a
Even a small change in the message will (with probability) result in a completely different hash, e.g. changing d
to c
:
MDC2("The quick brown fox jumps over the lazy og") = 775f59f8e51aec29c57ac6ab850d58e8
The hash of the zero-length string is:
MDC2("") = 52525252525252522525252525252525
MDC-2 was covered by, issued on March 13, 1990 but filed by IBM on August 28, 1987. Because of patent concerns support for MDC-2 has been disabled in OpenSSL on most Linux distributions and is not implemented by many other cryptographic libraries. It is implemented in GPG's libgcrypt.
The patent was due to expire on August 28, 2007, twenty years after the filing date. It actually expired in 2002[2] because IBM did not pay the renewal fee. The Canadian patent was not renewed and no European patent was granted so MDC-2 can now be freely used.