KR101536880B1 - 앵커링된 패턴들 - Google Patents

앵커링된 패턴들 Download PDF

Info

Publication number
KR101536880B1
KR101536880B1 KR1020147001978A KR20147001978A KR101536880B1 KR 101536880 B1 KR101536880 B1 KR 101536880B1 KR 1020147001978 A KR1020147001978 A KR 1020147001978A KR 20147001978 A KR20147001978 A KR 20147001978A KR 101536880 B1 KR101536880 B1 KR 101536880B1
Authority
KR
South Korea
Prior art keywords
anchored
patterns
state tree
state
node
Prior art date
Application number
KR1020147001978A
Other languages
English (en)
Other versions
KR20140061359A (ko
Inventor
사티아나라야나 라크슈미파티 빌라
라잔 고얄
Original Assignee
캐비엄, 인코포레이티드
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 캐비엄, 인코포레이티드 filed Critical 캐비엄, 인코포레이티드
Publication of KR20140061359A publication Critical patent/KR20140061359A/ko
Application granted granted Critical
Publication of KR101536880B1 publication Critical patent/KR101536880B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • 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

방법 및 장치가 입력 문자열 (string) 로부터 앵커링된 (anchored) 패턴들을 인식하는 것과 관련된다. 복수의 소정의 패턴들로부터의 패턴들이 앵커링된 패턴들로서 마킹된다 (marked). 복수의 소정의 패턴들의 앵커링된 패턴들에 대한 앵커링된 상태 트리가 구축되고 (built), 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함한다. 앵커링된 상태 트리의 각각의 노드에 대해, 복수의 소정의 패턴들의 비앵커링된 (unanchored) 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가의 실패 값이 결정된다.

Description

앵커링된 패턴들{ANCHORED PATTERNS}
관련 출원
본 출원은 2011년 6월 24일자로 출원된 미국 출원 번호 제13/168,323호의 계속출원이고, 이에 대한 우선권을 주장한다. 상기 출원의 전체 교시는 본 명세서에 참조로 포함된다.
개방형 시스템간 상호 접속 (OSI) 참조 모델은 송신 매체를 통해 통신하는데 사용되는 7개의 네트워크 프로토콜층들 (L1-L7) 을 정의한다. 상부층들 (L4-L7) 은 엔드-투-엔드 (end-to-end) 통신들을 나타내고, 하부층들 (L1-L3) 은 로컬 통신들을 나타낸다.
네트워킹 어플리케이션 감지 (aware) 시스템들은 L3 내지 L7의 네트워크 프로토콜층들의 범위, 예를 들어, HTTP (HyperText Transfer Protocol) 및 SMTP (Simple Mail Transfer Protocol) 와 같은 L7 네트워크 프로토콜층들 및 TCP (Transmission Control Protocol) 와 같은 L4 네트워크 프로토콜층들을 프로세싱, 필터링 및 스위칭할 필요가 있다. 네트워크 프로토콜층들을 프로세싱하는 것에 더하여, 네트워킹 어플리케이션 감지 시스템들은, 회선-속도로 방화벽, VPN (Virtual Private Network), SSL (Secure Sockets Layer), IDS (Intrusion Detection System), IPSec (Internet Protocol Security), 안티-바이러스 (AV) 및 안티-스팸 (Anti-Spam) 기능을 포함하는 L4-L7 네트워크 프로토콜층들을 통한 접근 및 컨텐츠 기반 보안을 사용하여 이러한 프로토콜들을 동시에 보호할 필요가 있다.
네트워크 프로세서들은 즉, 회선-속도로 패킷들을 포워딩하기 위한 패킷 프로세싱을 수행하는, 고-스루풋 (high-throughput) L2 및 L3 네트워크 프로토콜 프로세싱을 위해서 이용가능하다. 통상적으로, 범용 프로세서가 보다 지능적인 프로세싱을 요구하는 L4-L7 네트워크 프로토콜들을 프로세싱하는데 사용된다. 범용 프로세서가 계산 집약적인 태스크들을 수행할 수 있지만, 범용 프로세서는, 데이터가 회선-속도에서 포워딩될 수 있도록 데이터를 프로세싱하기 위해 충분한 성능을 제공하지 않는다.
컨텐츠 감지 네트워킹은 "회선 속도"에서의 패킷들의 컨텐츠들의 검사를 요구한다. 컨텐츠는 보안 침입 또는 침범이 있었는지 여부를 결정하도록 분석될 수도 있다. 정규 표현식들의 형태의 다수의 패턴들 및 규칙들이 모든 보안 침입들 및 침범들이 검출된다는 것을 보장하도록 적용된다. 정규 표현식은 문자들 (characters) 의 문자열 (string) 에서의 패턴을 설명하기 위한 콤팩트한 (compact) 방법이다. 정규 표현식에 의해 매칭되는 가장 단순한 패턴은 단일 문자 또는 문자들의 문자열, 예를 들어, /c/ 또는 /cat/이다. 정규 표현식은 또한 특별한 의미를 갖는 연산자들 및 메타-문자들 (meta-characters) 을 포함한다.
메타-문자들의 사용을 통해, 정규 표현식은 "abc.*xyz"와 같은 보다 복잡한 탐색들을 위해 사용될 수 있다. 즉, 문자열 "abc", 이에 후속하는 문자열 "xyz" 및 "abc"와 "xyz" 간의 제한되지 않은 개수의 문자들을 갖는 것을 찾는다. 다른 예시는 정규 표현식 "abc..abc.*xyz;"인데, 즉, 문자열 "abc", 이에 후속하는 2 개의 문자열, 이에 후속하는 문자열 "abc", 이후의 제한되지 않은 개수의 문자들, 및 이후의 문자열 "xyz"을 갖는 것을 찾는다.
IDS (Intrusion Detection System) 어플리케이션은 네트워크를 통해 흐르는 모든 개별적인 패킷들의 컨텐츠들을 검사하고, 시스템에 침투하거나 시스템을 위태롭게하기 위한 시도를 나타낼 수도 있는 의심스러운 패턴들을 식별한다. 의심스러운 패턴의 일 예시는 패킷 내에서 특정 텍스트 문자열, 이후의 100 개의 문자들 및 이후의 다른 특정 텍스트 문자열을 갖는 것일 수 있다.
컨텐츠 탐색은 통상적으로, 정규 표현식을 프로세싱하기 위한 DFA (Deterministic Finite Automata) 또는 NFA (Non-Deterministic Finite Automata) 와 같은 탐색 알고리즘을 사용하여 수행된다.
방법 및 대응하는 장치는 입력 스트림으로부터 앵커링된 (anchored) 패턴들을 인식하는 것에 관한 것이다. 복수의 소정의 패턴들로부터의 패턴들이 앵커링된 패턴들로 마킹된다 (marked). 복수의 소정의 패턴들의 비앵커링된 (unanchored) 패턴들에 대한 비앵커링된 상태 트리가 구축되고 (built), 비앵커링된 상태 트리는 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함한다. 복수의 소정의 패턴들의 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리가 구축되고, 앵커링된 상태 트리는 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함한다. 앵커링된 상태 트리의 각각의 노드들에 대해, 복수의 소정의 패턴들의 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리의 상태를 나타내는 노드와 등가의 실패 값이 결정된다.
전술한 내용은, 같은 도면 부호들이 상이한 도면들에 걸쳐 동일한 부분들을 지칭하는 첨부된 도면들에 도시된 바와 같이, 본 발명의 예시적인 실시형태들의 후속하는 보다 상세한 설명으로부터 명백할 것이다. 도면들은 반드시 스케일대로 된 것이 아니며 대신에 본 발명의 실시형태들을 예시할 때에 강조될 수 있다.
도 1은 사설 네트워크를 보호하도록 동작하는 보안 어플라이언스 (security appliance) 내의 시스템을 도시하는 블록 다이어그램이다.
도 2는 본 발명과 함께 사용될 수도 있는 보안 어플라이언스의 블록 다이어그램이다.
도 3은 예시적인 NFA의 NFA 그래프이다.
도 4는 예시적인 DFA의 DFA 그래프이다.
도 5a-g는 그래프 폭증 (graph explosion) 의 개념을 도시하는 NFA 및 DFA 그래프들 및 표이다.
도 6a-b는 NFA 그래프를 DFA 그래프로 변환하는 방법의 순서 다이어그램들이다.
도 7은 NFA 그래프에서의 상태에 대한 입실론 클로저 (epsilon closure) 를 결정하는 방법의 순서 다이어그램이다.
도 8a-c는 NFA 그래프를 DFA 그래프로 변환하는 방법의 순서 다이어그램들이다.
도 9는 NFA 그래프에서의 상태에 대한 입실론 클로저를 결정하는 방법의 순서 다이어그램이다.
도 9a-9b는 NFA 그래프를 DFA 그래프로 변환하는 방법의 순서 다이어그램들이다.
도 9c는 NFA 상태들의 세트에 대한 입실론 클로저를 결정하는 방법의 순서 다이어그램이다.
도 10은 아호-코라식 (Aho-Corasik) 알고리즘을 사용하여 예시적인 패턴들 "hers", "his", 및 "she"을 탐색하기 위한 패턴 매칭 머신을 도시한다.
도 11a는 패턴 매칭 머신의 각각의 상태에 대한 실패 값들을 도시한다.
도 11b는 패턴 매칭 머신의 상태들에 대한 출력 함수 값들을 도시한다.
도 12는 예시적인 앵커링된 패턴들 "help" 및 "shell"에 대한 상태 트리를 도시한다.
도 12a는 도 12의 상태 트리의 각각의 상태에 대한 실패 값들을 도시한다.
도 12b는 도 12의 상태 트리의 상태들 (14 및 19) 에 대한 출력 함수 값들을 도시한다.
도 13a는 도 12의 상태 트리의 각각의 상태의 실패 값들을 도시한다.
도 13b는 도 12의 상태 트리의 상태들 (12, 14, 17, 및 19) 에 대한 출력 함수 값들을 도시한다.
본 발명의 예시적인 실시형태들을 상세하게 설명하기 이전에, 실시형태들이 구현될 수도 있는 예시적인 보안 어플리케이션 및 DFA 및 NFA를 사용한 통상적인 프로세싱이, 독자들이 본 발명의 진보적인 특징들을 이해하는 것을 돕기 위해 이하에 바로 설명된다.
정규 표현식 (Regex) 프로세싱은 다수의 패킷 프로세싱 시스템들에서 일반적이 되고 있다. Regex 프로세싱은 전통적인 보안 시스템들 (예를 들어, IPS (Intrusion Prevention Systems), 방화벽들, 및 UTM (Unified Threat Management) 디바이스들), 새로운 보안 시스템들 (예를 들어, 안티-말웨어 (anti-malware), 안티-스파이웨어, 제로 데이 어태치 검출 (zero day attach detection)), 과금을 위한 유선/무선 네트워크들에서의 최근 생겨난 프로토콜/어플리케이션 인식 시스템들, QoS (Quality of Service), 및 네트워크 모니터링 시스템들에 적용될 수도 있다.
정규 표현식 프로세싱은 i) 시그너쳐들 (signatures)/패턴들을 DFA 그래프 또는 NFA 그래프와 같은 이진 데이터 구조들로 컴파일하는 단계 및 ii) 컴파일된 그래프에 대하여 수신된 패킷들을 프로세싱하는 단계의 2개의 단계들로 분해될 수도 있다.
저장 대 성능 트레이드 오프 요건들은 Regex 프로세싱의 두 단계들 모두에서 발생한다. 큰 (large) 런 타임 메모리 풋 프린트들 (foot prints) 로 할당된 컴파일러들은 보다 큰 속도 및 효율성으로 패턴들을 컴파일할 수 있다. 유사하게, 패킷 검사를 위해 사용되는 보다 큰 그래프들 또는 등가의 이진 데이터 구조들이 콤팩트한 그래프들과는 대조적으로 더 좋은 패킷 검사 성능을 제공할 수도 있다.
실제로 사용되는 때에, 컴파일러는 가능한 한 적은 메모리 풋 프린트로 매우 빠르게 규칙들을 컴파일하는 것이 기대된다. 일 이유는, 네트워크 디바이스가 여전히 작동 중인 동안 (예를 들어, 패킷들을 검사/포워딩), 패턴들이 네트워크 디바이스들 (예를 들어, 라우터들, 스위치들, UTM, 등) 상의 필드 내에서 업데이트된다는 것이다. 그러므로, 임베디드된 (embedded) 라우터 디바이스에서의 제한된 메모리를 사용하여 규칙들을 컴파일하는 것에 대한 요구가 있다. 규칙들/패턴들이 시스템에 대한 공격들을 방지하거나 바이러스들에 의해 감염된 트래픽을 정지하는데 사용되기 때문에, 규칙들/패턴들은 시스템의 보안을 최적화하기 위해 가능한 한 일찍 적용될 필요가 있다. 따라서, 컴파일러가 규칙들을 이진 데이터 구조들로 매우 빠르게 컴파일할 수 있어야 한다.
일반적인 접근법들은, 중앙 서버 상에서 새로운 패턴들 또는 시그너쳐들을 그래프들로 컴파일하고 이어서 중앙 서버가 이 컴파일된 그래프들을 라우터로 전송한다. 그 후, 라우터는 각각의 그래프를 통해서 패킷들을 워킹 (walking) 함으로써 이 수신된 그래프들에 대해서 착신 패킷들을 검사한다. 효율적인 컴파일러들은 적당한 메모리 자원들을 요구한다. 컴파일러가 충분한 자원들을 갖지 않는다면, 컴파일러 성능은 느리다. 따라서, 라우터들이 일반적으로 충분한 자원들 (즉, 랜덤 액세스 메모리 (RAM) 및 CPU 계산) 을 갖지 않기 때문에, 단순한 (naive) 접근법들은 라우터 상에서 새로운 패턴들 또는 시그너쳐들을 컴파일하지 않는다.
본 발명의 실시형태들은, 중앙 서버 컴파일러의 성능 레벨들을 유지하면서 라우터 상에서 새로운 패턴들/시그너쳐들을 그래프들로 컴파일한다.
도 1은 보안 어플라이언스 (110), 보호된 네트워크 (115), 및 공용 네트워크 (105) 를 포함하는 시스템 (100) 을 도시하는 블록 다이어그램이다. 공용 네트워크 (105) 는 인터넷과 같은 보안되지 않은 광역 네트워크 (WAN), 무선 네트워크, 근거리 네트워크, 또는 다른 타입의 네트워크를 포함할 수도 있다. 보호된 네트워크 (115) 는 사무실 또는 데이터 센터의 근거리 네트워크와 같은 보안된 컴퓨터 네트워크를 포함할 수도 있다. 도시된 바와 같이, 근거리 네트워크는 복수의 워크 스테이션들 (125) 을 포함하는 기업 네트워크 (120) 일 수도 있다. 복수의 워크 스테이션들 (125) 은 데이터 베이스 (130), FTP (파일 전송 프로토콜) 서버 (135), 및 인트라넷 서버 (145) 에 동작적으로 결합된다.
시스템 (100) 에서, 보안 어플라이언스 (110) 는, 공용 네트워크 (105) 로부터 보호된 네트워크 (115) 로 흐르는 네트워크 트래픽이 먼저 보안 어플라이언스 (110) 로 흐르도록, 공용 네트워크 (105) 및 보호된 네트워크 (115) 에 연결된다. 보안 어플리아언스 (110) 는 독립형 네트워크 어플라이언스 (예를 들어, 라우터), 다른 네트워크 어플라이언스 (예를 들어, 방화벽 어플라이언스) 의 컴포넌트, 네트워크 어플라이언스 상에서 실행되는 소프트웨어 모듈, 또는 다른 구성일 수도 있다. 일반적으로, 보안 어플라이언스는 공용 네트워크 (105) 로부터의 네트워크 트래픽을 검사하고, 네트워크 트래픽이 임의의 컴퓨터 보안 위협들을 포함하는지 여부를 결정한다. 컴퓨터 보안 위협은 민감한 정보에 대한 액세스를 얻기 위한 시도, 조직의 동작을 방해하기 위한 시도, 또는 다른 타입의 공격이다. 예시적인 컴퓨터 보안 위협들은 컴퓨터 바이러스들, 스파이웨어, 루트킷들 (rootkits), 비밀번호들을 추측하기 위한 시도들, 피싱 이메일들, 서비스 거부 어태치와 관련된 요청들, 및 다른 타입의 공격들을 포함한다.
컴퓨터 보안 위협은, 컴퓨터 보안 위협을 식별하지만 무해한 데이터를 식별하지 않는 하나 이상의 심볼 패턴들과 관련될 수도 있다. 컴퓨터 보안 위협과 관련된 심볼 패턴은 본 명세서에서 "위협 시그너처"로서 지칭된다. 예를 들어, 특정 바이러스는, 실행되는 경우 악의적인 동작을 수행하는 명령어들의 시퀀스를 항상 포함할 수도 있다.
보안 어플라이언스 (110) 가 네트워크 트래픽의 소정의 스트림이 임의의 컴퓨터 보안 위협들을 포함하지 않는 것으로 결정한다면, 보안 어플라이언스 (110) 는 네트워크 트래픽의 스트림을 보호된 네트워크 (115) 로 통신할 수도 있다. 반면, 보안 어플라이언스 (110) 가 스트림이 하나 이상의 컴퓨터 보안 위협들을 포함하는 것으로 결정한다면, 보안 어플라이언스 (110) 는 네트워크 트래픽을 드롭하고, 네트워크 트래픽을 로그 (log) 하고, 트래픽을 추가적인 분석을 위해 트래픽 분석기로 포워딩하고, 및/또는 네트워크 트래픽에 관하여 일부 다른 동작을 수행할 수도 있다. 이러한 방식으로, 보안 어플라이언스 (110) 는 컴퓨터 보안 위협들을 포함하는 네트워크 트래픽이 보호된 네트워크 (115) 에 도달하는 것을 방지할 수도 있다.
하나 이상의 심볼 패턴들과 관련된 보안 위협을 검출하기 위해, 보안 어플라이언스 (110) 는, 공용 네트워크 (105) 로부터 데이터 트래픽을 착신할 시에 모니터링될 소정의 패턴들 또는 심볼들의 시퀀스들을 보안 데이터센터 (140) 로부터 수신한다. 보안 어플라이언스가 모니터링될 소정의 패턴들을 수신하면, 보안 어플라이언스는 모니터링될 각각의 소정의 패턴에 대한 유한 상태 머신들을 생성한다. 그 후, 보안 어플라이언스 (110) 는, 착신 데이터 패킷이 잠재적인 보안 위협을 포함하는지 여부를 결정하기 위해 수신된 데이터 패킷들을 유한 상태 머신들을 통해서 워킹한다 (walk).
도 2는 본 발명과 함께 사용될 수도 있는 예시적인 보안 어플라이언스 (200) 의 고-레벨 블록 다이어그램이다. 보안 어플라이언스는 메모리 버스 (245) 를 통해 프로세서 (225) 에 커플링되는 (coupled) 메모리 (210) 및, 입력/출력 (I/O) 버스 (250) 를 통해 프로세서에 커플링되는 저장 디바이스 (230) 및 네트워크 인터페이스 (240) 를 포함한다. 보안 어플라이언스가 키보드들, 디스플레이 유닛들 등과 같은 다른 디바이스들을 포함할 수도 있다는 것을 주목해야 한다. 네트워크 인터페이스 (240) 는 보안 어플라이언스를 보안된 네트워크 (115), 공용 네트워크 (105), 및 보안 데이터센터 (140) 과 인터페이싱시키고, 데이터 (예를 들어, 패킷들) 가 보안 어플라이언스와 시스템 (100) 내의 다른 노드들 사이에서 전송되게 할 수 있다. 그 목적을 달성하기 위해, 네트워크 인터페이스 (240) 는 신호, 전기적 및 기계적 특성을 포함하는 통상적인 회로, 및 시스템 (100) 의 물리적 매체와 이 물리적 매체 상에서 실행되는 프로토콜과 인터페이싱하는데 필요한 중계 회로들을 포함한다.
메모리 (210) 는 DRAM 디바이스들 및/또는 플래시 메모리 디바이스들과 같은 RAM 디바이스들을 포함하는 RAM 으로서 구현되는 컴퓨터-판독가능 매체이다. 메모리 (210) 는 본 발명의 양태들을 구현하는 소프트웨어 및 데이터 구조들을 포함하는, 프로세서 (225) 에 의해 사용되는 다양한 소프트웨어 및 데이터 구조들을 포함한다. 구체적으로, 메모리 (210) 는 운영 체제 (215) 및 패턴 매칭/컴파일링 서비스들 (220) 을 포함한다. 운영 체제 (215) 는, 패턴 매칭/컴파일링 서비스들 (22) 과 같은, 보안 어플라이언스 (200) 상에서 실행하는 소프트웨어 프로세스들 및 서비스들을 지원하는 동작들을 호출함에 의해 보안 어플라이언스 (200) 를 기능적으로 조직한다. 이하에서 설명될 바와 같이, 패턴 매칭/컴파일링 서비스들 (220) 은 소정의 패턴들로부터 유한 상태 머신 그래프들을 컴파일하고/컴파일하거나 착신 데이터 패킷들을 이 컴파일된 그래프들을 통해서 워킹하기 위한 컴퓨터-실행가능 명령어들을 포함한다.
저장 디바이스 (230) 는 소정의 패턴으로부터 유한 상태 머신들을 컴파일하는데 사용되는 다양한 정보를 유지하도록 구성되는 데이터 구조인 패턴 매칭 데이터베이스 (DB) (235) 를 포함하는 종래의 저장 디바이스 (예를 들어, 디스크 또는 아마 DRAM) 이다. 정보는 시그너쳐 패턴들, 유한 상태 머신 그래프들 (예를 들어, DFA 그래프들 및 NFA 그래프들), 입실론 클로저 (EC) 캐시 표들, 및 DFA 상태 해시 표들을 포함할 수도 있다.
통상적으로, 컨텐츠 감지 어플리케이션 프로세싱은 수신된 패킷의 내용에서의 패턴을 인식하기 위해 DFA (deterministic finite automata) 또는 NFA (non-deterministic finite automata) 중 하나를 사용한다. DFA 및 NFA 둘 모두는 유한 상태 머신들, 즉, 상태들의 세트, 시작-상태, 입력 알파벳 (모든 가능한 심볼들의 세트) 및 천이 함수를 각각 포함하는 계산의 모델들이다. 계산은 시작-상태에서 시작하고, 천이 함수에 의존하는 새로운 상태들로 변경한다.
패턴은 보통 원자 엘리먼트들 (atomic elements), 예를 들어, A-Z, 0-9와 같은 일반 텍스트 문자들 및 *, ^ 및 |와 같은 메타-문자들을 포함하는 정규 표현식을 사용하여 표현된다. 정규 표현식의 원자 엘리먼트들은 매칭될 심볼들 (단일 문자들) 이다. 이들은 연결 (+), 얼터네이션 (alternation) (|), 및 클린-스타 (Kleene-star) (*) 를 허용하는 메타-문자들과 결합된다. 연결을 위한 매타-문자는 단일 문자 (또는 서브-문자열들) 로부터 다수의 문자 매칭 패턴들을 생성하는데 사용되는 반면, 얼터네이션 (|) 을 위한 메타-문자는 2 개 이상의 서브-문자열들 중 임의의 것과 매칭할 수 있는 정규 표현식을 생성하는데 사용된다. 메타-문자 클린-스타 (*) 는, 선행하는 문자 또는 문자열이 발생하지 않으면서, 패턴이 임의의 개수의 문자들과 매칭하게 한다. 상이한 연산자들 및 단일 문자들을 결합하는 것은 복잡한 표현들이 구성되는 것을 허용한다. 예를 들어, 표현 (th(is|at)*) 은 다음의 문자 문자열들: th, this, that, thisis, thisat, thatis, 또는 thatat과 매칭할 것이다.
문자 클래스 구성 [...] 은 탐색할 문자들의 리스트가 나열되게 하는데, 예를 들어, gr[ea]y는 grey 및 gray 양자를 탐색한다. 대시 (dash) 는, 문자들의 범위, 예를 들어, [A-Z] 를 표시한다. 메타-문자 "."는 임의의 하나의 문자와 매칭한다.
DFA 또는 NFA 상태 머신으로의 입력은 통상적으로 (8-비트) 바이트들의 문자열이고, 즉, 알파벳은 단일 바이트 (하나의 문자 또는 심볼) 이다. 입력 스트림 내의 각각의 바이트는 하나의 상태로부터 다른 상태로의 천이를 야기한다.
DFA 및 NFA 상태 머신의 상태들 및 천이 함수들은 그래프에 의해 나타낼 수 있고, 그래프에서의 각각의 노드는 상태를 나타내고 그래프에서의 호들 (arcs) 은 상태 천이들을 나타낸다. 상태 머신의 현재 상태는 특정 그래프 노드를 선택하는 노드 식별자에 의해 나타내진다.
정규 표현식을 프로세싱하고 문자들의 입력 스트림 내에서의 정규 표현식에 의해 기술되는 패턴 또는 패턴들을 찾기 위해 DFA를 사용하는 것은 다음의 것들에 의해서 특징지어진다:
1) 결정론적 런 타임 (run time) 수행: DFA의 다음 상태가 입력 문자 (또는 심볼) 및 DFA의 현재 상태로부터 결정될 수 있다. 다시 말하면, DFA 상태마다 오직 하나의 상태 천이가 있다. 이로써, DFA의 런 타임 수행은 결정론적인 것으로 말해지고, 그 거동은 입력으로부터 완벽하게 예측될 수 있다.
2) 다수의 패킷들에 걸친 매칭들을 지원하기 위해 요구되는 더 적은 흐름별 콘텍스트 (context) (예를 들어, 상태 또는 노드 포인터): 흐름을 구성하는 수개의 패킷들에 걸쳐있는 (span) 패턴을 입력 내에서 탐색할 시에, 이러한 탐색은 하나의 패킷에서 정지하고 이후에 다른 패킷에서 재개할 수도 있다. 일반적으로, 어떤 상태가 탐색을 재개할지를 결정하는 것은, 탐색이 정지된 경우 여태까지 거친 모든 상태들을 추적, 기억 또는 이와 달리 (예를 들어, 상태 포인터들로서) 저장하는 것을 요구한다. 그러나, DFA에서, 오직 탐색이 정지된 상태만이 탐색을 재개하기 위해 기억될 필요가 있다. 이로써, DFA는 다수의 입력 패킷들에 걸친 패턴 매칭을 지원하기 위해서 보다 적은 수의 흐름별 콘텍스트가 요구되는 것을 특징으로 한다고 말해질 수 있으며, 예를 들어서 일 상태 또는 노드 포인터를 저장하기 위해서 수 개의 바이트들 정도가 필요하다.
3) 그래프로서 이 그래프에서 노드들의 개수 (또는 그래프 사이즈) 가 패턴의 크기와 함께 지수적으로 증가함.
삭제
대조적으로, 정규 표현식을 프로세싱하고 문자들의 입력 스트림 내의 정규 표현식에 의해 기술되는 패턴(들)을 찾기 위해 NFA를 사용하는 것은 다음과 같은 특징을 갖는다:
1) 비-결정론적 런 타임 수행: 입력 문자 (또는 심볼) 및 NFA의 현재 상태가 주어지면, 천이할 2 개 이상의 다음의 NFA 상태들이 존재할 수 있다. 다시 말하면, NFA의 다음 상태는 NFA의 입력 및 현재 상태로부터 결정되지 않을 수 있다. 이로써, NFA의 런 타임 수행은 비-결정론적인 것으로 말해지고, 그 거동은 입력으로부터 완벽하게 예측되지 않을 수 있다.
2) 패킷들에 걸친 매칭을 지원하기 위해 요구되는 더 많은 흐름별 콘텍스트 (예를 들어, 상태 또는 노드 포인터): 상술한 바와 같이, 탐색이 하나의 패킷에서 정지하고 그 후 다른 하나의 패킷에서 재개되는, 다수의 입력 패킷들에 걸친 패턴 매칭은 탐색이 정지된 경우 여태까지 거친 모든 상태들을 추적하는 것을 요구한다. NFA에서, 더 많은 입력이 매칭됨에 따라, 거쳐지고 추적될 필요가 있는 상태들의 개수가 더 많아진다. 이로써, NFA는, DFA와 비교되는 경우, 다수의 입력 패킷들에 걸친 패턴 매칭을 지원하기 위해 흐름별 콘텍스트를 더 많게 요구하는 것으로서 특징지어진다.
3) 그래프로서, 이 그래프에서 노드들의 개수 (또는 그래프 사이즈) 가 패턴의 크기와 함께 선형적으로 증가함.
삭제
상술된 DFA 및 NFA 특성들은 도 3, 도 4 및 도 5a-g를 참조하여 더 설명된다. 간결성을 위해서, 도면들에 도시된 모든 DFA 그래프들에 있어서, 노드 (상태) (0) 으로의 호들 (상태 천이들) 은 도시되지 않고, 동일한 문자에 대해서 노드 (0) 에 의해 포인팅되는 바와 동일한 노드로 포인팅하는 호들도 역시 도시되지 않는다.
도 3은 패턴들 "cavium.*networks", "nitrox[^r\n\t\v\s]{3}octeon", 및 "purevu.{5,10}videochips"를 탐색하기 위한 예시적인 NFA의 NFA 그래프 (300) 를 도시한다. 도 4는 동일한 세트의 패턴들을 탐색하기 위한 예시적인 DFA의 DFA 그래프 (400) 를 도시한다. 상술된 바와 같이, 본 명세서에서 제공되는 DFA 그래프 (400) 및 다른 DFA 그래프들은 도시 목적을 위해 "단순화"된다. DFA 상태 (0) 으로의 상태 천이들을 나타내는 노드 (0) 로의 호들은 도면들에 도시되지 않는다. 동일한 문자에 대해서 노드 (0) 에 의해서 포인팅되는 바와 동일한 노드를 포인팅하는 호들 또한 도면들에 도시되지 않는다.
패턴들의 동일한 세트에 대해, 도 3의 NFA 그래프 (300) 는 69개의 상태들을 나타내는 69개의 노드들을 갖는 반면, 도 4의 DFA 그래프 (400) 는 931개의 상태들을 나타내는 931개의 노드들 (오직 일부분이 도 4에 도시됨) 을 갖는다. 도시된 바와 같이, 소정의 패턴 또는 패턴들에 대해, DFA 상태들의 개수가, 통상적으로 수백 또는 수천 개 이상의 크기로, NFA 상태들의 개수보다 클 수 있다. 이는, DFA의 전형적인 특성 (hallmark characteristic) 인 "그래프 폭증"의 예시이다.
"그래프 폭증"의 개념을 더 설명하기 위해, 각기 패턴들 ".*a[^\n]", ".*a[^\n] [^\n]", ".*a[^\n] [^\n] [^\n]" 에 대한 NFA 그래프들을 도시하는 도 5a, 5b, 및 5c, 및 각기 동일한 패턴들에 대한 DFA 그래프들을 도시하는 도 5d, 5e, 및 5f를 고려한다. 동일한 패턴들에 대해, 도 5a-5f에 도시되고 도 5g의 표에 의해 요약된 바와 같이, NFA는 선형적으로 증가할 수 있는 반면, DFA는 그래프 폭증을 야기하도록 지수적으로 증가할 수 있다.
도 3으로 돌아가면, 입력 스트림 "purevuchips are video chips" 내의 패턴들을 탐색하기 위해서 NFA 그래프 (300) 에 의해 나타내지는 NFA를 사용하여서, NFA 프로세싱 또는 매칭은, 노드들 (305a-d) 에 의해 나타내지고 NFA START STATES = {0, 2, 19, 36}와 같은 약칭으로 기록되는 NFA 시작-상태들 (0, 2, 19, 및 36) 에서 시작한다. 입력 스트림의 문자 'p' 에 대해서, NFA는 상태 (37) (노드 (310) 에 의해 나타내짐) 로 천이하고 상태들 (0, 2, 및 19) 을 추적하며 (이는 'p' = {0, 2, 19, 37} 와 같은 약칭으로 기록됨), 이하와 같이 계속된다:
'u' = {0, 2, 19, 38}
'r' = {0, 2, 19, 39}
'e' = {0, 2, 19, 40}
'v' = {0, 2, 19, 41}
'u' = {0, 2, 19, 42}
'c' = {0, 2, 19, 44}
'h' = {0, 2, 19, 45}
...
... 등과 같이 계속된다.
동일한 입력 스트림 내의 동일한 패턴들을 탐색하기 위해서 도 4의 DFA 그래프 (400) 의해 나타내지는 DFA를 사용하여서, DFA 매칭은, 노드 (405) 에 의해 나타내지고 DFA START STATE = {0}와 같은 약칭으로 기록되는 DFA 시작-상태 (0) 에서 시작한다. 입력 스트림의 문자 'p'에 대해서, DFA는 노드 (410) 에 의해 나타내어진 상태 (3) 로 천이하고, 이는 'p' = {3}과 같은 약칭으로 기록되며, 이하와 같이 계속한다:
'u' = {6}
'r' = {9}
'e' = {12}
'v' = {15}
'u' = {18}
'c' = {27}
'h' = {41}
...
... 등과 같이 계속된다.
위의 예시에서 도시된 바와 같이, NFA에서는, 추적할 n+1 개의 NFA 상태들이 있고, n은 탐색할 패턴들의 개수이다 (예를 들어, 탐색할 3 개의 패턴들의 경우에, 추적할 적어도 4개의 상태들이 존재한다). 대조적으로, DFA에서는, 입력 문자마다 추적하기 위한 오직 하나의 상태가 있다. 이제, 설명을 위해서, 입력 문자열 또는 흐름 "purevuchips are video chips"가 "purevuchips"의 "h"에서 끝나는 제1 패킷 및 "purevuchips"의 "i"에서 시작하는 제2 패킷을 갖는 수개의 패킷들에 걸쳐있다고 가정한다. NFA에서, 탐색이 "h" (제1 패킷의 말단) 에서 정지하고 추적할 4 개의 상태들 (즉, 상태들 (0, 2, 19, 및 45)) 이 존재한다. "i" (제2 패킷의 시작) 에서 탐색을 재개하는 것은 이러한 4 개의 상태들을 기억하는 것을 요구한다. 대조적으로, DFA에서, 탐색은 "h" (제1 패킷의 말단) 에서 정지하고 추적할 하나의 상태 (즉, 상태 (41)) 가 존재한다. "i" (제2 패킷의 시작) 에서 탐색을 재개하는 것은 이러한 하나의 상태를 기억하는 것을 요구한다. 이러한 예시는, NFA에서 다수의 패킷들에 걸친 매칭을 지원하기 위해 요구되는 흐름별 콘텍스트는 (예를 들어, 4 개의 상태 포인터들을 저장함으로써) 4 개의 상태들인데 반해, DFA에서 흐름별 콘텍스트는 1 개의 상태이다. 따라서, NFA는 동일한 패턴들에 대해서 DFA에서 요구되는 흐름별 콘텍스트보다 많은 흐름별 콘텍스트를 요구한다. 마찬가지로, DFA는 동일한 패턴들에 대해서 NFA에서 요구되는 흐름별 콘텍스트보다 적은 큰 흐름별 콘텍스트를 요구한다.
모든 비-결정론적 유한 오토마타 (non-deterministic finite automata) 에 대해, 등가의 결정론적 유한 오토마타 (deterministic finite automata) 가 존재한다. 둘 간의 등가성은 언어 수용의 관점에서 정의된다. NFA가 입력 심볼 상에서의 0, 1, 또는 그 이상의 천이들이 허용되는 유한 오토마타이므로, 등가의 DFA는, 특정 입력 심볼 상에서의 NFA의 모든 이동들을 병행하여서 시뮬레이션하도록 구성될 수 있다.
NFA와 등가인 DFA는 NFA의 이동들을 시뮬레이션 (병행화) 하므로, DFA의 매 상태는 NFA의 하나 이상의 상태들의 결합이다. 그러므로, DFA의 매 상태는 NFA의 상태들의 세트의 일부 서브세트에 의해 나타내질 것이고; 따라서, NFA로부터 DFA로의 변환은 보통 "구성 (construction)" 서브세트로 지칭된다. 따라서, 소정의 NFA가 n 개의 상태들을 갖는다면, 등가의 DFA는 서브세트 {q0 }에 대응하는 초기 상태를 갖는, 2n 개의 상태들을 가질 수도 있다. 따라서, NFA로부터 DFA로의 변환은 NFA의 상태들의 세트의 모든 가능한 서브세트들을 찾는 것, 이 각각의 서브세트를 DFA의 일 상태로서 고려하는 것, 및 그 후 매 입력 심볼에 대해 그 상태로부터의 천이를 찾는 것을 수반한다.
앞서 도시된 바와 같이, 컴퓨터 시스템에 의한 NFA 그래프들의 프로세싱이 NFA의 다수의 가능한 천이들에 인해서 어렵기 때문에, NFA들의 DFA들로의 변환이 발생한다.
도 6a-b는 NFA 그래프를 DFA 그래프로 변환하는 방법 (600) 의 순서 다이어그램들이다. 방법 (600) 은 605에서 시작한다. 이 단계에서, DFA 상태들의 세트 "Sd"는 널 (null) 이다. 610에서, DFA의 시작 상태가 결정되고, 마킹되지 않은 (unmarked) 상태로서 DFA 상태들의 세트 "Sd"에 추가된다. DFA의 시작 상태는 NFA 그래프의 시작 상태의 입실론 클로저로서 결정된다. NFA 상태들의 세트의 입실론 클로저를 결정하는 방법은 도 7을 참조하여 아래에서 더 설명된다.
615에서, DFA 상태들의 세트 "Sd"가 마킹되지 않은 DFA 상태를 포함하는지 결정된다. DFA 상태들의 세트 "Sd" 중 마킹되지 않은 DFA 상태가 존재한다면, 620에서, 마킹되지 않은 상태 'S'가 선택되고 마킹된다. 625에서, NFA 그래프에 의해 인식된 언어의 알파벳 (예를 들어, 글자) 'A' 가 선택된다. 단계 630에서, DFA 상태 'S'의 NFA 상태 's'가 선택된다. 추가적으로, 단계 630 이전에, NFA 상태들의 세트를 유지하기 위한 데이터 구조 "St"가 'NULL'로 설정된다. 635에서, 천이 함수 "TTn = (s,a)"이 글자 'a'를 사용하여 NFA 상태 's'에 적용된다. 'a'의 입력이 수신된다면, 천이 함수가 NFA 상태 's'로부터 도달된 모든 NFA 상태들을 결정한다. 그 후, 결정된 NFA 상태들은 데이터 구조 "St"에 추가된다. 644에서, DFA 상태 'S'가 추가적인 NFA 상태들을 포함하는지가 결정된다. 포함한다면, 방법은 DFA 상태 'S'의 모든 NFA 상태들 's'이 프로세싱될 때까지 단계들 (630 및 635) 을 반복한다. 모든 NFA 상태들이 프로세싱되면, 방법은 단계 640에서 계속한다. 640에서, 데이터 구조 'St'내의 모든 NFA 상태들 's'의 입실론 클로저가 결정되고, 데이터 구조 'St'에 추가된다.
단계 645에서, DFA 상태 'S'가 데이터 구조 'St'내의 모든 NFA 상태들 's'을 이미 포함하는지를 결정하기 위해, 데이터 구조 'St'는 모든 기존의 DFA 상태들 'S'과 비교된다. 본 접근법들은 데이터 구조 내의 각각의 DFA 상태 'S'와 연관된 각각의 NFA 상태 's'를 저장한다. 데이터 구조 'St' 내의 NFA 상태들 's'이 이미 DFA 상태 'S'와 연관되는지를 결정하기 위해, 데이터 구조 'St'의 각각의 NFA 상태 's'는 각각의 DFA 상태 'S'에 대한 각각의 NFA 상태 's'와 비교되어야 한다. 따라서, 그러한 비교는 상당한 양의 시간 및 메모리를 요구한다.
표 1은 DFA 상태 개수들을 NFA 상태들의 세트와 연관시키는 예시적인 DFA 상태들 표를 아래에서 설명한다. NFA 상태들의 세트는, 상술한 바와 같이, 각각의 DFA 상태 개수에 대해서 데이터 구조 내에 저장될 수도 있다.
DFA 상태 개수 NFA 상태들의 세트
0 {0, 1, 2, 3, 4}
1 {0, 5, 6, 7}
2 {8, 9, 2, 3}
... ...
... ...
표 1
예를 들어, (DFA 상태 및 이에 대응하는 NFA 상태들의 세트를 포함하는) 데이터 구조의 구현예에 따라서, 단계 645에서의 동작의 런 타임은 아래에서 표 2를 참조하여 캡쳐된다. 표 2는 예시적인 데이터 구조 구현예들의 저장 및 유지 비용을 리스팅한다. 표 2의 코멘트 컬럼은 각각의 예시적인 데이터 구조의 설명을 제공한다. 각각의 데이터 구조에 대해, 'N'개의 DFA 상태들이 있는 것을 가정하고, 각각의 DFA 상태가 평균적으로 'M' 개의 NFA 상태들을 나타내는 것을 더 가정한다.
런 타임 저장 데이터 구조의 유지 (NFA 상태의 삽입) 코멘트
O(N*M2) O(N*M) O(1) (DFA 상태와 관련된) NFA 상태들의 각각의 세트는 NFA 상태 개수들을 포함하는 선형 어레이로서 저장된다.
O(N*M) O(N*NFA 상태들의 최대 개수/8) O(1) 각각의 DFA 상태는 시스템의 NFA 상태들의 최대 개수와 동일한 크기의 비트맵을 갖는다.
DFA 상태가 그 NFA 상태를 갖는다면, 대응하는 비트는 턴 온된다 (turned ON).
O(N*log M) O(N*k*M), k는 트리 포인터들 등의 일정한 비용이다. O(log M) (DFA 상태와 관련된) NFA 상태들의 각각의 세트는 NFA 상태 개수들을 포함하는 트리로서 저장된다.
표 2
도 6a-b에서 계속하여, DFA 상태 'S'가 이미 데이터 구조 'St'의 모든 NFA 상태들 's'을 포함한다면, 방법은 단계 695로 이동한다. 그렇지 않으면, 방법은 단계 685로 이동한다. 685에서, 데이터 구조 'St'의 NFA 상태들 's'은 새로운 DFA 상태 'D'로서 DFA 상태들의 세트 'Sd'에 추가된다. 690에서, NFA 상태들 's' 중 임의의 것이 NFA 그래프의 최종 상태들의 세트에 속하는지가 결정된다. 그렇다면, 새로운 DFA 상태는 DFA 그래프의 최종 수용 상태인 것으로 결정된다. 695에서, 입력 'a'을 사용한, 마킹된 DFA 상태 'S'로부터의 천이는 새로운 DFA 상태 'D'로 설정된다.
도 7은 NFA 그래프의 임의의 소정의 NFA 상태 's'에 대한 입실론 클로저를 결정하는 방법 (700) 의 순서 다이어그램이다. 방법 (700) 은 단계 705에서 시작한다. 710에서, 입실론 클로저 함수는 프로세싱할 NFA 상태 's'를 수신한다. 715에서, NFA 상태 's'는 마킹되지 않고, 마킹되지 않은 NFA 상태들의 세트 'S'에 추가된다. 720에서, NFA 상태 's'가 마킹되지 않은 NFA 상태들 'S'로부터 선택된다. 725에서, 선택된 NFA 상태 's'로부터의 입실론 천이들이 결정된다. 730에서, 임의의 입실론 천이들이 있는지 결정된다. 그렇지 않다면, 740에서, 선택된 NFA 상태 's'가 입실론 클로저 세트에 추가된다. 천이들이 존재한다면, 그 후, 단계 745에서, 선택된 NFA 상태 's'로부터의 모든 결정된 NFA 천이들이 마킹되지 않은 NFA 상태들로서 세트 'S'에 추가된다. 단계 750은 NFA 상태 's' 내에 남겨진 임의의 마킹되지 않은 NFA 상태들이 있는지가 결정된다. 그렇다면, 방법은 단계 720으로부터 계속된다. 그렇지 않다면, 방법은 단계 755에서 종료한다.
(도 6a의 단계 615에서 시작하는) 앞서 참조된 방법에 대한 예시적인 의사코드 (pseudocode) #1은 아래와 같다:
1. For each unmarked DFA state 'd' (column -1- in DFA STATES TABLE, table 1 above)
1. For each alphabet 'a' in the alphabet set
1. Set S = {}
2. For each NFA state 'n' of 'd' (column -2- in DFA STATES TABLE, table 1 above)
1. If 'n' has an outgoing arc to 'm' arc on 'a'
1. S = S U {m}
3. Se = ECLOSURE (S)
4. Assign found to 'false'
5. For each DFA state 'f' in the DFA STATES TABLE, table 1 above
1. Let 'p' be the set of NFA states corresponding to DFA state 'f'
2. If sets 'Se' and 'p' are equivalent
1. Assign found to 'true'
2. Go to 1.6
6. If found is 'true'
1. Set TRANSITION ('d', 'a') = 'f'
7. Else
1. Add a new DFA state 'f' to the DFA STATES TABLE, table 1 with 'Se' as set of NFA states in COL. 2
2. Set TRANSITION ('d', 'a') = 'f'
2. set 'd' as marked
앞서 참조된 방법의 단점들은 다음과 같다: i) 메모리에 저장된 입실론 클로저들의 히스토리가 없기 때문에, 방법들 (700 및 600) 을 나타내는 의사 코드의 단계 1.1.3은 항상 입실론 클로저 (ECLOSURE ()) 를 계산한다; ii) 단계 1.1.5.2는 세트 등가성 테스트에 기인하여 매우 시간 소비적이다. 세트 등가성 테스트에 의해 소비된 시간은 비교될 세트 내의 엘리먼트들의 개수 (즉, (표 1에 도시된 바와 같은) DFA 상태에서의 NFA 상태들의 개수) 에 의존한다. iii) 표 1에서의 엔트리는, 이 엔트리들이 단계 1.1.5.2가 세트 등가성 테스트를 수행하기 위해서 요구되기 때문에, 삭제될 수 없고, 이로써 메모리 자원들의 막대한 양을 요구한다.
본 발명의 예시적인 실시형태에서, NFA 그래프는 등가의 DFA 그래프로 변환된다.
도 8a-c는 본 발명의 예시적인 실시형태들에 따라 NFA 그래프를 DFA 그래프로 변환하는 방법 (800) 의 순서 다이어그램들이다. 방법 (800) 은 805에서 시작한다. 이 단계에서, DFA 상태들의 세트 "Sd"는 널이다. 810에서, DFA의 시작 상태가 결정되고, 마킹되지 않은 상태로서 DFA 상태들의 세트 "Sd"에 추가된다. DFA의 시작 상태는 NFA 그래프의 시작 상태의 입실론 클로저로서 결정된다. 본 발명의 예시적인 실시형태들에 따라, NFA 상태의 입실론 클로저를 결정하는 방법은 도 9를 참조하여 아래에 더 설명된다. 815에서, DFA 시작 상태와 관련된 NFA 상태들의 암호/완벽한 해시 값은 계산되고, 아래의 표 4에 도시된 바와 같이 DFA 상태들을 DFA 상태와 관련된 NFA 상태들의 해시 값들에 상관시키는 (correlating) 표에 저장된다. 820에서, NFA 시작 상태의 입실론 클로저는 표 5에 더 도시된 바와 같은 입실론 캐시 (Epsilon Cache) 에 저장된다. 입실론 캐시는 입력 NFA 상태들의 세트의 해시에 키이되고 (keyed), 저장된 데이터는 입력 NFA 상태들의 계산된 입실론 클로저이다.
암호 해시/완벽한 해시 함수는 데이터의 임의적인 블록을 취하고 암호 해시 값인 고정된-크기 비트 스트링을 반환하는 결정론적 절차이다. 예를 들어, 예시적인 암호 해시 함수들은 메시지-다이제스트 알고리즘 (message-digest algorithm) (MD5) 또는 보안 해시 알고리즘 (SHA1/SHA2) 을 포함한다. 보다 큰 다이제스트 (예를 들어, MD5에 대한 128b) 의 경우에, 충돌의 가능성은 덜 일어날 것이다. 그러나, "새니티 체크 (sanity check)"가, 충돌 (상이한 데이트 세트들이 동일한 해시 값을 가짐) 이 일어난다면 그래프가 보정될 수 있도록 어떠한 충돌도 없다는 것을 입증하기 위해서 오프라인으로 수행될 수도 있다.
825에서, DFA 상태들의 세트 "Sd"가 마킹되지 않은 DFA상태를 포함하는지 결정된다. 그렇지 않다면, 방법은 단계 895에서 종료한다. DFA 상태들의 세트 "Sd"의 마킹되지 않은 DFA 상태가 존재한다면, 803에서, 마킹되지 않은 상태 'S'가 선택되고 마킹된다. 835에서, NFA 그래프에 의해 인식된 언어의 알파벳 (예를 들어, 글자) 'A' 가 선택된다. 추가적으로, NFA 상태들의 세트를 유지하기 위한 데이터 구조 "St"가 'NULL'로 설정된다. 단계 840에서, DFA 상태 'S'와 관련된 NFA 상태 's'가 선택된다. 850에서, 천이 함수 "TTn = (s,a)"가 입력 값인 글자 'a'를 사용하여 NFA 상태 's'에 적용된다. 천이 함수는, 'a'의 입력이 수신된다면 NFA 상태 's'로부터 도달되는 모든 NFA 상태들을 결정한다. 855에서, 그 후, 결정된 NFA 상태들이 데이터 구조 "St"에 저장된다. 860에서, DFA 상태 'S'가 추가적인 관련된 NFA 상태들을 포함하는지 결정된다. 그렇다면, 방법은, DFA 상태 'S'의 모든 NFA 상태들 's'이 프로세싱될 때까지 단계들 (850 및 855) 을 반복한다. 모든 NFA 상태들이 프로세싱된다면, 방법은 단계 865에서 계속한다. 865에서, 데이터 구조 'St' 내의 모든 NFA 상태들 's'의 입실론 클로저는 도 9처럼 결정되고, 데이터 구조 'Se'에 추가된다.
단계 870에서, 데이터 구조 'Se'는, DFA 상태 'S'가 데이터 구조 'Se' 내의 모든 NFA 상태들 's'을 이미 포함하는지 결정하기 위해, 모든 존재하는 DFA 상태들 'S'과 비교된다. 방법 (600) 의 단계 (645) 를 참조하여 상술한 바와 같이, 일반적인 접근법들은 데이터 구조 내의 각각의 DFA 상태 'S'와 관련된 NFA상태들 's'의 세트를 저장한다. 데이터 구조 'Se' 내의 NFA 상태들 's'이 이미 DFA 상태 'S'와 관련되는지 여부를 결정하기 위해, 데이터 구조 'Se'의 각각의 NFA 상태 세트 's'가 각각의 DFA 상태 'S'의 각각의 NFA 상태 세트 's'와 비교되어야 한다. 따라서, 그러한 비교는 표 2에 도시된 바와 같이 상당한 양의 시간과 메모리를 요구한다.
본 실시형태에서, 데이터 구조 "Se" 내의 NFA 상태들의 암호/완벽한 해시 값이 계산되고, 그 후, DFA 상태들의 개수를 하나 이상의 NFA 상태들의 대응하는 DFA 상태들의 세트의 해시 값에 상관시키는 표와 비교된다. 그 후, 매칭 해시 값이 존재한다면, 단계 870에서, 데이터 구조 "Se" 내의 NFA 상태들과 관련된 DFA 상태가 이미 존재한다고 결정되고, 방법은 단계 890으로 이동한다. 890에서, 알파벳 'a'의 입력을 사용한, DFA 상태 'S'로부터의 천이는 매칭 해시 값과 관련된 존재하는 DFA 상태로 설정된다. 방법은 단계 845로 이동하고, 언어 'A'에 다른 알파벳 'a'가 존재하는지 여부에 관한 결정이 이루어지고, 그렇다면, 방법은 단계 835를 반복한다. 그렇지 않다면, 방법은 단계 847로 이동한다. 단계 847에서, 방법은 NFA 상태 개수들의 세트를 삭제하고, 마킹된 상태들의 세트를 추가한다. 그 후, 방법은 단계 825를 계속한다.
단계 870에서의 동작의 런 타임은 표 3을 참조하여 아래 캡쳐된다. 표 3은 본 발명의 예시적인 실시형태들에 따른 해시 매칭의 저장 및 유지 비용을 리스팅한다. 표 3의 코멘트 컬럼은 해시 매칭의 설명을 제공한다.
런 타임 저장 데이터 구조의 유지 (NFA 상태의 삽입) 코멘트
O(N) O(N) O(1) (DFA 상태와 관련된) NFA 상태들의 각각의 세트는 그것의 등가의 암호 해시로 대체된다.
표 3
이하에 도시된 바와 같이, 표 4는 상술한 바와 같이, DFA 상태들의 개수를 하나 이상의 NFA 상태들의 DFA 상태들의 대응하는 세트의 해시 값에 대해 상관시키는 표에 비교된다.
DFA 상태 개수 DFA 상태 해시 NFA 상태 개수들의 세트 마킹된 (m)/마킹되지않은 (U)
0 81237912891273 -삭제- M
1 09237504823405 -삭제- M
2 23894729379237 {4, 5, 6, 2, 0, 1} U
3 89345798731278 {4, 2, 3, 7, 1, 8} U
... ... ...
표 4
도 8b과 함께 계속하여, 단계 870에서 매칭 해시 값이 존재하지 않으면, 방법은 단계 875로 이동한다. 875에서, 데이터 구조 'Se' 내의 NFA 상태들 's'은 새로운 마킹되지 않은 DFA 상태 (예를 들어, 'D') 로서 DFA 상태들의 세트 "Sd"에 추가된다. 추가적으로, NFA 상태들 's'의 암호/완벽한 해시 값이 계산되고, 새로운 DFA 상태가 상술한 표 4 내의 해시 값으로 매핑된다. 단계 880에서, NFA 상태들 's' 중 임의의 것이 NFA 그래프의 최종 상태들의 세트에 속하는지 여부가 결정된다. 그렇다면, 새로운 DFA 상태는 DFA 그래프의 최종 수용 상태인 것으로 결정된다. 885에서, 입력 'a' 을 사용한, 마킹된 DFA 상태 'S'로부터의 천이는 새로운 DFA 상태 'D'인 것으로 결정된다.
도 9는 본 발명의 예시적인 실시형태들에 따라 NFA 그래프의 상태들의 세트에 대한 입실론 클로저를 결정하는 방법 (900) 의 순서 다이어그램이다. 방법 (900) 은 단계 (905) 에서 시작한다. 910에서, 입실론 클로저 계산기는 NFA 상태들의 세트를 수신했다. 915에서, NFA 상태들의 세트는, 캐시가 NFA 상태들의 매칭 세트를 포함하는지 여부를 결정하기 위해, 캐시 내의 엔트리들과 비교된다.
캐시 내의 각각의 엔트리는 NFA 상태들의 입력 세트의 입실론 클로저에 매핑하는 NFA 상태들의 세트를 나타내는 해시 값으로서 저장될 수도 있다. 계산기는 NFA 상태들의 수신된 세트로부터 해시 값을 계산하고, EC 캐시가 NFA 상태들의 세트와 관련된 매칭 해시 값 엔트리를 갖는지 여부를 결정한다.
이하에 도시된 바와 같이, 표 5는 상술한 바와 같은 NFA 상태들의 세트를 그것의 입실론 클로저에 매핑하는 입실론 클로저 캐시 표이다.
EC 입력 세트 해시 출력 세트
78346782346782 {3, 4, 1, 2, 7}
89237489237492 (8, 3, 2, 5, 19}
... ...
표 5
도 9와 함께 계속하여, 매칭이 발견되면, 920에서, 입실론 클로저가 반환된다. 그러나, 매칭이 발견되지 않으면, 수신된 NFA 상태들의 세트에 대한 입실론 클로저가 계산된다. 입실론 클로저는 도 7을 참조하여 상술된 방법 (700) 을 참조하여 상술된 바와 같이 계산될 수도 있다. 입실론 클로저가 계산되면, 930에서, 입실론 클로저가 입실론 캐시의 새로운 엔트리로서 저장된다. 935에서, 계산된 입실론 클로저가 반환된다.
방법 (900) 은 불필요한 (redundant) 프로세싱을 제거함에 의해 입실론 클로저의 효율적인 프로세싱을 가능하게 한다. 예를 들어, 입실론 클로저가 이미 계산되지 않은 경우, 방법 (900) 은 오직 NFA 상태들의 세트의 입실론 클로저만을 계산한다. 이는 2 회 이상 NFA 세트에 대한 입실론 클로저 프로세싱의 요구를 제거했다. 도 6a-b를 참조하여 상술한 방법 (600) 을 참조하면, 이 방법은 2 회 이상 임의의 소정의 노드의 입실론 클로저를 계산할 수도 있다. 그러나, 캐시에 이전에 계산된 입실론 클로저들을 저장함에 의해, 방법 (900) 은 데이터의 불필요한 프로세싱에 대한 요구를 제거한다.
(도 8a의 단계 825에서 시작하는) 앞서 참조된 방법에 대한 예시적인 의사코드 #2는 아래와 같다:
1. For each unmarked DFA state 'd' (column -1- in DFA STATES TABLE, Table 4 above)
1. For each alphabet 'a' in the alphabet set
1. Set S = {}
2. For each NFA state 'n' of 'd' (column -3- in DFA STATES TABLE, Table 4 above)
1. If 'n' has an outgoing arc to 'm' on 'a'
1. S = S U {m}
3. Get the ECLOSURE 'Se' of the set 'S' as given below
1. Calculate the Hash 'Hi' of the set 'S'
2. For each entry 'e' in the EC CACHE TABLE, Table 5 above
1. Let 'He' be the hash value at entry 'e' (Column -1- in EC CACHE TABLE above)
2. If 'Hi' and 'He' are same
1. Se = EC OUTPUT SET (e), i.e, column -2- in the EC CACHE TABLE above
2. Go to 1.1.4
3. Se = ECLOSURE (S)
4. Add a new entry in the EC CACHE TABLE above with fields 'Hi' and 'Se'
4. Assign found to 'false'
5. Calculate hash 'q' of the set 'Se'
6. For each DFA state 'f' in the DFA STATES TABLE, Table 4 above
1. Let 'p' be the hash of NFA states of the DFA state 'f'
2. If 'p' and 'q' are same
1. Assign found to 'true'
2. Go to 1.1.7
7. If found is 'true'
1. Set TRANSITION ('d', 'a') = 'f'
8. Else
1. Add a new DFA state 'f' to the DFA STATES TABLE, Table 4 with fields 'q' and 'Se'
2. Set TRANSITION ('d', 'a') = 'f'
2. Delete the set of NFA state numbers of the DFA state 'd' from the DFA STATES TABLE, Table 4 and set 'd' as marked
앞서 참조된 방법의 장점들은 다음과 같다: i) 단계 1.1.3은 ECLOSURE () 가 이미 계산된 경우 ECLOSURE () 를 계산하는 것을 피한다; ii) 단계 1.1.6.2는 크기가 일정한 해시 값들의 비교이고, 따라서 고정된 양의 비교 시간을 사용하며, 따라서 세트 등가성 테스트와 비교하여 더 양호하다. 이 비교 시간의 양은 앞의 표 3에 도시된 바와 같이 O (1) 이다. iii) DFA 상태에 대한 NFA 상태들의 세트가 프로세싱된 후에 삭제되기 때문에, 표 4에 도시된 바와 같이, 컴파일러의 메모리 풋 프린트의 막대한 양이 절약된다.
다른 최적화는, 단계 870이 전혀 요구되지 않도록, (NFA 상태들의) 입실론 클로저 세트에 대응하는 NFA 상태들의 세트 대신 직접적인 DFA 상태 개수를 저장할 수도 있다는 것이다. 예를 들어, EC_CACHE () 에 히트 (hit) 가 있다면, 등가의 DFA 노드를 탐색하기 위한 요구가 없다. 아래 도시된 바와 같이, 표 6은 (NFA 상태들의) 입실론 클로저 세트에 대응하는 직접적인 DFA 상태 개수를 저장하는 예시적인 EC_CACHE 표이다.
EC 입력 세트 해시 DFA 상태 개수
78346782346782 13
89237489237492 14
...
표 6
따라서, 단계 870에 대한 프로세싱 표는 표 7이 된다:
런 타임 저장 데이터 구조의 유지 (NFA 상태의 삽입) 코멘트
O(1) 또는 제로 프로세싱 O(N) O(1) EC_CACHE에 히트인 경우. EC_CACHE가 대응하는 DFA 개수를 포함하기 때문에.
표 7
도 9a-b는 본 발명의 예시적인 실시형태에 따라 NFA 그래프를 DFA 그래프로 변환하는 방법 (901) 의 순서 다이어그램들이다. 방법 (901) 은 902에서 시작한다. 이 단계에서, DFA 상태들의 세트 "Sd"는 널이다. 903에서, DFA의 시작 상태가 결정되고, 마킹되지 않은 상태로서 DFA 상태들의 세트 "Sd"에 추가된다. DFA의 시작 상태는 NFA 그래프의 시작 상태의 입실론 클로저로서 결정된다. 본 발명의 예시적인 실시형태에 따라, NFA 상태의 입실론 클로저를 결정하는 방법은 도 9c를 참조하여 아래에서 더 설명된다. 904에서, DFA 시작 상태와 관련된 NFA 상태들의 암호/완벽한 해시 값이 계산되고, 906에서, DFA 시작 상태와 암호 해시의 매핑이 앞서 표 6에 도시된 바와 같이 DFA 상태들을 DFA 상태와 관련된 NFA 상태들의 해시 값들에 상관시키는 표에 저장된다.
907에서, DFA 상태들의 세트 "Sd"가 마킹되지 않은 DFA 상태를 포함하는지 결정된다. 그렇지 않으면, 방법은 단계 908에서 종료한다. DFA 상태들의 세트 "Sd"의 마킹되지 않은 DFA가 존재한다면, 909에서, 마킹되지 않은 상태 'd'가 선택되고 마킹된다. 911에서, NFA 그래프에 의해 인식된 언어의 알파벳 (예를 들어, 글자) 'A' 이 선택된다. 추가적으로, NFA 상태들의 세트를 유지하기 위한 데이터 구조 "S"가 'NULL'로 설정된다. 단계 913에서, DFA 상태 'd'와 관련된 NFA 상태 'n'가 선택된다. 914에서, 천이 함수 "TTn = (s,a)"가 입력 값인 글자 'a'를 사용하여 NFA 상태 'n'에 적용된다. 천이 함수는, 'a'의 입력이 수신된다면 NFA 상태 'n'로부터 도달된 모든 NFA 상태들을 결정한다. 916에서, 그 후, 결정된 NFA 상태들이 데이터 구조 "S"에 저장된다. 917에서, DFA 상태 'd'가 추가적인 관련된 NFA 상태들을 포함하는지 결정된다. 그렇다면, 방법은, DFA 상태 'd'의 모든 NFA 상태들 'n'이 프로세싱될 때까지 단계 913에서 반복한다. 모든 NFA 상태들이 프로세싱된다면, 방법은 단계 918에서 계속한다. 918에서, 알파벳 'a'에서의 DFA 상태 'd'로부터의 천이는 도 9c와 같이 결정된다. 단계 919에서, 알파벳 'a'의 입력을 사용한, DFA 상태 'd'로부터의 천이 상태 'f'가 설정되고, DFA 상태들 표에 저장된다. 921에서, 저장된 NFA 천이 상태들의 세트는 데이터 구조 'S'로부터 삭제된다.
도 9c는 본 발명의 예시적인 실시형태들에 따라 NFA 그래프에서의 상태들의 세트에 대한 입실론 클로저를 결정하는 방법 (922) 의 순서 다이어그램이다. 방법 (922) 은 단계 923에서 시작한다. 924에서, 입실론 클로저 계산기가 NFA 상태들의 세트를 수신하고, 수신된 NFA 상태들의 세트에 대해 해시 값 'Hi'을 계산한다. 926에서, 해시 값 'Hi'은, 캐시가 매칭을 포함하는지 여부를 결정하기 위해 입실론 캐시 내의 해시 값 엔트리들과 비교된다.
캐시 내의 각각의 엔트리는 DFA 상태에 매핑하는 NFA 상태들의 세트를 나타내는 해시 값으로서 저장될 수도 있다. 계산기는 수신된 NFA 상태들의 세트로부터 해시 값을 계산하고, EC 캐시가 DFA 상태와 상관하는 NFA 상태들의 세트와 관련된 매칭 해시 값 엔트리를 갖는지 여부를 결정한다.
매칭이 발견되면, 933에서, 캐시 표의 매칭 해시 값에 매핑된 DFA 상태 'f'가 반환된다. 그러나, 매칭이 발견되지 않으면, 단계 928에서, 수신된 NFA 상태들의 세트에 대한 입실론 클로저가 계산된다. 입실론 클로저는 도 7을 참조하여 상술된 방법 (700) 을 참조하여 상술된 바와 같이 계산될 수도 있다. 입실론 클로저가 계산되면, 929에서, 입실론 클로저의 암호 해시가 계산되고, 입실론 캐시 내의 새로운 엔트리로서 저장된다. 931에서, NFA 상태들의 세트의 해시 값에 대응하는 새로운 DFA 상태 'f'가 EC 캐시 표에서의 해시 값에 매핑된다. 932에서, 새로운 DFA 상태 'f'가 반환된다.
앞서 참조된 방법에 대한 예시적인 의사코드 #3은 아래와 같다:
1. For each unmarked DFA state 'd' (column -1- in DFA STATES TABLE, table 4 above)
1. For each alphabet 'a' in the alphabet set
1. Set S = {}
2. For each NFA state 'n' of 'd' (column -3- in DFA STATES TABLE, table 4 above)
1. If 'n' has an outgoing arc to 'm' on 'a'
1. S = S U {m}
3. Get the transition DFA state 'f' of DFA state 'd' on alphabet 'a' as follows
1. Calculate Hash 'Hi' of the set 'S'
2. For each entry 'e' in the EC CACHE TABLE, Table 6 above
1. Let 'He' be the hash value at entry 'e' (Column -1- in EC CACHE Table 6 above)
2. If 'Hi' and 'He' are same
1. Assign 'f' to DFA state number of entry 'e' , i.e, column -2- in the EC CACHE TABLE above
2. Go to 1.1.5
3. Se = ECLOSURE (S)
4. Calculate hash 'q' of the set 'Se'
5. Assign found to 'false'
6. For each DFA state 'g' in the DFA STATES TABLE above
1. Let 'p' be the hash of NFA states of the DFA state 'g'
2. If 'p' and 'q' are same
1. Assign found to 'true' and assign 'g' to 'f'
2. Go to 1.1.3.7
7. If found is 'true'
1. Go to 1.1.4
8. Add a new unmarked DFA state 'f' in the DFA STATES TABLE using 'q' and 'Se'
4. Add a new entry in the EC EACHE table using the hash 'Hi' and the DFA state number 'f'
5. Set TRANSITION ('d', 'a') = 'f'
2. Delete the set of NFA state numbers of the DFA state 'd' from the DFA STATES TABLE, Table 4 above and set state as "marked"
허용된 런 타임 메모리 풋 프린트에 의존하여, EC_CACHE의 크기가 구성가능하고 제한될 수도 있다. 런 타임 메모리 풋프린트가 제한되면, 대체 정책이 존재할 필요가 있다. 예를 들어, 대체 정책은 최소로 최근에 사용된 NFA 상태들의 세트의 입실론 클로저 (EC) 를 유지할 수도 있고, 대체가 전혀 없을 수도 있다. 후자의 경우, EC_CACHE는 오직 NFA 상태들의 세트의 고정된 개수의 미리 결정된 EC를 유지한다. 후자의 경우는 매우 유용한 것으로 알려졌다.
앞서 참조된 방법의 장점들은 다음과 같다: i) 단계 1.1.3.2는 ECLOSURE () 가 이미 계산된 경우, ECLOSURE () 를 계산하는 것을 피한다; ii) ECLOSURE 세트 대신에 EC CACHE TABLE 내에 DFA 노드 개수를 저장하는 것은, 가능하면, DFA 노드의 ECLOSURE () 가 주어지면, 이 DAF 노드에 대한 탐색을 필요 없게 한다 (이전의 알고리즘에서의 단계 1.1.6, 의사코드 #2). iii) DFA 상태에 대한 NFA 상태들의 세트가 표 4에서 프로세싱된 후 삭제되기 때문에, 컴파일러의 메모리 풋 프린트의 막대한 양이 절약된다.
상술한 바와 같이, 컨텐츠 탐색은 정규 표현식을 프로세싱하기 위한 DFA 또는 NFA와 같은 탐색 알고리즘을 사용하여 대표적으로 수행된다. 구현될 수도 있는 문자열 탐색 알고리즘의 다른 타입은 아호-코라식 알고리즘이다.
아호-코라식 알고리즘은 단일 패스 (pass) 로 입력 패이로드를 프로세싱하는데 사용될 수도 있는 유한 상태 패턴 머신을 텍스트 문자열들의 세트로부터 생성하는데 사용될 수도 있다. 예를 들어, 문자열들의 세트를 고려하여, 아호-코라식 알고리즘은 통신 네트워크에서 패킷들을 통해 수신될 수도 있는 임의의 임의적인 (arbitray) 텍스트 문자열을 프로세싱하는데 사용되는 유한 패턴 매칭 머신을 생성한다. 생성된 패턴 매칭 머신의 거동은 다음과 같은 3 개의 함수들에 의해 좌우된다: i) 고투 (goto) 함수 'g', ii) 실패 함수 'f', 및 iii) 출력 함수 'output'.
도 10은 아호-코라식 알고리즘을 사용하여 패턴들 "hers", "his", 및 "she"를 탐색하기 위한 패턴 매칭 머신 (1000) 을 도시한다. 고투 함수 'g'는 상태 및 입력 심볼로 구성되는 한 쌍을 상태 또는 메시지 'fail'로 맵핑한다. 실패 함수 'f'는 상태를 상태로 매핑하고, 고투 함수 'g'가 fail을 보고할 때마다 참고된다. 출력 함수 'output'는 키워드들의 세트 (가능하게는 비어 있음) 를 모든 상태와 관련짓는다.
시작 상태는 (노드 (1005) 에 의해 나타내지는) 상태 (0) 이다. 임의의 소정의 상태에서, 고투 함수 "g (s, a) = t" ('s'는 유한 머신의 현재 상태, 'a'는 입력 값, 및 't'는 천이 상태임) 이면, 그 후, 패턴 매칭 머신 (1000) 은 상태 't'에 진입하고, 입력 스트림의 다음 심볼은 현재 입력 심볼이 된다. 예를 들어, 도 10을 참조하면, 상태 (0) (노드 (1005)) 에 있고 's'의 입력 값이 수신되면, 머신 (1000) 은 상태 (3) (노드 (1015)) 로 천이할 것이다.
그러나, 고투 함수 "g (s, a) = fail"이고 실패 함수 "f (s) = 's'"이면, 그 후, 머신은 's' 를 현재 상태로 하고 입력 알파벳 'a'를 현재 입력 심볼로서 하여서 이러한 사이클을 반복한다. 도 11a는 패턴 매칭 머신 (1000) 의 각각의 상태에 대한 종래 기술의 실패 값들을 도시한다. 도 11b는 상태들 (2, 5, 7, 및 9) 에 대한 출력 함수 값들을 도시한다.
예를 들어, 도 10을 참조하면, 임의적인 입력 문자열 "ushers"은 다음과 같이 프로세싱 머신에 의해 프로세싱된다:
프로세싱 또는 매칭이 (노드 (1005) 에 의해 나타내지는) 시작 상태 (0) 에서 시작한다. 입력 스트림의 문자 'u' 에 대해서, 머신은 상태 (0) (노드 (1005)) 에서 유지된다. 입력 스트림의 문자 's' 에 대해서, 머신은 상태 (3) (노드 (1015)) 로 천이하고, 다음과 같이 계속된다:
'h' = {4}
'e' = {5}
'r' = {8}
's' = {9}
상태 (4) (노드 (1020)) 에서, 고투 함수 g (4, 'e') = 5이기 때문에, 머신은 상태 (5) 에 진입하고, 키워드들 "she" 및 "he"는 텍스트 문자열 "ushers" 내의 위치의 4 번째 끝에서 매칭되고, 출력 함수는 출력 (5) 을 방출한다 (이는 도 11b에 도시된 바와 같음). 상태 (5) 에서, 입력 심볼 'r' 에 대해서, 머신 (1000) 은 2 개의 상태 천이들을 한다. g (5,r) = fail이기 때문에, 머신 (1000) 은 상태 (2) = f (5) 에 진입한다. 추가적으로, g (2, r) = 8이기 때문에, 머신 (1000) 은 상태 (8) 에 진입하고, 다음 입력 심볼로 진행한다.
본 발명의 예시적인 실시형태들이 구현될 수도 있는 설명된 예시적인 보안 어플리케이션 및 아호-코라식 머신 (1000) 을 사용하는 통상적인 프로세싱을 가지고, 본 발명의 예시적인 실시형태들이 아래에 즉시 상세하게 설명된다.
상술한 바와 같은 아호-코라식 머신 (1000) 은 임의적인 입력 문자열의 매 위치에서 키워드들 또는 패턴들의 발생을 검출한다. 특정 상황들에서, 입력 문자열의 특정 영역 또는 위치 내에서 발견된 경우에만, 소정의 패턴 또는 키워드들이 중요하게 될 수 있다. 예를 들어, HTTP 프로토콜 요청 파서 (parser) 는, 키워드 "GET"가 요청의 시작에서 발생한 경우에만 키워드 "GET"에 관심을 갖고, 그 이후의 임의의 다른 "GET"에는 관심을 갖지 않는다. 그러한 패턴은 앵커링된 패턴으로 지칭된다.
본 발명의 실시형태들은 비앵커링된 패턴들 및 앵커링된 패턴들 둘 모두를 인식하는 아호-코라식 패턴 매칭 머신의 생성을 가능하게 한다. 상술한 바와 같이, 패턴 매칭 머신 (1000) 은 아호-코라식 알고리즘을 사용하여 비앵커링된 패턴들 "hers", "his", 및 "she"를 인식한다. 아호-코라식 알고리즘을 변경함에 의해, 패턴 매칭 머신은 추가적인 앵커링된 패턴들 "help" 및 "shell"을 인식하도록 생성될 수도 있다.
패턴들의 세트를 고려하여, 앵커링된 패턴들은 비앵커링된 패턴들과 구별되어야 한다. 앵커링된 패턴들은 앵커링된 패턴들이 앵커링되었다는 것을 특정하는 매크로 (macro) 를 갖도록 태그될 (tagged) 수도 있다. 예를 들어, '{@0}'는 앵커링된 패턴인 패턴을 특정하기 위해 패턴의 시작에 첨부될 수도 있다. 따라서, 패턴들의 리스트 "he, she, his, hers, {@0}help, and {@0}shell"를 고려하여, 컴파일러는 키워드들 "help" 및 "shell"이 앵커링된 패턴들이라는 것을 인식할 수 있다.
키워드들/패턴들의 리스트가 컴파일러에 의해 수신되면, 컴파일러는 앵커링된 패턴들로부터 비앵커링된 패턴들을 구별할 수 있다. 그 후, 컴파일러는, 모든 앵커링된 패턴들에 대한 별개의 상태 트리 및 상술한 바와 같은 고투 함수 'g'를 사용하여 비-앵커링된 패턴들에 대한 별개의 상태 트리 (도 10에 도시된 바와 같은 머신 (1000)) 를 생성한다. 도 12는 앵커링된 패턴들 "help" 및 "shell"에 대한 상태 트리 (1200) 를 도시한다. 도 12a는 종래 기술에 따라 상태 트리 (1200) 의 각각의 상태의 실패 값들을 도시한다 (즉, 이러한 패턴들이 비앵커링된 패턴들로 컴파일되었다는 것을 가정). 도 12b는 상태 트리 (1200) 의 상태들 (14 및 19) 에 대한 출력 함수 값들을 도시한다.
앵커링된 패턴들 및 비앵커링된 패턴들에 대한 상태 트리가 생성되면, 컴파일러는 둘 모두의 상태 트리들에 대한 실패 함수 'f'를 계산한다. 비앵커링된 패턴들을 나타내는 상태 트리에 대해, 컴파일러는 도 10 및 11a를 참조하여 상술한 바와 같은 실패 함수들을 구현한다. 본 발명의 예시적인 실시형태에 따라, 앵커링된 패턴들의 실패 함수가 다음의 규칙들을 따라 구축된다:
a) 앵커링된 트리의 루트 (root) 노드의 실패가 비앵커링된 상태 트리의 루트 노드와 동일하게 설정된다. 따라서, 앵커링된 패턴들 중 매칭되는 것이 없다면, 비앵커링된 패턴들이 추적된다. 예를 들어, 상태 (10) (노드 (1205)) 의 실패 'f') 가 시작 상태 (0) (도 10의 노드 (1005)) 와 동일하게 설정된다.
b) 앵커링된 트리의 시작 상태의 실패가 결정되면, 앵커링된 트리의 각각의 상태의 실패 'f'는, 비앵커링된 키워드들의 앵커링된 키워드들과의 부분적인 매칭 또한 도 13에 도시된 바와 같은 고투 함수 'g'를 사용하여 추적되도록, 결정된다.
앵커링된 패턴들의 출력 함수들은 별개로 계산되나, 도 13b에 도시된 바와 같이, 도면에서의 비-앵커링된 패턴들과의 중첩을 유지한다.
이후에, 본 발명의 예시적인 실시형태들에 따라, 앵커링된 상태 트리의 루트 노드는 최종 상태 트리의 루트 노드로 설정된다 (앵커링된 상태 트리와 비앵커링된 상태 트리의 결합).
이제, 앵커링된 상태트리 및 비앵커링된 상태 트리는 단일 상태 트리로 효율적으로 병합된다.
예를 들어, 도 10, 11a-b, 12 및 13a-b를 참조하면, 임의적인 입력 문자열 "ushers"은 다음과 같이 프로세싱 머신에 의해 프로세싱된다.
프로세싱 또는 매칭은 (노드 (1205)에 의해 나타내지는) 시작 상태 (10) 에서 시작한다. 입력 스트림의 문자 'u' 에 대해서, 머신은 도 13a에 도시된 바와 같은 실패 함수에 따라 상태 (0) (도 10에서의 노드 (1005)) 로 천이하고, 노드 (0) (1005) 에서 다시 'u'를 프로세싱하고, 머신은 노드 (0) 에 머무른다. 입력 스트림의 문자 's' 에 대해서, 머신은 상태 (3) (노드 (1015)) 로 천이하고, 다음과 같이 계속한다:
'h' = {4}
'e' = {5}
'r' = {8}
's' = {9}
상태 (4) (노드 (1020)) 에서, 고투 함수 g (4, 'e') = 5이고, 머신 (1000) 은 상태 (5) 로 진입하므로, 키워드들 "she" 및 "he"은 텍스트 문자열 "ushers" 내의 위치의 4번째 끝에서 매칭되고, 출력 함수는 출력 (5) 을 방출한다 (이는 도 11b에 도시된 바와 같음). 상태 (5) 에서, 입력 심볼 'r'에 대해서, 머신 (1000) 은 상태 (8) 로 천이한다. 상태 (8) 에서, 입력 심볼 's'에 대해서 , 머신 (1000) 은 상태 (9) 로 천이하고, 키워드 "hers"는 매칭되고, 출력 함수는 출력 (9) 을 방출한다 (이는 도 11b에 도시된 바와 같음).
다른 예시에서, 도 10, 11a-b, 12 및 13a-b를 참조하면, 임의적인 입력 문자열 "shell"은 다음과 같이 프로세싱 머신에 의해 프로세싱된다:
프로세싱 또는 매칭은 (노드 (1205)에 의해 나타내지는) 시작 상태 (10) 에서 시작한다. 입력 문자열의 문자 's'에 대해서, 머신은 상태 (15) (도 12) 로 천이하고, 다음과 같이 계속한다:
'h' = {16}
'e' = {17}
'l' = {18}
'l' = {19}
상태 (16) (도 12) 에서, 고투 함수 g (16, 'e') = 17이고, 머신 (1200) 은 상태 (17) 에 진입하므로, 키워드들 "she" 및 "he"은 텍스트 문자열 "ushers"에서의 위치의 3번째 끝에서 매칭되고, 출력 함수는 출력 (17) 을 방출한다 (이는 도 13b에 도시된 바와 같음). 상태 (17) 에서, 입력 심볼 'l'에 대해서, 머신 (1200) 은 상태 (18) 로 천이한다. 상태 (18) 에서, 입력 심볼 'l'에 대해서, 머신 (1200) 은 상태 18로 천이하고, 키워드 "shell"는 앵커링된 패턴으로 매칭되고, 출력 함수는 출력 (19) 을 방출한다 (이는 도 13b에 도시된 바와 같음).
상술한 바와 같이, DFA 또는 NFA 상태 머신으로의 입력은 통상적으로 (8-비트) 바이트들의 문자열이고, 즉, 알파벳은 단일 바이트 (하나의 문자 또는 심볼) 이다. 따라서, 전체 알파벳 세트의 크기는 256일 수도 있다. 나아가, 입력 문자열의 각각의 바이트는 하나의 상태로부터 다른 상태로의 천이를 야기한다. 그러나, 다수의 패턴들, 문자열들, 또는 정규 표현식들이 전체 알파벳 세트를 사용하지 않는다. 대부분의 패턴들은 본 명세서에서 "액티브 문자 (active character)" 세트로 지칭될 수도 있는, 알파벳 세트의 작은 서브세트를 사용한다. 예를 들어, 인쇄가능한 ASCII 글자들 (예를 들어, a-z, A-Z, 0-9, 및 일부 심볼들) 만이 사용된다.
본 발명의 실시형태들은 "액티브 문자" 세트만을 인식하도록 NFA 및 DFA 그래프들을 압축한다. 본 발명의 일 예시적인 실시형태에 따라, 의사코드 #1, #2 및 #3은 오직 각각의 의사코드에 대한 단계 1.1 동안 오직 "액티브 문자" 세트만으로부터의 알파벳들을 프로세싱한다.
본 발명은 본 발명의 예시적인 실시형태들을 참조하여 구체적으로 도시되고 설명되나, 형태 및 상세들에서 다양한 변경들이 첨부된 청구항들에 의해 포함된 본 발명의 범위로부터 벗어남이 없이 본 발명 내에서 만들어질 수도 있다는 것이 당업자에 의해 이해될 것이다.

Claims (15)

  1. 방법으로서,
    네트워크에 커플링되는 (coupled) 보안 어플라이언스 (security appliance) 의 프로세서에서:
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 (anchored) 패턴들로서 마킹하는 (marking) 단계;
    상기 복수의 소정의 패턴들 중 비앵커링된 (unanchored) 패턴들에 대한 비앵커링된 상태 트리를 구축하는 (buliding) 단계로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하는 단계;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리를 구축하는 단계로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하는 단계;
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 (equivalent) 실패 값 (failure value) 을 결정하는 단계; 및
    상기 앵커링된 상태 트리의 루트 (root) 노드의 상기 실패 값을 포함시키는 단계로서, 상기 실패 값은 상기 비앵커링된 상태 트리의 루트 노드와 등가인, 상기 실패 값을 포함시키는 단계를 포함하는, 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 앵커링된 상태 트리는, 입력 패이로드 (payload) 내의 앵커링된 패턴들 및 비앵커링된 패턴들을 프로세싱하기 위한 시작 노드로서 설정된 루트 노드를 포함하는, 방법.
  4. 방법으로서,
    네트워크에 커플링되는 보안 어플라이언스의 프로세서에서:
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 패턴들로서 마킹하는 (marking) 단계;
    상기 복수의 소정의 패턴들 중 비앵커링된 패턴들에 대한 비앵커링된 상태 트리를 구축하는 단계로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하는 단계;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리를 구축하는 단계로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하는 단계; 및
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 실패 값을 결정하는 단계를 포함하고,
    상기 앵커링된 상태 트리의 각각의 노드는 출력 함수를 포함하고,
    각각의 노드의 상기 출력 함수는 상기 앵커링된 패턴들 및 상기 비앵커링된 패턴들 양자 (both) 의 함수로서 계산되는, 방법.
  5. 제1항에 있어서,
    상기 마킹하는 단계는 상기 앵커링된 패턴을 탐색하기 시작하기 위한, 텍스트의 문자열 (string) 의 입력 내의 위치를 지시하는 참조사항 (reference) 을 추가하는 단계를 포함하는, 방법.
  6. 방법으로서,
    네트워크에 커플링되는 보안 어플라이언스의 프로세서에서:
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 패턴들로서 마킹하는 단계;
    상기 복수의 소정의 패턴들 중 비앵커링된 패턴들에 대한 비앵커링된 상태 트리를 구축하는 단계로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하는 단계;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리를 구축하는 단계로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하는 단계; 및
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 실패 값을 결정하는 단계를 포함하고,
    상기 앵커링된 상태 트리를 구축하는 단계 및 상기 별개의 비앵커링된 상태 트리를 구축하는 단계는 상태들의 수 및 일 상태에서 다른 상태로의 천이들의 수를 결정하는 단계를 포함하는, 방법.
  7. 방법으로서,
    네트워크에 커플링되는 보안 어플라이언스의 프로세서에서:
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 패턴들로서 마킹하는 단계;
    상기 복수의 소정의 패턴들 중 비앵커링된 패턴들에 대한 비앵커링된 상태 트리를 구축하는 단계로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하는 단계;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리를 구축하는 단계로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하는 단계;
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 실패 값을 결정하는 단계;
    텍스트의 입력 문자열을 수신하면, 상기 앵커링된 상태 트리를 통해 상기 텍스트의 입력 문자열을 프로세싱하는 단계; 및
    상기 텍스트의 입력 문자열 중의 문자가 상기 앵커링된 상태 트리의 상기 노드들 중 하나에 대해서 상기 결정된 실패 값들 중 하나를 야기하는 경우, 상기 텍스트의 입력 문자열의 프로세싱을 상기 비앵커링된 상태 트리의 노드로 천이하는 단계로서, 상기 야기된 실패 값은 프로세싱을 천이할, 상기 비앵커링된 상태 트리의 노드를 결정하는, 상기 천이하는 단계를 포함하는, 방법.
  8. 네트워크에 커플링된 보안 어플라이언스로서,
    상기 보안 어플라이언스는 컴파일러를 구현하도록 구성된 프로세서를 포함하며,
    상기 컴파일러는,
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 패턴들로서 마킹하고;
    상기 복수의 소정의 패턴들 중 비앵커링된 패턴들에 대한 비앵커링된 상태 트리로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하고;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하고;
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 실패 값을 결정하며; 그리고
    상기 앵커링된 상태 트리의 루트 노드의 실패 값을 결정하도록 구성되며,
    상기 실패 값은 상기 비앵커링된 상태 트리의 루트 노드와 등가인, 보안 어플라이언스.
  9. 삭제
  10. 제8항에 있어서,
    상기 앵커링된 상태 트리는, 입력 패이로드 내의 앵커링된 패턴들 및 비앵커링된 패턴들을 프로세싱하기 위한 시작 노드로서 설정되는 루트 노드를 포함하는, 보안 어플라이언스.
  11. 네트워크에 커플링된 보안 어플라이언스로서,
    상기 보안 어플라이언스는 컴파일러를 구현하도록 구성된 프로세서를 포함하며,
    상기 컴파일러는,
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 패턴들로서 마킹하고;
    상기 복수의 소정의 패턴들 중 비앵커링된 패턴들에 대한 비앵커링된 상태 트리로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하고;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하고;
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 실패 값을 결정하도록 구성되며,
    상기 앵커링된 상태 트리의 각각의 노드는 출력 함수를 포함하고,
    각각의 노드의 상기 출력 함수는 상기 앵커링된 패턴들 및 상기 비앵커링된 패턴들 양자의 함수로서 계산되는, 보안 어플라이언스.
  12. 제8항에 있어서,
    상기 컴파일러는 상기 앵커링된 패턴을 탐색하기 시작하기 위한, 텍스트의 문자열의 입력 내의 위치를 지시하는 참조사항을 추가함에 의해 소정의 패턴들을 마킹하도록 더 구성된, 보안 어플라이언스.
  13. 네트워크에 커플링된 보안 어플라이언스로서,
    상기 보안 어플라이언스는 컴파일러를 구현하도록 구성된 프로세서를 포함하며,
    상기 컴파일러는,
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 패턴들로서 마킹하고;
    상기 복수의 소정의 패턴들 중 비앵커링된 패턴들에 대한 비앵커링된 상태 트리로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하고;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하고;
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 실패 값을 결정하도록 구성되며,
    상기 컴파일러는 상태들의 수 및 하나의 상태로부터 다른 상태로의 천이들의 수를 결정함에 의해 상기 앵커링된 상태 트리 및 상기 별개의 비앵커링된 상태 트리를 구축하도록 더 구성된, 보안 어플라이언스.
  14. 네트워크에 커플링된 보안 어플라이언스로서,
    상기 보안 어플라이언스는 컴파일러를 구현하도록 구성된 프로세서를 포함하며,
    상기 컴파일러는,
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 패턴들로서 마킹하고;
    상기 복수의 소정의 패턴들 중 비앵커링된 패턴들에 대한 비앵커링된 상태 트리로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하고;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하고;
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 실패 값을 결정하도록 구성되며,
    상기 컴파일러는,
    텍스트의 입력 문자열을 수신하면, 상기 앵커링된 상태 트리를 통해 상기 텍스트의 입력 문자열을 프로세싱하고; 그리고
    상기 텍스트의 입력 문자열의 문자가 상기 앵커링된 상태 트리의 상기 노드들 중 하나에 대해서 상기 결정된 실패 값들 중 하나를 야기하는 경우, 상기 텍스트의 입력 문자열의 프로세싱을 상기 비앵커링된 상태 트리의 노드로 천이하도록 더 구성되고,
    상기 야기된 실패 값은 프로세싱을 천이할, 상기 비앵커링된 상태 트리의 노드를 결정하는, 보안 어플라이언스.
  15. 방법으로서,
    네트워크에 커플링되는 보안 어플라이언스의 프로세서에서:
    복수의 소정의 패턴들로부터의 소정의 패턴들을 앵커링된 패턴들로서 마킹하는 단계;
    상기 복수의 소정의 패턴들 중 비앵커링된 패턴들에 대한 비앵커링된 상태 트리를 구축하는 단계로서, 상기 비앵커링된 상태 트리는 상기 비앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 비앵커링된 상태 트리를 구축하는 단계;
    상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들에 대한 별개의 앵커링된 상태 트리를 구축하는 단계로서, 상기 앵커링된 상태 트리는 상기 앵커링된 상태 트리의 상태를 나타내는 노드들을 포함하는, 상기 별개의 앵커링된 상태 트리를 구축하는 단계; 및
    상기 앵커링된 상태 트리의 각각의 노드에 대해, 상기 복수의 소정의 패턴들 중 비앵커링된 패턴들을 나타내는 비앵커링된 상태 트리에서의 상태를 나타내는 노드와 등가인 실패 값을 결정하는 단계를 포함하고,
    상기 실패 값이 상기 비앵커링된 상태 트리의 루트 노드와 등가인 것은, 상기 복수의 소정의 패턴들 중 상기 앵커링된 패턴들 중 어느 것도 매칭되지 않는 경우에 상기 복수의 소정의 패턴들 중 상기 비앵커링된 패턴들의 추적을 가능하게 하는, 방법.
KR1020147001978A 2011-06-24 2012-06-20 앵커링된 패턴들 KR101536880B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/168,323 US8990259B2 (en) 2011-06-24 2011-06-24 Anchored patterns
US13/168,323 2011-06-24
PCT/US2012/043337 WO2012177752A1 (en) 2011-06-24 2012-06-20 Anchored patterns

Publications (2)

Publication Number Publication Date
KR20140061359A KR20140061359A (ko) 2014-05-21
KR101536880B1 true KR101536880B1 (ko) 2015-07-14

Family

ID=46466880

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147001978A KR101536880B1 (ko) 2011-06-24 2012-06-20 앵커링된 패턴들

Country Status (3)

Country Link
US (2) US8990259B2 (ko)
KR (1) KR101536880B1 (ko)
WO (1) WO2012177752A1 (ko)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990259B2 (en) * 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US9858051B2 (en) 2011-06-24 2018-01-02 Cavium, Inc. Regex compiler
WO2013020001A1 (en) 2011-08-02 2013-02-07 Cavium, Inc. Lookup front end output processor
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
KR101563059B1 (ko) * 2012-11-19 2015-10-23 삼성에스디에스 주식회사 안티 멀웨어 시스템 및 안티 멀웨어 시스템에서의 데이터 처리 방법
US20140337031A1 (en) * 2013-05-07 2014-11-13 Qualcomm Incorporated Method and apparatus for detecting a target keyword
US9563399B2 (en) 2013-08-30 2017-02-07 Cavium, Inc. Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
WO2015084360A1 (en) * 2013-12-05 2015-06-11 Hewlett-Packard Development Company, L.P. Regular expression matching
US9275336B2 (en) 2013-12-31 2016-03-01 Cavium, Inc. Method and system for skipping over group(s) of rules based on skip group rule
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
US9602532B2 (en) * 2014-01-31 2017-03-21 Cavium, Inc. Method and apparatus for optimizing finite automata processing
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US9680797B2 (en) * 2014-05-28 2017-06-13 Oracle International Corporation Deep packet inspection (DPI) of network packets for keywords of a vocabulary
KR102276912B1 (ko) 2017-06-07 2021-07-13 삼성전자주식회사 스토리지 시스템 및 이의 동작 방법
US10645187B2 (en) 2018-07-13 2020-05-05 Fungible, Inc. ARC caching for determininstic finite automata of 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
US10635419B2 (en) 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US11263190B2 (en) 2019-09-26 2022-03-01 Fungible, Inc. Data ingestion and storage by data processing unit having stream-processing hardware accelerators
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
CN115244539B (zh) * 2020-05-18 2023-08-01 谷歌有限责任公司 单词或词段词元化的推断方法
US11750636B1 (en) * 2020-11-09 2023-09-05 Two Six Labs, LLC Expression analysis for preventing cyberattacks

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008507789A (ja) * 2004-07-26 2008-03-13 ソースファイア インコーポレイテッド マルチパターン検索のための方法およびシステム
US20100094906A1 (en) * 2008-09-30 2010-04-15 Microsoft Corporation Modular forest automata

Family Cites Families (33)

* 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
US7975305B2 (en) 1997-11-06 2011-07-05 Finjan, Inc. Method and system for adaptive rule-based content scanners for desktop computers
US8010469B2 (en) * 2000-09-25 2011-08-30 Crossbeam Systems, Inc. Systems and methods for processing data flows
US7027988B1 (en) 2001-07-20 2006-04-11 At&T Corp. System and method of ε removal of weighted automata and transducers
US7046848B1 (en) 2001-08-22 2006-05-16 Olcott Peter L Method and system for recognizing machine generated character glyphs and icons in graphic images
JP4209176B2 (ja) 2002-11-14 2009-01-14 アルパイン株式会社 クライアント装置およびサーバ装置
US20040172234A1 (en) 2003-02-28 2004-09-02 Dapp Michael C. Hardware accelerator personality compiler
US7093231B2 (en) 2003-05-06 2006-08-15 David H. Alderson Grammer for regular expressions
US7180328B2 (en) 2003-05-23 2007-02-20 Sensory Networks, Inc. Apparatus and method for large hardware finite state machine with embedded equivalence classes
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
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
US7594081B2 (en) 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
WO2006029508A1 (en) 2004-09-13 2006-03-23 Solace Systems Inc. Highly scalable subscription matching for a content routing network
US8032479B2 (en) 2004-12-09 2011-10-04 Mitsubishi Electric Corporation String matching system and program therefor
US7710988B1 (en) 2005-03-11 2010-05-04 Xambala Corporation Method and system for non-deterministic finite automaton filtering
US7827190B2 (en) 2006-12-08 2010-11-02 Pandya Ashish A Complex symbol evaluation for 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
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
US8473523B2 (en) 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
US20100192225A1 (en) 2009-01-28 2010-07-29 Juniper Networks, Inc. Efficient application identification with network devices
US8937942B1 (en) 2010-04-29 2015-01-20 Juniper Networks, Inc. Storing session information in network devices
CN101853301A (zh) 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
US8543528B2 (en) 2010-09-23 2013-09-24 International Business Machines Corporation Exploitation of transition rule sharing based on short state tags to improve the storage efficiency
US8799188B2 (en) * 2011-02-08 2014-08-05 International Business Machines Corporation Algorithm engine for use in a pattern matching accelerator
US8990259B2 (en) * 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
US9858051B2 (en) * 2011-06-24 2018-01-02 Cavium, Inc. Regex compiler

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008507789A (ja) * 2004-07-26 2008-03-13 ソースファイア インコーポレイテッド マルチパターン検索のための方法およびシステム
US20100094906A1 (en) * 2008-09-30 2010-04-15 Microsoft Corporation Modular forest automata

Also Published As

Publication number Publication date
WO2012177752A1 (en) 2012-12-27
US8990259B2 (en) 2015-03-24
KR20140061359A (ko) 2014-05-21
US20120331007A1 (en) 2012-12-27
US9514246B2 (en) 2016-12-06
US20160070818A1 (en) 2016-03-10

Similar Documents

Publication Publication Date Title
KR101536880B1 (ko) 앵커링된 패턴들
KR101868720B1 (ko) 정규 표현식들에 대한 컴파일러
Xu et al. A survey on regular expression matching for deep packet inspection: Applications, algorithms, and hardware platforms
US10367786B2 (en) Configuration management for a capture/registration system
CN101296116B (zh) 使用非确定性有限自动机的并行模式匹配
JP4598127B2 (ja) ステートフルなパケット内容マッチング機構
US9195937B2 (en) System and method for intelligent state management
US8683035B2 (en) Attributes of captured objects in a capture system
US8706709B2 (en) System and method for intelligent term grouping
US20120180137A1 (en) System and method for data mining and security policy management
Ahmed et al. A misuse-based network intrusion detection system using temporal logic and stream processing
Najam et al. Speculative parallel pattern matching using stride-k DFA for deep packet inspection
Lee et al. A pattern-matching scheme with high throughput performance and low memory requirement
Aldwairi et al. n‐Grams exclusion and inclusion filter for intrusion detection in Internet of Energy big data systems
Liu et al. Overlay automata and algorithms for fast and scalable regular expression matching
Sheu et al. Hierarchical multi-pattern matching algorithm for network content inspection
Yu et al. Fast packet pattern-matching algorithms
Wu et al. Shutter: Preventing information leakage based on domain gateway for social networks
Yang et al. A novel algorithm for pattern matching with back references
Alnas et al. Detection of Botnet multi-stage attack by using alert correlation model
Hashem et al. HES: Highly Efficient and Scalable Technique for Matching Regex Patterns
CHAND et al. Efficient Way of Detecting an Intrusion using Snort Rule Based Technique
Tzur-David A Network Intrusion Prevention System (NIPS) for High-speed Networks

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190617

Year of fee payment: 5