DE112012002624B4 - Regex-Kompilierer - Google Patents

Regex-Kompilierer Download PDF

Info

Publication number
DE112012002624B4
DE112012002624B4 DE112012002624.1T DE112012002624T DE112012002624B4 DE 112012002624 B4 DE112012002624 B4 DE 112012002624B4 DE 112012002624 T DE112012002624 T DE 112012002624T DE 112012002624 B4 DE112012002624 B4 DE 112012002624B4
Authority
DE
Germany
Prior art keywords
dfa
nfa
states
state
hash value
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.)
Active
Application number
DE112012002624.1T
Other languages
English (en)
Other versions
DE112012002624T5 (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
Marvell Asia Pte Ltd
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 Marvell Asia Pte Ltd filed Critical Marvell Asia Pte Ltd
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

Abstract

Ein Verfahren (800, 901), das Folgendes aufweist:in einem Prozessor (225) einer Sicherheitsvorrichtung (200), die mit einem Netzwerk (105, 115) gekoppelt ist, mittels des Prozessors:Überwachen von Daten, die von der Sicherheitsvorrichtung aus dem Netzwerk empfangen wurden;Umwandeln eines nichtdeterministischen, endlichen Automaten- bzw. NFA-(NFA = Non-Deterministic Finite Automata) Graphen für eine gegebene Menge von Mustern in einen deterministischen, endlichen Automaten- bzw. DFA- (DFA = Deterministic Finite Automata) Graphen mit einer Anzahl von DFA-Zuständen, wobei der Prozessor den DFA-Graphen einsetzt, um die gegebene Menge von Mustern auf die Daten zur Überwachung anzuwenden, wobei das Umwandeln Folgendes umfasst:Zuordnen (810, 903) eines DFA-Zustandes der Anzahl von DFA-Zuständen zu einer zugehörigen Menge von einem oder mehreren NFA-Zuständen des NFA-Graphen;Berechnen (815, 904) eines ersten Hash-Wertes des einen oder der mehrerer NFA-Zustände der zugehörigen Menge;Speichern des ersten Hash-Wertes in einem Eintrag einer DFA-Zustände-Tabelle, die die DFA-Zustände mit dem ersten Hash-Wert korreliert; undBestimmen eines Übergangs-DFA-Zustands von einem DFA-Zustand für ein Zeichen eines Alphabets, das vom NFA-Graphen erkannt wurde, undzwar basierend darauf, ob ein zweiter Hash-Wert von Übergängen von dem einen oder den mehreren NFA-Zuständen für das Zeichen in einer Epsilon-Abschluss- bzw. EC- (EC = Epsilon Closure) Zwischenspeichertabelle existiert, wobei die EC-Zwischenspeichertabelle Hash-Wert-Einträge aufweist,die den DFA-Zuständen zugeordnet sind, und, falls der zweite Hash-Wert existiert, Setzen des Übergangs-DFA-Zustandes als einen gegebenen DFA-Zustand, wobei der gegebene DFA-Zustand dem zweiten Hash-Wert in der EC-Zwischenspeichertabelle zugeordnet wird.

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 Endezu-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-Netzwerkprötokollschichten, 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.
  • Die US 2008/0059464 A1 beschreibt eine deterministische endliche Zustandsmaschine, die zum Erkennen von positionell signifikanten Übereinstimmungen von Zeichen in einer Zeichenfolge organisiert ist, untersucht nacheinander jedes Zeichen, um einen Austrittsübergang für einen aktuellen Zustand der Maschine in einen anderen Zustand zu bestimmen. Die Maschine reagiert auf eine Untersuchung der Zeichenfolge von Zeichen, indem als Antwort auf ein erstes Zeichen zu Beginn der Zeichenfolge ein Übergang von einem Anfangszustand in einen anderen Zustand ausgeführt wird. Die Maschine hat mindestens einen Zustand für jede Zeichenposition, einschließlich eines Ausgangsübergangs von jedem Zustand für jedes Zeichen in einen anderen Zustand; und besitzt jeweils nur Vorwärtsausgangsübergänge von einem der Zustände, wobei der aktuelle Zustand der Maschine eindeutig eine Zählung der Anzahl von Zeichen ab dem Beginn der Zeichenkette darstellt. Die Maschine kann mindestens einen Übereinstimmungsstatus enthalten, der angibt, dass alle Zeichenübereinstimmungen in der Zeichenfolge, die für mindestens eine jeweilige Regel erforderlich sind, erkannt wurden. Einige, aber nicht alle Zustände in der Vielzahl von Zuständen haben jeweils einen einzelnen Ausgangsübergang für einen beliebigen Wert eines jeweiligen Zeichens in der Zeichenfolge. Zumindest einige der Zustände in der Vielzahl von Zuständen definieren jeweils einen Ausgangsübergang zu einem Zustand, der „keine Übereinstimmung“ anzeigt. Die Maschine kann bereit sein, die Prüfung der Zeichenkette einzustellen, wenn ein Zustand „keine Übereinstimmung“ erreicht wird.
  • Die US 2007/0282833 A1 beschreibt ein Verfahren zum Reduzieren der Größe eines DFA, das einem regulären Ausdruck zugeordnet ist, trennt die Funktionen des Lokalisierens von Unterausdrücken innerhalb des DFA und des Bestimmens, ob die lokalisierten Unterausdrücke einem regulären Ausdruck entsprechen. Beispielsweise werden die Funktionen von (1) Lokalisieren von Unterausdrücken in einem Bereich, der einen Ausdruck bestätigt, und (2) Bestimmen, ob die Unterausdrücke den Bereich des Bereichs, der einen Ausdruck bestätigt, partitioniert. In einer Ausführungsform kann eine erste Komponente die Unterausdrücke in einem Datenstrom unter Verwendung eines oder mehrerer DFAs lokalisieren, während eine zweite Komponente bestimmt, ob die lokalisierten Unterausdrücke den Bereich erfüllen. In dieser Ausführungsform kann die Größe des resultierenden DFA signifikant verringert werden, da die DFAs nicht konfiguriert sind, um eine Beziehung zwischen Unterausdrücken zu bestimmen, wie beispielsweise einen Bereich zwischen Unterausdrücken.
  • Die US 2010/0192225 A1 beschreibt Techniken zum effizienten Implementieren der Anwendungsidentifikation in Netzwerkgeräten. Insbesondere enthält ein Netzwerkgerät eine Steuereinheit, die Daten speichert, die eine Gruppe deterministischer endlicher Automaten (DFA) und einen einzelnen DFA definieren. Die Gruppe DFA wird gebildet, indem nicht explosive DFAs, die aus entsprechenden nicht explosiven regulären Ausdrücken (Regexs) erzeugt wurden, und Fingerabdruck-DFAs (f-DFAs), die aus Signaturfingerabdrücken erzeugt wurden, die aus explosiven Regex extrahiert wurden, zusammengeführt werden. Die nicht explosiven Regexs umfassen Regexs, bei denen festgestellt wurde, dass sie während der Erzeugung der Gruppe DFA keine Zustandsexplosion verursachen, die Signaturfingerabdrücke umfassen Segmente von explosiven Regexs, die die explosiven Regexs eindeutig identifizieren, und die explosiven Regexs umfassen Regexs, bei denen festgestellt wird, dass sie während der Erzeugung des Staates eine Staatsexplosion verursachen Gruppe DFA. Das Netzwerkgerät enthält eine Schnittstelle, die ein Paket empfängt, und die Steuereinheit durchläuft zuerst den Gruppen-DFA und in einigen Fällen die einzelnen DFAs, um Netzwerkanwendungen, denen Pakete entsprechen, effizienter zu identifizieren.
  • Die US 2004/0172234 A1 beschreibt dass fehlerfreie Statustabellen automatisch aus einer Spezifikation einer Gruppe gewünschter ausführbarer Funktionen erzeugt werden, wie sie in einer Programmiersprache in einer formalen Notation wie der Backus-Naur-Form oder einer Ableitung davon bereitgestellt werden, indem Token unterschieden werden, die den jeweiligen ausführbaren Funktionen entsprechen. Identifikationen, Argumente, Syntax, Grammatikregeln, spezielle Symbole und dergleichen. Die Token können rekursiv sein (z. B. unendlich). In diesem Fall werden sie in endliche Automaten umgewandelt, die deterministisch oder nicht deterministisch sein können. Nicht deterministische endliche Automaten werden in deterministische endliche Automaten und dann in Zustandsübergänge umgewandelt, die zum Erstellen einer Zustandstabelle verwendet werden, die dann gespeichert oder vorzugsweise in eine endliche Zustandsmaschine eines Hardware-Parser-Beschleunigers geladen werden kann, um ihre Persönlichkeit zu definieren.
  • Die US 2005/0240999 A1 beschreibt ein Sicherheitssystem zum Scannen von Inhalten in einem Computer, einschließlich einer in einem Computer untergebrachten Netzwerkschnittstelle, zum Empfangen von Inhalten aus dem Internet an seinem Ziel zu einer auf dem Computer ausgeführten Internetanwendung, einer Datenbank von Regeln, die Computer-Exploits entsprechen, die in dem Computer gespeichert sind, sowie einen regelbasierten Inhaltsscanner, der mit dieser Regeldatenbank kommuniziert, um Inhalte zu scannen, um das Vorhandensein potenzieller Exploits darin zu erkennen, eine Netzwerkverkehrssonde, die operativ mit der Netzwerkschnittstelle und dem regelbasierten Inhaltsscanner verbunden ist, um selektiv Umleiten von Inhalten von ihrem beabsichtigten Ziel zum regelbasierten Inhaltsscanner und einem Regelaktualisierungsmanager, der mit der Regeldatenbank kommuniziert, um die Regeldatenbank regelmäßig zu aktualisieren, um neue Regeln aufzunehmen, die verfügbar gemacht werden.
  • Es ist Aufgabe der vorliegenden Erfindung, die oben beschriebenen sowie weitere Nachteile von existierenden Systemen und Verfahren 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 zu überwinden.
  • ZUSAMMENFASSUNG
  • Die oben genannte Aufgabe und weitere Probleme werden jeweils durch ein Verfahren sowie eine Sicherheitsvorrichtung nach den Ansprüchen 1, 21, 26, 30, 49 und 54 gelöst. Die Unteransprüche beziehen sich auf bevorzugte Ausführungen der Erfindung.
  • Ein Verfahren und eine entsprechende Vorrichtung betreffen ein Überwachen von Daten, die von einer Sicherheitsvorrichtung aus einem Netzwerk empfangen wurden und 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. Die DFA-Graphen werden eingesetzt, um die gegebene Menge von Mustern auf die Daten zur Überwachung anzuwenden. 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.
  • Figurenliste
  • 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.
    • 9A-9B 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-Attach-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 145 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 Sicherheitsdatenzentrum140 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 Speichern 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. 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. 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. 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. 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. 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. 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 5A-5F 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 3zu 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 2'' 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. Tabelle 1
    DFA-ZUSTANDSNUMMER MENGE VON NFA-ZUSTÄNDEN
    0 {0,1,2,3,4}
    1 {0, 5, 6, 7}
    2 {8,9,2,3}
    ... ...
    ... ...
  • 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. Tabelle 2
    Laufzeit Speicher Führen einer Datenstruktur (Einfügen von NFA-Zustand) Kommentare
    O(N*M2) O(N*M) O(1) Jede Menge von NF A-Zuständen
    (mit einem DFA-Zustand 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 ANgeschaltet, wenn DFA-Zustand diesen NFA-Zustand hat.
    O(N*log M) O(N*k*M), wobei k konstante Kosten von Baumzeigern, etc. sind. O (log M) Jede Menge von NFA-Zuständen (assoziiert mit DFA-Zustand) wird als Baum gespeichert mit NFA-Zustandsnummern.
  • 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:
    1. 1. Für jeden unmarkierten DFA-Zustand „d“ (Spalte -1- in DFA-ZUSTÄNDE-TABELLE, obige Tabelle 1)
      1. 1. Für jedes Alphabet „a“ in der Alphabet-Menge
        1. 1. Setzen von S = {}
        2. 2. Für jeden NFA-Zustand „n“ von „d“ (Spalte -2- in DFA-ZUSTÄNDE-TABELLE, obige Tabelle 1)
          1. 1. Wenn „n“ einen abgehenden Bogen zu „m“ Bogen bei „a“ hat
            1. 1. S = SU{m}
        3. 3. Se = ECLOSURE (S)
        4. 4. Gefundenem „falsch“ zuweisen
        5. 5. Für jeden DFA-Zustand „f“ in der DFA-ZUSTÄNDE-TABELLE, obige Tabelle 1
          1. 1. „p“ soll die Menge von NFA-Zuständen entsprechend dem DFA-Zustand „f“ sein
          2. 2. Wenn die Mengen „Se“ und „p“ äquivalent sind
            1. 1. Gefundenem „richtig“ zuweisen
            2. 2. Gehe zu 1.6
        6. 6. Wenn Gefundenes „richtig“ ist
          1. 1. Setzen von ÜBERGANG(„d“, „a“) = „f“
        7. 7. Ansonsten
          1. 1. Hinzufügen eines neuen DFA-Zustands „f“ zu der DFA-ZUSTÄNDE-TABELLE, Tabelle 1, mit „Se“ als Menge von NFA-Zuständen in Spalte 2
          2. 2. Setzen von ÜBERGANG(„d“, „a“) = „f“
    2. 2. Setzen von „d“ als markiert
  • 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. Tabelle 3
    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.
  • 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. Tabelle 4
    DFA-ZUSTANDSNUMMER DFA-ZUSTANDS-HASH 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
    ... ... ...
  • 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. Tabelle 5
    EC-EINGABEMENGE-HASH EC-AUSGABE-MENGE
    78346782346782 {3,4, 1,2, 7}
    89237489237492 {8,3,2,5,19}
    ... ...
  • 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:
    1. 1. Für jeden unmarkierten DFA-Zustand „d“ (Spalte -1 - in DFA-ZUSTÄNDE-TABELLE, obige Tabelle 4)
      1. 1. Für jedes Alphabet „a“ in der Alphabet-Menge
        1. 1. Setzen von S = {}
        2. 2. Für jeden NFA-Zustand „n“ von „d“ (Spalte -3- in DFA-ZUSTÄNDE-TABELLE, obige Tabelle 4)
          1. 1. Wenn „n“ einen abgehenden Bogen zu „m“ bei „a“ hat
            1. 1. S = S U {m}
        3. 3. Erlangen von ECLOSURE „Se“ der Menge „S“ wie unten gegeben
          1. 1. Berechnen des Hashes „Hi“ der Menge „S“
          2. 2. Für jeden Eintrag „e“ in der EC-CACHE-TABELLE, obige Tabelle 5
            1. 1. „He“ soll der Hash-Wert bei Eintrag „e“ sein (Spalte -1- in obiger EC-CACHE-TABELLE)
            2. 2. Wenn „Hi“ und „He“ gleich sind
              1. 1. Se = EC-AUSGABE-MENGE (e), d.h. Spalte -2- in obiger EC-CACHE-TABELLE
              2. 2. Gehe zu 1.1.4
            3. 3. Se = ECLOSURE (S)
            4. 4. Hinzufügen eines neuen Eintrags in der obigen EC-CACHE-TABELLE mit Feldern „Hi“ und „Se“
        4. 4. Gefundenem „falsch“ zuweisen
        5. 5. Berechnen des Hashes „q“ der Menge „Se“
        6. 6. Für jeden DFA-Zustand „f“ in der DFA-ZUSTÄNDE-TABELLE, obige Tabelle 4
          1. 1. „p“ soll der Hash der NFA-Zustände des DFA-Zustands „f“ sein
          2. 2. Wenn „p“ und „q“ gleich sind
            1. 1. Gefundenem „richtig“ zuweisen
            2. 2. Gehe zu 1.1.7
        7. 7. Wenn Gefundenes „richtig“ ist
          1. 1. Setzen von ÜBERGANG(„d“, „a“) = „f“
        8. 8. Ansonsten
          1. 1. Hinzufügen eines neuen DFA-Zustands „f“ zu der DFA-ZUSTÄNDE-TABELLE, Tabelle 4 mit Feldern „q“ und „Se“
          2. 2. Setzen von ÜBERGANG(„d“, „a“) = „f“
    2. 2. Löschen der Menge von NFA-Zustandsnummern des DFA-Zustands „d“ aus der DFA-ZUSTÄNDE-TABELLE, Tabelle 4, und Setzen von „d“ als markiert
  • 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. Tabelle 6
    EC-EINGABEMENGE-HASH DFA-ZUSTANDSNUMMER
    78346782346782 13
    89237489237492 14
  • Somit wird die Verarbeitungstabelle für Schritt 870 zu: Tabelle 7
    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.
  • 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:
    1. 1. Für jeden unmarkierten DFA-Zustand „d“ (Spalte -1- in DFA-ZUSTÄNDE-TABELLE, obige Tabelle 4)
      1. 1. Für jedes Alphabet „a“ in der Alphabet-Menge
        1. 1. Setzen von S = {}
        2. 2. Für jeden NFA-Zustand „n“ von „d“ (Spalte -3- in DFA-ZUSTÄNDE-TABELLE, obige Tabelle 4)
          1. 1. Wenn „n“ einen abgehenden Bogen zu „m“ bei „a“ hat
            1. 1. S=SU{m}
        3. 3. Erlangen des Übergang-DFA-Zustands „f“ des DFA-Zustands „d“ bei Alphabet „a“ wie folgt
          1. 1. Berechnen von Hash „Hi“ der Menge „S“
          2. 2. Für jeden Eintrag „e“ in der EC-CACHE-TABELLE, obige Tabelle 6
            1. 1. „He“ soll der Hash-Wert bei Eintrag „e“ sein (Spalte -1- in obiger EC-CACHE-Tabelle 6)
            2. 2. Wenn „Hi“ und „He“ gleich sind
              1. 1. Zuweisen von „f“ zu DFA-Zustandsnummer von Eintrag „e“ , d.h. Spalte -2- in der obigen EC-CACHE-TABELLE
              2. 2. Gehe zu 1.1.5
          3. 3. Se = ECLOSURE (S)
          4. 4. Berechnen von Hash „q“ der Menge „Se“
          5. 5. Gefundenem „falsch“ zuweisen
          6. 6. Für jeden DFA-Zustand „g“ in der obigen DFA-ZUSTÄNDE-TABELLE
            • 1. „p“ soll der Hash von NFA-Zuständen des DFA-Zustands „g“ sein
            • 2. Wenn „p“ und „q“ gleich sind
              1. 1. Gefundenem „richtig“ zuweisen und „g“ zu „f“ zuweisen
              2. 2. Gehe zu 1.1.3.7
          7. 7. Wenn Gefundenes „richtig“ ist
            1. 1. Gehe zu 1.1.4
          8. 8. Hinzufügen eines neuen unmarkierten DFA-Zustands „f“ in der DFA-ZUSTÄNDE-TABELLE unter Verwendung von „q“ und „Se“
        4. 4. Hinzufügen eines neuen Eintrags in der EC-CACHE-Tabelle unter Verwendung des Hashes „Hi“ und der DFA-Zustandsnummer „f“
        5. 5. Setzen von ÜBERGANG(„d“, „a“) = „f“
    2. 2. Löschen der Menge von NFA-Zustandsnummern des DFA-Zustands „d“ aus der DFA-ZUSTÄNDE-TABELLE, obige Tabelle 4, und Setzen von Zustand als „markiert“
  • 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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine, die verwendet wird, um eine arbiträre Textzeichenkette zu verarbeiten, die über Pakete in einem Kommunikationsnetzwerk empfangen werden kann. Das Verhalten der erzeugten Aho-Corasik-Mustererkennungsmaschine wird durch drei Funktionen diktiert: i) eine „gehe zu bzw. goto“-Funktion „g“, ii) eine Ausfall- bzw. failure-Funktion „f“, und iii) eine Ausgabe- bzw. output-Funktion „output“.
  • 10 zeigt eine Aho-Corasik-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 Aho-Corasik-Mustererkennungsmaschine, „a“ ein Eingabewert und „t“ ein Übergangszustand ist), dann geht die Aho-Corasik-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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine in dem Zustand 0 (Knoten 1005). Bei einem Zeichen „s“ des Eingabestroms geht die Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine 1000 zwei Zustandsübergänge. Da g(5, r) = fail ist, geht die Aho-Corasik-Mustererkennungsmaschine 1000 in den Zustand 2 = f(5). Zusätzlich, da g(2, r) = 8 ist, geht die Aho-Corasik-Mustererkennungsmaschine 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-Mustererkennungsmaschine 1000 werden beispielhafte Ausführungsbeispiele der vorliegenden Erfindung im Detail unmittelbar im Anschluss beschrieben.
  • Die Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine 1000 nicht-verankerte Muster „hers“, „bis“ und „she“ unter Verwendung eines Aho-Corasik-Algorithmus. Durch Modifizieren des Aho-Corasik-Algorithmus kann eine Aho-Corasik-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 (Aho-Corasik-Mustererkennungsmaschine 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:
    1. 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.
    2. 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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine bleibt bei dem Knoten 0 (1005). Bei einem Zeichen „s“ des Eingabestroms geht die Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine 1000 in den Zustand 8 über. In dem Zustand 8 bei dem Eingabesymbol „s“ geht die Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine 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 Aho-Corasik-Mustererkennungsmaschine in den Zustand 15 über (12) und fährt wie folgt fort:
      • bei „h“ ={16}
      • bei „e“ = {17}
      • bei „1“ = {18}
      • bei „1“ = {19}
    in Zustand 16 (12), da die goto-Funktion g(16, „e“) = 17, und die Aho-Corasik-Mustererkennungsmaschine 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 „1“ geht die Aho-Corasik-Mustererkennungsmaschine in den Zustand 18 über. In dem Zustand 18 bei dem Eingabesymbol „1“ geht die Aho-Corasik-Mustererkennungsmaschine 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 (58)

  1. Ein Verfahren (800, 901), das Folgendes aufweist: in einem Prozessor (225) einer Sicherheitsvorrichtung (200), die mit einem Netzwerk (105, 115) gekoppelt ist, mittels des Prozessors: Überwachen von Daten, die von der Sicherheitsvorrichtung aus dem Netzwerk empfangen wurden; Umwandeln eines nichtdeterministischen, endlichen Automaten- bzw. NFA-(NFA = Non-Deterministic Finite Automata) Graphen für eine gegebene Menge von Mustern in einen deterministischen, endlichen Automaten- bzw. DFA- (DFA = Deterministic Finite Automata) Graphen mit einer Anzahl von DFA-Zuständen, wobei der Prozessor den DFA-Graphen einsetzt, um die gegebene Menge von Mustern auf die Daten zur Überwachung anzuwenden, wobei das Umwandeln Folgendes umfasst: Zuordnen (810, 903) eines DFA-Zustandes der Anzahl von DFA-Zuständen zu einer zugehörigen Menge von einem oder mehreren NFA-Zuständen des NFA-Graphen; Berechnen (815, 904) eines ersten Hash-Wertes des einen oder der mehrerer NFA-Zustände der zugehörigen Menge; Speichern des ersten Hash-Wertes in einem Eintrag einer DFA-Zustände-Tabelle, die die DFA-Zustände mit dem ersten Hash-Wert korreliert; und Bestimmen eines Übergangs-DFA-Zustands von einem DFA-Zustand für ein Zeichen eines Alphabets, das vom NFA-Graphen erkannt wurde, und zwar basierend darauf, ob ein zweiter Hash-Wert von Übergängen von dem einen oder den mehreren NFA-Zuständen für das Zeichen in einer Epsilon-Abschluss- bzw. EC- (EC = Epsilon Closure) Zwischenspeichertabelle existiert, wobei die EC-Zwischenspeichertabelle Hash-Wert-Einträge aufweist, die den DFA-Zuständen zugeordnet sind, und, falls der zweite Hash-Wert existiert, Setzen des Übergangs-DFA-Zustandes als einen gegebenen DFA-Zustand, wobei der gegebene DFA-Zustand dem zweiten Hash-Wert in der EC-Zwischenspeichertabelle zugeordnet wird.
  2. Das Verfahren gemäß Anspruch 1, wobei der erste und zweite Hash-Wert ein kryptographischer/perfekter Hash-Wert ist.
  3. Das Verfahren gemäß Anspruch 1, wobei das Zuordnen Folgendes umfasst: Bestimmen (825, 907), ob es unmarkierte DFA-Zustände in der Anzahl von DFA-Zuständen gibt; Auswählen (830, 909) eines der unmarkierten DFA-Zustände, um einen unmarkierten DFA-Zustand zu erzeugen; Markieren (830, 909) des unmarkierten DFA-Zustandes, um einen markierten DFA-Zustand zu erzeugen; und Bestimmen (850, 914) der Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen, der dem markierten DFA-Zustand zugeordnet ist, zu anderen NFA-Zuständen für das Zeichen des Alphabets, das vom NFA-Graphen erkannt wurde.
  4. Das Verfahren gemäß Anspruch 3, wobei das Bestimmen von Übergängen Zuordnen der anderen NFA-Zustände und einen Epsilon-Abschluss 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-Zustandes zum Epsilon-Abschluss der anderen NFA-Zustände Erlangen des Epsilon-Abschlusses der anderen NFA-Zustände aus der EC-Zwischenspeichertabelle umfasst, und wenn der Epsilon-Abschluss der anderen NFA-Zustände nicht in der EC-Zwischenspeichertabelle existiert, Berechnen eines Epsilon-Abschlusses der anderen NFA-Zustände.
  6. Das Verfahren gemäß Anspruch 5, das weiter Folgendes umfasst: Hinzufügen des möglichen neuen unmarkierten DFA-Zustandes 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-Zustandes in der DFA-Zustände-Tabelle.
  7. Das Verfahren gemäß Anspruch 6, wobei das Hinzufügen des möglichen neuen unmarkierten DFA-Zustandes Folgendes umfasst: Vergleichen eines dritten Hash-Werts des Epsilon-Abschlusses der anderen NFA-Zustände, zugeordnet zu dem möglichen neuen unmarkierten DFA-Zustand, mit einem vierten Hash-Wert von NFA-Zuständen, und zwar 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-Zustandes zu der Anzahl von DFA-Zuständen weiter Folgendes umfasst: 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 Folgendes aufweist: Hinzufügen des möglichen neuen unmarkierten Zustandes als einen Übergang von dem markierten DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  10. Das Verfahren gemäß Anspruch 4, das weiter Folgendes aufweist: Ersetzen der Zuordnung der anderen NFA-Zustände und des Epsilon-Abschlusses der anderen NFA-Zustände zu dem möglichen neuen unmarkierten DFA-Zustand mit einer unterschiedlichen Zuordnung eines berechneten Hash-Werts der anderen NFA-Zustände und der 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 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 Folgendes aufweist: Löschen der Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen aus der DFA-Zustände-Tabelle.
  13. Das Verfahren gemäß Anspruch 1, wobei das Zuordnen Folgendes umfasst: Bestimmen eines DFA-Startzustandes; und Hinzufügen des DFA-Startzustandes als einen unmarkierten Zustand zu einer Datenstruktur, die die Anzahl von DFA-Zuständen umfasst.
  14. Das Verfahren gemäß Anspruch 13, wobei das Bestimmen des DFA-Startzustandes Folgendes umfasst: Bestimmen eines Epsilon-Abschlusses eines NFA-Startzustandes; Berechnen eines dritten Hash-Werts des Epsilon-Abschlusses des NFA-Startzustandes; und Zuordnen des DFA-Startzustandes zu dem dritten Hash-Wert des Epsilon-Abschlusses des NFA-Startzustandes.
  15. Das Verfahren gemäß Anspruch 13, wobei das Zuordnen Folgendes umfasst: Bestimmen, ob es unmarkierte DFA-Zustände in der Anzahl von DFA-Zuständen gibt; Auswählen eines der unmarkierten DFA-Zustände, um einen unmarkierten DFA-Zustand zu erzeugen; Markieren des unmarkierten DFA-Zustandes, um einen markierten DFA-Zustand zu erzeugen; und Bestimmen der Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen, zugeordnet zu dem markierten DFA-Zustand, zu anderen NFA-Zuständen für das Zeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  16. Das Verfahren gemäß Anspruch 15, wobei das Bestimmen der Übergänge Folgendes umfasst: Bestimmen des Übergangs-DFA-Zustandes von dem markierten DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  17. Das Verfahren gemäß Anspruch 16, wobei das Bestimmen des Übergang-DFA-Zustandes Folgendes umfasst: Berechnen des zweiten Hash-Werts für die Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen; und Vergleichen des zweiten Hash-Werts mit den Hash-Wert-Einträgen in der EC-Zwischenspeichertabelle.
  18. Das Verfahren gemäß Anspruch 1, das weiter Folgendes aufweist: wenn kein zweiter Hash-Wert in der EC-Zwischenspeichertabelle existiert, Berechnen eines Epsilon-Abschlusses für die Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen; Berechnen eines dritten Hash-Werts des Epsilon-Abschlusses; Hinzufügen eines neuen Eintrags in die EC-Zwischenspeichertabelle, wobei der neue Eintrag einen neuen DFA-Zustand zu dem dritten Hash-Wert des Epsilon-Abschlusses zuordnet; und Setzen des neuen DFA-Zustandes als den Übergang-DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graph erkannt wurde.
  19. Das Verfahren gemäß Anspruch 18, das weiter Folgendes aufweist: Löschen der Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen, der dem markierten DFA-Zustand aus der DFA-Zustände-Tabelle entspricht.
  20. Das Verfahren gemäß Anspruch 1, das weiter Folgendes aufweist: Bestimmen von aktiven Zeichen eines gegebenen Musters, assoziiert mit dem Alphabet, das durch den NFA-Graphen und den DFA-Graphen erkannt wird; und Erstellen des NFA-Graphen und des DFA-Graphen, um Muster zu erkennen, die nur aus den aktiven Zeichen des gegebenen Musters bestehen, assoziiert mit dem Alphabet, das durch den NFA-Graphen und den DFA-Graphen erkannt wird.
  21. Ein Verfahren, das Folgendes aufweist: in einem Prozessor einer Sicherheitsvorrichtung, die mit einem Netzwerk gekoppelt ist mittels des Prozessors: Überwachen von Daten, die von der Sicherheitsvorrichtung aus dem Netzwerk empfangen wurden; Umwandeln eines nichtdeterministischen, endlichen Automaten- bzw. NFA- (NFA = Non-Deterministic Finite Automata) Graphen für eine gegebene Menge von Mustern in einen deterministischen, endlichen Automaten- bzw. DFA- (DFA = Deterministic Finite Automata) Graphen mit einer Anzahl von DFA-Zuständen, wobei der Prozessor den DFA-Graphen einsetzt, um die gegebene Menge von Mustern auf die Daten zur Überwachung anzuwenden, wobei das Umwandeln Folgendes umfasst: 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 den NFA-Graphen erkannt wird; und Hashen bzw. Zerlegen der Menge von NFA-Zuständen, die empfangen wurden, um einen ersten Hash-Wert zu erzeugen und Vergleichen des ersten Hash-Wertes mit Hash-Wert-Einträgen in einer Epsilon-Abschluss- bzw. EC-(EC = Epsilon Closure) Zwischenspeichertabelle, um zu bestimmen, ob der erste Hash-Wert in der EC-Zwischenspeichertabelle vorhanden ist, wobei die EC-Zwischenspeichertabelle Epsilon-Abschlüsse von Mengen von NFA-Zuständen entsprechenden Hash-Werten der Menge von NFA-Zuständen zuordnet; und wenn der erste Hash-Wert vorhanden ist, Hashen einer gespeicherten Menge von NFA-Zuständen, wobei die gespeicherte Mange von NFA-Zuständen dem ersten Hash-Wert in der EC-Zwischenspeichertabelle zugeordnet ist, um einen zweiten Hash-Wert zu erzeugen; und wenn der zweite Hash-Wert in einer DFA-Zustände-Tabelle vorhanden ist, Festsetzen eines Übergangs-DFA-Zustandes von einem DFA-Zustand für das Zeichen als einen gegebenen DFA-Zustand, wobei der gegebene DFA-Zustand mit dem zweiten Hash-Wert in der DFA-Zustände-Tabelle assoziiert ist.
  22. Das Verfahren gemäß Anspruch 21, das weiter aufweist: wenn der erste Hash-Wert in der EC- Zwischenspeichertabelle vorhanden ist, Setzen der gespeicherten Menge von NFA-Zuständen, die dem ersten Hash-Wert in der EC- Zwischenspeichertabelle zugeordnet ist, als einen Epsilon-Abschluss der empfangenen Menge von NFA-Zuständen.
  23. Das Verfahren gemäß Anspruch 22, das weiter Folgendes aufweist: wenn der erste Hash-Wert in der EC- Zwischenspeichertabelle nicht vorhanden ist, Berechnen eines Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; und Hinzufügen eines neuen Eintrags in die EC-Zwischenspeichertabelle, wobei der neue Eintrag den ersten Hash-Wert der empfangenen Menge von NFA-Zustände dem berechneten Epsilon-Abschluss zuordnet.
  24. Das Verfahren gemäß Anspruch 23, wobei das Hinzufügen eines Eintrags Folgendes umfasst: Bestimmen, ob ausreichend Speicher vorhanden ist, um den neuen Eintrag hinzuzufügen; und wenn kein ausreichender Speicher vorhanden ist, Hinzufügen des neuen Eintrags gemäß einer Ersatz-Regel.
  25. Das Verfahren gemäß Anspruch 24, wobei die Ersatz-Regel den neuen Eintrag durch Löschen eines am längsten nicht verwendeten Eintrags der EC-Zwischenspeichertabelle hinzufügt.
  26. Ein Verfahren, das Folgendes aufweist: in einem Prozessor einer Sicherheitsvorrichtung, die mit einem Netzwerk gekoppelt ist mittels des Prozessors: Überwachen von Daten, die von der Sicherheitsvorrichtung aus dem Netzwerk empfangen wurden; Umwandeln eines nichtdeterministischen, endlichen Automaten- bzw. NFA- (NFA = Non-Deterministic Finite Automata) Graphen für eine gegebene Menge von Mustern in einen deterministischen, endlichen Automaten- bzw. DFA- (DFA = Deterministic Finite Automata) Graphen mit einer Anzahl von DFA-Zuständen, wobei der Prozessor den DFA-Graphen einsetzt, um die gegebene Menge von Mustern auf die Daten zur Überwachung anzuwenden, wobei das Umwandeln Folgendes umfasst: Empfangen einer Menge von NFA-Zuständen, wobei die Menge von NFA-Zuständen Übergangszustände für ein Zeichen eines Alphabets sind, das durch den NFA-Graphen erkannt wird; und Hashen bzw. Zerhacken der Menge von empfangenen NFA-Zuständen, um einen Hash-Wert zu erzeugen und Vergleichen des Hash-Wertes mit Hash-Wert-Einträgen in einer Epsilon-Abschluss- bzw. EC- (EC = Epsilon Closure) Zwischenspeichertabelle, um zu bestimmen, ob der Hash-Wert in der EC-Zwischenspeichertabelle vorhanden ist, wobei die EC-Zwischenspeichertabelle Hash-Werte von Epsilon-Abschlüssen, assoziiert mit Mengen von NFA-Zuständen, entsprechenden DFA-Zuständen zuordnet; und wobei das Bestimmen weiter Folgendes umfasst: wenn ein Hash-Wert vorhanden ist, Setzen eines Übergangs-DFA-Zustandes von einem DFA-Zustand für ein Zeichen als gegebenen DFA-Zustand, wobei der gegebene DFA-Zustand dem Hash-Wert in der EC-Zwischenspeichertabelle zugeordnet wird.
  27. Das Verfahren gemäß Anspruch 26, wobei der Hash-Wert ein erster Hash-Wert ist und wobei das Verfahren weiter Folgendes aufweist: wenn der erste Hash-Wert nicht vorhanden ist, Berechnen des Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; Hashen bzw. Zerhacken des berechneten Epsilon-Abschlusses, um einen zweiten Hash-Wert zu erzeugen; Hinzufügen eines neuen Eintrags in die EC-Zwischenspeichertabelle, wobei der neue Eintrag den zweiten Hash-Wert einem neuen DFA-Zustand zuordnet, wobei der neue DFA-Zustand dem ersten Hash-Wert in einer DFA-Zustände-Tabelle zugeordnet ist; und Setzen des neuen DFA-Zustandes als den Übergang-DFA-Zustand von dem DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  28. Das Verfahren gemäß Anspruch 27, wobei das Hinzufügen eines Eintrags Folgendes umfasst: Bestimmen, ob ausreichend Speicher vorhanden ist, um den neuen Eintrag hinzuzufügen; und wenn kein ausreichender Speicher vorhanden ist, Hinzufügen des neuen Eintrags gemäß einer Ersatz-Regel.
  29. Das Verfahren gemäß Anspruch 28, wobei die Ersatz-Regel den neuen Eintrag durch Löschen eines am längsten nicht verwendeten Eintrags der EC-Zwischenspeichertabelle hinzufügt.
  30. Eine Sicherheitsvorrichtung (200), die mit einem Netzwerk (105, 115) gekoppelt ist, wobei die Sicherheitsvorrichtung Folgendes aufweist: einen Prozessor (225) gekoppelt an einen Datenspeicher (230), wobei der Prozessor konfiguriert ist, Daten zu überwachen, die durch die Sicherheitsvorrichtung vom Netzwerk empfangen wurden, und einen nichtdeterministischen, endlichen Automaten- bzw. NFA- (NFA = Non-Deterministic Finite Automata) Graphen für eine gegebene Menge von Mustern in einen deterministischen, endlichen Automaten- bzw. DFA (DFA = Deterministic Finite Automata) Graphen mit einer Anzahl von DFA-Zuständen umzuwandeln, wobei der Prozessor den DFA-Graphen verwendet, um die gegebene Menge von Mustern auf die Daten anzuwenden, um die Daten zu überwachen; und wobei der Prozessor für das Umwandeln des NFA-Graphen in den DFA-Graphen weiterhin eingerichtet ist zum: Zuordnen eines DFA-Zustandes der Anzahl von DFA-Zuständen zu einer entsprechenden Menge von einem oder mehreren NFA-Zuständen des NFA-Graphen; Berechnen eines ersten Hash-Werts des einen oder der mehreren NFA-Zustände der entsprechenden Menge; Speichern des ersten Hash-Wertes in einem Eintrag einer DFA-Zustände-Tabelle in dem Datenspeicher, wobei die DFA-Zustände-Tabelle die DFA-Zustände mit dem ersten Hash-Wert korreliert; und Bestimmen eines Übergangs-DFA-Zustandes vom DFA-Zustand für ein Zeichen eines Alphabets, das vom NFA-Graphen erkannt wurde, und zwar basierend darauf, ob ein zweiter Hash-Wert von Übergängen der einen oder der mehreren NFA-Zustände für das Zeichen in einer Epsilon-Closure- bzw. EC- (EC = Epsilon Closure) Zwischenspeichertabelle existiert, wobei die EC-Zwischenspeichertabelle Hash-Wert-Einträge aufweist, die den DFA-Zuständen zugeordnet wurden, und, wenn der zweite Hash-Wert existiert, Setzen des Übergangs-DFA-Zustandes als gegebenen DFA-Zustand, wobei der gegebene DFA-Zustand dem zweiten Hash-Wert in der EC-Zwischenspeichertabelle zugeordnet ist.
  31. Die Sicherheitsvorrichtung gemäß Anspruch 30, wobei der erste und der zweite Hash-Wert ein kryptographischer/perfekter Hash-Wert ist.
  32. Die Sicherheitsvorrichtung gemäß Anspruch 30, wobei der Prozessor 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, um einen unmarkierten DFA-Zustand zu erzeugen; Markieren des unmarkierten DFA-Zustandes, um einen markierten DFA-Zustand zu erzeugen; und Bestimmen der Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen, zugeordnet zu dem markierten DFA-Zustand, zu anderen NFA-Zuständen für das Zeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  33. Die Sicherheitsvorrichtung gemäß Anspruch 32, wobei der Prozessor konfiguriert ist zum Bestimmen von Übergängen durch Zuordnen der anderen NFA-Zustände und eines Epsilon-Abschlusses der anderen NFA-Zustände zu einem möglichen neuen unmarkierten DFA-Zustand.
  34. Die Sicherheitsvorrichtung gemäß Anspruch 33, wobei der Prozessor konfiguriert ist zum Zuordnen des möglichen neuen unmarkierten DFA-Zustandes zu den Epsilon-Abschlüssen der anderen NFA-Zustände durch Erlangen des Epsilon-Abschlusses der anderen NFA-Zustände aus der Epsilon-Zwischenspeichertabelle, und wobei, wenn der Epsilon-Abschluss der anderen NFA-Zustände nicht in der Epsilon-Zwischenspeichertabelle existiert, der Prozessor weiter konfiguriert ist zum Berechnen des Epsilon-Abschlusses der anderen NFA-Zustände.
  35. Die Sicherheitsvorrichtung gemäß Anspruch 34, wobei der Prozessor weiter konfiguriert ist zum Hinzufügen des möglichen neuen unmarkierten DFA-Zustandes zu der Anzahl von DFA-Zuständen, wenn die anderen NFA-Zustände und der Epsilon-Abschluss 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-Zustandes in der DFA-Zustände-Tabelle.
  36. Die Sicherheitsvorrichtung gemäß Anspruch 35, wobei der Prozessor konfiguriert ist zum Hinzufügen des möglichen neuen unmarkierten DFA-Zustandes durch Vergleichen eines dritten Hash-Werts des Epsilon-Abschlusses der anderen NFA-Zustände, zugeordnet zu dem möglichen neuen unmarkierten DFA-Zustand, mit einem vierten Hash-Wert von NFA-Zuständen, zugeordnet zu jedem der Anzahl von DFA-Zuständen.
  37. Die Sicherheitsvorrichtung gemäß Anspruch 35, wobei der Prozessor konfiguriert ist zum Hinzufügen des möglichen neuen unmarkierten DFA-Zustandes zu der Anzahl von DFA-Zuständen durch Bestimmen, ob der Epsilon-Abschluss der anderen NFA-Zustände, zugeordnet zu den möglichen neuen unmarkierten Zuständen, zu einem endgültigen annehmenden NFA-Zustand gehört, und wobei, wenn ja, der Prozessor weiter konfiguriert ist zum Hinzufügen des möglichen unmarkierten Zustandes als einem endgültigen annehmenden DFA-Zustand.
  38. Die Sicherheitsvorrichtung gemäß Anspruch 35, wobei der Prozessor weiter konfiguriert ist zum Hinzufügen des möglichen neuen unmarkierten Zustandes als einen Übergang von dem markierten DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  39. Die Sicherheitsvorrichtung gemäß Anspruch 33, wobei der Prozessor weiter konfiguriert ist zum Ersetzen der Zuordnung der anderen NFA-Zustände und des Epsilon-Abschlusses der anderen NFA-Zustände zu dem möglichen neuen unmarkierten DFA-Zustand mit einem unterschiedlichen Zuordnen eines berechneten Hash-Werts der anderen NFA-Zustände und des Epsilon-Abschlusses der anderen NFA-Zustände zu dem möglichen neuen unmarkierten DFA-Zustand.
  40. Die Sicherheitsvorrichtung gemäß Anspruch 39, wobei der Prozessor konfiguriert ist zum Löschen der anderen NFA-Zustände und des Epsilon-Abschlusses der anderen NFA-Zustände.
  41. Die Sicherheitsvorrichtung gemäß Anspruch 32, wobei der Prozessor weiter konfiguriert ist zum Löschen der Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen aus der DFA-Zustände-Tabelle.
  42. Die Sicherheitsvorrichtung gemäß Anspruch 30, wobei der Prozessor konfiguriert ist zum Zuordnen jedes der Anzahl von DFA-Zuständen zu dem einen oder den mehreren NFA-Zuständen des NFA-Graphen durch Bestimmen eines DFA-Startzustandes und durch Hinzufügen des DFA-Startzustandes als einen unmarkierten Zustand zu einer Datenstruktur, die die Anzahl von DFA-Zuständen umfasst.
  43. Die Sicherheitsvorrichtung gemäß Anspruch 42, wobei der Prozessor weiter konfiguriert ist zum: Bestimmen eines Epsilon-Abschlusses eines NFA-Startzustandes; Berechnen eines dritten Hash-Werts des Epsilon-Abschlusses des NFA-Startzustandes; und Zuordnen des DFA-Startzustandes zu dem dritten Hash-Wert des Epsilon-Abschlusses des NFA-Startzustandes.
  44. Die Sicherheitsvorrichtung gemäß Anspruch 42, wobei der Prozessor 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; um einen unmarkierten DFA-Zustand zu erzeugen; Markieren des unmarkierten DFA-Zustands, um einen markierten DFA-Zustand zu erzeugen; und Bestimmen der Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen, zugeordnet zu dem markierten DFA-Zustand, zu anderen NFA-Zuständen für das Zeichen eines Alphabets, das durch den NFA-Graphen erkannt wurde.
  45. Die Sicherheitsvorrichtung gemäß Anspruch 44, wobei der Prozessor konfiguriert ist zum Bestimmen der Übergänge durch Bestimmen des Übergang-DFA-Zustandes von dem markierten DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  46. Die Sicherheitsvorrichtung gemäß Anspruch 45, wobei der Prozessor weiter konfiguriert ist zum: Berechnen des zweiten Hash-Werts für die Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen; und Vergleichen des berechneten zweiten Hash-Werts mit den Hash-Wert-Einträgen in der EC-Zwischenspeichertabelle.
  47. Die Sicherheitsvorrichtung gemäß Anspruch 30, wobei der Prozessor weiter konfiguriert ist zum: wenn kein zweiter Hash-Wert in der EC-Zwischenspeichertabelle existiert, Berechnen eines Epsilon-Abschlusses für die Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen; Berechnen eines dritten Hash-Werts des Epsilon-Abschlusses; Hinzufügen eines neuen Eintrags in die EC-Zwischenspeichertabelle, wobei der neue Eintrag einen neuen DFA-Zustand zu dem dritten Hash-Wert des Epsilon-Abschlusses zuordnet; und Setzen des neuen DFA-Zustandes als den Übergang-DFA-Zustand für das Zeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  48. Die Sicherheitsvorrichtung gemäß Anspruch 47, wobei der Prozessor weiter konfiguriert ist zum: Löschen der Übergänge des einen oder der mehreren NFA-Zustände des NFA-Graphen, der dem markierten DFA-Zustand von der DFA-Zustände-Tabelle entspricht.
  49. Eine Sicherheitsvorrichtung gekoppelt an ein Netzwerk, wobei die Sicherheitsvorrichtung Folgendes aufweist: einen Prozessor, der konfiguriert ist zum: Überwachen von Daten, die von der Sicherheitsvorrichtung aus dem Netzwerk empfangen wurden; Umwandeln eines nichtdeterministischen, endlichen Automaten- bzw. NFA- (NFA = Non-Deterministic Finite Automata) Graphen für eine gegebene Menge von Mustern in einen deterministischen, endlichen Automaten- bzw. DFA- (DFA = Deterministic Finite Automata) Graphen, Einsetzen des DFA-Graphen, um die gegebene Menge von Mustern auf die Daten zur Überwachung der Daten anzuwenden, wobei der Prozessor zum Umwandeln des NFA-Graphen in den DFA-Graphen weiter 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 den NFA-Graphen erkannt wird; und Hashen bzw. Zerhacken der empfangenen Menge von NFA-Zuständen, um einen ersten Hash-Wert zu erzeugen und Vergleichen des ersten Hash-Wertes mit Hash-Wert-Einträgen in einer Epsilon-Abschluss- bzw. EC- (EC = Epsilon Closure) Zwischenspeichertabelle, um zu bestimmen, ob der erste Hashwert in der EC-Zwischenspeichertabelle vorhanden ist, wobei die EC-Zwischenspeichertabelle Epsilon-Abschlüsse von Mengen von NFA-Zuständen entsprechenden Hash-Werten der Mengen von NFA-Zuständen zuordnet; und wenn der erste Hash-Wert vorhanden ist, Hashen einer gespeicherten Menge von NFA-Zuständen, wobei die gespeicherte Menge von NFA-Zuständen dem ersten Hash-Wert in der EC-Zwischenspeichertabelle zugeordnet wird, um einen zweiten Hash-Wert zu erzeugen; und wenn der zweite Hash-Wert in der DFA-Zustände-Tabelle vorhanden ist, Setzen eines Übergangs-DFA-Zustandes von einem DFA-Zustand für das Zeichen auf einen gegebenen DFA-Zustand, wobei der gegebene DFA-Zustand mit dem zweiten Hash-Wert in der DFA-Zustände-Tabelle assoziiert ist.
  50. Die Sicherheitsvorrichtung gemäß Anspruch 49, wobei der Prozessor weiter konfiguriert ist zum: wenn der erste Hash-Wert in der EC-Zwischenspeichertabelle existiert, Setzen der gespeicherten Menge von NFA-Zuständen, zugeordnet zu dem ersten Hash-Wert in der EC-Zwischenspeichertabelle, als einen Epsilon-Abschluss der empfangenen Menge von NFA-Zuständen.
  51. Die Sicherheitsvorrichtung gemäß Anspruch 50, wobei der Prozessor weiter konfiguriert ist zum: wenn der erste Hash-Wert nicht in der EC-Zwischenspeichertabelle existiert, Berechnen eines Epsilon-Abschlusses der empfangenen Menge von NFA-Zuständen; und Hinzufügen eines neuen Eintrags in die EC-Zwischenspeichertabelle, wobei der neue Eintrag den ersten Hash-Wert der Menge von empfangenen NFA-Zuständen dem berechneten Epsilon-Abschluss der empfangenen Menge von NFA-Zuständen zuordnet.
  52. Die Sicherheitsvorrichtung gemäß Anspruch 51, wobei der Prozessor weiter konfiguriert ist zum: Bestimmen, ob ausreichend Speicher vorhanden ist, um den neuen Eintrag hinzuzufügen; und wenn kein ausreichender Speicher vorhanden ist, Hinzufügen des neuen Eintrags gemäß einer Ersatz-Regel.
  53. Die Sicherheitsvorrichtung gemäß Anspruch 52, wobei die Ersatz-Regel den neuen Eintrag durch Löschen eines am längsten nicht verwendeten Eintrags der EC-Zwischenspeichertabelle hinzufügt.
  54. Eine Sicherheitsvorrichtung gekoppelt an ein Netzwerk, wobei die Sicherheitsvorrichtung Folgendes aufweist: einen Prozessor, der konfiguriert ist zum: Überwachen von Daten, die von der Sicherheitsvorrichtung aus dem Netzwerk empfangen wurden; Umwandeln eines nichtdeterministischen, endlichen Automaten- bzw. NFA- (NFA = Non-Deterministic Finite Automata) Graphen für eine gegebene Menge von Mustern in einen deterministischen, endlichen Automaten- bzw. DFA- (DFA = Deterministic Finite Automata) Graphen, Einsetzen des DFA-Graphen, um die gegebene Menge von Mustern auf die Daten anzuwenden, um die Daten zu überwachen, wobei der Prozessor weiterhin, um den NFA-Graphen in den DFA-Graphen umzuwandeln, 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 sind, das durch den NFA-Graphen erkannt wird; und Hashen bzw. Zerhacken der Menge von empfangenen NFA-Zuständen, um einen Hash-Wert zu erzeugen, und Vergleichen des Hash-Wertes mit Hash-Wert-Einträgen in einer Epsilon-Abschluss- bzw. EC- (EC = Epsilon Closure) Zwischenspeichertabelle, um zu bestimmen, ob der Hash-Wert in der EC-Zwischenspeichertabelle vorhanden ist, wobei die EC-Zwischenspeichertabelle Hash-Werte von Epsilon-Abschlüssen, assoziiert mit Mengen von NFA-Zuständen, entsprechenden DFA-Zuständen zuordnet; und wenn der Hash-Wert vorhanden ist, Setzen eines DFA-Übergangszustandes von einem DFA-Zustand für das Zeichen als einen gegebenen DFA-Zustand, wobei der gegebene DFA-Zustand dem Hash-Wert im EC-Zwischenspeicher zugeordnet wird.
  55. Die Sicherheitsvorrichtung gemäß Anspruch 54, wobei der Hash-Wert ein erster Hash-Wert ist und wobei der Prozessor weiter konfiguriert ist zum: wenn der erste Hash-Wert nicht existiert, Berechnen des Epsilon-Abschlusses der Menge von empfangenen NFA-Zuständen; Hashen bzw. Zerhacken des berechneten Epsilon-Abschlusses, um einen zweiten Hash-Wert zu erzeugen; Hinzufügen eines neuen Eintrags in die EC-Zwischenspeichertabelle, wobei der neue Eintrag den zweiten Hash-Wert einem neuen DFA-Zustand zuordnet, wobei der neue DFA-Zustand dem ersten Hash-Wert in einer DFA-Zustände-Tabelle zugeordnet wird; und Setzen des neuen DFA-Zustandes als den Übergang-DFA-Zustand von dem DFA-Zustand für das Eingabezeichen des Alphabets, das durch den NFA-Graphen erkannt wurde.
  56. Die Sicherheitsvorrichtung gemäß Anspruch 55, wobei der Prozessor weiter konfiguriert ist zum: Bestimmen, ob ausreichend Speicher vorhanden ist, um den neuen Eintrag hinzuzufügen; und wenn kein ausreichender Speicher vorhanden ist, Hinzufügen des neuen Eintrags gemäß einer Ersatz-Regel.
  57. Die Sicherheitsvorrichtung gemäß Anspruch 56, wobei die Ersatz-Regel den neuen Eintrag durch Löschen eines am längsten nicht verwendeten Eintrags der EC-Zwischenspeichertabelle hinzufügt.
  58. Die Sicherheitsvorrichtung gemäß Anspruch 54, wobei der Prozessor weiter konfiguriert ist zum: Bestimmen von aktiven Zeichen eines gegebenen Musters, assoziiert mit dem Alphabet, das durch den NFA-Graphen und den DFA-Graphen erkannt wird; und Erstellen des NFA-Graphen und des DFA-Graphen, um Muster zu erkennen, die nur aus den aktiven Zeichen des gegebenen Musters bestehen, assoziiert mit dem Alphabet, das durch den NFA-Graphen und den DFA-Graphen 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 US9858051B2 (en) 2011-06-24 2011-06-24 Regex compiler
US13/168,450 2011-06-24
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 DE112012002624T5 (de) 2014-04-17
DE112012002624B4 true 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) KR101868720B1 (de)
CN (2) CN107122221B (de)
DE (1) DE112012002624B4 (de)
WO (1) WO2012177736A1 (de)

Families Citing this family (33)

* 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
US8954700B2 (en) 2011-08-02 2015-02-10 Cavium, Inc. Method and apparatus for managing processing thread migration between clusters within a processor
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
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
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
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
KR102092721B1 (ko) 2016-03-23 2020-04-23 포그혼 시스템스 인코포레이티드 실시간 데이터플로우 프로그래밍에서 패턴 구동형 반응의 구성
US10645187B2 (en) 2018-07-13 2020-05-05 Fungible, Inc. ARC caching for determininstic finite automata of regular expression accelerator
US10635419B2 (en) 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US10983721B2 (en) 2018-07-13 2021-04-20 Fungible, Inc. Deterministic finite automata node construction and memory mapping for regular expression accelerator
US10656949B2 (en) 2018-07-13 2020-05-19 Fungible, Inc. Instruction-based non-deterministic finite state automata accelerator
KR102250147B1 (ko) * 2018-10-22 2021-05-10 성균관대학교산학협력단 네트워크 보안 기능 인터페이스를 위한 보안 정책 번역
KR102146625B1 (ko) * 2019-01-31 2020-08-20 연세대학교 산학협력단 오토마타 기반 증분적 중위 확률 계산 장치 및 방법
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
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

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040172234A1 (en) * 2003-02-28 2004-09-02 Dapp Michael C. Hardware accelerator personality compiler
US20050240999A1 (en) * 1997-11-06 2005-10-27 Moshe Rubin Method and system for adaptive rule-based content scanners for desktop computers
US20070282833A1 (en) * 2006-06-05 2007-12-06 Mcmillen Robert J Systems and methods for processing regular expressions
US20080059464A1 (en) * 2006-09-01 2008-03-06 3Com Corporation Positionally dependent pattern checking in character strings using deterministic finite automata
US20100192225A1 (en) * 2009-01-28 2010-07-29 Juniper Networks, Inc. Efficient application identification with network devices

Family Cites Families (38)

* 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
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
US7093231B2 (en) * 2003-05-06 2006-08-15 David H. Alderson Grammer for regular expressions
WO2004107404A2 (en) * 2003-05-23 2004-12-09 Sensory Networks, Inc. Apparatus and method for large hardware finite state machine with embedded equivalence classes
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
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
US8392590B2 (en) * 2004-09-10 2013-03-05 Cavium, Inc. Deterministic finite automata (DFA) processing
WO2006029508A1 (en) * 2004-09-13 2006-03-23 Solace Systems Inc. Highly scalable subscription matching for a content routing network
JP4535130B2 (ja) * 2004-12-09 2010-09-01 三菱電機株式会社 文字列照合装置および文字列照合プログラム
US7710988B1 (en) * 2005-03-11 2010-05-04 Xambala Corporation Method and system for non-deterministic finite automaton filtering
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
US7860849B1 (en) 2007-01-18 2010-12-28 Netlogic Microsystems, Inc. Optimizing search trees by increasing success size parameter
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
JP5381710B2 (ja) * 2007-08-02 2014-01-08 日本電気株式会社 ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
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
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
US9858051B2 (en) 2011-06-24 2018-01-02 Cavium, Inc. Regex compiler
US8990259B2 (en) * 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050240999A1 (en) * 1997-11-06 2005-10-27 Moshe Rubin Method and system for adaptive rule-based content scanners for desktop computers
US20040172234A1 (en) * 2003-02-28 2004-09-02 Dapp Michael C. Hardware accelerator personality compiler
US20070282833A1 (en) * 2006-06-05 2007-12-06 Mcmillen Robert J Systems and methods for processing regular expressions
US20080059464A1 (en) * 2006-09-01 2008-03-06 3Com Corporation Positionally dependent pattern checking in character strings using deterministic finite automata
US20100192225A1 (en) * 2009-01-28 2010-07-29 Juniper Networks, Inc. Efficient application identification with network devices

Also Published As

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

Similar Documents

Publication Publication Date Title
DE112012002624B4 (de) Regex-Kompilierer
US9514246B2 (en) Anchored patterns
US7516492B1 (en) Inferring document and content sensitivity from public account accessibility
US7523301B2 (en) Inferring content sensitivity from partial content matching
Fisk et al. Fast content-based packet handling for intrusion detection
US10367786B2 (en) Configuration management for a capture/registration system
CN110855676B (zh) 网络攻击的处理方法、装置及存储介质
US20120180137A1 (en) System and method for data mining and security policy management
EP3512178B1 (de) Symbolische ausführung für die firewall-leistung einer webanwendung
CN109413016B (zh) 一种基于规则的报文检测方法和装置
DE112014000578T5 (de) System und Verfahren zum Erkennen eines kompromittierten Computersystems
EP1744235A1 (de) Systemsicherheitsmethoden unter Verwendung von Subexpressionsautomaten oder Schalttabellen
Provos et al. Search worms
DE112021004808T5 (de) Erkennen von malware durch analyse verteilter telemetriedaten
Shaheed et al. Web application firewall using machine learning and features engineering
DE112019005382T5 (de) Auslegung und durchführung einer zeichenmustererkennung in einer schaltung auf datenebene
Aldwairi et al. n‐Grams exclusion and inclusion filter for intrusion detection in Internet of Energy big data systems
Meng et al. An evaluation of single character frequency-based exclusive signature matching in distinct IDS environments
Mokhov et al. Automating MAC spoofer evidence gathering and encoding for investigations
CN117220981A (zh) 一种基于ac自动机算法的海量黑名单匹配方法
Hashem et al. HES: Highly Efficient and Scalable Technique for Matching Regex Patterns
Yu et al. Fast packet pattern-matching algorithms
CN117294517A (zh) 解决异常流量的网络安全保护方法及系统
CN108519875A (zh) 基于区块链事务向量改进的关联规则告警挖掘方法
Rowe et al. Automatically Tracing Information Flow of Vulnerability and Cyber-Attack Information through Text Strings

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