暗号学において、MDC-2(Modification Detection Code 2、マイヤー・シリングとも呼ばれ、ISO 10118-2で標準化)は暗号ハッシュ関数の一種である。MDC-2は、理想暗号モデルにおける安全性の証明を備えたブロック暗号に基づくハッシュ関数である。 [ 1 ]出力ハッシュの長さは、基礎となるブロック暗号によって異なる。
を、それぞれ長さ の(平文) と(鍵) を入力として、長さ の暗号文を計算するブロック暗号関数とします。与えられたメッセージをハッシュする場合、MDC-2 アルゴリズムは以下のように進行します。 を2 つの異なるサイズ の定数とします。をそれぞれサイズとすると、メッセージの ハッシュは次のように表されます。
ここで はの長さを持つ半分などに分割されます。
MDC-2がDESブロック暗号を使用する場合、128ビット(16バイト)のMDC-2ハッシュは通常、32桁の16進数で表されます。は8バイトの文字列5252525252525252として選択され、は8バイトの文字列2525252525252525(16進数で表記)として選択されます。さらに、各反復処理の前に、の最初のバイトA[0]は(A[0] & 0x9f) ^ 0x40として再計算され、の最初のバイトB[0]は(B[0] & 0x9f) ^ 0x20として再計算されます。
以下は、43 バイトのASCII入力 (長さが DES ブロック サイズの 8 バイトの倍数になるように 5 つのゼロ バイトが埋め込まれている) と、対応する MDC-2 ハッシュを示しています。
MDC2(「素早い茶色のキツネが怠け者の犬を飛び越える」) = 000ed54e093d61679aefbeae05bfe33a メッセージに小さな変更を加えただけでも(確率的に)完全に異なるハッシュが生成されます。たとえば、d次のように変更されますc。
MDC2(「素早い茶色のキツネは怠け者の歯車を飛び越える」) = 775f59f8e51aec29c57ac6ab850d58e8 長さゼロの文字列のハッシュは次のとおりです。
MDC2("") = 5252525252525252525252525252525 MDC-2は、1990年3月13日に発行された米国特許4,908,861号で保護されていましたが、 IBMによって1987年8月28日に出願されました。特許上の懸念から、ほとんどのLinuxディストリビューションのOpenSSLではMDC-2のサポートが無効化されており、他の多くの暗号ライブラリでも実装されていません。GPGのlibgcryptでは実装されています。
特許は出願日から20年後の2007年8月28日に失効する予定でしたが、IBMが更新料を支払わなかったため、実際には2002年に失効しました[ 2 ]。カナダ特許は更新されず、欧州特許も取得されなかったため、MDC-2は現在自由に使用できます。