LMハッシュ

LMハッシュLanManLAN Managerハッシュとも)は、もともとLAN ManagerWindows NT以前のWindowsパスワードを保存するために使われていたハッシュ関数であるが、後述のように、すでに破られている。過去のLAN Managerへの後方互換性を図るため、LMハッシュはのちのWindowsでも生成されていたが、マイクロソフト自身がこのハッシュ生成をオフにするよう管理者へ推奨している。そして、Windows Vistaではデフォルトでオフとなるに至ったが、サードパーティー製のCIFS実装の中には、未だにLMハッシュを使うものが存在する。

アルゴリズム

LMハッシュの計算方法は次のようになっている[1][2]

  1. パスワードは最長14文字に規制される[注 1]
  2. パスワードの小文字を大文字に変換する。
  3. パスワードをOEMコードページとして解釈する[3]
  4. 14バイトに足りない分をヌル文字でパディングする[4]
  5. 14バイトの長さになったパスワードを前後7バイトずつに分ける。
  6. それぞれの片割れ(7バイト = 56ビット)をDESの鍵として使えるように、7ビットごとに区切り、区切った1つ1つの最上位に0のビットを1ビット追加して(例えば、101010001010100とする)64ビットの長さに変換する。なお、DESの実質の鍵長は56ビットであるが、パリティビットである8ビットを加えた64ビットの形でやりとりされる。この過程で挿入したビットは、そのパリティビットの位置に当たり、DESの計算には使われない。
  7. 生成した鍵でASCII文字列の「KGS!@#$%[注 2]を暗号化する。DESの暗号利用モードはECBモードとし、パディングモードはNONEとする。
  8. こうして得られた2つの暗号文字列をつなげた16バイトの値がLMハッシュとなる。

脆弱性

LMハッシュは、標準化されたブロック暗号であるDESを使ってはいるものの、設計段階でいくつもの脆弱性を抱えた実装であり、元のパスワードを決定可能となってしまっている[5]。まず、パスワードが最長14文字に制限されているため、ASCIIの印字可能文字が95文字しかないことを考えれば、鍵空間は 95 14 2 92 {\displaystyle 95^{14}\approx 2^{92}} に限られる。

そして、7文字以上のパスワードは半分に分けてそれぞれをハッシュ化するため、7文字ごとに解析することができるという脆弱性がある。パスワード7文字が取りうる組み合わせは 95 7 2 46 {\displaystyle 95^{7}\approx 2^{46}} しかなく、 14文字を一気に解析するのと比べてはるかに少なくなる。英数字のみのパスワードであれば、通常のデスクトップパソコンでも、数時間程度で総当り攻撃により元のパスワードを得ることができる。 さらに言えば、ハッシュを取る前に小文字は大文字となっているので、7文字分の鍵空間は 69 7 2 43 {\displaystyle 69^{7}\approx 2^{43}} まで減ることとなる。

また、LMハッシュにはハッシュ値の事前計算を防ぐためのソルト (暗号)が使われていない。そのため、レインボーテーブルのような、時間と空間のトレードオフを利用した攻撃が成立する。 さらに、7文字以下のパスワードを使った場合、後半7バイトはすべてヌル文字で埋められ、0xAAD3B435B51404EEという決まった値を生成するので、短いパスワードを簡単に判別できる。 2003年には、Ophcrackという、レインボーテーブルを使ったツールが登場し、事前に計算したデータにより、英数字のみのパスワードを数秒で破れるようになっている。 他にもRainbowCrack(英語版)L0phtCrack(英語版)Cain(英語版)といった攻撃ツールがあり、LMハッシュは簡単に破れるようになってしまっている。

LMハッシュの使い方にも問題があり、パスワードの代わりにハッシュをそのまま送ることで認証を突破可能となる。

対策

LMハッシュの生成方法、そして認証方法に由来する脆弱性へ対応するために、マイクロソフトでは1993年Windows NT 3.1NTLMv1プロトコルを導入した。 NTLMのハッシュではUnicodeに対応し、LMhash=DESeach(DOSCHARSET(UPPERCASE(password)), "KGS!@#$%")という計算法から、NThash=MD4(UTF-16-LE(password))として、 さらには解析を容易にするパディングや長さ制限は廃止している。ただし、認証ステップでは56ビットの強度しかないDESが依然として使われていたほか、ソルトも施されないままであった。 さらに、NTLMの導入後もLMハッシュによる認証がデフォルトで有効となったままの期間が続き、セキュリティは向上しないままであった。パスワードの長さに管理者が最低ラインを設けられる様になるまでにも時間がかかった。

のちのWindowsではケルベロス認証を取り入れたNTLMv2が実装され、LAN Managerが時代遅れとなっても、Windows VistaWindows Server 2008より前のWindowsではLAN ManagerやWindows Me以前、そしてNetBIOSを利用するアプリケーションの後方互換性のためにLMハッシュはデフォルトで生成されていた。そのため、特に必要がなければLM認証やNTLM認証をオフにすることが推奨されてきた[6]

Windows VistaやWindows Server 2008以降では、デフォルトでLMハッシュを生成しなくなったが、アカウントごとのセキュリティポリシーや、Active Directoryのグループポリシーで有効にすることもできる。同じ設定を、Windows XP以前のWindows NT系システムでLMハッシュを無効にするのに使うこともできる[6]。この他にも、LMハッシュを生成できない15文字以上のパスワードを設定するという対策法もある[4]

サードパーティー

サードパーティーによるCIFS実装では、LMハッシュを置き換える新しいプロトコルの実装に長い時間がかかっている。とりわけ、オープンソースのソフトウェアの場合、 新しいプロトコルの実装のためにリバースエンジニアリングが必要となるため、例えばNTLMv2の実装にSambaでは5年、JCIFSでは10年を費やしている。

NTLMプロトコルへの対応状況
製品 NTLMv1への対応 NTLMv2への対応
Windows NT 3.1 Gold版(1993年) 未サポート
Windows NT 3.5 Gold版(1994年) 未サポート
Windows NT 3.51 Gold版(1995年) 未サポート
Windows NT 4 Gold版(1996年) Service Pack 4[7] (1998年10月)
Windows 95 未サポート ディレクトリサービスクライアント(Windows 2000 Serverと同時の2000年2月にリリース)
Windows 98 Gold版 ディレクトリサービスクライアント(Windows 2000 Serverと同時の2000年2月にリリース)
Windows 2000 Gold版 Gold版
Windows Me Gold版 ディレクトリサービスクライアント(Windows 2000 Serverと同時の2000年2月にリリース)
Samba ? Version 3.0[8] (2003年9月)
JCIFS 未サポート Version 1.3.0 (2008年10月)[9]
IBM AIX (SMBFS) 5.3 (2004)[10] v7.1でも未対応[11]

関連項目

注釈

  1. ^ 14文字を超えるパスワードからは、LMハッシュを生成することができない。
  2. ^ この「KGS!@#$%」という文字列は、Key of Glen and Steve、そして、 Shift + 12345を意味するとされる。Glen ZornとSteve Cobbは RFC 2433 (Microsoft PPP CHAP Extensions)の著者である。

出典

  1. ^ “Windows 2000 セキュリティ強化ガイド 第3章”. マイクロソフト. 2013年11月28日閲覧。
  2. ^ Glass, Eric (2003 es). “The NTLM Authentication Protocol”. 2006年6月5日閲覧。
  3. ^ “List of Localized MS Operating Systems”. マイクロソフト. 2012年12月16日閲覧。
  4. ^ a b “NoLMHash ポリシーが有効になっている場合、クラスター サービス アカウントのパスワードを 15 文字以上に設定する必要があります。”. マイクロソフト (2006年10月30日). 2013年11月28日閲覧。
  5. ^ Jasper M. Johansson (2004年6月29日). “Windows Passwords: Everything You Need to Know” (PPT). マイクロソフト. 2013年11月28日閲覧。
  6. ^ a b “Windows でパスワードの LAN Manager ハッシュが Active Directory とローカル SAM データベースに保存されないようにする方法”. Microsoft Knowledge Base. 2013-11-28 es閲覧。
  7. ^ “Windows NT 4.0 Service Pack 4 Readme.txt File (40-bit)”. マイクロソフト (1998年10月25日). 2010年5月27日閲覧。
  8. ^ “The Samba Team announces the first official release of Samba 3.0”. samba.org (2003年9月24日). 2010年5月27日閲覧。
  9. ^ “The JCIFS library: News”. 2010年5月27日閲覧。
  10. ^ “AIX 5L Version 5.3: Networks and Communication Management” (pdf). IBM. p. 441 (2010年3月15日). 2012年9月18日閲覧。
  11. ^ “AIX 7.1: Networks and Communication Management” (pdf). IBM. p. 479 (2011年12月5日). 2012年9月18日閲覧。

外部リンク

英語版ウィキブックスに本記事に関連した解説書・教科書があります。
Reverse Engineering/Cracking Windows XP Passwords
  • Making a Faster Cryptanalytic Time-Memory Trade-Off, Philippe Oechslin, Advances in Cryptology - CRYPTO 2003
  • Ophcrack, the time-memory-trade-off-cracker
  • Cain and Abel
  • A L0phtCrack Technical Rant from Mudge considering LM Hash implementation
セキュリティ要約(英語版)
一般的関数
SHA-3最終候補(英語版)
その他の関数
  • FSB(英語版)
  • ECOH(英語版)
  • GOST(英語版)
  • HAS-160(英語版)
  • HAVAL(英語版)
  • Kupyna(英語版)
  • LMハッシュ
  • MDC-2(英語版)
  • MD2
  • MD4
  • MD6(英語版)
  • N-Hash(英語版)
  • RadioGatún
  • RIPEMD
  • SipHash(英語版)
  • Snefru(英語版)
  • Streebog(英語版)
  • SWIFFT(英語版)
  • Tiger(英語版)
  • VSH(英語版)
  • WHIRLPOOL
  • crypt(3)(英語版) (DES)
MACアルゴリズム
  • DAA(英語版)
  • CBC-MAC
  • HMAC
  • OMAC(英語版)/CMAC
  • PMAC(英語版)
  • VMAC(英語版)
  • UMAC(英語版)
  • Poly1305
認証付き暗号モード
  • CCM
  • CWC(英語版)
  • EAX(英語版)
  • GCM
  • IAPM(英語版)
  • OCB(英語版)
攻撃
設計
標準化
  • CRYPTREC
  • NESSIE
  • NISTハッシュ関数コンベンション(英語版)
利用
  • ソルト
  • キーストレッチ(英語版)
  • メッセージ認証(英語版)
パスワードハッシュ関数
  • カテゴリ カテゴリ:ハッシュ関数・メッセージ認証コード・認証付き暗号
カテゴリ カテゴリ