Aho-Corasick-Algorithmus

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Der Aho-Corasick-Algorithmus ist ein Algorithmus zur Suche von Zeichenfolgen, der von Alfred V. Aho und Margaret J. Corasick 1975 entwickelt wurde.

Der Algorithmus führt eine Art Wörterbuch-Vergleich durch, bei dem die Eingabe effizient nach vorher festgelegten Signaturen durchsucht wird. Dabei wird kein Zeichen der Eingabe mehr als einmal gelesen. Das Verfahren ist dann besonders effizient, wenn sich die Signaturen überlappen, d.h. in Präfix- und Suffix-Beziehungen stehen (z.B. {"Igel", "Geld", "Eldorado"}). Der Aho-Corasick-Algorithmus besteht aus zwei Phasen:

  1. Zunächst erzeugt der Algorithmus auf Basis der gegebenen bzw. gewünschten Wörterbuchmenge eine Trie-Struktur, die auch als endlicher Zustandsautomat interpretiert werden kann. Jedem Zustand wird eine Ausgabemenge zugeordnet, die zunächst leer ist. Für jeden Zustand, bei denen ein Suchwort endet, wird dieses Suchwort seiner Ausgabemenge hinzugefügt.
  2. In der zweiten Phase werden die Knoten oder Zustände der Trie paarweise disjunkt nummeriert und eine Fehler Funktion berechnet. Die Funktion ist für jeden Knoten definiert und legt fest in welchem Zustand die Verarbeitung fortgesetzt wird, falls das gerade gelesene Zeichen der Eingabe keinen regulär gültigen Zustandsübergang evoziert. Dadurch wird es möglich schnell zwischen bereits erkannten Teilsignaturen zu wechseln und die Erkennung fortzusetzen ohne den Automaten neu starten zu müssen.

Beispiel[Bearbeiten | Quelltext bearbeiten]

Visualisierung eines mustererkennenden Automaten

Einfach gesagt, baut der Algorithmus einen endlichen Zustandsautomaten auf und vergleicht diesen mit dem Eingabetext. Falls die Signatur bereits im Vorfeld bekannt ist (zum Beispiel bei einer Anti-Viren-Datenbank), dann kann der Aufbau auch vor dem Start des Programms off-line erfolgen und zur späteren Benutzung abgespeichert werden.

Der Aho-Corasick-Algorithmus ist die Basis des UNIX-Kommandos fgrep, des Intrusion Detection Systems Snort und der Web Application Firewall ModSecurity.[1]

Weblinks[Bearbeiten | Quelltext bearbeiten]

Die Implementierung des Aho-Corasick Algorithmus in Java

Quellen[Bearbeiten | Quelltext bearbeiten]

  1. Breach Security Inc.: ModSecurity Reference Manual (PDF; 524 kB)