DE112012002624T5 - Regex-Kompilierer - Google Patents

Regex-Kompilierer Download PDF

Info

Publication number
DE112012002624T5
DE112012002624T5 DE112012002624.1T DE112012002624T DE112012002624T5 DE 112012002624 T5 DE112012002624 T5 DE 112012002624T5 DE 112012002624 T DE112012002624 T DE 112012002624T DE 112012002624 T5 DE112012002624 T5 DE 112012002624T5
Authority
DE
Germany
Prior art keywords
states
nfa
dfa
state
epsilon
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE112012002624.1T
Other languages
English (en)
Other versions
DE112012002624B4 (de
Inventor
Rajan Goyal
Satyanarayana Lakshmipathi Billa
Kenneth A. Bullis
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Marvell Asia Pte Ltd
Original Assignee
Cavium LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Cavium LLC filed Critical Cavium LLC
Publication of DE112012002624T5 publication Critical patent/DE112012002624T5/de
Application granted granted Critical
Publication of DE112012002624B4 publication Critical patent/DE112012002624B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4498Finite state machines
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies
    • H04L63/0245Filtering by information in the payload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1408Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
    • H04L63/1416Event detection, e.g. attack signature detection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Algebra (AREA)
  • Pure & Applied Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Storage Device Security (AREA)
  • Computer And Data Communications (AREA)

Abstract

Ein Verfahren und eine entsprechende Vorrichtung betreffen ein Umwandeln eines „nichtdeterministischer endlicher Automat (NFA – Non-Deterministic Finite Automata)”-Graphs für eine gegebene Menge von Mustern in einen „deterministischer endlicher Automat (DFA – Deterministic Finite Automata)”-Graph mit einer Anzahl von Zuständen. Jeder der DFA-Zustände wird einem Zustand oder mehreren Zuständen des NFA-Graphs zugeordnet. Ein Hash-Wert des einen Zustands oder mehrerer Zustände des NFA-Graphs, der/die DFA-Zuständen zugeordnet ist/sind, wird berechnet. Eine DFA-Zustände-Tabelle korreliert jeden der Anzahl von DFA-Zuständen mit dem Hash-Wert des einen Zustands oder der mehreren Zustände des NFA-Graphs für das gegebene Muster.

Description

  • VERWANDTE ANMELDUNG
  • Diese Anmeldung ist eine Fortsetzung der US-Anmeldung Nr. 13/168,450, eingereicht am 24. Juni 2011, und beansprucht Priorität zu dieser. Die gesamten Lehren der obigen Anmeldung sind hierin durch Bezugnahme aufgenommen.
  • HINTERGRUND
  • Das OSI(Open Systems Interconnection)-Referenzmodell definiert sieben Netzwerkprotokollschichten (L1–L7), die zur Kommunikation über ein Übertragungsmedium verwendet werden. Die oberen Schichten (L4–L7) repräsentieren Ende-zu-Ende-Kommunikationen und die unteren Schichten (L1–L3) repräsentieren lokale Kommunikationen.
  • Systeme mit Kenntnis bzw. Beachtung von Netzwerkanwendungen müssen eine Vielzahl von L3- bis L7-Netzwerkprotokollschichten verarbeiten, filtern und schalten, zum Beispiel L7-Netzwerkprotokollschichten, wie HTTP (HyperText Transfer Protocol) und SMTP (Simple Mail Transfer Protocol), und L4-Netzwerkprotokollschichten, wie TCP (Transmission Control Protocol). Zusätzlich zu einer Verarbeitung der Netzwerkprotokollschichten müssen die Systeme mit Kenntnis von Netzwerkanwendungen gleichzeitig diese Protokolle mit einer Zugriffs- und Inhalt-basierten Sicherheit über L4–L7-Netzwerkprotokollschichten sichern, einschließlich Firewall, VPN (Virtual Private Network), SSL (Secure Sockets Layer), IDS (Intrusion Detection System), IPSec (Internet Protocol Security), Anti-Virus (AV) und Anti-Spam-Funktionalität bei Leitungsgeschwindigkeit.
  • Netzwerkprozessoren sind für eine L2- und L3-Netzwerkprotokollverarbeitung mit hohem Durchsatz verfügbar, das heißt, ein Durchführen einer Paketverarbeitung, um Pakete mit Leitungsgeschwindigkeit weiterzuleiten. Typischerweise wird ein Universalprozessor verwendet, um L4–L7-Netzwerkprotokolle zu verarbeiten, die eine intelligentere Verarbeitung erfordern. Obwohl ein Universalprozessor die rechenintensiven Aufgaben durchführen kann, bietet er keine ausreichende Leistung, um die Daten so zu verarbeiten, dass sie mit Leitungsgeschwindigkeit weitergeleitet werden können.
  • Ein Netzwerkbetrieb mit Kenntnis von Inhalten erfordert eine Inspektion der Inhalte von Paketen bei „Leitungsgeschwindigkeit”. Der Inhalt kann analysiert werden, um zu bestimmen, ob es eine Sicherheitsverletzung oder einen Eingriff gegeben hat. Eine große Anzahl von Mustern und Regeln in der Form von regulären Ausdrücken wird angewendet, um sicherzustellen, dass alle Sicherheitsverletzungen oder Eingriffe erfasst werden. Ein regulärer Ausdruck ist ein kompaktes Verfahren zum Beschreiben eines Musters in einer Zeichenkette. Das einfachste Muster, das von einem regulären Ausdruck erkannt wird, ist ein einzelnes Zeichen oder eine Zeichenkette, zum Beispiel /c/ oder /cat/. Der reguläre Ausdruck umfasst auch Operatoren und Meta-Zeichen, die eine besondere Bedeutung haben.
  • Durch die Verwendung von Meta-Zeichen kann der reguläre Ausdruck für kompliziertere Suchen verwendet werden, wie „abc.*xyz”. Das heißt, finde die Zeichenkette „abc”, gefolgt von der Zeichenkette „xyz”, mit einer unbegrenzten Anzahl von Zeichen zwischen „abc” und „xyz”. Ein weiteres Beispiel ist der reguläre Ausdruck „abc..abc.*xyz”, d. h. Finden die Zeichenkette „abc”, gefolgt zwei Zeichen später von der Zeichenkette „abc” und eine unbegrenzte Anzahl von Zeichen später von der Zeichenkette „xyz”.
  • Eine Angriffserfassungssystem(IDS – Intrusion Detection System)-Anwendung prüft den Inhalt aller einzelnen Pakete, die durch ein Netzwerk gehen, und identifiziert verdächtige Muster, die einen Versuch angeben können, in ein System einzubrechen oder zu gefährden. Ein Beispiel eines verdächtigen Musters kann eine bestimmte Textzeichenkette in einem Paket gefolgt 100 Zeichen später von einer anderen bestimmten Textzeichenkette sein.
  • Eine Inhaltsuche wird typischerweise unter Verwendung eines Suchalgorithmus durchgeführt, wie ein deterministischer endlicher Automat (DFA – Deterministic Finite Automata) oder ein nichtdeterministischer endlicher Automat (NFA – Non-Deterministic Finite Automata), um den regulären Ausdruck zu verarbeiten.
  • ZUSAMMENFASSUNG
  • Ein Verfahren und eine entsprechende Vorrichtung betreffen ein Umwandeln eines „nichtdeterministischer endlicher Automat (NFA – Non-Deterministic Finite Automata)”-Graphs für eine gegebene Menge von Mustern in einen „deterministischer endlicher Automat (DFA – Deterministic Finite Automata)”-Graph mit einer Anzahl von Zuständen. Jeder der DFA-Zustände ist einem oder mehreren Zuständen des NFA-Graphs zugeordnet. Ein Hash-Wert des einen Zustands oder mehrerer Zustände des NFA-Graphs, der/die DFA-Zuständen zugeordnet ist/sind, wird berechnet. Eine DFA-Zustände-Tabelle korreliert jeden der Anzahl von DFA-Zuständen mit dem Hash-Wert des einen Zustands oder der mehreren Zustände des NFA-Graphs für das gegebene Muster.
  • Aktive Zeichen des gegebenen Musters, die mit einem Alphabet assoziiert sind, das von dem NFA-Graph und dem DFA-Graph erkannt wird, können bestimmt werden. Basierend auf der Bestimmung komprimiert das Verfahren den NFA-Graph und den DFA-Graph, um Muster zu erkennen, die nur aus den aktiven Zeichen des gegebenen Musters bestehen, das mit dem Alphabet assoziiert ist, das von dem NFA-Graph und dem DFA-Graph erkannt wird.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Das Obige wird aus der folgenden genaueren Beschreibung von beispielhaften Ausführungsbeispielen der Erfindung offensichtlich, wie in den beigefügten Zeichnungen dargestellt, in denen gleiche Bezugszeichen dieselben Teile in den verschiedenen Ansichten bezeichnen. Die Zeichnungen sind nicht unbedingt maßstabsgerecht, stattdessen soll der Schwerpunkt auf einer Veranschaulichung von Ausführungsbeispielen der vorliegenden Erfindung liegen.
  • 1 ist ein Blockdiagramm, das ein System darstellt, in dem eine Sicherheitsvorrichtung betrieben wird, um ein privates Netzwerk zu schützen.
  • 2 ist ein Blockdiagramm einer Sicherheitsvorrichtung, die mit der vorliegenden Erfindung verwendet werden kann.
  • 3 ist ein NFA-Graph eines beispielhaften NFAs.
  • 4 ist ein DFA-Graph eines beispielhaften DFAs.
  • 5A–G sind NFA- und DFA-Graphen und eine Tabelle, die das Konzept einer Graph-Explosion darstellen.
  • 6A–B sind Ablaufdiagramme eines Verfahrens zum Umwandeln eines NFA-Graphs in einen DFA-Graph.
  • 7 ist ein Ablaufdiagramm eines Verfahrens zum Bestimmen eines Epsilon-Abschlusses für einen Zustand in einem NFA-Graph.
  • 8A–C sind Ablaufdiagramme eines Verfahrens zum Umwandeln eines NFA-Graphs in einen DFA-Graph.
  • 9 ist ein Ablaufdiagramm eines Verfahrens zum Bestimmen eines Epsilon-Abschlusses für einen Zustand in einem NFA-Graph.
  • 9A9B sind Ablaufdiagramme eines Verfahrens zum Umwandeln eines NFA-Graphs in einen DFA-Graph.
  • 9C ist ein Ablaufdiagramm zum Bestimmen eines Epsilon-Abschlusses für eine Menge von NFA-Zuständen.
  • 10 zeigt eine Muster-Erkennungs- bzw. Zuordnungs-Maschine für die Suche zum Beispiel nach Mustern „hers”, „his” und „she” unter Verwendung eines Aho-Corasik-Algorithmus.
  • 11A zeigt Ausfallwerte für jeden Zustand einer Mustererkennungsmaschine.
  • 11B zeigt die Ausgabefunktionswerte für Zustände einer Mustererkennungsmaschine.
  • 12 zeigt einen Zustandsbaum für beispielhafte verankerte Muster „help” und „shell”.
  • 12A zeigt Ausfallwerte für jeden Zustand des Zustandsbaums von 12.
  • 12B zeigt Ausgabefunktionswerte für die Zustände 14 und 19 des Zustandsbaums von 12.
  • 13A zeigt Ausfallwerte für jeden Zustand des Zustandsbaums in 12.
  • 13B zeigt Ausgabefunktionswerte für die Zustände 12, 14, 17 und 19 des Zustandsbaums von 12.
  • DETAILLIERTE BESCHREIBUNG
  • Bevor beispielhafte Ausführungsbeispiele der vorliegenden Erfindung im Detail beschrieben werden, wird eine beispielhafte Sicherheitsvorrichtung, in die die Ausführungsbeispiele implementiert werden können, und eine typische Verarbeitung unter Verwendung von DFA und NFA direkt im Anschluss beschrieben, um dem Leser die erfinderischen Merkmale der vorliegenden Erfindung verstehen zu helfen.
  • Eine „Regulärer Ausdruck(Regex – Regular expression)”-Verarbeitung wird in vielen Paketverarbeitungssystemen immer häufiger. Eine Regex-Verarbeitung kann in herkömmlichen Sicherheitssystemen (zum Beispiel IPS(Intrusion Prevention Systems), Firewalls und UTM(Unified Threat Management)-Vorrichtungen), neueren Sicherheitssystemen (zum Beispiel Anti-Malware, Anti-Spyware, Zero-Day-Altach-Detection), neu entstehenden Protokoll/Anwendungserkennungssystemen in drahtgebundenen/drahtlosen Netzwerken für eine Abrechnung, Dienstqualität (QoS – Quality of Service) und Netzwerküberwachungssystemen angewendet werden.
  • Eine „Regulärer Ausdruck”-Verarbeitung kann in zwei Stufen aufgeteilt werden, i) Kompilieren von Signaturen/Mustern in binäre Datenstrukturen, wie ein DFA-Graph oder ein NFA-Graph, und ii) Verarbeiten empfangener Pakete in Bezug auf einen kompilierten Graph.
  • Speicher-gegen-Leistung-Kompromiss-Anforderungen treten an beiden Stufen einer Regex-Verarbeitung auf. Kompilierer, denen große Laufzeitspeicher-Fußabdrücke zugeteilt sind, können Muster mit höherer Geschwindigkeit und Effizienz kompilieren. Ähnlich können größere Graphen oder äquivalente binäre Datenstrukturen, die für eine Paketprüfung verwendet werden, eine bessere Paketprüfungsleistung liefern als kompakte Graphen.
  • In der Praxis wird für einen Kompilierer erwartet, Regeln sehr schnell zu kompilieren mit so wenig Speicher-Fußabdruck wie möglich. Ein Grund dafür ist, dass Muster auf dem Gebiet von Netzwerkvorrichtungen (z. B. Router, Switches, UTM, etc.) aktualisiert werden, während die Netzwerkvorrichtung noch läuft (z. B. Prüfen/Weiterleiten von Paketen). Daher gibt es eine Notwendigkeit, Regeln unter Verwendung eines begrenzten Speichers in der eingebetteten Router-Vorrichtung zu kompilieren. Da die Regeln/Muster verwendet werden, um Angriffe auf ein System zu verhindern oder einen Verkehr zu stoppen, der durch Viren infiziert ist, müssen die Regeln/Muster so früh wie möglich angewendet werden, um die Sicherheit des Systems zu optimieren. Somit sollte ein Kompilierer in der Lage sein, Regeln sehr schnell in binäre Datenstrukturen zu kompilieren.
  • Allgemeine Ansätze kompilieren neue Muster oder Signaturen in die Graphen auf einem zentralen Server, der dann die kompilierten Graphen an einen Router sendet. Der Router prüft dann eingehende Pakete in Bezug auf die empfangenen Graphen durch Führen bzw. Leiten der Pakete durch jeden Graph. Effiziente Kompilierer benötigen ausreichende Speicherressourcen. Wenn ein Kompilierer nicht genügend Ressourcen hat, dann ist die Leistung des Kompilierers langsam. Somit kompilieren naive Ansätze keine neuen Muster oder Signaturen auf einem Router, da Router im Allgemeinen nicht genügend Ressourcen haben (d. h. RAM (Random Access Memory) und CPU-Rechner).
  • Ausführungsbeispiele der vorliegenden Erfindung kompilieren neue Muster/Signaturen in Graphen auf einem Router unter Beibehaltung von Leistungsstufen eines Kompilierers eines zentralen Servers.
  • 1 ist ein Blockdiagramm, das ein System 100 zeigt, das eine Sicherheitsvorrichtung 110, ein geschütztes Netzwerk 115 und ein öffentliches Netzwerk 105 umfasst. Das öffentliche Netzwerk 105 kann ein ungesichertes Weitbereichsnetzwerk (WAN – wide-area network), wie das Internet, ein drahtloses Netzwerk, ein lokales Netzwerk oder einen anderen Typ von Netzwerk aufweisen. Das geschützte Netzwerk 115 kann ein gesichertes Computernetzwerk aufweisen, wie ein lokales Netzwerk in einem Büro oder einem Datenzentrum. Wie gezeigt, kann das lokale Netzwerk ein Unternehmensnetzwerk 120 mit einer Vielzahl von Arbeitsstationen 125 sein. Die Vielzahl von Arbeitsstationen 125 sind betriebsfähig mit einer Datenbank 130, einem FTP(File Transfer Protocol)-Server 135 und einem Intranet-Server 140 gekoppelt.
  • In dem System 100 ist die Sicherheitsvorrichtung 110 mit dem öffentlichen Netzwerk 105 und dem geschützten Netzwerk 115 verbunden derart, dass Netzwerkverkehr, der von dem öffentlichen Netzwerk 105 zu dem geschützten Netzwerk 115 fließt, zuerst zu der Sicherheitsvorrichtung 110 fließt. Die Sicherheitsvorrichtung 110 kann eine eigenständige Netzwerkvorrichtung (zum Beispiel ein Router), eine Komponente einer anderen Netzwerkvorrichtung (zum Beispiel eine Firewall-Vorrichtung), ein Software-Modul, das auf einer Netzwerkvorrichtung ausgeführt wird, oder eine andere Konfiguration sein. Im Allgemeinen überprüft die Sicherheitsvorrichtung einen Netzwerkverkehr von dem öffentlichen Netzwerk 105 und bestimmt, ob der Netzwerkverkehr irgendwelche Computersicherheitsbedrohungen umfasst. Eine Computersicherheitsbedrohung ist ein Versuch, einen Zugriff auf sensible Information zu erlangen, ein Versuch, den Betrieb einer Organisation zu stören, oder ein anderer Typ eines Angriffs. Beispielhafte Computersicherheitsbedrohungen umfassen Computerviren, Spyware, Rootkits, Versuche zum Erraten von Passwörtern, Phishing-Emails, Anforderungen, die mit einem Dienstverweigerungs- bzw. Denial-of-Service-Anhang assoziiert sind, und andere Typen von Angriffen.
  • Eine Computersicherheitsbedrohung kann mit einem oder mehreren Symbolmuster(n) assoziiert sein, das/die die Computersicherheitsbedrohungen identifiziert/identifizieren, aber keine harmlosen Daten identifizieren. Ein Symbolmuster, das mit einer Computersicherheitsbedrohung assoziiert ist, wird hier als „Bedrohungssignatur” bezeichnet. Zum Beispiel kann ein bestimmter Virus immer eine Sequenz von Anweisungen umfassen, die bei Ausführung eine schädliche Operation durchführen.
  • Wenn die Sicherheitsvorrichtung 110 bestimmt, dass ein gegebener Strom von Netzwerkverkehr keine Computersicherheitsbedrohungen umfasst, kann die Sicherheitsvorrichtung 110 den Strom von Netzwerkverkehr an das geschützte Netzwerk 115 kommunizieren. Andernfalls, wenn die Sicherheitsvorrichtung 110 bestimmt, dass der Strom eine oder mehrere Computersicherheitsbedrohung(en) umfasst, kann die Sicherheitsvorrichtung 110 den Netzwerkverkehr fallen lassen bzw. verwerfen, den Netzwerkverkehr protokollieren, den Verkehr an einen Verkehrsanalysierer zur weiteren Analyse weiterleiten und/oder eine andere Aktion in Bezug auf den Netzwerkverkehr durchführen. Auf diese Weise kann die Sicherheitsvorrichtung 110 verhindern, dass Netzwerkverkehr, der Computersicherheitsbedrohungen umfasst, das geschützte Netzwerk 115 erreicht.
  • Um eine Sicherheitsbedrohung zu erfassen, die mit einem oder mehreren Symbolmuster(n) assoziiert ist, empfängt die Sicherheitsvorrichtung 110 gegebene Muster oder Sequenzen von Symbolen von einem Sicherheitsdatenzentrum 140 zur Überwachung in eingehendem Datenverkehr von dem öffentlichen Netzwerk 105. Sobald die Sicherheitsvorrichtung die zu überwachenden gegebenen Muster empfängt, erzeugt die Sicherheitsvorrichtung endliche Zustandsmaschinen für jedes zu überwachende gegebene Muster. Die Sicherheitsvorrichtung 110 führt bzw. leitet dann empfangene Datenpakete durch endliche Zustandsmaschinen, um zu bestimmen, ob ein eingehendes Datenpaket eine mögliche Sicherheitsbedrohung umfasst.
  • 2 ist ein High-Level-Blockdiagramm einer beispielhaften Sicherheitsvorrichtung 200, die mit der vorliegenden Erfindung verwendet werden kann. Die Sicherheitsvorrichtung weist einen Speicher 210 auf, der mit einem Prozessor 225 über einen Speicherbus 245 gekoppelt ist, und eine Speichervorrichtung 230 und eine Netzwerkschnittstelle 240, die mit dem Prozessor über einen Eingabe/Ausgabe(E/A bzw. I/O – input/output)-Bus 250 gekoppelt sind. Es sollte angemerkt werden, dass die Sicherheitsvorrichtung andere Vorrichtungen umfassen kann, wie Tastaturen, Anzeigeeinheiten und dergleichen. Die Netzwerkschnittstelle 240 verbindet die Sicherheitsvorrichtung mit dem gesicherten Netzwerk 115, dem öffentlichen Netzwerk 105 und dem Sicherheitsdatenzentrum 140 und ermöglicht, dass Daten (z. B. Pakete) zwischen der Sicherheitsvorrichtung und anderen Knoten in dem System 100 übertragen werden. Zu diesem Zweck weist die Netzwerkschnittstelle 240 herkömmliche Schaltungen auf, die Signal-, elektrische und mechanische Charakteristiken umfassen, und Anschlussschaltungen, die erforderlich sind zum Verbinden mit den physikalischen Medien des Systems 100 und Protokollen, die über diese Medien laufen.
  • Der Speicher 210 ist ein computerlesbares Medium, das als ein RAM implementiert ist, der RAM-Vorrichtungen aufweist, wie DRAM-Vorrichtungen und/oder Flash-Speichervorrichtungen. Der Speicher 210 enthält verschiedene Software- und Datenstrukturen, die von dem Prozessor 225 verwendet werden, einschließlich Software- und Datenstrukturen, die Aspekte der vorliegenden Erfindung implementieren. Insbesondere umfasst der Speicher 210 ein Betriebssystem 215 und Mustererkennungs/Kompilieren-Dienste 220. Das Betriebssystem 215 organisiert funktional die Sicherheitsvorrichtung 200 durch Aufrufen von Operationen zur Unterstützung von Software-Prozessen und Diensten, die auf der Sicherheitsvorrichtung 200 ausgeführt werden, wie die Mustererkennungs/Kompilieren-Dienste 220. Die Mustererkennungs/Kompilieren-Dienste 220, wie unten beschrieben wird, umfassen computerausführbare Anweisungen zum Kompilieren von Graphen endlicher Zustandsmaschinen aus gegebenen Mustern und/oder Führen bzw. Leiten von ankommenden Datenpaketen durch die kompilierten Graphen.
  • Die Speichervorrichtung 230 ist eine herkömmliche Speichervorrichtung (z. B. Festplatte oder wahrscheinlicher DRAM), die eine Mustererkennungsdatenbank (DB – database) 235 aufweist, die eine Datenstruktur ist, die konfiguriert ist zum Speicher von verschiedener Information, die zum Kompilieren endlicher Zustandsmaschinen aus einem gegebenen Muster verwendet wird. Die Information kann Signaturmuster, Graphen endlicher Zustandsmaschinen (z. B. DFA-Graphen und NFA-Graphen), Epsilon-Abschluss(EC – Epsilon closure)-Cache-Tabellen und DFA-Zustand-Hash-Tabellen enthalten.
  • Typischerweise verwendet eine Anwendungsverarbeitung mit Kenntnis von Inhalten entweder einen deterministischen endlichen Automat (DFA – Deterministic Finite Automata) oder einen nichtdeterministischen endlichen Automat (NFA – Non-Deterministic Finite Automata), um ein Muster in dem Inhalt eines empfangenen Pakets zu erkennen. Der DFA und der NFA sind beide endliche Zustandsmaschinen, das heißt, Berechnungsmodelle, die jeweils eine Menge von Zuständen, einen Startzustand, ein Eingabealphabet (Satz von allen möglichen Symbolen) und eine Übergangsfunktion umfassen. Eine Berechnung beginnt in dem Startzustand und ändert sich zu neuen Zuständen abhängig von der Übergangsfunktion.
  • Das Muster wird üblicherweise unter Verwendung eines regulären Ausdrucks ausgedrückt, der atomare Elemente umfasst, zum Beispiel normale Textzeichen, wie A–Z, 0–9, und Meta-Zeichen, wie *, ^ und |. Die atomaren Elemente eines regulären Ausdrucks sind die Symbole (einzelne Zeichen), die zu erkennen sind. Diese werden mit Meta-Zeichen kombiniert, die eine Verknüpfung (+), Alternation (|) und Kleene-Stern (*) ermöglichen. Das Meta-Zeichen für eine Verknüpfung wird verwendet, um mehrere Zeichen-Übereinstimmungs- bzw. Erkennungsmuster aus einem einzelnen Zeichen (oder Teilzeichenketten) zu erzeugen, während das Meta-Zeichen für eine Alternation (|) verwendet wird, um einen regulären Ausdruck zu erzeugen, der jede aus zwei oder mehr Teilzeichenketten erkennen kann. Das Meta-Zeichen Kleene-Stern (*) ermöglicht, dass ein Muster jede Anzahl erkennen kann, einschließlich kein Vorkommen des vorhergehenden Zeichens oder der Zeichenkette. Ein Kombinieren von verschiedenen Operatoren und einzelnen Zeichen ermöglicht, dass komplexe Ausdrücke konstruiert werden können. Zum Beispiel erkennt der Ausdruck (th(is|at)*) die folgenden Zeichenketten: th, this, that, thisis, thisat, thatis oder thatat.
  • Das Zeichen-Klasse-Konstrukt [...] ermöglicht eine Auflistung einer Liste von Zeichen, nach denen zu suchen ist, zum Beispiel sucht gr[ea]y sowohl nach grey als auch gray. Ein Strich zeigt einen Bereich von Zeichen an, zum Beispiel [A–Z]. Das Meta-Zeichen „.” erkennt jedes Zeichen.
  • Die Eingabe in die DFA- oder NFA-Zustandsmaschine ist typischerweise eine Kette von (8-Bit)-Bytes, das heißt, das Alphabet ist ein einzelnes Byte (ein Zeichen oder Symbol). Jedes Byte in dem Eingabestrom führt zu einem Übergang von einem Zustand in einen anderen Zustand.
  • Die Zustände und die Übergangsfunktionen der DFA- oder NFA-Zustandsmaschine können durch einen Graph repräsentiert werden, wobei jeder Knoten in dem Graph einen Zustand repräsentiert und Bögen in dem Graph Zustandsübergänge repräsentieren. Der aktuelle Zustand der Zustandsmaschine wird durch einen Knotenidentifizierer repräsentiert, der einen bestimmten Graphknoten auswählt.
  • Eine Verwendung von DFA zur Verarbeitung eines regulären Ausdrucks und zum Finden eines Musters oder von Mustern, beschrieben durch einen regulären Ausdruck in einem Eingabestrom von Zeichen, ist gekennzeichnet durch:
    • 1) Deterministische Laufzeitleistung: Ein nächster Zustand eines DFAs kann aus einem Eingabezeichen (oder Symbol) und einem aktuellen Zustand des DFAs bestimmt werden. In anderen Worten, es gibt nur einen Zustandsübergang pro DFA-Zustand. Somit wird die Laufzeitleistung des DFAs als deterministisch angesehen und das Verhalten kann vollständig aus der Eingabe vorhergesagt werden.
    • 2) Kleinerer pro-Fluss-Kontext (z. B. Zustands- oder Knoten-Zeiger) erforderlich, um Übereinstimmungen bzw. Erkennungen über mehrere Pakete zu unterstützen: in einer Suche nach einem Muster in einer Eingabe, die mehrere Pakete umfasst, die einen Fluss darstellen, kann die Suche an einem Paket stoppen und dann an einem anderen Paket weitergehen. Im Allgemeinen erfordert ein Bestimmen, in welchem Zustand die Suche fortzusetzen ist, ein Verfolgen bzw. Tracking, Erinnern oder anderweitiges Speichern (z. B. als Zustands-Zeiger) aller Zustände, die bisher durchlaufen wurden, als die Suche angehalten wurde. In DFA muss jedoch nur der Zustand, in dem eine Suche angehalten wurde, gespeichert werden, um die Suche wieder aufzunehmen. Somit ist anzumerken, dass ein DFA gekennzeichnet ist als einen kleineren Kontext pro Fluss zu erfordern, um eine Mustererkennung über mehrere Eingabepakete zu unterstützen, zum Beispiel in der Größenordnung von mehreren Bytes, um einen Zustands- oder Knoten-Zeiger zu speichern.
    • 3) Ein Graph, in dem die Anzahl der Knoten (oder die Graph-Größe) exponentiell mit der Größe eines Musters zunimmt.
  • Im Gegensatz dazu ist eine Verwendung von NFA zur Verarbeitung eines regulären Ausdrucks und Finden eines Musters/mehrerer Muster, beschrieben durch den regulären Ausdruck, in einem Eingabestrom von Zeichen, gekennzeichnet durch:
    • 1) Nichtdeterministische Laufzeitleistung: Mit einem Eingabezeichen (oder Symbol) und einem aktuellen Zustand des NFAs ist es möglich, dass es mehr als einen nächsten Zustand des NFAs gibt, in den überzugehen ist. In anderen Worten, ein nächster Zustand des NFAs kann nicht aus der Eingabe und dem aktuellen Zustand des NFAs bestimmt werden. Somit wird eine Laufzeitleistung des NFAs als nichtdeterministisch angesehen und das Verhalten kann nicht vollständig aus der Eingabe vorhergesagt werden.
    • 2) Größerer pro-Fluss-Kontext (z. B. Zustand- oder Knoten-Zeiger) ist erforderlich, um eine Übereinstimmung bzw. Erkennung über Pakete zu unterstützen: Wie oben beschrieben, erfordert eine Mustererkennung über mehrere Eingabepakete, wenn eine Suche an einem Paket stoppt und an einem anderen wieder aufgenommen wird, ein Verfolgen von allen Zuständen, die soweit durchlaufen wurden, als die Suche angehalten wurde. In NFA ist, je mehr der Eingabe erkannt ist, die Anzahl der Zustände umso größer, die durchlaufen wurden und verfolgt werden müssen. Somit ist anzumerken, dass ein NFA gekennzeichnet ist durch einen größeren Kontext pro Fluss erfordernd, um eine Mustererkennung über mehrere Eingabepakete zu unterstützen, im Vergleich zu DFA.
    • 3) Ein Graph, in dem die Anzahl von Knoten (oder Graph-Größe) linear mit der Größe eines Musters wächst.
  • Die oben angeführten DFA- und NFA-Charakteristiken werden weiter in Bezug auf die 3, 4 und 5A–G diskutiert. Es sollte angemerkt werden, dass für alle DFA-Graphen, die in den Figuren gezeigt werden, aus Gründen der Kürze, Bögen (Zustandsübergänge) zu Knoten (Zustand) 0 nicht gezeigt werden und Bögen, die zu demselben Knoten zeigen, auf den durch Knoten 0 gezeigt wird für dasselbe Zeichen, ebenfalls nicht gezeigt werden.
  • 3 zeigt einen NFA-Graph 300 eines beispielhaften NFAs zum Suchen nach Mustern „cavium.*networks”, „nitrox[^\r\n\t\v\s]{3}octeon” und „purevu.{5,10}videochips”. 4 zeigt einen DFA-Graph 400 eines beispielhaften DFAs zum Suchen nach der gleichen Menge von Mustern. Wie oben angeführt, sollte angemerkt werden, dass der DFA-Graph 400 und andere hier vorgesehene DFA-Graphen zum Zwecke der Darstellung „vereinfacht” sind. Bögen zu Knoten 0, die Zustandsübergänge zu dem DFA-Zustand 0 repräsentieren, sind in den Figuren nicht dargestellt. Bögen, die zu demselben Knoten zeigen, auf den durch Knoten 0 gezeigt wird für dasselbe Zeichen, werden ebenfalls nicht in den Figuren gezeigt.
  • Für dieselbe Menge von Mustern hat der NFA-Graph 300 von 3 69 Knoten, die 69 Zustände repräsentieren, während der DFA-Graph 400 von 4 931 Knoten hat (von denen nur ein Teil in 4 gezeigt wird), die 931 Zustände repräsentieren. Wie gezeigt, kann für ein gegebenes Muster oder mehrere Muster eine Anzahl von DFA-Zuständen größer sein als eine Anzahl von NFA-Zuständen, typischerweise in der Größenordnung von mehreren hundert oder tausend mehr Zuständen. Dies ist ein Beispiel einer „Graph-Explosion”, die eine kennzeichnende Charakteristik für DFA ist.
  • Um das Konzept einer „Graph-Explosion” weiter zu beschreiben, werden die 5A, 5B und 5C betrachtet, die NFA-Graphen für die Muster ”.*a[^\n]”, ”.*a[^\n][^\n]” beziehungsweise ”.*a[^\n][^\n][^\n]” zeigen, und die 5D, 5E und 5F, die DFA-Graphen für dieselben Muster zeigen. Wie in den 5A5F gezeigt und durch die Tabelle von 5G zusammengefasst, kann NFA für einige Muster linear zunehmen, während DFA exponentiell zunehmen kann, was in einer Graph-Explosion resultiert.
  • Zurück zu 3 beginnt unter Verwendung des NFAs, der durch den NFA-Graph 300 repräsentiert wird, um nach den Mustern in dem Eingabestrom ”purevuchips are video chips” zu suchen, eine NFA-Verarbeitung oder eine NFA-Erkennung bei den NFA-Start-Zuständen 0, 2, 19 und 36, die durch die Knoten 305a–d repräsentiert und in Kurzform als NFA-START-ZUSTÄNDE bzw. NFA START STATES = {0, 2, 19, 36} geschrieben werden. Bei Zeichen „p” des Eingabestroms geht der NFA zu Zustand 37 (durch den Knoten 310 repräsentiert) und verfolgt die Zustände 0, 2, und 19 (in Kurzform geschrieben als bei „p” = {0, 2, 19, 37}) und geht weiter wie folgt:
    bei „u” = {0, 2, 19, 38}
    bei „r” = {0, 2, 19, 39}
    bei „e” = {0, 2, 19, 40}
    bei „v” = {0, 2, 19, 41}
    bei „u” = {0, 2, 19, 42}
    bei „c” = {0, 2, 19, 44}
    bei „h” = {0, 2, 19, 45}
    ...
    ... etc.
  • Unter Verwendung des DFAs, der durch den DFA-Graph 400 von 4 repräsentiert wird, um nach denselben Mustern in derselben Eingabe zu suchen, beginnt die DFA-Erkennung bei DFA-Startzustand 0, der durch den Knoten 405 repräsentiert und in Kurzform als DFA-START-ZUSTAND bzw. DFA START STATE = {0} geschrieben wird. Bei Zeichen „p” des Eingabestroms geht der DFA zu Zustand 3, durch den Knoten 410 repräsentiert und in Kurzform als bei „p” = {3} geschrieben, und geht weiter wie folgt:
    bei „u” = {6}
    bei „r” = {9}
    bei „e” = {12}
    bei „v” = {15}
    bei „u” = {18}
    bei „c” = {27}
    bei „h” = {41}
    ...
    ... etc.
  • Wie in dem obigen Beispiel gezeigt, gibt es bei NFA zumindest eine zu verfolgende Anzahl n + 1 von NFA-Zuständen, wobei n die Anzahl von zu suchenden Mustern ist (z. B. gibt es bei 3 zu suchenden Mustern zumindest vier Zustände zu verfolgen). Im Gegensatz dazu gibt es bei DFA nur einen zu verfolgenden Zustand pro Eingabezeichen. Nun wird für Zwecke der Darstellung angenommen, dass sich der Eingabestrom oder -Fluss „purevuchips are video chips” über mehrere Pakete erstreckt, wobei ein erstes Paket mit „h” von „purevuchips” endet und ein zweites Paket mit „i” von „purevuchips” beginnt. Bei einem NFA stoppt eine Suche bei „h” (Ende des ersten Pakets) mit vier zu verfolgenden Zuständen (d. h. die Zustände 0, 2, 19 und 45). Ein Wiederaufnehmen der Suche bei „i” (Beginn des zweiten Pakets) erfordert eine Speicherung dieser vier Zustände. Im Gegensatz dazu stoppt bei einem DFA eine Suche bei „h” (Ende des ersten Pakets) mit einem zu verfolgenden Zustand (d. h. Zustand 41). Ein Wiederaufnehmen der Suche bei „i” (Beginn des zweiten Pakets) erfordert eine Speicherung dieses einen Zustands. Dieses Beispiel zeigt, dass bei NFA der pro-Fluss-Kontext, der zur Unterstützung einer Erkennung über mehrere Pakete erforderlich ist, vier Zustände ist (z. B. durch Speichern von vier Zustands-Zeigern), während bei DFA der pro-Fluss-Kontext ein Zustand ist. Daher erfordert ein NFA einen größeren pro-Fluss-Kontext als den pro-Fluss-Kontext, der für einen DFA für dieselben Muster erforderlich ist. Ebenso erfordert ein DFA einen geringeren pro-Fluss-Kontext als den pro-Fluss-Kontext, der für einen NFA für dieselben Muster erforderlich ist.
  • Für jeden nichtdeterministischen endlichen Automat existiert ein äquivalenter deterministischer endlicher Automat. Die Äquivalenz zwischen den beiden wird in Bezug auf eine Sprachakzeptanz definiert. Da ein NFA ein endlicher Automat ist, bei dem null, ein oder mehrere Übergang/Übergänge bei einem Eingangssymbol erlaubt ist/sind, kann ein äquivalenter DFA konstruiert werden, der alle Bewegungen des NFAs bei einem bestimmten Eingangssymbol parallel simuliert.
  • Da der DFA-Äquivalent des NFAs die Bewegungen des NFAs simuliert (entspricht), ist jeder Zustand eines DFAs eine Kombination aus einem Zustand oder mehreren Zuständen des NFAs. Somit wird jeder Zustand eines DFAs durch eine Teilmenge der Menge von Zuständen des NFAs repräsentiert; und somit wird die Transformation von NFA zu DFA normalerweise als „Konstruktions”-Teilmenge bezeichnet. Somit kann, wenn ein gegebener NFA n Zustände hat, der äquivalente DFA 2n Anzahl von Zuständen haben, wobei der Anfangszustand der Teilmenge {q0} entspricht. Daher umfasst die Transformation von NFA zu DFA ein Finden aller möglichen Teilmengen der Menge von Zuständen des NFAs, unter Berücksichtigung, dass jede Teilmenge ein Zustand eines DFAs ist, und dann Finden des Übergangs von diesem bei jedem Eingangssymbol.
  • Eine Umwandlung von NFAs zu DFAs findet statt, da eine Verarbeitung von NFA-Graphen durch ein Computersystem aufgrund mehrerer möglicher Übergänge eines NFAs schwierig ist, wie oben gezeigt.
  • Die 6A–B sind Ablaufdiagramme eines Verfahrens 600 zum Umwandeln eines NFA-Graphs in einen DFA-Graph. Das Verfahren 600 beginnt bei 605. An dieser Stufe ist die Menge von DFA-Zuständen „Sd” null. Bei 610 wird ein Startzustand des DFAs bestimmt und zu der Menge von DFA-Zuständen „Sd” als ein unmarkierter Zustand hinzugefügt. Der Startzustand des DFAs wird als der Epsilon-Abschluss des Startzustands des NFA-Graphs bestimmt. Das Verfahren zur Bestimmung des Epsilon-Abschlusses einer Menge von NFA-Zuständen wird im Folgenden unter Bezugnahme auf 7 weiter beschrieben.
  • Bei 615 wird bestimmt, ob die Menge von DFA-Zuständen „Sd” einen unmarkierten DFA-Zustand umfasst. Wenn ein unmarkierter DFA-Zustand der Menge von DFA-Zuständen „Sd” existiert, wird bei 620 der unmarkierte Zustand „S” ausgewählt und markiert. Bei 625 wird ein Alphabet (z. B. Buchstabe) einer Sprache „A”, die durch den NFA-Graph erkannt wird, ausgewählt. Bei Schritt 630 wird ein NFA-Zustand „s” des DFA-Zustands „S” ausgewählt. Zusätzlich wird vor dem Schritt 630 eine Datenstruktur „St” zum Halten einer Menge von NFA-Zuständen auf „NULL” gesetzt. Bei 635 wird eine Übergangsfunktion „TTn = (s, a)” auf den NFA-Zustand „s” unter Verwendung des Buchstabens „a” angewendet. Die Übergangsfunktion bestimmt alle NFA-Zustände, die von dem NFA-Zustand „s” erreicht werden, wenn eine Eingabe „a” empfangen wird. Die bestimmten NFA-Zustände werden dann zu der Datenstruktur „St” hinzugefügt. Bei 644 wird bestimmt, ob der DFA-Zustand „S” zusätzliche NFA-Zustände umfasst. Wenn dem so ist, wiederholt das Verfahren die Schritte 630 und 635, bis alle NFA-Zustände „s” des DFA-Zustands „S” verarbeitet wurden. Wenn alle NFA-Zustände verarbeitet wurden, geht das Verfahren bei Schritt 640 weiter. Bei 640 wird der Epsilon-Abschluss aller NFA-Zustände „s” in der Datenstruktur „St” bestimmt und zu der Datenstruktur „St” hinzugefügt.
  • Bei Schritt 645 wird die Datenstruktur „St” mit allen existierenden DFA-Zuständen „S” verglichen, um zu bestimmen, ob ein DFA-Zustand „S” bereits alle NFA-Zustände „s” in der Datenstruktur „St” enthält. Aktuelle Ansätze speichern jeden NFA-Zustand „s” assoziiert mit jedem DFA-Zustand „S” in einer Datenstruktur. Um zu bestimmen, ob die NFA-Zustände „s” in der Datenstruktur „St” bereits mit einem DFA-Zustand „S” assoziiert sind, muss jeder NFA-Zustand „s” der Datenstruktur „St” mit jedem NFA-Zustand „s” für jeden DFA-Zustand „S” verglichen werden. Daher erfordert ein solcher Vergleich eine erhebliche Menge an Zeit und Speicher.
  • Tabelle 1 unten zeigt eine beispielhafte DFA-Zustände-Tabelle, die DFA-Zustandsnummern mit einer Menge von NFA-Zuständen assoziiert. Die Menge von NFA-Zuständen kann in einer Datenstruktur für jede DFA-Zustandsnummer gespeichert werden, wie oben beschrieben.
    DFA-ZUSTANDSNUMMER MENGE VON NFA-ZUSTÄNDEN
    0 {0, 1, 2, 3, 4}
    1 {0, 5, 6, 7}
    2 {8, 9, 2, 3}
    ... ...
    ... ...
    Tabelle 1
  • Zum Beispiel wird, abhängig von einer Implementierung einer Datenstruktur (die den DFA-Zustand und dessen entsprechende Menge von NFA-Zuständen enthält), eine Laufzeit der Operation bei Schritt 645 unten unter Bezugnahme auf Tabelle 2 festgehalten. Tabelle 2 führt die Speicher- und Unterhaltungskosten von beispielhaften Datenstruktur-Implementierungen auf. Die Kommentarspalte von Tabelle 2 liefert eine Beschreibung jeder beispielhaften Datenstruktur. Für jede Datenstruktur wird angenommen, dass es „N” DFA-Zustände gibt, und weiter angenommen, dass jeder DFA-Zustand im Durchschnitt „M” NFA-Zustände repräsentiert.
    Laufzeit Speicher Führen einer Datenstruktur (Einfügen von NFA-Zustand) Kommentare
    O(N*M2) O(N*M) O(1) Jede Menge von NFA-Zuständen (mit einem DFA-Zuständ assoziiert) wird als lineares Array gespeichert, das NFA-Zustandsnummern enthält.
    O(N*M) O(N*max Anzahl von NFA-Zuständen/8) O(1) Jeder DFA-Zustand hat Bitmap einer Größe gleich der maximalen Anzahl von NFA-Zuständen in dem System. Getrenntes Bit repräsentiert jeden NFA-Zustand. Entsprechendes Bit wird AN-geschaltet, wenn DFA-Zustand diesen NFA-Zustand hat.
    O(N*logM) O(N*k*M), wobei k konstante Kosten von Baumzeigern, etc. sind. O(logM) Jede Menge von NFA-Zuständen (assoziiert mit DFA-Zustand) wird als Baum gespeichert mit NFA-Zustandsnummern.
    Tabelle 2
  • Weiter mit den 6A–B, wenn ein DFA-Zustand „S” bereits alle NFA-Zustände „s” der Datenstruktur „St” umfasst, geht das Verfahren weiter zu Schritt 695. Wenn nicht, geht das Verfahren weiter zu Schritt 685. Bei 685 werden die NFA-Zustände „s” in der Datenstruktur „St” zu der Menge von DFA-Zuständen „Sd” als neuer DFA-Zustand „D” hinzugefügt. Bei 690 wird bestimmt, ob einer der NFA-Zustände „s” zu einer Menge von Endzuständen des NFA-Graphs gehört. Wenn ja, wird der neue DFA-Zustand als ein endgültiger annehmender Zustand des DFA-Graphs bestimmt. Bei 695 wird der Übergang von dem markierten DFA-Zustand „S” mit der Eingabe „a” als der neue DFA-Zustand „D” gesetzt.
  • 7 ist ein Ablaufdiagramm eines Verfahrens 700 zum Bestimmen eines Epsilon-Abschlusses für einen gegebenen NFA-Zustand „s” eines NFA-Graphs. Das Verfahren 700 beginnt bei Schritt 705. Bei 710 empfängt eine Epsilon-Abschluss-Funktion einen NFA-Zustand „s” zur Verarbeitung. Bei 715 wird der NFA-Zustand „s” unmarkiert und zu einer Menge „S” von unmarkierten NFA-Zuständen hinzugefügt. Bei 720 wird ein NFA-Zustand „s” aus den unmarkierten NFA-Zuständen „S” ausgewählt. Bei 725 werden Epsilon-Übergänge von dem ausgewählten NFA-Zustand „s” bestimmt. Bei Schritt 730 wird bestimmt, ob es Epsilon-Übergänge gibt. Wenn nicht, wird bei 740 der ausgewählte NFA-Zustand „s” in die Epsilon-Abschluss-Menge aufgenommen. Wenn Übergänge existieren, dann werden alle bestimmten NFA-Übergänge von dem ausgewählten NFA-Zustand „s” zu der Menge „S” als unmarkierte NFA-Zustände bei Schritt 745 hinzugefügt. Der Schritt 750 bestimmt, ob unmarkierte NFA-Zustände in dem NFA-Zustand „s” verblieben sind. Wenn ja, geht das Verfahren von Schritt 720 weiter. Wenn nicht, endet das Verfahren in Schritt 755.
  • Ein beispielhafter Pseudocode #1 für das oben angeführte Verfahren (beginnend bei Schritt 615 von 6A) ist wie folgt:
    Figure DE112012002624T5_0002
    Figure DE112012002624T5_0003
  • Nachteile des oben angeführten Verfahrens sind wie folgt: i) Schritt 1.1.3 des Pseudocodes, der die Verfahren 700 und 600 repräsentiert, berechnet immer den Epsilon-Abschluss (ECLOSURE()), da es keine Historie von Epsilon-Abschlüssen gibt, die in dem Speicher gespeichert sind; ii) Schritt 1.1.5.2 ist aufgrund eines Mengen-Äquivalenz-Tests sehr zeitaufwendig. Die durch den Mengen-Äquivalenz-Test verbrauchte Zeit hängt ab von der Anzahl von Elementen in der zu vergleichenden Menge (d. h. die Anzahl von NFA-Zuständen in dem DFA-Zustand (wie in Tabelle 1 gezeigt)); und iii) ein Eintrag in der Tabelle 1 kann nicht gelöscht werden, da die Einträge für Schritt 1.1.5.2 erforderlich sind, um den Mengen-Äquivalenz-Test durchzuführen, wodurch große Mengen an Speicherressourcen erforderlich sind.
  • In einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung wird ein NFA-Graph in einen äquivalenten DFA-Graph umgewandelt.
  • Die 8A–C sind Ablaufdiagramme eines Verfahrens 800 zum Umwandeln eines NFA-Graphs in einen DFA-Graph gemäß beispielhaften Ausführungsbeispielen der vorliegenden Erfindung. Das Verfahren 800 beginnt bei 805. An dieser Stufe ist die Menge von DFA-Zuständen „Sd” null. Bei 810 wird ein Startzustand des DFAs bestimmt und zu der Menge von DFA-Zuständen „Sd” als ein unmarkierter Zustand hinzugefügt. Der Startzustand des DFAs wird als der Epsilon-Abschluss des Startzustands des NFA-Graphs bestimmt. Das Verfahren zum Bestimmen des Epsilon-Abschlusses, gemäß beispielhaften Ausführungsbeispielen der vorliegenden Erfindung, eines NFA-Zustands wird unten unter Bezugnahme auf 9 weiter beschrieben. Bei 815 wird ein kryptographischer/perfekter Hash-Wert der NFA-Zustände, assoziiert mit dem DFA-Startzustand, berechnet und in einer Tabelle gespeichert, die DFA-Zustände mit den Hash-Werten von NFA-Zuständen korreliert, die mit dem DFA-Zustand assoziiert sind, wie in Tabelle 4 gezeigt wird. Bei 820 wird der Epsilon-Abschluss des NFA-Startzustands in einem Epsilon-Cachespeicher gespeichert, wie in Tabelle 5 weiter gezeigt wird. Der Epsilon-Cachespeicher wird als Schlüssel des Hashes der Menge von Eingabe-NFA-Zuständen verwendet und die gespeicherten Daten sind der berechnete Epsilon-Abschluss der Eingabe-NFA-Zustände.
  • Eine „kryptographischer Hash/perfekter Hash”-Funktion ist ein deterministisches Verfahren, das einen arbiträren Datenblock nimmt und eine Bitfolge mit fester Größe zurückgibt, die der kryptographische Hash-Wert ist. Beispielhafte kryptographische Hash-Funktionen umfassen zum Beispiel einen Message-Digest-Algorithmus (MD5) oder einen sicheren Hash-Algorithmus bzw. „Secure Hash Algorithm” (SHA1/SHA2). Mit einem größeren Digest (z. B. 128b für MD5) sind Chancen einer Kollision weniger wahrscheinlich. Jedoch kann eine „Plausibilitätsprüfung” offline durchgeführt werden, um zu verifizieren, dass es keine Kollisionen gibt (verschiedene Datensätze mit demselben Hash-Wert), so dass ein Graph korrigiert werden kann, wenn eine Kollision auftritt.
  • Bei 825 wird bestimmt, ob die Menge von DFA-Zuständen „Sd” einen unmarkierten DFA-Zustand umfasst. Wenn nicht, endet das Verfahren in Schritt 895. Wenn ein unmarkierter DFA-Zustand der Menge von DFA-Zuständen „Sd” existiert, wird bei 830 ein unmarkierter Zustand „S” ausgewählt und markiert. Bei 835 wird ein Alphabet (z. B. Buchstabe) einer Sprache „A”, die durch den NFA-Graphs erkannt wird, ausgewählt. Zusätzlich wird eine Datenstruktur „St” zum Halten einer Menge von NFA-Zuständen auf „NULL” gesetzt. Bei Schritt 840 wird ein NFA-Zustand „s”, der mit dem DFA-Zustand „S” assoziiert ist, ausgewählt. Bei 850 wird eine Übergangsfunktion „TTn = (s, a)” auf den NFA-Zustand „s” unter Verwendung des Buchstabens „a” eines Eingabewerts angewendet. Die Übergangsfunktion bestimmt alle NFA-Zustände, die von dem NFA-Zustand „s” erreicht werden, wenn eine Eingabe „a” empfangen wird. Bei 855 werden dann die bestimmten NFA-Zustände in der Datenstruktur „St” gespeichert. Bei 860 wird bestimmt, ob der DFA-Zustand „S” zusätzliche assoziierte NFA-Zustände umfasst. Wenn ja, wiederholt das Verfahren die Schritte 850 und 855, bis alle NFA-Zustände „s” des DFA-Zustands „S” verarbeitet wurden. Wenn alle NFA-Zustände verarbeitet wurden, geht das Verfahren bei Schritt 865 weiter. Bei 865 wird der Epsilon-Abschluss aller NFA-Zustände „s” in der Datenstruktur „St” gemäß 9 bestimmt und zu der Datenstruktur „Se” hinzugefügt.
  • In Schritt 870 wird die Datenstruktur „Se” mit allen existierenden DFA-Zuständen „S” verglichen, um zu bestimmen, ob ein DFA-Zustand „S” bereits alle NFA-Zustände „s” in der Datenstruktur „Se” umfasst. Wie oben unter Bezugnahme auf Schritt 645 des Verfahrens 600 angeführt, speichern allgemeine Ansätze eine Menge von NFA-Zuständen „s” assoziiert mit einem DFA-Zustand „S” in einer Datenstruktur. Um zu bestimmen, ob die NFA-Zustände „s” in der Datenstruktur „Se” bereits mit einem DFA-Zustand „S” assoziiert sind, muss jede NFA-Zustand-Menge „s” der Datenstruktur „Se” mit jeder NFA-Zustand-Menge „s” für jeden DFA-Zustand „S” verglichen werden. Daher erfordert ein derartiger Vergleich eine signifikante Menge an Zeit und Speicher, wie in Tabelle 2 gezeigt wird.
  • In einem aktuellen Ausführungsbeispiel wird ein kryptographischer/perfekter Hash-Wert der NFA-Zustände in der Datenstruktur „Se” berechnet und dann mit der Tabelle verglichen, die die Anzahl von DFA-Zuständen mit dem Hash-Wert ihrer entsprechenden Menge von einem oder mehreren NFA-Zuständen korreliert. Wenn ein passender Hash-Wert existiert, dann wird in Schritt 870 bestimmt, dass ein DFA-Zustand, der mit den NFA-Zuständen in der Datenstruktur „Se” assoziiert ist, bereits existiert, und das Verfahren geht zu Schritt 890 weiter. Bei 890 wird der Übergang von dem DFA-Zustand „S” mit einer Eingabe des Alphabets „a” auf einen existierenden DFA-Zustand gesetzt, der mit dem passenden Hash-Wert assoziiert ist. Das Verfahren geht zu Schritt 845 weiter, wo bestimmt wird, ob ein anderes Alphabet „a” in der Sprache „A” existiert, wenn ja, wird das Verfahren ab Schritt 835 wiederholt. Wenn nicht, geht das Verfahren zu Schritt 847 weiter. Bei Schritt 847 löscht das Verfahren die Menge von NFA-Zustandsnummern und fügt die Menge von Zuständen als markiert hinzu. Das Verfahren geht dann bei Schritt 825 weiter.
  • Eine Laufzeit der Operation bei Schritt 870 wird unten unter Bezugnahme auf die Tabelle 3 gezeigt. Tabelle 3 listet die Speicher- und Unterhaltungskosten einer Hash-Erkennung gemäß beispielhaften Ausführungsbeispielen der vorliegenden Erfindung auf. Die Kommentare-Spalte der Tabelle 3 sieht eine Beschreibung einer Hash-Erkennung vor.
    Laufzeit Speicher Führen einer Datenstruktur (Einfügen von NFA-Zustand) Kommentare
    O(N) O(N) O(1) Jede Menge von NFA-Zuständen (assoziiert mit einem DFA-Zustand) wird mit ihrem äquivalenten kryptographischen Hash ersetzt.
    Tabelle 3
  • Die unten gezeigte Tabelle 4 ist eine DFA-Zustände-Tabelle, die die DFA-Zustände-Nummern mit dem Hash-Wert ihrer entsprechenden Menge eines NFA-Zustands oder mehrerer NFA-Zustände korreliert, wie oben beschrieben wird.
    DFA-ZUSTANDSNUMMER DFA-ZUSTANDSHASH MENGE VON NFA-ZUSTANDSNUMMERN Markiert(m)/Unmarkiert(U)
    0 81237912891273 – GELÖSCHT – M
    1 09237504823405 – GELÖSCHT – M
    2 23894729379237 {4, 5, 6, 2, 0, 1} U
    3 89345798731278 {4, 2, 3, 7, 1, 8} U
    ... ... ...
    Tabelle 4
  • Fortfahrend mit 8, falls kein passender Hash-Wert bei Schritt 870 existiert, geht das Verfahren weiter zu Schritt 875. Bei 875 werden die NFA-Zustände „s” in der Datenstruktur „Se” zu der Menge von DFA-Zuständen „Sd” als ein neuer unmarkierter DFA-Zustand (zum Beispiel „D”) hinzugefügt. Zusätzlich wird ein kryptographischer/perfekter Hash-Wert der NFA-Zustände „s” berechnet und der neue DFA-Zustand zu dem Hash-Wert in der Tabelle 4 zugeordnet, wie oben diskutiert. Bei 880 wird bestimmt, ob einer der NFA-Zustände „s” zu einer Menge von Endzuständen des NFA-Graphs gehört. Wenn ja, wird der neue DFA-Zustand als ein endgültiger annehmender Zustand des DFA-Graphs bestimmt. Bei 885 wird der Übergang von dem markierten DFA-Zustand „S” mit der Eingabe „a” als der neue DFA-Zustand „D” bestimmt.
  • 9 ist ein Ablaufdiagramm eines Verfahrens 900 zum Bestimmen eines Epsilon-Abschlusses für eine Menge von Zuständen in einem NFA-Graph gemäß beispielhaften Ausführungsbeispielen der vorliegenden Erfindung. Das Verfahren 900 beginnt bei Schritt 905. Bei 910 empfängt ein Epsilon-Abschluss-Rechner eine Menge von NFA-Zuständen. Bei 915 wird die Menge von NFA-Zuständen mit Einträgen in einem Cachespeicher verglichen, um zu bestimmen, ob der Cachespeicher eine passende Menge von NFA-Zuständen enthält.
  • Jeder Eintrag in dem Cachespeicher kann als ein Hash-Wert gespeichert werden, der eine Menge von NFA-Zuständen repräsentiert, die einem Epsilon-Abschluss einer Eingabemenge von NFA-Zuständen zugeordnet sind. Der Rechner berechnet einen Hash-Wert aus der empfangenen Menge von NFA-Zuständen und bestimmt, ob der EC-Cachespeicher einen passenden Hash-Wert-Eintrag hat, der mit der Menge von NFA-Zuständen assoziiert ist.
  • Tabelle 5, wie unten gezeigt, ist eine Epsilon-Abschluss-Cache-Tabelle, die eine Menge von NFA-Zuständen zu ihrem Epsilon-Abschluss zuordnet, wie oben beschrieben.
    EC-EINGABEMENGE-HASH EC-AUSGABEMENGE
    78346782346782 {3, 4, 1, 2, 7}
    89237489237492 {8, 3, 2, 5, 19}
    ... ...
    Tabelle 5
  • Weiter mit 9, wenn eine Übereinstimmung gefunden wird; wird bei 920 der Epsilon-Abschluss zurückgegeben. Wenn jedoch keine Übereinstimmung gefunden wird, wird ein Epsilon-Abschluss für die Menge von empfangenen NFA-Zuständen berechnet. Der Epsilon-Abschluss kann berechnet werden, wie oben unter Bezugnahme auf das Verfahren 700 beschrieben wird, das oben unter Bezugnahme auf 7 beschrieben ist. Sobald der Epsilon-Abschluss berechnet ist, wird bei 930 der Epsilon-Abschluss als ein neuer Eintrag in dem Epsilon-Cachespeicher gespeichert. Bei 935 wird der berechnete Epsilon-Abschluss zurückgegeben.
  • Das Verfahren 900 ermöglicht eine effiziente Verarbeitung eines Epsilon-Abschlusses durch Eliminieren einer redundanten Verarbeitung. Zum Beispiel berechnet das Verfahren 900 nur einen Epsilon-Abschluss einer Menge von NFA-Zuständen, wenn der Epsilon-Abschluss noch nicht berechnet wurde. Dies eliminiert die Notwendigkeit einer mehrmaligen Verarbeitung des Epsilon-Abschlusses für eine NFA-Menge. Bezugnehmend auf das Verfahren 600, das oben unter Bezugnahme auf die 6A–B beschrieben wird, kann das Verfahren den Epsilon-Abschluss jedes gegebenen NFA-Knotens mehr als einmal berechnen. Jedoch eliminiert das Verfahren 900 durch Speichern von zuvor berechneten Epsilon-Abschlüssen in einem Cachespeicher die Notwendigkeit für eine unnötige Verarbeitung von Daten.
  • Ein beispielhafter Pseudocode #2 für das oben angeführte Verfahren (beginnend bei Schritt 825 von 8A) ist wie folgt:
    Figure DE112012002624T5_0004
    Figure DE112012002624T5_0005
  • Vorteile des oben angeführten Verfahrens sind wie folgt: i) Schritt 1.1.3 vermeidet ein Berechnen von ECLOSURE(), wenn es bereits berechnet wurde; ii) Schritt 1.1.6.2 ist ein Vergleich von Hash-Werten, deren Größe konstant ist, und der eine feste Zeitdauer zum Vergleich benötigt, was im Vergleich zu einem Mengen-Äquivalenz-Test besser ist. Die Zeitdauer ist O(1), wie in der obigen Tabelle 3 gezeigt; und iii), da die Menge von NFA-Zuständen für einen DFA-Zustand nach einer Verarbeitung gelöscht wird, wird eine große Menge des Speicher-Fußabdrucks des Kompilierers eingespart, wie in Tabelle 4 gezeigt wird.
  • Eine weitere Optimierung ist, dass EC_CACHE auch eine direkte DFA-Zustandsnummer speichern kann statt einer Menge von NFA-Zuständen entsprechend der Epsilon-Abschluss-Menge (von NFA-Zuständen), so dass Schritt 870 überhaupt nicht erforderlich ist. Wenn es zum Beispiel einen Treffer in EC_CACHE() gibt, gibt es keine Notwendigkeit für eine Suche nach einem äquivalenten DFA-Knoten. Tabelle 6, wie im Folgenden gezeigt, ist eine beispielhafte EC_CACHE-Tabelle, die eine direkte DFA-Zustandsnummer entsprechend der Epsilon-Abschluss-Menge (von NFA-Zuständen) speichert.
    EC-EINGABEMENGE-HASH DFA-ZUSTANDSNUMMER
    78346782346782 13
    89237489237492 14
    ...
    Tabelle 6
  • Somit wird die Verarbeitungstabelle für Schritt 870 zu:
    Laufzeit Speicher Führen einer Datenstruktur (Einfügen von NFA-Zustand) Kommentare
    O(1) oder Null Verarbeitung O(N) O(1) Im Fall eines Treffers in EC_CACHE. Da EC_CACHE eine entsprechende DFA-Nummer enthält.
    Tabelle 7
  • Die 9A–B sind Ablaufdiagramme eines Verfahrens 901 zum Umwandeln eines NFA-Graphs in einen DFA-Graph gemäß beispielhaften Ausführungsbeispielen der vorliegenden Erfindung. Das Verfahren 901 beginnt bei 902. An dieser Stufe ist die Menge von DFA-Zuständen „Sd” Null. Bei 903 wird ein Startzustand von DFA bestimmt und zu der Menge von DFA-Zuständen „Sd” als ein unmarkierter Zustand hinzugefügt. Der Startzustand des DFAs wird als Epsilon-Abschluss des Startzustands des NFA-Graphs bestimmt. Das Verfahren zum Bestimmen des Epsilon-Abschlusses, gemäß beispielhaften Ausführungsbeispielen der vorliegenden Erfindung, eines NFA-Zustands wird unten unter Bezugnahme auf 9C weiter beschrieben. Bei 904 wird ein kryptographischer/perfekter Hash-Wert der NFA-Zustände, die mit dem DFA-Startzustand assoziiert sind, berechnet und bei 906 wird die Zuordnung des DFA-Startzustands und des kryptographischen Hashes in einer Tabelle gespeichert, die DFA-Zustände mit den Hash-Werten von NFA-Zuständen korreliert, die mit dem DFA-Zustand assoziiert sind, wie in obiger Tabelle 6 gezeigt wird.
  • Bei 907 wird bestimmt, ob die Menge von DFA-Zuständen „Sd” einen unmarkierten DFA-Zustand umfasst. Wenn nicht, endet das Verfahren in Schritt 908. Wenn ein unmarkierter DFA-Zustand der Menge von DFA-Zuständen „Sd” existiert, wird bei 909 ein unmarkierter Zustand „d” ausgewählt und markiert. Bei 911 wird ein Alphabet (z. B. Buchstabe) einer Sprache „A”, die durch den NFA-Graph erkannt wird, ausgewählt. Zusätzlich wird eine Datenstruktur „S” zum Halten einer Menge von NFA-Zuständen auf „NULL” gesetzt. In Schritt 913 wird ein NFA-Zustand „n”, der mit dem DFA-Zustand „d” assoziiert ist, ausgewählt. Bei 914 wird eine Übergangsfunktion „TTn = (s, a)” auf den NFA-Zustand „n” unter Verwendung des Buchstabens „a” als einen Eingabewert angewendet. Die Übergangsfunktion bestimmt alle NFA-Zustände, die von dem NFA-Zustand „n” erreicht werden, wenn eine Eingabe „a” empfangen wird. Bei 916 werden die bestimmten NFA-Zustände dann in der Datenstruktur „S” gespeichert. Bei 917 wird bestimmt, ob der DFA-Zustand „d” zusätzliche assoziierte NFA-Zustände umfasst. Wenn ja, wird das Verfahren in Schritt 913 wiederholt, bis alle NFA-Zustände „n” des DFA-Zustands „d” verarbeitet wurden. Wenn alle NFA-Zustände verarbeitet wurden, geht das Verfahren bei Schritt 918 weiter. Bei 918 wird ein Übergang von DFA-Zustand „d” bei Alphabet „a” gemäß 9C bestimmt. In Schritt 919 wird ein Übergangszustand „f” von dem DFA-Zustand „d” mit einer Eingabe des Alphabets „a” gesetzt und in der DFA-Zustände-Tabelle gespeichert. Bei 921 wird die Menge von gespeicherten NFA-Übergangszuständen aus der Datenstruktur „S” gelöscht.
  • 9C ist ein Ablaufdiagramm eines Verfahrens 922 zum Bestimmen eines Epsilon-Abschlusses für eine Menge von Zuständen in einem NFA-Graph gemäß beispielhaften Ausführungsbeispielen der vorliegenden Erfindung. Das Verfahren 922 beginnt bei Schritt 923. Bei 924 empfängt ein Epsilon-Abschluss-Rechner eine Menge von NFA-Zuständen und berechnet einen Hash-Wert „Hi” für die empfangene Menge von NFA-Zuständen. Bei 926 wird der Hash-Wert „Hi” mit Hash-Wert-Einträgen in einem Epsilon-Cachespeicher verglichen, um zu bestimmen, ob der Cachespeicher eine Übereinstimmung enthält.
  • Jeder Eintrag in dem Cachespeicher kann als ein Hash-Wert gespeichert werden, der eine Menge von NFA-Zuständen repräsentiert, die einem DFA-Zustand zugeordnet sind. Der Rechner berechnet einen Hash-Wert aus der empfangenen Menge von NFA-Zuständen und bestimmt, ob der EC-Cachespeicher einen passenden Hash-Wert-Eintrag hat, der mit der Menge von NFA-Zuständen assoziiert ist, was mit einem DFA-Zustand korreliert.
  • Wenn eine Übereinstimmung gefunden wird, wird bei 933 der DFA-Zustand „f”, der dem passenden Hash-Wert der Cache-Tabelle zugeordnet ist, zurückgegeben. Wenn jedoch keine Übereinstimmung gefunden wird, wird in Schritt 928 ein Epsilon-Abschluss für die Menge von empfangenen NFA-Zuständen berechnet. Der Epsilon-Abschluss kann berechnet werden, wie oben unter Bezugnahme auf das Verfahren 700 beschrieben wird, das oben unter Bezugnahme auf 7 beschrieben wird. Sobald der Epsilon-Abschluss berechnet ist, wird bei 929 ein kryptographischer Hash des Epsilon-Abschlusses berechnet und als neuer Eintrag in dem Epsilon-Cachespeicher gespeichert. Bei 931 wird ein neuer DFA-Zustand „f”, der dem Hash-Wert der Menge von NFA-Zuständen entspricht, dem Hash-Wert in der EC-Cache-Tabelle zugeordnet. Bei 932 wird der neue DFA-Zustand „f” zurückgegeben.
  • Ein beispielhafter Pseudocode #3 für das oben angeführte Verfahren ist wie folgt:
    Figure DE112012002624T5_0006
    Figure DE112012002624T5_0007
  • Eine Größe von EC_CACHE kann konfigurierbar und begrenzt sein, abhängig von einem zulässigen Laufzeit-Speicher-Fußabdruck. Wenn der Laufzeit-Speicher-Fußabdruck begrenzt ist, muss es eine Ersatz-Regel geben. Zum Beispiel kann die Ersatz-Regel einen Epsilon-Abschluss (EC – epsilon closure) der am längsten nicht verwendeten Menge von NFA-Zuständen halten oder es kann gar keinen Ersatz geben. In letzterem Fall hält EC_CACHE nur einen vorgegebenen EC einer festen Anzahl einer Menge von NFA-Zuständen. Der letztere Fall hat sich als sehr nützlich erwiesen.
  • Vorteile des oben angeführten Verfahrens sind wie folgt: i) Schritt 1.1.3.2 vermeidet ein Berechnen von ECLOSURE(), wenn es bereits berechnet wurde; ii) Speichern der DFA-Knoten-Nummer in der EC-CACHE-TABELLE anstelle der ECLOSURE-Menge vermeidet die Suche nach dem DFA-Knoten, bei ECLOSURE(), wenn möglich (Schritt 1.1.6 in dem vorherigen Algorithmus, Pseudocode # 2); und iii), da die Menge von NFA-Zuständen für einen DFA-Zustand nach einer Verarbeitung in Tabelle 4 gelöscht werden, wird eine umfangreiche Quantität des Speicher-Fußabdrucks des Kompilierers eingespart.
  • Wie oben angeführt, wird eine Inhaltsuche typischerweise unter Verwendung eines Suchalgorithmus durchgeführt, wie deterministischer endlicher Automat (DFA – Deterministic Finite Automata) oder nichtdeterministischer endlicher Automat (NFA – Non-Deterministic Finite Automata), um einen regulären Ausdruck zu verarbeiten. Ein anderer Typ eines Zeichenkettesuchalgorithmus, der implementiert werden kann, ist ein Aho-Corasik-Algorithmus.
  • Der Aho-Corasik-Algorithmus kann verwendet werden, um eine endliche Zustandsmustermaschine aus einer Menge von Textzeichenketten zu erzeugen, die zum Verarbeiten einer Eingabenutzlast in einem einzelnen Durchgang verwendet werden kann. Zum Beispiel erzeugt bei einer gegebenen Menge von Zeichenketten ein Aho-Corasik-Algorithmus eine endliche Mustererkennungsmaschine, die verwendet wird, um eine arbiträre Textzeichenkette zu verarbeiten, die über Pakete in einem Kommunikationsnetzwerk empfangen werden kann. Das Verhalten der erzeugten Mustererkennungsmaschine wird durch drei Funktionen diktiert: i) eine „gehe zu bzw. goto”-Funktion „g”, ii) eine Ausfall- bzw. failure-Funktion „f”, und ii) eine Ausgabe- bzw. output-Funktion „output”.
  • 10 zeigt einen Mustererkennungsmaschine 1000 für eine Suche nach den Mustern „hers”, „his” und „she” unter Verwendung eines Aho-Corasik-Algorithmus. Die goto-Funktion „g” ordnet ein Paar, das aus einem Zustand und einem Eingabesymbol besteht, einem Zustand oder der Nachricht „fail” zu. Die Ausfallfunktion „f” ordnet einen Zustand einem Zustand zu und wird konsultiert, wenn die goto-Funktion „g” einen Ausfall bzw. fail berichtet. Die Ausgabefunktion „output” assoziiert eine Menge von Schlüsselwörtern (möglicherweise leer) mit jedem Zustand.
  • Der Startzustand ist der Zustand 0 (durch Knoten 1005 repräsentiert). In einem gegebenen Zustand, wenn die goto-Funktion „g(s, a) = t” ist (wobei „s” ein aktueller Zustand der endlichen Maschine, „a” ein Eingabewert und „t” ein Übergangszustand ist), dann geht die Mustererkennungsmaschine 1000 in den Zustand „t” und das nächste Symbol einer Eingabezeichenkette wird das aktuelle Eingabesymbol. Zum Beispiel geht, unter Bezugnahme auf 10, wenn in dem Zustand 0 (Knoten 1005) und ein Eingabewert von „s” empfangen wird, die Maschine 1000 in den Zustand 3 (Knoten 1015) über.
  • Wenn jedoch die goto-Funktion „g(s, a) = fail” und die Ausfall-Funktion „f(s) = ”s”” ist, dann wiederholt die Maschine den Zyklus mit „s” als den aktuellen Zustand und dem Eingabealphabet „a” als dem aktuellen Eingabesymbol. 11A zeigt Ausfallwerte gemäß dem Stand der Technik für jeden Zustand der Mustererkennungsmaschine 1000. 11B zeigt die Ausgabefunktionswerte für die Zustände 2, 5, 7 und 9.
  • Zum Beispiel wird unter Bezugnahme auf 10 eine arbiträre Eingabezeichenkette „ushers” von der Verarbeitungsmaschine wie folgt verarbeitet: ein Verarbeiten oder Erkennen beginnt in dem Startzustand 0 (repräsentiert durch den Knoten 1005). Bei einem Zeichen „u” des Eingabestroms bleibt die Maschine in dem Zustand 0 (Knoten 1005). Bei einem Zeichen „s” des Eingabestroms geht die Maschine in den Zustand 3 (Knoten 1015) über und geht weiter wie folgt:
    bei ”h” = {4}
    bei ”e” = {5}
    bei ”r” = {8}
    bei ”s” = {9}
    in dem Zustand 4 (Knoten 1020), da die goto-Funktion g(4, „e”) = 5 ist, und die Maschine 1000 in den Zustand 5 geht, werden die Schlüsselwörter „she” und „he” an dem Ende von Position vier in der Textzeichenkette „ushers” erkannt und die Ausgabefunktion gibt die Ausgabe (5) aus (wie in 11B zu sehen). In dem Zustand 5 bei dem Eingabesymbol „r” macht die Maschine 1000 zwei Zustandsübergänge. Da g(5, r) = fail ist, geht die Maschine 1000 in den Zustand 2 = f(5). Zusätzlich, da g(2, r) = 8 ist, geht die Maschine 1000 in den Zustand 8 und geht zu dem nächsten Eingabesymbol weiter.
  • Nach der Beschreibung der beispielhaften Sicherheitsanwendung, in die beispielhafte Ausführungsbeispiele der vorliegenden Erfindung implementiert werden können, und der typischen Verarbeitung unter Verwendung einer Aho-Corasik-Maschine 1000 werden beispielhafte Ausführungsbeispiele der vorliegenden Erfindung im Detail unmittelbar im Anschluss beschrieben.
  • Die Aho-Corasik-Maschine 1000, wie oben beschrieben, erfasst das Auftreten von Schlüsselwörtern oder Mustern an jeder Position einer arbiträren Eingabezeichenkette. In bestimmten Situationen kann ein bestimmtes Muster oder Schlüsselwörter nur signifikant sein, wenn es/sie innerhalb eines bestimmten Bereichs oder einer Position der Eingabezeichenkette gefunden wird/werden. Zum Beispiel ist ein HTTP-Protokoll-Anforderungs-Parser an dem Schlüsselwort „GET” nur dann interessiert, wenn es am Anfang der Anforderung auftritt, und ist danach nicht an einem anderen „GET” interessiert. Ein derartiges Muster kann als ein verankertes Muster bezeichnet werden.
  • Ausführungsbeispiele der vorliegenden Erfindung ermöglichen das Erstellen einer Aho-Corasik-Mustererkennungsmaschine, die sowohl nicht-verankerte Muster als auch verankerte Muster erkennt. Wie oben beschrieben, erkennt die Mustererkennungsmaschine 1000 nicht-verankerte Muster „hers”, „his” und „she” unter Verwendung eines Aho-Corasik-Algorithmus. Durch Modifizieren des Aho-Corasik-Algorithmus kann eine Mustererkennungsmaschine erzeugt werden, um zusätzliche verankerte Muster „help” und „shell” zu erkennen.
  • Bei einer gegebenen Menge von Mustern müssen verankerte Muster von nicht-verankerten Mustern unterschieden werden. Die verankerten Muster können mit einem Makro markiert werden, das spezifiziert, dass sie verankert sind. Zum Beispiel kann „{@0}” an dem Anfang eines Musters angefügt werden, um zu spezifizieren, dass das Muster ein verankertes Muster ist. So kann bei einer gegebenen Liste von Mustern ”he, she his, hers, {@0}help, und {@0} shell” ein Kompilierer erkennen, dass die Schlüsselwörter „help” und „shell” verankerte Muster sind.
  • Sobald eine Liste von Schlüsselwörtern/Mustern durch einen Kompilierer empfangen wird, ist der Kompilierer in der Lage, die nicht-verankerten Muster von den verankerten Mustern zu unterscheiden. Der Kompilierer erzeugt dann einen eigenen Zustandsbaum für alle verankerten Muster und einen anderen Zustandsbaum (Maschine 1000 wie in 10 gezeigt) für nicht-verankerte Muster unter Verwendung der goto-Funktion „g”, wie oben beschrieben. 12 zeigt einen Zustandsbaum 1200 für die verankerten Muster „help” und „shell”. 12A zeigt Ausfallwerte für jeden Zustand des Zustandsbaums 1200 gemäß Stand der Technik (d. h. unter der Annahme, dass diese Muster als nicht-verankerte Muster kompiliert wurden). 12B zeigt die Ausgabefunktionswerte für die Zustände 14 und 19 des Zustandsbaums 1200.
  • Sobald der Zustandsbaum für die verankerten Muster und nicht-verankerten Muster erstellt ist, berechnet der Kompilierer die Ausfallfunktion „f” für beide Zustandsbäume. Für den Zustandsbaum, der die nicht-verankerten Muster repräsentiert, implementiert der Kompilierer die Ausfallfunktionen, wie oben unter Bezugnahme auf die 10 und 11A beschrieben. Gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung wird die Ausfallfunktion von verankerten Mustern nach den folgenden Regeln erstellt:
    • a) Der Ausfall des Wurzelknotens des verankerten Baums wird gleich dem Wurzelknoten des nicht-verankerten Zustandsbaums gesetzt. Somit wird, wenn keine der verankerten Muster übereinstimmen, die nicht-verankerten Muster verfolgt. Zum Beispiel wird der Ausfall „f” des Zustands 10 (Knoten 1205) gleich dem Startzustand 0 (Knoten 1005 von 10) gesetzt.
    • b) Sobald der Ausfall des Startzustands des verankerten Baums bestimmt wird, wird der Ausfall „f” jedes Zustands des verankerten Baums bestimmt derart, dass teilweise Übereinstimmungen von nicht-verankerten Schlüsselwörtern mit den verankerten Schlüsselwörtern unter Verwendung der goto-Funktion „g” ebenfalls verfolgt werden, wie in 13A gezeigt.
  • Ausgabefunktionen von verankerten Mustern werden getrennt berechnet, behalten aber eine Überlappung mit nicht-verankerten Mustern in Betrachtung, wie in 13B gezeigt.
  • Danach wird, gemäß beispielhaften Ausführungsbeispielen der vorliegenden Erfindung, der Wurzelknoten des verankerten Zustandsbaums als der Wurzelknoten des endgültigen Zustandsbaums (die Kombination des verankerten und nicht-verankerten Zustandsbaums) gesetzt.
  • Nun sind der verankerte Zustandsbaum und der nicht-verankerte Zustandsbaum effektiv in einen einzigen Zustandsbaum zusammengeführt.
  • Zum Beispiel wird, unter Bezugnahme auf die 10, 11A–B, 12 und 13A–B, eine arbiträre Eingabezeichenkette „ushers” durch die Verarbeitungsmaschine wie folgt verarbeitet:
    ein Verarbeiten oder Erkennen beginnt an dem Startzustand 10 (durch Knoten 1205 repräsentiert). Bei einem Zeichen „u” des Eingabestroms geht die Maschine in einen Zustand 0 (Knoten 1005 in 10) über gemäß Ausfallfunktion, wie in 13A gezeigt, und verarbeitet „u” wieder an dem Knoten 0 (1005) und die Maschine bleibt bei dem Knoten 0 (1005). Bei einem Zeichen „s” des Eingabestroms geht die Maschine in den Zustand 3 (Knoten 1015) über und führt wie folgt fort:
    bei „h” = {4}
    bei „e” = {5}
    bei „r„ = {8}
    bei „s” = {9}
    in dem Zustand 4 (Knoten 1020), da die goto-Funktion g(4, „e”) = 5, und die Maschine 1000 in den Zustand 5 geht, werden die Schlüsselwörter „she” und „he” am Ende von Position vier in der Textzeichenkette „ushers” erkannt und die Ausgabefunktion gibt die Ausgabe (5) aus (wie in 11B zu sehen). In dem Zustand 5 bei dem Eingabesymbol „r” geht die Maschine 1000 in den Zustand 8 über. In dem Zustand 8 bei dem Eingabesymbol „s” geht die Maschine 1000 in den Zustand 9 über, das Schlüsselwort „hers” wird erkannt und die Ausgabefunktion gibt die Ausgabe (9) aus (wie in 11B zu sehen).
  • In einem anderen Beispiel wird, unter Bezugnahme auf die 10, 11A–B, 12 und 13A–B, eine arbiträre Eingabezeichenkette „shell” durch die Verarbeitungsmaschine wie folgt verarbeitet:
    ein Verarbeiten oder Erkennen beginnt in dem Startzustand 10 (durch den Knoten 1205 repräsentiert). Bei einem Zeichen „s” des Eingabestroms geht die Maschine in den Zustand 15 über (12) und fährt wie folgt fort:
    bei „h” = {16}
    bei „e” = {17}
    bei „l” = {18}
    bei „l” = {19}
    in Zustand 16 (12), da die goto-Funktion g(16, „e”) = 17, und die Maschine 1200 in den Zustand 17 geht, werden die Schlüsselwörter „she” und „he” am Ende von Position drei in der Textzeichenkette „shell” erkannt und die Ausgabefunktion gibt die Ausgabe (17) aus (wie in 13B zu sehen). In dem Zustand 17 bei dem Eingabesymbol „l” geht die Maschine 1200 in den Zustand 18 über. In dem Zustand 18 bei dem Eingabesymbol „l” geht die Maschine 1200 in den Zustand 19 über, das Schlüsselwort „shell” wird als ein verankertes Muster erkannt und die Ausgabefunktion gibt die Ausgabe (19) aus (wie in 13B zu sehen).
  • Wie oben angeführt, ist die Eingabe in eine DFA- oder NFA-Zustandsmaschine typischerweise eine Zeichenkette von (8-Bit)-Bytes, das heißt, das Alphabet ist ein einzelnes Byte (ein Zeichen oder Symbol). Somit kann die Größe der gesamten Alphabet-Menge 256 sein. Weiter führt jedes Byte in dem Eingabestrom zu einem Übergang von einem Zustand in einen anderen Zustand. Jedoch verwenden nicht viele Muster, Zeichenketten oder reguläre Ausdrücke die gesamte Alphabet-Menge. Die meisten Muster verwenden eine kleine Teilmenge der Alphabet-Menge, die hier als eine „aktives Zeichen”-Menge bezeichnet werden kann. Zum Beispiel werden nur druckbare ASCII-Buchstaben (z. B. a–z, A–Z, 0–9 und einige Symbole) verwendet.
  • Ausführungsbeispiele der vorliegenden Erfindung komprimieren NFA- und DFA-Graphen, um nur die „aktives Zeichen”-Menge zu erkennen. Gemäß einem beispielhaften Ausführungsbeispiel der vorliegenden Erfindung verarbeiten die PSEUDOCODES #1, #2 & #3 Alphabete nur aus der „aktives Zeichen”-Menge in dem Schritt 1.1 für jeden PSEUDOCODE.
  • Während diese Erfindung insbesondere unter Bezugnahme auf ihre beispielhaften Ausführungsbeispiele gezeigt und beschrieben wurde, ist für den Fachmann offensichtlich, dass verschiedene Änderungen in Form und Details hier vorgenommen werden können, ohne von dem Umfang der Erfindung abzuweichen, der durch die beigefügten Ansprüche aufgenommen ist.

Claims (66)

  1. Ein Verfahren, das aufweist: in einem Prozessor einer Sicherheitsvorrichtung, die mit einem Netzwerk gekoppelt ist: Umwandeln eines „nichtdeterministischer endlicher Automat (NFA – Non-Deterministic Finite Automata)”-Graphs für eine gegebene Menge von Mustern in einen „deterministischer endlicher Automat (DFA – Deterministic Finite Automata)”-Graph mit einer Anzahl von Zuständen, wobei das Umwandeln des NFA-Graphs umfasst: Zuordnen jedes der Anzahl von DFA-Zuständen zu einem Zustand oder mehreren Zuständen des NFA-Graphs; Berechnen eines Hash-Werts des einen Zustands oder mehrerer Zustände des NFA-Graphs, der/die DFA-Zuständen zugeordnet ist/sind; Speicher einer DFA-Zustände-Tabelle, die jeden der Anzahl von DFA-Zuständen mit dem Hash-Wert des einen Zustands oder der mehreren Zustände des NFA-Graphs für das gegebene Muster korreliert.
  2. Das Verfahren gemäß Anspruch 1, wobei der berechnete Hash-Wert ein kryptographischer/perfekter Hash-Wert ist.
  3. Das Verfahren gemäß Anspruch 1, wobei das Zuordnen umfasst: Bestimmen, ob es unmarkierte DFA-Zustände in der Anzahl von DFA-Zuständen gibt; Auswählen eines der unmarkierten DFA-Zustände; Markieren des unmarkierten DFA-Zustands; und Bestimmen von Übergängen des einen oder mehrerer Zustände des NFA-Graphs, zugeordnet zu dem markierten DFA-Zustand, zu anderen NFA-Zuständen für ein Zeichen eines Alphabets, das durch den NFA-Graph erkannt wird.
  4. Das Verfahren gemäß Anspruch 3, wobei das Bestimmen von Übergängen ein Zuordnen der anderen NFA-Zustände und Epsilon-Abschlüsse der anderen NFA-Zustände zu einem möglichen neuen unmarkierten DFA-Zustand umfasst.
  5. Das Verfahren gemäß Anspruch 4, wobei das Zuordnen des möglichen neuen unmarkierten DFA-Zustands zu Epsilon-Abschlüssen der anderen NFA-Zustände ein Erlangen des Epsilon-Abschlusses der anderen NFA-Zustände aus einem Epsilon-Cachespeicher umfasst, und wenn der Epsilon-Abschluss der anderen NFA-Zustände nicht in dem Epsilon-Cachespeicher existiert, Berechnen eines Epsilon-Abschlusses der anderen NFA-Zustände.
  6. Das Verfahren gemäß Anspruch 5, das weiter umfasst ein Hinzufügen des möglichen neuen unmarkierten DFA-Zustands zu der Anzahl von DFA-Zuständen, wenn die anderen NFA-Zustände und die Epsilon-Abschlüsse der anderen NFA-Zustände, zugeordnet zu dem möglichen neuen unmarkierten DFA-Zustand, nicht einem existierenden DFA-Zustand aus der Anzahl von DFA-Zuständen zugeordnet sind, und Speichern des möglichen neuen unmarkierten DFA-Zustands in der DFA-Zustände-Tabelle.
  7. Das Verfahren gemäß Anspruch 6, wobei das Hinzufügen des möglichen neuen unmarkierten DFA-Zustands umfasst: Vergleichen eines Hash-Werts des Epsilon-Abschlusses der anderen NFA-Zustände, zugeordnet zu dem möglichen neuen unmarkierten DFA-Zustand, mit einem Hash-Wert von NFA-Zuständen, zugeordnet zu jedem der Anzahl von DFA-Zuständen.
  8. Das Verfahren gemäß Anspruch 6, wobei das Hinzufügen des möglichen neuen unmarkierten DFA-Zustands zu der Anzahl von DFA-Zuständen weiter umfasst ein Bestimmen, ob die Epsilon-Abschlüsse der anderen NFA-Zustände, zugeordnet zu den möglichen neuen unmarkierten Zuständen, zu einem endgültigen annehmenden NFA-Zustand gehören, und wenn ja, Hinzufügen des möglichen unmarkierten Zustands als endgültigen annehmenden DFA-Zustand.
  9. Das Verfahren gemäß Anspruch 6, das weiter aufweist ein Hinzufügen des möglichen neuen unmarkierten Zustands als einen Übergang von dem markierten DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  10. Das Verfahren gemäß Anspruch 4, das weiter aufweist ein Ersetzen der Zuordnung der anderen NFA-Zustände und Epsilon-Abschlüsse der anderen NFA-Zustände zu dem möglichen neuen unmarkierten DFA-Zustand mit einer Zuordnen eines berechneten Hash-Werts der anderen NFA-Zustände und Epsilon-Abschlüsse der anderen NFA-Zustände zu dem möglichen neuen unmarkierten DFA-Zustand.
  11. Das Verfahren gemäß Anspruch 10, wobei das Ersetzen ein Löschen der anderen NFA-Zustände und der Epsilon-Abschlüsse der anderen NFA-Zustände umfasst.
  12. Das Verfahren gemäß Anspruch 3, das weiter aufweist ein Löschen der Übergänge des einen oder der mehreren Zustände des NFA-Graphs aus der DFA-Zustände-Tabelle.
  13. Das Verfahren gemäß Anspruch 1, wobei das Zuordnen umfasst: Bestimmen eines DFA-Startzustands; und Hinzufügen des DFA-Startzustands als einen unmarkierten Zustand zu einer Datenstruktur, die die Anzahl von DFA-Zuständen umfasst.
  14. Das Verfahren gemäß Anspruch 13, wobei das Bestimmen eines DFA-Startzustands umfasst: Bestimmen eines Epsilon-Abschlusses eines NFA-Startzustands; Berechnen eines Hash-Werts des Epsilon-Abschlusses des NFA-Startzustands; und Zuordnen des DFA-Startzustands zu dem Hash-Wert des Epsilon-Abschlusses des NFA-Startzustands.
  15. Das Verfahren gemäß Anspruch 13, wobei das Zuordnen umfasst: Bestimmen, ob es unmarkierte DFA-Zustände in der Anzahl von DFA-Zuständen gibt; Auswählen eines der unmarkierten DFA-Zustände; Markieren des unmarkierten DFA-Zustands; und Bestimmen von Übergängen des einen oder mehrerer Zustände des NFA-Graphs, zugeordnet zu dem markierten DFA-Zustand, zu anderen NFA-Zuständen für ein Zeichen eines Alphabets, das durch den NFA-Graph erkannt wird.
  16. Das Verfahren gemäß Anspruch 15, wobei das Bestimmen von Übergängen umfasst ein Bestimmen eines Übergang-DFA-Zustands von dem markierten DFA-Zustand für ein Zeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  17. Das Verfahren gemäß Anspruch 16, wobei das Bestimmen des Übergang-DFA-Zustands umfasst: Berechnen eines Hash-Werts für die Übergänge des einen oder mehrerer Zustände des NFA-Graphs; und Vergleichen des berechneten Hash-Werts mit Hash-Wert-Einträgen in einer Epsilon-Abschluss(EC – Epsilon Closure)-Cache-Tabelle, wobei die EC-Cache-Tabelle Hash-Werte zu DFA-Zuständen zuordnet.
  18. Das Verfahren gemäß Anspruch 17, das weiter aufweist: Bestimmen, ob der berechnete Hash-Wert mit einem der Hash-Wert-Einträge in der EC-Cache-Tabelle übereinstimmt; und wenn eine Übereinstimmung existiert, Setzen des DFA-Zustands, der zu dem passenden Hash-Wert zugeordnet ist, als einen Übergang-DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  19. Das Verfahren gemäß Anspruch 18, das weiter aufweist: wenn keine Übereinstimmung existiert, Berechnen eines Epsilon-Abschlusses für die Übergänge des einen oder mehrerer Zustände des NFA-Graphs; Berechnen eines Hash-Werts des Epsilon-Abschlusses; Hinzufügen eines neuen Eintrags in die EC-Cache-Tabelle, wobei der neue Eintrag einen neuen DFA-Zustand zu dem Hash-Wert des Epsilon-Abschlusses zuordnet; und Setzen des neuen DFA-Zustands als den Übergang-DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  20. Das Verfahren gemäß Anspruch 19, das weiter aufweist: Löschen der Übergänge des einen oder mehrerer Zustände des NFA-Graphs aus einer DFA-Zustände-Tabelle entsprechend dem markierten DFA-Zustand.
  21. Ein Verfahren zum Bestimmen eines Epsilon-Abschlusses einer Menge von NFA-Zuständen, wobei das Verfahren aufweist: in einem Prozessor einer Sicherheitsvorrichtung, die mit einem Netzwerk gekoppelt ist: Empfangen einer Menge von NFA-Zuständen, wobei die Menge von NFA-Zuständen Übergangszustände für ein Zeichen eines Alphabets ist, das durch einen NFA-Graph erkannt wird; und Bestimmen, ob die empfangene Menge von NFA-Zuständen mit einer Menge von NFA-Zuständen in einer Epsilon-Abschluss(EC – Epsilon Closure)-Cache-Tabelle übereinstimmt, wobei die EC-Cache-Tabelle Epsilon-Abschlüsse von Mengen von NFA-Zuständen zu einem Hash-Wert der Menge von NFA-Zuständen zuordnet.
  22. Das Verfahren gemäß Anspruch 21, wobei das Bestimmen weiter umfasst: Berechnen eines Hash-Werts der empfangenen Menge von NFA-Zuständen; und Abgleichen des Hash-Werts mit Hash-Wert-Einträgen der EC-Cache-Tabelle.
  23. Das Verfahren gemäß Anspruch 22, das weiter aufweist: wenn eine Übereinstimmung existiert, Setzen der Menge von NFA-Zuständen, zugeordnet zu dem passenden Hash-Wert in der EC-Cache-Tabelle, als Epsilon-Abschluss der empfangenen Menge von NFA-Zuständen.
  24. Das Verfahren gemäß Anspruch 23, das weiter aufweist: wenn keine Übereinstimmung existiert, Berechnen eines Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; Hinzufügen eines neuen Eintrags in die EC-Cache-Tabelle, wobei der neue Eintrag den Hash-Wert der empfangenen Menge von NFA-Zuständen zu dem Epsilon-Abschluss der empfangenen Menge von NFA-Zuständen zuordnet.
  25. Das Verfahren gemäß Anspruch 24, wobei das Hinzufügen eines Eintrags umfasst: Bestimmen, ob ausreichend Speicher vorhanden ist, um den neuen Eintrag hinzuzufügen; wenn kein ausreichender Speicher vorhanden ist, Hinzufügen des neuen Eintrags gemäß einer Ersatz-Regel.
  26. Das Verfahren gemäß Anspruch 25, wobei die Ersatz-Regel den neuen Eintrag durch Löschen eines am längsten nicht verwendeten Eintrags der EC-Cache-Tabelle hinzufügt.
  27. Ein Verfahren zum Bestimmen eines Epsilon-Abschlusses einer Menge von NFA-Zuständen, wobei das Verfahren aufweist: in einem Prozessor einer Sicherheitsvorrichtung, die mit einem Netzwerk gekoppelt ist: Empfangen einer Menge von NFA-Zuständen, wobei die Menge von NFA-Zuständen Übergang-Zustände für ein Zeichen eines Alphabets sind, das durch einen NFA-Graph erkannt wird; und Bestimmen, ob die empfangene Menge von NFA-Zuständen mit einer Menge von NFA-Zuständen in einer Epsilon-Abschluss(EC – Epsilon Closure)-Cache-Tabelle übereinstimmt, wobei die EC-Cache-Tabelle Hash-Werte von Epsilon-Abschlüssen, assoziiert mit Mengen von NFA-Zuständen, zu einem DFA-Zustand zuordnet.
  28. Das Verfahren gemäß Anspruch 27, wobei das Bestimmen weiter umfasst: Berechnen eines Hash-Werts der empfangenen Menge von NFA-Zuständen; und Abgleichen des Hash-Werts mit Hash-Wert-Einträgen der EC-Cache-Tabelle.
  29. Das Verfahren gemäß Anspruch 27, das weiter aufweist: wenn eine Übereinstimmung existiert, Setzen des DFA-Zustands, assoziiert mit dem passenden Hash-Wert-Eintrag, als einen Übergang-DFA-Zustand von einem aktuellen DFA-Zustand bei einem Eingabezeichen eines Alphabets, das durch einen NFA-Graph erkannt wird.
  30. Das Verfahren gemäß Anspruch 29, das weiter aufweist: wenn keine Übereinstimmung existiert, Berechnen eines Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; Berechnen eines Hash-Werts des Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; Hinzufügen eines neuen Eintrags in die EC-Cache-Tabelle, wobei der neue Eintrag den Hash-Wert der empfangenen Menge von NFA-Zuständen zu einem neuen DFA-Zustand zuordnet; und Setzen des neuen DFA-Zustands als den Übergang-DFA-Zustand von einem aktuellen DFA-Zustand bei dem Eingabezeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  31. Das Verfahren gemäß Anspruch 30, wobei das Hinzufügen eines Eintrags umfasst: Bestimmen, ob ausreichend Speicher vorhanden ist, um den neuen Eintrag hinzuzufügen; wenn kein ausreichender Speicher vorhanden ist, Hinzufügen des neuen Eintrags gemäß einer Ersatz-Regel.
  32. Das Verfahren gemäß Anspruch 31, wobei die Ersatz-Regel den neuen Eintrag durch Löschen eines am längsten nicht verwendeten Eintrags der EC-Cache-Tabelle hinzufügt.
  33. Das Verfahren gemäß Anspruch 1, das weiter aufweist: Bestimmen von aktiven Zeichen des gegebenen Musters, assoziiert mit einem Alphabet, das durch den NFA-Graph und den DFA-Graph erkannt wird; und Erstellen des NFA-Graphs und des DFA-Graphs, um Muster zu erkennen, die nur aus den aktiven Zeichen des gegebenen Musters bestehen, assoziiert mit dem Alphabet, das durch den NFA-Graph und den DFA-Graph erkannt wird.
  34. Eine Sicherheitsvorrichtung, die mit einem Netzwerk gekoppelt ist, wobei die Sicherheitsvorrichtung aufweist: einen Prozessor, der konfiguriert ist zum Umwandeln eines „nichtdeterministischer endlicher Automat (NFA – Non-Deterministic Finite Automata)”-Graphs für eine gegebene Menge von Mustern in einen „deterministischer endlicher Automat (DFA – Deterministic Finite Automata)”-Graph mit einer Anzahl von Zuständen; und einen Kompilierer, der konfiguriert ist zum: Zuordnen jedes der Anzahl von DFA-Zuständen zu einem Zustand oder mehreren Zuständen des NFA-Graphs; Berechnen eines Hash-Werts des einen Zustands oder mehrerer Zustände des NFA-Graphs, der/die DFA-Zuständen zugeordnet ist/sind; Speicher einer DFA-Zustände-Tabelle in einem Datenspeicher, wobei die DFA-Zustände-Tabelle jeden der Anzahl von DFA-Zuständen mit dem Hash-Wert des einen Zustands oder der mehreren Zustände des NFA-Graphs für das gegebene Muster korreliert.
  35. Die Sicherheitsvorrichtung gemäß Anspruch 34, wobei der berechnete Hash-Wert ein kryptographischer/perfekter Hash-Wert ist.
  36. Die Sicherheitsvorrichtung gemäß Anspruch 34, wobei der Kompilierer weiter konfiguriert ist zum: Bestimmen, ob es unmarkierte DFA-Zustände in der Anzahl von DFA-Zuständen gibt; Auswählen eines der unmarkierten DFA-Zustände; Markieren des unmarkierten DFA-Zustands; und Bestimmen von Übergängen des einen oder mehrerer Zustände des NFA-Graphs, zugeordnet zu dem markierten DFA-Zustand, zu anderen NFA-Zuständen für ein Zeichen eines Alphabets, das durch den NFA-Graph erkannt wird.
  37. Die Sicherheitsvorrichtung gemäß Anspruch 36, wobei der Kompilierer konfiguriert ist zum Bestimmen von Übergängen durch Zuordnen der anderen NFA-Zustände und Epsilon-Abschlüsse der anderen NFA-Zustände zu einem möglichen neuen unmarkierten DFA-Zustand.
  38. Die Sicherheitsvorrichtung gemäß Anspruch 37, wobei der Kompilierer konfiguriert ist zum Zuordnen des möglichen neuen unmarkierten DFA-Zustands zu Epsilon-Abschlüssen der anderen NFA-Zustände durch Erlangen des Epsilon-Abschlusses der anderen NFA-Zustände aus einem Epsilon-Cachespeicher, und wenn der Epsilon-Abschluss der anderen NFA-Zustände nicht in dem Epsilon-Cachespeicher existiert, der Kompilierer weiter konfiguriert ist zum Berechnen eines Epsilon-Abschlusses der anderen NFA-Zustände.
  39. Die Sicherheitsvorrichtung gemäß Anspruch 38, wobei der Kompilierer weiter konfiguriert ist zum Hinzufügen des möglichen neuen unmarkierten DFA-Zustands zu der Anzahl von DFA-Zuständen, wenn die anderen NFA-Zustände und die Epsilon-Abschlüsse der anderen NFA-Zustände, zugeordnet zu dem möglichen neuen unmarkierten DFA-Zustand, nicht einem existierenden DFA-Zustand aus der Anzahl von DFA-Zuständen zugeordnet sind, und Speichern des möglichen neuen unmarkierten DFA-Zustands in der DFA-Zustände-Tabelle.
  40. Die Sicherheitsvorrichtung gemäß Anspruch 39, wobei der Kompilierer konfiguriert ist zum Hinzufügen des möglichen neuen unmarkierten DFA-Zustands durch Vergleichen eines Hash-Werts des Epsilon-Abschlusses der anderen NFA-Zustände, zugeordnet zu dem möglichen neuen unmarkierten DFA-Zustand, mit einem Hash-Wert von NFA-Zuständen, zugeordnet zu jedem der Anzahl von DFA-Zuständen.
  41. Die Sicherheitsvorrichtung gemäß Anspruch 39, wobei der Kompilierer konfiguriert ist zum Hinzufügen des möglichen neuen unmarkierten DFA-Zustands zu der Anzahl von DFA-Zuständen durch Bestimmen, ob die Epsilon-Abschlüsse der anderen NFA-Zustände, zugeordnet zu den möglichen neuen unmarkierten Zuständen, zu einem endgültigen annehmenden NFA-Zustand gehören, und wenn ja, der Kompilierer weiter konfiguriert ist zum Hinzufügen des möglichen unmarkierten Zustands als endgültigen annehmenden DFA-Zustand.
  42. Die Sicherheitsvorrichtung gemäß Anspruch 39, wobei der Kompilierer weiter konfiguriert ist zum Hinzufügen des möglichen neuen unmarkierten Zustands als einen Übergang von dem markierten DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  43. Die Sicherheitsvorrichtung gemäß Anspruch 37, wobei der Kompilierer weiter konfiguriert ist zum Ersetzen der Zuordnung der anderen NFA-Zustände und Epsilon-Abschlüsse der anderen NFA-Zustände zu dem möglichen neuen unmarkierten DFA-Zustand mit einer Zuordnen eines berechneten Hash-Werts der anderen NFA-Zustände und Epsilon-Abschlüsse der anderen NFA-Zustände zu dem möglichen neuen unmarkierten DFA-Zustand.
  44. Die Sicherheitsvorrichtung gemäß Anspruch 43, wobei der Kompilierer konfiguriert ist zum Löschen der anderen NFA-Zustände und der Epsilon-Abschlüsse der anderen NFA-Zustände.
  45. Die Sicherheitsvorrichtung gemäß Anspruch 36, wobei der Kompilierer weiter konfiguriert ist zum Löschen der Übergänge des einen oder der mehreren Zustände des NFA-Graphs aus der DFA-Zustände-Tabelle.
  46. Die Sicherheitsvorrichtung gemäß Anspruch 34, wobei der Kompilierer konfiguriert ist zum Zuordnen jedes der Anzahl von DFA-Zuständen zu einem oder mehreren Zuständen des NFA-Graphs durch Bestimmen eines DFA-Startzustands und Hinzufügen des DFA-Startzustands als einen unmarkierten Zustand zu einer Datenstruktur, die die Anzahl von DFA-Zuständen umfasst.
  47. Die Sicherheitsvorrichtung gemäß Anspruch 46, wobei der Kompilierer weiter konfiguriert ist zum: Bestimmen eines Epsilon-Abschlusses eines NFA-Startzustands; Berechnen eines Hash-Werts des Epsilon-Abschlusses des NFA-Startzustands; und Zuordnen des DFA-Startzustands zu dem Hash-Wert des Epsilon-Abschlusses des NFA-Startzustands.
  48. Die Sicherheitsvorrichtung gemäß Anspruch 46, wobei der Kompilierer weiter konfiguriert ist zum: Bestimmen, ob es unmarkierte DFA-Zustände in der Anzahl von DFA-Zuständen gibt; Auswählen eines der unmarkierten DFA-Zustände; Markieren des unmarkierten DFA-Zustands; und Bestimmen von Übergängen des einen oder mehrerer Zustände des NFA-Graphs, zugeordnet zu dem markierten DFA-Zustand, zu anderen NFA-Zuständen für ein Zeichen eines Alphabets, das durch den NFA-Graph erkannt wird.
  49. Die Sicherheitsvorrichtung gemäß Anspruch 48, wobei der Kompilierer konfiguriert ist zum Bestimmen von Übergängen durch ein Bestimmen eines Übergang-DFA-Zustands von dem markierten DFA-Zustand für ein Zeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  50. Die Sicherheitsvorrichtung gemäß Anspruch 49, wobei der Kompilierer weiter konfiguriert ist zum: Berechnen eines Hash-Werts für die Übergänge des einen oder mehrerer Zustände des NFA-Graphs; und Vergleichen des berechneten Hash-Werts mit Hash-Wert-Einträgen in einer Epsilon-Abschluss(EC – Epsilon Closure)-Cache-Tabelle, wobei die EC-Cache-Tabelle Hash-Werte zu DFA-Zuständen zuordnet.
  51. Die Sicherheitsvorrichtung gemäß Anspruch 50, wobei der Kompilierer weiter konfiguriert ist zum: Bestimmen, ob der berechnete Hash-Wert mit einem der Hash-Wert-Einträge in der EC-Cache-Tabelle übereinstimmt; und wenn eine Übereinstimmung existiert, Setzen des DFA-Zustands, der zu dem passenden Hash-Wert zugeordnet ist, als einen Übergang-DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  52. Die Sicherheitsvorrichtung gemäß Anspruch 51, wobei der Kompilierer weiter konfiguriert ist zum: wenn keine Übereinstimmung existiert, Berechnen eines Epsilon-Abschlusses für die Übergänge des einen oder mehrerer Zustände des NFA-Graphs; Berechnen eines Hash-Werts des Epsilon-Abschlusses; Hinzufügen eines neuen Eintrags in die EC-Cache-Tabelle, wobei der neue Eintrag einen neuen DFA-Zustand zu dem Hash-Wert des Epsilon-Abschlusses zuordnet; und Setzen des neuen DFA-Zustands als den Übergang-DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  53. Die Sicherheitsvorrichtung gemäß Anspruch 52, wobei der Kompilierer weiter konfiguriert ist zum: Löschen der Übergänge des einen oder mehrerer Zustände des NFA-Graphs aus einer DFA-Zustände-Tabelle entsprechend dem markierten DFA-Zustand.
  54. Eine Sicherheitsvorrichtung zum Bestimmen eines Epsilon-Abschlusses einer Menge von NFA-Zuständen, wobei die Sicherheitsvorrichtung aufweist: einen Kompilierer, der konfiguriert ist zum: Empfangen einer Menge von NFA-Zuständen, wobei die Menge von NFA-Zuständen Übergangszustände für ein Zeichen eines Alphabets ist, das durch einen NFA-Graph erkannt wird; und Bestimmen, ob die empfangene Menge von NFA-Zuständen mit einer Menge von NFA-Zuständen in einer Epsilon-Abschluss(EC – Epsilon Closure)-Cache-Tabelle übereinstimmt, wobei die EC-Cache-Tabelle Epsilon-Abschlüsse von Mengen von NFA-Zuständen zu einem Hash-Wert der Menge von NFA-Zuständen zuordnet.
  55. Die Sicherheitsvorrichtung gemäß Anspruch 54, wobei der Kompilierer weiter konfiguriert ist zum: Berechnen eines Hash-Werts der empfangenen Menge von NFA-Zuständen; und Abgleichen des Hash-Werts mit Hash-Wert-Einträgen der EC-Cache-Tabelle.
  56. Die Sicherheitsvorrichtung gemäß Anspruch 55, wobei der Kompilierer weiter konfiguriert ist zum: wenn eine Übereinstimmung existiert, Setzen der Menge von NFA-Zuständen, zugeordnet zu dem passenden Hash-Wert in der EC-Cache-Tabelle, als Epsilon-Abschluss der empfangenen Menge von NFA-Zuständen.
  57. Die Sicherheitsvorrichtung gemäß Anspruch 56, wobei der Kompilierer weiter konfiguriert ist zum: wenn keine Übereinstimmung existiert, Berechnen eines Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; Hinzufügen eines neuen Eintrags in die EC-Cache-Tabelle, wobei der neue Eintrag den Hash-Wert der empfangenen Menge von NFA-Zuständen zu dem Epsilon-Abschluss der empfangenen Menge von NFA-Zuständen zuordnet.
  58. Die Sicherheitsvorrichtung gemäß Anspruch 57, wobei der Kompilierer weiter konfiguriert ist zum: Bestimmen, ob ausreichend Speicher vorhanden ist, um den neuen Eintrag hinzuzufügen; wenn kein ausreichender Speicher vorhanden ist, Hinzufügen des neuen Eintrags gemäß einer Ersatz-Regel.
  59. Die Sicherheitsvorrichtung gemäß Anspruch 58, wobei die Ersatz-Regel den neuen Eintrag durch Löschen eines am längsten nicht verwendeten Eintrags der EC-Cache-Tabelle hinzufügt.
  60. Eine Sicherheitsvorrichtung zum Bestimmen eines Epsilon-Abschlusses einer Menge von NFA-Zuständen, wobei die Sicherheitsvorrichtung aufweist: einen Kompilierer, der konfiguriert ist zum: Empfangen einer Menge von NFA-Zuständen, wobei die Menge von NFA-Zuständen Übergang-Zustände für ein Zeichen eines Alphabets sind, das durch einen NFA-Graph erkannt wird; und Bestimmen, ob die empfangene Menge von NFA-Zuständen mit einer Menge von NFA-Zuständen in einer Epsilon-Abschluss(EC – Epsilon Closure)-Cache-Tabelle übereinstimmt, wobei die EC-Cache-Tabelle Hash-Werte von Epsilon-Abschlüssen, assoziiert mit Mengen von NFA-Zuständen, zu einem DFA-Zustand zuordnet.
  61. Die Sicherheitsvorrichtung gemäß Anspruch 60, wobei der Kompilierer weiter konfiguriert ist zum: Berechnen eines Hash-Werts der empfangenen Menge von NFA-Zuständen; und Abgleichen des Hash-Werts mit Hash-Wert-Einträgen der EC-Cache-Tabelle.
  62. Die Sicherheitsvorrichtung gemäß Anspruch 61, wobei der Kompilierer weiter konfiguriert ist zum: wenn eine Übereinstimmung existiert, Setzen des DFA-Zustands, assoziiert mit dem passenden Hash-Wert-Eintrag, als einen Übergang-DFA-Zustand von einem aktuellen DFA-Zustand bei einem Eingabezeichen eines Alphabets, das durch einen NFA-Graph erkannt wird.
  63. Die Sicherheitsvorrichtung gemäß Anspruch 62, wobei der Kompilierer weiter konfiguriert ist zum: wenn keine Übereinstimmung existiert, Berechnen eines Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; Berechnen eines Hash-Werts des Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; Hinzufügen eines neuen Eintrags in die EC-Cache-Tabelle, wobei der neue Eintrag den Hash-Wert der empfangenen Menge von NFA-Zuständen zu einem neuen DFA-Zustand zuordnet; und Setzen des neuen DFA-Zustands als den Übergang-DFA-Zustand von einem aktuellen DFA-Zustand bei dem Eingabezeichen des Alphabets, das durch den NFA-Graph erkannt wird.
  64. Die Sicherheitsvorrichtung gemäß Anspruch 63, wobei der Kompilierer weiter konfiguriert ist zum: Bestimmen, ob ausreichend Speicher vorhanden ist, um den neuen Eintrag hinzuzufügen; wenn kein ausreichender Speicher vorhanden ist, Hinzufügen des neuen Eintrags gemäß einer Ersatz-Regel.
  65. Die Sicherheitsvorrichtung gemäß Anspruch 64, wobei die Ersatz-Regel den neuen Eintrag durch Löschen eines am längsten nicht verwendeten Eintrags der EC-Cache-Tabelle hinzufügt.
  66. Die Sicherheitsvorrichtung gemäß Anspruch 34, wobei der Kompilierer weiter konfiguriert ist zum: Bestimmen von aktiven Zeichen des gegebenen Musters, assoziiert mit einem Alphabet, das durch den NFA-Graph und den DFA-Graph erkannt wird; und Erstellen des NFA-Graphs und des DFA-Graphs, um Muster zu erkennen, die nur aus den aktiven Zeichen des gegebenen Musters bestehen, assoziiert mit dem Alphabet, das durch den NFA-Graph und den DFA-Graph erkannt wird.
DE112012002624.1T 2011-06-24 2012-06-20 Regex-Kompilierer Active DE112012002624B4 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US13/168,450 2011-06-24
US13/168,450 US9858051B2 (en) 2011-06-24 2011-06-24 Regex compiler
USUS-13/168,450 2011-06-24
PCT/US2012/043307 WO2012177736A1 (en) 2011-06-24 2012-06-20 Compiler for regular expressions

Publications (2)

Publication Number Publication Date
DE112012002624T5 true DE112012002624T5 (de) 2014-04-17
DE112012002624B4 DE112012002624B4 (de) 2021-01-28

Family

ID=46514761

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112012002624.1T Active DE112012002624B4 (de) 2011-06-24 2012-06-20 Regex-Kompilierer

Country Status (5)

Country Link
US (1) US9858051B2 (de)
KR (2) KR20140051914A (de)
CN (2) CN107122221B (de)
DE (1) DE112012002624B4 (de)
WO (1) WO2012177736A1 (de)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10635419B2 (en) 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US10645187B2 (en) 2018-07-13 2020-05-05 Fungible, Inc. ARC caching for determininstic finite automata of regular expression accelerator
US10656949B2 (en) 2018-07-13 2020-05-19 Fungible, Inc. Instruction-based non-deterministic finite state automata accelerator
US10983721B2 (en) 2018-07-13 2021-04-20 Fungible, Inc. Deterministic finite automata node construction and memory mapping for regular expression accelerator
US11263190B2 (en) 2019-09-26 2022-03-01 Fungible, Inc. Data ingestion and storage by data processing unit having stream-processing hardware accelerators
US11630729B2 (en) 2020-04-27 2023-04-18 Fungible, Inc. Reliability coding with reduced network traffic
US11636154B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Data flow graph-driven analytics platform using data processing units having hardware accelerators
US11636115B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Query processing using data processing units having DFA/NFA hardware accelerators
US11934964B2 (en) 2020-03-20 2024-03-19 Microsoft Technology Licensing, Llc Finite automata global counter in a data flow graph-driven analytics platform having analytics hardware accelerators

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9858051B2 (en) 2011-06-24 2018-01-02 Cavium, Inc. Regex compiler
US8990259B2 (en) 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US9065860B2 (en) 2011-08-02 2015-06-23 Cavium, Inc. Method and apparatus for multiple access of plural memory banks
US8862585B2 (en) * 2012-10-10 2014-10-14 Polytechnic Institute Of New York University Encoding non-derministic finite automation states efficiently in a manner that permits simple and fast union operations
US9268881B2 (en) 2012-10-19 2016-02-23 Intel Corporation Child state pre-fetch in NFAs
US9117170B2 (en) 2012-11-19 2015-08-25 Intel Corporation Complex NFA state matching method that matches input symbols against character classes (CCLs), and compares sequence CCLs in parallel
US9665664B2 (en) 2012-11-26 2017-05-30 Intel Corporation DFA-NFA hybrid
US9304768B2 (en) 2012-12-18 2016-04-05 Intel Corporation Cache prefetch for deterministic finite automaton instructions
US9268570B2 (en) 2013-01-23 2016-02-23 Intel Corporation DFA compression and execution
US9177253B2 (en) * 2013-01-31 2015-11-03 Intel Corporation System and method for DFA-NFA splitting
WO2015084360A1 (en) * 2013-12-05 2015-06-11 Hewlett-Packard Development Company, L.P. Regular expression matching
US9275336B2 (en) 2013-12-31 2016-03-01 Cavium, Inc. Method and system for skipping over group(s) of rules based on skip group rule
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
US9680797B2 (en) * 2014-05-28 2017-06-13 Oracle International Corporation Deep packet inspection (DPI) of network packets for keywords of a vocabulary
WO2017165712A1 (en) * 2016-03-23 2017-09-28 FogHorn Systems, Inc. Composition of pattern-driven reactions in real-time dataflow programming
KR102250147B1 (ko) * 2018-10-22 2021-05-10 성균관대학교산학협력단 네트워크 보안 기능 인터페이스를 위한 보안 정책 번역
KR102146625B1 (ko) * 2019-01-31 2020-08-20 연세대학교 산학협력단 오토마타 기반 증분적 중위 확률 계산 장치 및 방법
CN111753150B (zh) * 2020-05-15 2023-10-13 中国科学院信息工程研究所 一种基于图搜索方法加速epsilon闭包计算的方法及系统
KR102275635B1 (ko) * 2020-06-24 2021-07-08 한양대학교 에리카산학협력단 함수 호출 패턴 분석을 통한 이상 검출 장치 및 방법
US11750636B1 (en) * 2020-11-09 2023-09-05 Two Six Labs, LLC Expression analysis for preventing cyberattacks
KR102271489B1 (ko) 2020-12-04 2021-07-02 (주)소만사 정규표현식 패턴의 탐지를 위한 아호코라식 오토마타 구축 장치 및 방법
US20220217120A1 (en) * 2021-01-04 2022-07-07 Fastly Inc. Minimization optimizations for web application firewalls
US11563625B1 (en) * 2021-09-28 2023-01-24 Rakuten Mobile, Inc. Static and dynamic non-deterministic finite automata tree structure application apparatus and method

Family Cites Families (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7613926B2 (en) * 1997-11-06 2009-11-03 Finjan Software, Ltd Method and system for protecting a computer and a network from hostile downloadables
CA2243724C (en) * 1997-07-28 2002-01-22 At&T Corp. A geographical information search system
US7975305B2 (en) * 1997-11-06 2011-07-05 Finjan, Inc. Method and system for adaptive rule-based content scanners for desktop computers
US8010469B2 (en) 2000-09-25 2011-08-30 Crossbeam Systems, Inc. Systems and methods for processing data flows
US7027988B1 (en) 2001-07-20 2006-04-11 At&T Corp. System and method of ε removal of weighted automata and transducers
US7046848B1 (en) * 2001-08-22 2006-05-16 Olcott Peter L Method and system for recognizing machine generated character glyphs and icons in graphic images
WO2004072797A2 (en) * 2003-02-07 2004-08-26 Safenet, Inc. System and method for determining the start of a match of a regular expression
CN100470480C (zh) * 2003-02-28 2009-03-18 洛克希德马丁公司 分析程序加速器装置以及更新其的方法
US7093231B2 (en) * 2003-05-06 2006-08-15 David H. Alderson Grammer for regular expressions
WO2004107111A2 (en) * 2003-05-23 2004-12-09 Sensory Networks, Inc. Efficient representation of state transition tables
US7685254B2 (en) * 2003-06-10 2010-03-23 Pandya Ashish A Runtime adaptable search processor
US7370361B2 (en) * 2004-02-06 2008-05-06 Trend Micro Incorporated System and method for securing computers against computer virus
US7586851B2 (en) * 2004-04-26 2009-09-08 Cisco Technology, Inc. Programmable packet parsing processor
US8392590B2 (en) * 2004-09-10 2013-03-05 Cavium, Inc. Deterministic finite automata (DFA) processing
US7594081B2 (en) * 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
US8301788B2 (en) * 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
WO2006029508A1 (en) * 2004-09-13 2006-03-23 Solace Systems Inc. Highly scalable subscription matching for a content routing network
BRPI0419214B1 (pt) * 2004-12-09 2021-09-21 Mitsubishi Denki Kabushiki Kaisha Sistema e método de correspondência de sequência
US7710988B1 (en) * 2005-03-11 2010-05-04 Xambala Corporation Method and system for non-deterministic finite automaton filtering
US7512634B2 (en) * 2006-06-05 2009-03-31 Tarari, Inc. Systems and methods for processing regular expressions
GB2441351B (en) * 2006-09-01 2010-12-08 3Com Corp Positionally dependent pattern checking in character strings using deterministic finite automata
US8024691B2 (en) * 2006-09-28 2011-09-20 Mcgill University Automata unit, a tool for designing checker circuitry and a method of manufacturing hardware circuitry incorporating checker circuitry
US7899977B2 (en) * 2006-12-08 2011-03-01 Pandya Ashish A Programmable intelligent search memory
US7636717B1 (en) 2007-01-18 2009-12-22 Netlogic Microsystems, Inc. Method and apparatus for optimizing string search operations
FR2914081A1 (fr) * 2007-03-23 2008-09-26 Advestigo Sa Procede de protection de documents numeriques contre des utilisations non autorisees.
US7854002B2 (en) * 2007-04-30 2010-12-14 Microsoft Corporation Pattern matching for spyware detection
US8219508B2 (en) * 2007-07-06 2012-07-10 Lsi Corporation Systems and methods for compressing state machine instructions using a two access indexing scheme
US20100138367A1 (en) * 2007-08-02 2010-06-03 Nario Yamagaki SYSTEM, METHOD, AND PROGRAM FOR GENERATING NON-DETERMINISTIC FINITE AUTOMATON NOT INCLUDING e-TRANSITION
US7949683B2 (en) * 2007-11-27 2011-05-24 Cavium Networks, Inc. Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US8180803B2 (en) * 2007-11-27 2012-05-15 Cavium, Inc. Deterministic finite automata (DFA) graph compression
US20100037056A1 (en) * 2008-08-07 2010-02-11 Follis Benjamin D Method to support privacy preserving secure data management in archival systems
US8176085B2 (en) * 2008-09-30 2012-05-08 Microsoft Corporation Modular forest automata
US8473523B2 (en) * 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
US20100192225A1 (en) * 2009-01-28 2010-07-29 Juniper Networks, Inc. Efficient application identification with network devices
US9179305B2 (en) * 2009-06-11 2015-11-03 Qualcomm Incorporated Bloom filter based device discovery
WO2011011916A1 (zh) * 2009-07-29 2011-02-03 华为技术有限公司 正则表达式匹配方法和系统及查找装置
CN101655861B (zh) * 2009-09-08 2011-06-01 中国科学院计算技术研究所 基于双计数布鲁姆过滤器的哈希方法和哈希装置
US8937942B1 (en) * 2010-04-29 2015-01-20 Juniper Networks, Inc. Storing session information in network devices
CN101853301A (zh) * 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
US8543528B2 (en) * 2010-09-23 2013-09-24 International Business Machines Corporation Exploitation of transition rule sharing based on short state tags to improve the storage efficiency
US8799188B2 (en) * 2011-02-08 2014-08-05 International Business Machines Corporation Algorithm engine for use in a pattern matching accelerator
US8990259B2 (en) * 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US9858051B2 (en) 2011-06-24 2018-01-02 Cavium, Inc. Regex compiler

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10635419B2 (en) 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US10645187B2 (en) 2018-07-13 2020-05-05 Fungible, Inc. ARC caching for determininstic finite automata of regular expression accelerator
US10656949B2 (en) 2018-07-13 2020-05-19 Fungible, Inc. Instruction-based non-deterministic finite state automata accelerator
US10983721B2 (en) 2018-07-13 2021-04-20 Fungible, Inc. Deterministic finite automata node construction and memory mapping for regular expression accelerator
US11010167B2 (en) 2018-07-13 2021-05-18 Fungible, Inc. Instruction-based non-deterministic finite state automata accelerator
US11263190B2 (en) 2019-09-26 2022-03-01 Fungible, Inc. Data ingestion and storage by data processing unit having stream-processing hardware accelerators
US11636154B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Data flow graph-driven analytics platform using data processing units having hardware accelerators
US11636115B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Query processing using data processing units having DFA/NFA hardware accelerators
US11934964B2 (en) 2020-03-20 2024-03-19 Microsoft Technology Licensing, Llc Finite automata global counter in a data flow graph-driven analytics platform having analytics hardware accelerators
US11630729B2 (en) 2020-04-27 2023-04-18 Fungible, Inc. Reliability coding with reduced network traffic

Also Published As

Publication number Publication date
US20120331554A1 (en) 2012-12-27
KR20140051914A (ko) 2014-05-02
CN103733590B (zh) 2017-05-03
US9858051B2 (en) 2018-01-02
CN107122221B (zh) 2021-03-12
CN107122221A (zh) 2017-09-01
CN103733590A (zh) 2014-04-16
KR20160093101A (ko) 2016-08-05
WO2012177736A1 (en) 2012-12-27
KR101868720B1 (ko) 2018-07-17
DE112012002624B4 (de) 2021-01-28

Similar Documents

Publication Publication Date Title
DE112012002624B4 (de) Regex-Kompilierer
US9514246B2 (en) Anchored patterns
US10367786B2 (en) Configuration management for a capture/registration system
US7516492B1 (en) Inferring document and content sensitivity from public account accessibility
US7523301B2 (en) Inferring content sensitivity from partial content matching
EP2490393B1 (de) Verfahren und Vorrichtung zur Analyse von Datenpaketen
DE102016203565A1 (de) Identifizieren von bösartigen Web-Infrastrukturen
DE112011103273B4 (de) Verfahren, Computerprogrammprodukt und Vorrichtung zur Weitergabe von Identitäten über Anwendungsebenen unter Verwendung von kontextabhängiger Zuordnung und gesetzten Werten
KR100960117B1 (ko) 시그니처 패턴 매칭방법과 그 시스템 및 시그니처 패턴이기록된 기록매체
DE112014000578T5 (de) System und Verfahren zum Erkennen eines kompromittierten Computersystems
Wang et al. Using CNN-based representation learning method for malicious traffic identification
Meng et al. Adaptive non-critical alarm reduction using hash-based contextual signatures in intrusion detection
Aldwairi et al. n‐Grams exclusion and inclusion filter for intrusion detection in Internet of Energy big data systems
DE112019005382T5 (de) Auslegung und durchführung einer zeichenmustererkennung in einer schaltung auf datenebene
CN109190408B (zh) 一种数据信息的安全处理方法及系统
US11425092B2 (en) System and method for analytics based WAF service configuration
Meng et al. An evaluation of single character frequency-based exclusive signature matching in distinct IDS environments
DE112021000455T5 (de) Deep packet analyse
Mokhov et al. Automating MAC spoofer evidence gathering and encoding for investigations
Zhou et al. Research on computer forensics based on multiple correlation analysis technology of multi-source logs
Kozhevnikov et al. Implementing Machine Learning in the Context of Web Application Firewalls
CN117220981A (zh) 一种基于ac自动机算法的海量黑名单匹配方法
CN115081498A (zh) 工业数据处理方法、装置和工业网关
Aldwairi et al. IoE Big Data Systems
Patetta et al. Line-Rate Botnet Detection with Smartnic-Embedded Feature Extraction

Legal Events

Date Code Title Description
R081 Change of applicant/patentee

Owner name: MARVELL ASIA PTE, LTD., SG

Free format text: FORMER OWNER: CAVIUM, INC., SAN JOSE, CALIF., US

Owner name: CAVIUM, LLC (N.D.GES.D.STAATES DELAWARE), SAN , US

Free format text: FORMER OWNER: CAVIUM, INC., SAN JOSE, CALIF., US

R082 Change of representative

Representative=s name: WAGNER & GEYER PARTNERSCHAFT MBB PATENT- UND R, DE

R012 Request for examination validly filed
R081 Change of applicant/patentee

Owner name: MARVELL ASIA PTE, LTD., SG

Free format text: FORMER OWNER: CAVIUM, LLC (N.D.GES.D.STAATES DELAWARE), SAN JOSE, CALIF., US

R082 Change of representative

Representative=s name: WAGNER & GEYER PARTNERSCHAFT MBB PATENT- UND R, DE

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: H04L0029060000

Ipc: H04L0065000000

R082 Change of representative

Representative=s name: GRUENECKER PATENT- UND RECHTSANWAELTE PARTG MB, DE