LMハッシュとは
LMハッシュ(LanManハッシュ、
LAN Managerハッシュとも呼ばれる)は、初期のWindowsシステム、具体的には
LAN ManagerやWindows NT以前のバージョンで、
パスワードを保存するために利用されていたハッシュ関数です。しかし、その設計上の欠陥から、現在ではセキュリティ上のリスクが高いと認識されており、
マイクロソフト自身も使用を推奨していません。
LMハッシュの歴史的背景
過去の
LAN Managerとの互換性を保つため、LMハッシュは後続のWindowsシステムでも生成されていましたが、Windows Vista以降ではデフォルトで無効化されました。しかし、一部のサードパーティ製CIFS実装においては、依然としてLMハッシュが使用されている場合があります。
LMハッシュのアルゴリズム
LMハッシュは、以下の手順で計算されます。
1.
パスワードの制限: パスワードは最大14文字に制限されます。
2.
大文字変換: パスワード内の小文字は
大文字に変換されます。
3.
OEMコードページ解釈: パスワードはOEMコードページとして解釈されます。
4.
ヌルパディング: パスワードが14バイトに満たない場合、
ヌル文字で埋められます。
5.
分割: 14バイトに調整された
パスワードは、7バイトずつの前後に分割されます。
6.
DES鍵生成: それぞれの7バイト(56ビット)は、DESの鍵として使用できるように変換されます。具体的には、7ビットごとに区切り、各区切りの最上位に0ビットを追加して64ビットにします。
7.
DES暗号化: 生成された2つの鍵を用いて、
ASCII文字列「KGS!@#$%」をDESで
暗号化します。この際、DESの
暗号利用モードはECBモード、パディングモードはNONEを使用します。
8.
ハッシュ値: 2つの
暗号化された文字列を連結した16バイトの値がLMハッシュとなります。
LMハッシュの脆弱性
LMハッシュは、DESという標準化された
ブロック暗号を使用していますが、設計段階で多くの脆弱性を抱えています。これらの脆弱性により、元の
パスワードが容易に解析されてしまう可能性があります。
パスワード長の制限: パスワードが最大14文字に制限されているため、総当り攻撃の対象となる鍵空間が大幅に減少します。
ASCII印字可能文字(95文字)を用いた場合、約2の92乗のパターンしかありません。
パスワードの分割: パスワードが7文字以上の場合は、前後7文字に分割してハッシュ化されるため、7文字ごとに解析が可能となり、さらに解析が容易になります。
7文字の場合、約2の46乗のパターンにまで鍵空間が減少します。
大文字変換: ハッシュ化前に小文字が大文字に変換されるため、7文字分の鍵空間はさらに減少し、約2の43乗のパターンしか残りません。
ソルトの欠如: LMハッシュには、レインボーテーブル攻撃を防ぐためのソルトが使用されていません。これにより、事前に計算されたハッシュ値テーブルを利用した攻撃が成立します。
短いパスワードの脆弱性: 7文字以下のパスワードの場合、後半の7バイトがすべてヌル文字で埋められ、固定のハッシュ値が生成されるため、パスワードの判別が容易になります。
これらの脆弱性から、Ophcrackのようなツールを使うことで、英数字のみのパスワードであれば、数秒で解析が可能になっています。また、RainbowCrack、L0phtCrack、Cainといった他の攻撃ツールも存在します。
LMハッシュの認証における脆弱性
LMハッシュをパスワードの代わりにそのまま認証に使うこともできるため、ハッシュ値が漏洩した場合、認証を突破される危険性があります。
LMハッシュへの対策
マイクロソフトは、LMハッシュの脆弱性に対処するため、Windows NT 3.1でNTLMv1プロトコルを導入しました。NTLMハッシュでは、Unicodeに対応し、ハッシュ生成時にパディングや長さ制限を廃止しました。しかし、NTLMv1においても、DESが使用され、ソルトが使用されないなど、依然として脆弱性が残っていました。
NTLM導入後も、LMハッシュによる認証がデフォルトで有効であったため、セキュリティ上の改善は限定的でした。その後、ケルベロス認証を取り入れたNTLMv2が導入され、LMハッシュは時代遅れとなりました。Windows VistaやWindows Server 2008以降では、デフォルトでLMハッシュは生成されなくなりましたが、アカウントごとのセキュリティポリシーや、Active Directoryのグループポリシーで有効にすることも可能です。
推奨される対策
LM認証やNTLM認証を無効化する
15文字以上のパスワードを設定する
サードパーティでのLMハッシュの扱い
サードパーティ製のCIFS実装では、LMハッシュを置き換える新しいプロトコルの実装に時間がかかっています。特にオープンソースソフトウェアでは、新しいプロトコルの実装にリバースエンジニアリングが必要となるため、開発に時間がかかる傾向があります。SambaではNTLMv2実装に5年、JCIFSでは10年を要しました。
関連事項
パスワードクラック
辞書攻撃
注釈
本記事は、LMハッシュの脆弱性とその対策に関する技術的な解説を目的としています。
出典
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