NTLM認証 【NT LAN Manager authentication】
概要
NTLM認証(NT LAN Manager authentication)とは、Windowsネットワークで標準的に用いられた利用者認証方式の一つ。1993年に従来のLM認証(LAN Manager認証)に代えてWindows NT 3.1で導入されたもので、Windows 2000以降はKerberos(ケルベロス)認証が標準となったが、Kerberosが使えない状況などでその後も広く利用され続けた。企業内ネットワークなどで利用者のアカウント情報を集中管理しているドメインコントローラにログオンしたり、共有フォルダや共有プリンタなどにアクセスする際の認証方式として使われる。
仕様の策定から時間が経ち、DESやMD5など現在では十分安全とは言えなくなっている技術を含むため、同社はインターネットなど信頼できない経路を含む環境ではなるべく使用せず、最新の方式が利用できる環境へ更新するよう呼びかけている。
NTLM認証ではパスワードなどの秘密の情報を通信回線にそのまま流すことはせず、チャレンジ/レスポンス認証と呼ばれる方式を利用する。クライアントがサーバに認証の開始を申請すると、サーバは乱数を元に決めた毎回異なるランダムなデータ列(チャレンジ)を送る。
クライアントはパスワードとチャレンジを組み合わせたものをハッシュ関数を通してハッシュ値(レスポンス)に変換し、サーバに送り返す。サーバは手元の正しいパスワードから同様のハッシュ値を算出し、レスポンスに一致していれば認証成功となる。
一連の過程でパスワードそのものは送受信されておらず、悪意の第三者が盗聴することはできない。チャレンジやレスポンスを盗聴してもパスワードを割り出すのは困難である。
NTLMv1
当初の仕様であるNTLMv1では、サーバが8バイトのチャレンジを送り、クライアントが24バイトのレスポンスを2つ返す。
クライアントはパスワードから16バイトのハッシュ値を生成し、これを3分割したものを暗号鍵としてチャレンジをDES方式で暗号化する。3つの暗号文を連結して24バイトのレスポンスとする。この過程を算出法が異なる2つのハッシュ値(LMハッシュ/NTハッシュ)について繰り返す。
NTLMv2
Windows NT 4.0 SP4で導入されたNTLMv2はより安全性を高めた方式で、サーバは8バイトのチャレンジを送り、クライアントは可変長のレスポンスを返す。サーバから送られるチャレンジ(サーバチャレンジ)だけでなく、クライアント側で生成したランダムな8バイトのクライアントチャレンジも用いる。
ハッシュ化されたパスワードに、サーバチャレンジ、クライアントチャレンジ、ユーザー名、ドメイン名、現在時刻などを含むデータを鍵として2段階のHMAC-MD5符号化を行い、16バイトのハッシュ値を得る。これをクライアントチャレンジなどと連結してレスポンスとして送り返す。