MD5、MD4 のメモ

MD5Base64 の記事で書いたライブラリが大体実装している。MD4 は時代遅れなせいか、MD5 よりも実装が少ないようだ。MD4 が使われている例としては、Active Directory で活躍する Windows 統合認証などの基礎となる NTLM 認証などがある。

MD5 と MD4 は非常によく似ていて、RFC の内容もほとんど同じである。RFC で違うのは以下のようなところだ。

  • 3.4
    • MD5 では F, G, H, I 関数 があったが、MD4 では F, G, H 関数までで G 関数は内容が異なる
      • MD5 では XZ v Y not(Z)
      • MD4 では XY v XZ v YZ
    • MD5 ではラウンドが 1 〜 4 だが、MD4 では 1 〜 3 まで
    • 各ラウンドでの処理内容が異なる
  • Code
    • OpenSSL
      • Eric Young 氏による実装
    • apr*2
      • RFC のコードをそのまま使っている
    • CryptoPP

MD5 の機能を RSA のライセンスから逃れて使いたい場合には、RFC1321-based (RSA-free) MD5 libraryというものがある。ソースコードを見ると、いたるところでエンディアンを意識したコードが出てくるのだけど、RFC のコードはエンディアンに依存した処理があるということの表れなんだろうか。apr に載ってるのなら、その辺はクリアしていそうな気がするのだけれど・・・。


apr には、MD4、MD5SHA-1 の三つだけが搭載されている。これ以上のことは mod_ssl にやらせるけど、普通にありがちな HTTP でこれらは利用されるということの表れなのかな。

*1:RFC にはコードがついているのだが、”derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" の一文をいろんなところに入れなくてはならないらしい

*2:Apache Portable Runtime