KR20140131333A - 스트림 인식 및 필터링 - Google Patents

스트림 인식 및 필터링 Download PDF

Info

Publication number
KR20140131333A
KR20140131333A KR1020147024179A KR20147024179A KR20140131333A KR 20140131333 A KR20140131333 A KR 20140131333A KR 1020147024179 A KR1020147024179 A KR 1020147024179A KR 20147024179 A KR20147024179 A KR 20147024179A KR 20140131333 A KR20140131333 A KR 20140131333A
Authority
KR
South Korea
Prior art keywords
data item
block
signature
bits
synchronization
Prior art date
Application number
KR1020147024179A
Other languages
English (en)
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 KR20140131333A publication Critical patent/KR20140131333A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • 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/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • 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/95Retrieval from the web
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/83Generation or processing of protective or descriptive data associated with content; Content structuring
    • H04N21/835Generation of protective data, e.g. certificates

Abstract

방법은 제1 데이터 아이템에 대한 제1 데이터 아이템 서명을 획득하며, 제1 데이터 아이템 서명은 제1 데이터 아이템 내의 복수의 동기 포인트와 대응하는 복수의 블록 서명 간의 연관성을 포함한다. 프로세스는 제2 데이터 아이템 내에서 복수의 동기 포인트 중 하나를 발견하려고 시도하고, 그러한 동기 포인트가 발견되는 경우, 제2 데이터 아이템 내의 대응하는 비트들의 블록에 해시 함수를 적용함으로써 제2 데이터 아이템 내의 대응하는 비트들의 블록의 블록 서명이 결정된다. 프로세스는 제2 데이터 아이템으로부터의 동기 포인트 및 대응하는 블록 서명이 제1 데이터 아이템 서명 내의 동기 포인트 및 블록 서명에 하는지를 확인한다. 사전 결정된 수의 동기 포인트들 및 대응하는 블록 서명들이 매칭되는 경우, 제1 및 제2 데이터 아이템들은 매칭되는 것으로 간주된다.

Description

스트림 인식 및 필터링{STREAM RECOGNITION AND FILTERING}
저작권 공고
본 특허 문헌은 저작권 보호를 받는 내용을 포함한다. 저작권 소유자는 미국 특허청의 파일들 내의 본 특허 문헌 및 임의의 관련 자료들의 복사에 대해 어떠한 이견도 없지만, 그 외에는 모든 저작권을 보유한다.
발명의 분야
본 발명은 스트리밍 인식 및 필터링에 관한 것이다.
본 발명의 다른 목적들, 특징들 및 특성들은 물론, 관련 구조 요소들 및 부품들의 조합의 동작 방법들 및 기능들, 및 제조의 경제성이 첨부 도면들을 참조하는 아래의 설명 및 첨부된 청구항들로부터 더 명확해질 것이며, 이들 모두는 본 명세서의 일부를 형성한다.
도 1a는 데이터 스트림을 나타낸다.
도 1b는 비트들의 동기 포인트 및 대응 블록을 나타낸다.
도 1c는 도 1a의 데이터 스트림에 대한 스트림 서명을 나타낸다.
도 2a-2d는 데이터 스트림들의 처리를 나타낸다.
도 3a-3b는 다수의 스트림을 처리하는 데 사용되는 구조들을 나타낸다.
도 4a-4b는 다수의 스트림의 처리를 나타낸다.
도 5는 스트림들을 처리하기 위한 예시적인 데이터 구조들을 나타낸다.
도 6a-6c는 도 5의 데이터 구조들을 이용하여 처리되는 예시적인 스트림을 나타낸다.
도 7은 통상적인 패킷을 나타낸다.
도 8은 컴퓨터 시스템의 개략도이다.
배경 및 개요
장치들에 저장되거나 장치들 사이에서 전송되는 데이터를 검사하여 데이터가 다른 공지 데이터에 대응하는지의 여부를 결정하려고 시도하는 것은 종종 유용하고 바람직하다. 예를 들어, 장치에 저장된 데이터가 다른 데이터에 대응하거나 다른 데이터의 완전한 또는 부분적인 사본인지를 결정하는 것이 유용하거나 바람직할 수 있다. 다른 예로서, 2개의 장치 사이에서 전송되고 있는 데이터 스트림이 다른 데이터에 대응하는지를 (또는 다른 데이터의 완전한 또는 부분적인 사본인지를) 결정하는 것이 유용하거나 바람직할 수 있다.
설명
데이터 스트림(또는 스트림)은 비트들의 시퀀스를 포함한다. 스트림 내의 비트들의 시퀀스는 소정 유형의 데이터 아이템(예로서, 영화 또는 이미지 또는 음악, 데이터베이스 등)을 표현하거나 인코딩할 수 있다. 스트림 내의 비트들의 시퀀스는 암호화 및/또는 압축될 수 있다. 이 분야의 기술자들은, 본 설명을 읽을 때, 기본적인 비트들의 시퀀스가 표현하는 것에 의해 본 발명이 한정되지 않는다는 것을 인식하고 이해할 것이다.
본 명세서에서 사용될 때, 데이터는 기본적인 데이터가 표현하는 것에 관계없이 그리고 기본적인 데이터가 포맷팅, 인코딩 또는 저장되는 방법에 관계없이 어떤 임의적인 데이터를 지칭한다.
도 1a-1b를 참조하면, 스트림(100)은 복수의 동기 포인트를 포함한다(도면에서, 스트림은 공동으로 SPj로서 지칭되는 SP1, SP2, SP3,..., SPi로 표시되는 i개의 동기 포인트를 갖는 것으로 도시된다). 비트들의 블록이 스트림 내의 각각의 동기 포인트에 이어진다(도면에서, j 번째 블록은 Bj로 표시된다).
도 1b에 도시된 바와 같이, i 번째 동기 포인트(SPi)는 k 비트(b0b1...bk)로 구성되며, 비트들의 i 번째 블록(Bi)은 j 비트(c0c1...cj)로 구성된다.
도면에서는 비트들의 j 번째 블록이 j 번째 동기 포인트에 바로 이어지는 것으로 도시되지만, 비트들의 j 번째 블록은 소정의 공지된 양만큼 j 번째 동기 포인트로부터 분리될 수 있다는 것이 명백해야 한다.
현재 바람직한 구현에서는 16개의 동기 포인트가 존재하고, 이들 각각은 32 비트로 구성되며, 비트들의 각각의 블록은 256 바이트로 구성된다. 다른 구현에서는 10개의 동기 포인트가 존재하고, 이들 각각은 64 비트로 구성되며, 비트들의 각각의 블록은 256 바이트로 구성된다. 본 명세서에서 사용될 때, 스트림 내의 비트들의 수는 스트림의 크기로서 지칭되고, 동기 포인트 내의 비트들의 수는 동기 포인트의 크기로서 지칭되며, 비트들의 블록 내의 비트들의 수는 비트들의 블록의 크기로서 지칭된다. 이 분야의 기술자들은, 본 설명을 읽을 때, 전술한 수와 상이하고/하거나 다른 수의 동기 포인트가 사용될 수 있고, 동기 포인트가 전술한 것과 다른 크기를 가질 수 있으며, 비트들의 블록이 전술한 수와 다른 크기를 가질 수 있다는 것을 인식하고 이해할 것이다.
이 분야의 기술자들은, 본 설명을 읽을 때, 일부 예들에서 동기 포인트들의 수가 비트들의 스트림의 크기의 함수로서 결정될 수 있다는 것을 인식하고 이해할 것이다.
비트들의 블록에 함수 (h)를 적용함으로써 결정된 값 Hj가 비트들의 각각의 블록(Bj)에 대응하며, 따라서
Hj = h(Bj)이다.
값 Hj는 본 명세서에서 비트들의 j 번째 블록에 대한 블록 서명으로도 지칭된다.
함수 h는 다음의 특성을 가져야 하는데, 즉 비트들의 어떤 2개의 임의적인 블록 Ba 및 Bb에 대해, Ba가 Bb와 동일한 경우, h(Ba) = h(Bb)이다.
함수 h에 대한 다른 바람직한 특성들은 다음을 포함한다:
(a) Bi 내의 작은 변화가 h(Bi)의 상이한 값을 유발할 수 있다.
(b) 함수 h는 계산하기가 비교적 쉽고 빠르다.
함수 h는 임의의 해시 함수일 수 있다. 일부 구현들에서는, MD5 또는 SHA-1 등과 같은 메시지 다이제스트 함수가 사용될 수 있지만, 바람직하게는 더 간단하고 더 가벼운 함수가 사용될 수 있다. 바람직하게는, 해시 함수는 32-비트 값을 생성한다.
이 분야의 기술자들은, 본 설명을 읽을 때, 함수 h가 비트들의 모든 블록에 대해 고유 값을 생성할 필요는 없다는 것을 (그리고 아마도 생성하지 않을 것이라는 것을) 인식하고 이해할 것이다.
각각의 스트림은 대응하는 스트림 서명을 갖는다. 이제, 도 1a-1c를 참조하면, i개의 동기 포인트(SP1, SP2, SP3,..., SPi)를 갖는 스트림의 서명은 i개의 쌍 <SPj,h(Bj)>(j = 1 ... i)으로 구성된다. 도 1c 내의 도면은 도 1a의 스트림(100)의 서명(102)의 논리적 표현을 나타낸다.
도 2a 및 2b를 참조하여 데이터 스트림에 대한 스트림 서명의 생성이 설명된다. 도 2a에 도시된 바와 같이, 초기 셋업(200)에 의해 스트림(S)을 처리하여, 스트림 서명(202)을 생성한다. 초기 셋업(200)에 의한 처리는 도 2b의 흐름도를 참조하여 더 상세히 설명된다. 초기 셋업 프로세스(200)는 다수(k개)의 쌍 <SPj,h(Bj)>(k의 소정 값에 대해 j = 1 ... k)으로 구성되는 스트림 서명(202)을 생성할 것이다. k의 값은 바람직하게는 사전 설정되지만(예로서, 10, 15, 20 등), 전술한 바와 같이 k의 값은 스트림(S)의 크기의 함수로서 결정될 수도 있다.
스트림(200)의 처리에 있어서, 초기 셋업(202)은 먼저 (204에서) 스트림(S)의 크기를 결정할 수 있다. 이러한 크기 정보는 예를 들어 이 스트림에 대해 필요한 동기 포인트들의 수(k) 및/또는 스트림 내의 동기 포인트들의 간격을 결정하는 데 사용될 수 있다. 본 설명을 읽을 때 명백해지듯이, 임의의 주어진 스트림(S)에 대해, 동기 포인트들이 전체 스트림(S)에 걸쳐 분산되는 것이 바람직하다.
이어서, 프로세스(202)는 (206에서) 스트림(S) 내의 다음 (i 번째) 동기 포인트(SPi) 및 대응하는 비트들의 블록(Bi)을 결정한다. 값 H(Bi)는 (208에서) 비트들의 블록(Bi)에 대해 결정되며, 쌍 <SPj,H(Bj)>가 (210에서) 스트림(S)에 대한 서명 내에 저장된다. 208에서 계산된 함수 "H"는 전술한 함수 h에 대응하며, 바람직하게는 MD5 또는 SHA 등과 같은 해시 함수의 메시지 다이제스트이다.
이어서, 프로세스(202)는 (212에서) 이 스트림(S)에 대해 충분한 <동기 포인트, 값> 쌍이 결정되었는지를 결정한다. 그러한 경우에는 스트림의 서명(SS)이 (214에서) 저장되며, 그렇지 않은 경우에는 (206에서) 다른 동기 포인트가 결정된다. 스트림(S) 처리의 종료시에, (예로서, 도 1c에 도시된 형태의) 스트림 서명이 생성되고, 스트림(S)과 연계하여 저장된다.
본 설명을 읽을 때, 이 분야의 기술자들에게 명백하듯이, 2개의 스트림이 (본 명세서에서 설명되는 프로세스를 이용하여 결정되는 바와 같은) 동일한 스트림 서명을 갖는다는 사실이 2개의 스트림이 동일하다는 것을 반드시 암시하는 것은 아니다. 예를 들어, 제1 스트림은 수백만 비트로 구성될 수 있는 반면, 스트림 서명은 단지 10개 또는 20개의 <동기 포인트, 비트 블록 값> 쌍으로 구성될 수 있으며, 동기 포인트들은 스트림에 걸쳐 무작위로 분포되고, 각각의 동기 포인트는 128 비트만을 사용하고, 각각의 비트 블록은 512 비트만을 사용한다. 이러한 경우에, 제2 스트림이 정확히 동일한 <동기 포인트, 비트 블록 값> 쌍을 갖는 경우, 제2 스트림은 제1 스트림에 대응할 수 있지만, 대응하지 않을 수도 있다. 그러나, 제2 스트림이 제1 스트림과 동일한 <동기 포인트, 비트 블록 값> 쌍을 갖지 않는 경우, 제2 스트림은 제1 스트림에 대응하지 않는다.
본 발명자들은 일부 응용들에서는 데이터 스트림이 다른 공지된 데이터 스트림에 충분히 대응하는지를 결정하기에 충분할 수 있다는 것을 인식하였다. 본 발명자들은 일부 응용들에서는 2개의 스트림이 소정의 확실성으로 동일할 수 있다는 것을 결정하기에 충분할 수 있다는 것을 인식하였다. 그러한 정보는 대응성 또는 동일성을 결정하기 위해 스트림들의 더 광범위한 (그리고 아마도 고가의) 처리를 트리거하는 데 사용될 수 있다.
이제, 도 2c를 참조하면, 스트림(S)에 대한 서명(SS)을 결정하고 저장한 후, 임의적인 스트림을 처리하여, 그가 스트림(S)에 충분히 대응하는지를 결정할 수 있다. 스트림(S')이 (도 2d를 참조하여 후술하는) 비교 프로세스(216)에 제공되며, 이 프로세스는 이전에 저장된 스트림 서명(SS)을 이용하여 입력 스트림(S')이 스트림(S)에 대응하는지의 여부를 결정한다.
비교 프로세스(216)는 (218에서) 처리할 임의의 스트림이 더 있는지를 결정한다. 없는 경우, 매치가 발견되지 않았으며, 따라서 스트림들은 매칭되지 않는다. 처리할 입력 스트림이 더 있는 경우, 프로세스는 (220에서) 동기 포인트를 찾는다. 프로세스는 스트림 서명(SS) 내의 임의의 동기 포인트(SP)를 찾을 것이며, 그들을 순서대로 찾을 필요가 없다는 것을 알아야 한다. 본 설명을 읽을 때 이 분야의 기술자들에게 명백하듯이, 이것은 입력 스트림이 순서 없이 비교 프로세스(216)에 도달할 수 있는 조각(pieces) 또는 패킷 단위로 처리되는 것을 가능하게 한다.
동기 포인트(SP)를 발견한 후, 비교 프로세스(216)는 (220에서) 그 동기 포인트와 관련된 대응하는 비트 블록(B)을 발견하고, 비트 블록(B)에 대한 서명 H(B)를 결정한다. 이 분야의 기술자들은, 본 설명을 읽을 때, 비교 프로세스(216)에서 사용되는 함수 H가 스트림 서명을 생성하는 데 사용된 함수와 동일해야 한다는 것을 인식하고 이해할 것이다.
이어서, (226에서) 쌍 <SP, H(B)>가 스트림 서명(SS) 내의 동기 포인트(SP)에 대한 대응하는 쌍과 비교된다. (228에서) 쌍이 매칭되지 않는 경우, (218에서) (존재할 경우) 스트림의 나머지가 처리된다. 반면, (228에서) 쌍 <SP, H(B)>가 스트림 서명(SS) 내의 동기 포인트(SP)에 대한 대응하는 쌍과 매칭되는 경우, (230에서) 비교 프로세스(216)는 스트림들이 매칭되는 것으로 간주하기에 충분한 쌍 매치들이 존재했는지를 결정한다. (230에서의) "충분한 매치들"에 대한 검사는 지금까지의 스트림 내의 매치들의 수의 카운트를 이용할 수 있으며, 그 카운트 값을 이용하여, 스트림 서명에 대한 <동기 포인트, 블록 서명> 쌍들의 백분율 매치를 결정할 수 있다. 일부 바람직한 구현들에서는, (232에서) 70% 매치(예를 들어, 10개 중 7개의 매치)가 스트림들이 매칭되는 것으로 간주하기에 충분한 매치들인 것으로 간주된다. 이 분야의 기술자들은, 본 설명을 읽을 때, 요구되는 백분율 매치(최대 100%)가 비교 프로세스에 의해 요구되는 정확도의 함수라는 것을 인식하고 이해할 것이다. 전술한 바와 같이, 비교 프로세스(216)는 (232에서) 매치가 발견될 때, 추가적인 (그리고 더 고가의) 비교를 트리거하는 데 사용될 수 있으므로, 이 분야의 기술자는 (232에서의) 거짓 긍정 매치들과, 충분히 매칭되는 스트림들의 후속 처리의 비용을 어떻게 균형을 맞출지를 알고 이해할 것이다.
지금까지, 입력 스트림(S')을 이전에 처리된 단일 스트림(S)과 비교하고, 가능할 경우 매칭시키는 것에 대해 설명하였다. 일부 실시예들에서는 입력 스트림이 이전에 처리된 둘 이상의 스트림과 비교될 수 있다.
도 3a의 도면은 k개의 스트림(S1,..., Sk) 각각에 대해 하나씩의 스트림 서명인 복수(k)의 스트림 서명의 논리적 체계(logical organization; 300)를 나타낸다. 스트림 서명들 각각은 도 2a-2b를 참조하여 전술한 바와 같이 결정될 수 있다.
이제, 임의적인 입력 스트림(S)을 이러한 k개의 스트림 각각과 비교하는 프로세스가 도 3a-3b 및 4a-4b를 참조하여 설명된다. 하나의 스트림과 다수의 가능한 스트림을 비교하는 비교 프로세스는 입력 스트림 내의 다수의 스트림 서명에 대한 동기 포인트들을 발견할 수 있으며, 둘 이상의 서명에 대한 매칭 <동기 포인트, 해시 값> 쌍들도 발견할 수 있다. 요컨대, 프로세스는 바람직하게 그가 k개의 스트림(S1...Sk) 각각에 대해 발견하는 매칭 <동기 포인트, 해시 값> 쌍들의 수를 추적하고, (전술한 바와 같은 충분성에 대한 소정의 사전 결정된 임계치에 기초하여) 입력 스트림(S)과 k개의 스트림 중 제1 스트림 사이의 매치를 충분한 매치들로서 선언한다.
도 4a-4b의 흐름도를 참조하면, (400에서) 처리할 스트림(S)이 더 존재하는 경우, (402에서) 처리가 계속되어 스트림들(S1...Sk) 중 하나의 스트림에 대한 동기 포인트들 중 적어도 하나에 대응하는 S 내의 동기 포인트(SP)를 찾는다. 흐름도에서, 스트림들(S1...Sk)은 S'로 표시되는 스트림들의 세트로서 지시된다. (402에서) 동기 포인트가 발견되지 않으면, (400에서) 처리가 계속되어 입력 스트림(S)의 임의의 나머지 부분을 처리한다. (402에서) 스트림들(S1...Sk)(즉, 스트림들의 세트(S')) 중 임의의 스트림에 대응하는 동기 포인트(SP)가 S에서 발견되면, (404에서) 처리가 계속되어, 발견된 동기 포인트(SP)와 관련된 비트 블록(B)에 대한 대응하는 서명 H(B)를 결정한다.
이어서, (406에서) 서명 쌍 <SP, H(B)>가 동기 포인트(SP)와 관련된 S' 내의 모든 스트림들에 대한 서명들과 비교된다(여기서, SP는 스트림들(S1...Sk) 중 적어도 하나의 스트림 내의 동기 포인트들 중 적어도 하나에 대응하는, S 내에서 발견된 동기 포인트이고, H(B)는 동기 포인트(SP)에 대응하는 비트 블록(B)의 서명이다). 도 3a를 다시 참조하면, 스트림들(S1...Sk) 각각에 대한 스트림 서명이 저장되고, 프로세스에 이용 가능하며, 따라서 <동기 포인트, 서명> 쌍들이 체크될 수 있다.
(408에서) S' 내의 임의의 스트림에 대한 쌍 <SP, H(B)>에 대해 매칭 서명 쌍이 발견되지 않으면, (400에서) 처리가 계속되어 입력 스트림(S)의 임의의 나머지 부분을 처리한다. (408에서) 하나 이상의 매칭 쌍 <SP, H(B)>가 발견되면, (410에서) 처리가 계속되어, S' 내의 모든 매칭 스트림들에 대한 <SP, H(B)> 쌍에 대한 카운트를 갱신한다.
(410에서) 카운트가 갱신되면, 프로세스는 (412에서) S' 내의 스트림들 중 임의의 스트림(Sm)이 충분한 매칭 쌍들을 갖는지를 결정한다. (412에서) S' 내의 어떠한 스트림도 충분한 매칭 쌍을 갖지 않는 것으로 결정되면, (400에서) 처리가 계속되어 입력 스트림(S)의 임의의 나머지 부분을 처리한다. 임의의 스트림(Sm)이 충분한 매칭 쌍들을 갖는 경우, (414에서) 처리가 완료되며, 입력 스트림(S)은 충분한 매칭 쌍들을 가진 스트림(들)과 매칭되는 것으로 간주된다.
전술한 프로세스는 입력 스트림(S)이 세트(S') 내의 둘 이상의 스트림과 매칭되게 할 수 있다는 것을 알아야 한다.
일부 구현들에서, 데이터 구조(302)(도 3b)는 각각의 스트림 서명에 대한 체크 리스트를 유지하며, 따라서 프로세스는 <동기 포인트, 서명> 쌍이 해당 스트림에 대해 매칭될 때마다 마크 오프(mark off)(또는 체크)할 수 있다. 그러한 리스트는 시스템이 해당 스트림에 대한 매칭 쌍들의 수를 결정(예로서, 카운트)하는 것을 가능하게 한다. 이 분야의 기술자들은, 본 설명을 읽을 때, 체크 리스트가 예를 들어 대응하는 <동기 포인트, 서명> 쌍들 각각에 대해 하나의 비트를 갖는 비트 맵을 포함하는 임의의 수의 방식으로 구현될 수 있다는 것을 인식하고 이해할 것이다. 입력 스트림의 처리의 시작에서, 체크 리스트 내의 모든 비트들이 0으로 설정되며, 매치들이 발견될 때, 대응하는 비트 값들이 1로 설정된다. 이어서, 스트림(Sj)에 대한 비트맵 체크 리스트 내의 비트들의 합은 그 스트림(Sj)에 대한 입력 스트림 내의 매칭 쌍들의 수를 제공할 것이다. 알 수 있듯이, 상이한 그리고/또는 다른 스킴들을 이용하여 매치들의 수를 추적할 수 있다.
이 분야의 기술자들은, 본 설명을 읽을 때, 2개의 스트림에 대한 "매치"(또는 "매칭")라는 용어의 사용이 그들이 동일하다는 것을 반드시 암시할 필요는 없다는 것을 인식하고 이해할 것이다. 2개의 스트림은 그러한 스트림들에 대한 충분한 수의 <동기 포인트, 서명> 쌍들이 동일한 경우에 매칭된다.
전술한 바와 같이, 이 분야의 기술자들은, 본 설명을 읽을 때, 충분성에 대한 상이한 척도들을 이용하여 2개의 스트림이 충분한 매치들을 갖는지를 결정할 수 있다는 것을 인식하고 이해할 것이다. 일부 실시예들에서는 70% 매치가 충분한 것으로 간주되는 반면, 다른 실시예들에서는 더 높은 매치들(최대 100%)이 요구될 수 있다. 이 분야의 기술자들은, 본 설명을 읽을 때, 예를 들어 프로세스의 응용 및 거짓 긍정 매치들에 대한 허용 한계에 기초하여 매칭 충분성의 척도를 어떻게 선택할지를 인식하고 이해할 것이다. 전술한 바와 같이, 일부 응용들에서는, 본 명세서에서 설명되는 프로세스에 의해 2개의 스트림이 매칭되는 것이 발견되면, 추가 검사를 이용하여 스트림들이 매칭되는지를 결정할 수 있다.
데이터 구조들 및 구현들
이 분야의 기술자들은, 본 설명을 읽을 때, 다양한 최적화들이 매칭 프로세스의 구현에 적용될 수 있다는 것을 인식하고 이해할 것이다. 데이터 구조들은 바람직하게는 다음과 같아야 한다:
- 확장성: 초기에 수백 내지 수백만 개의 엔트리를 처리해야 하며, 옵션으로서, 필요한 경우에는 더 늘어나야 한다.
- 메모리 효율: 가능한 한 적은 메모리를 사용해야 한다.
- 검색 효율: 주어진 패턴에 대한 검색이 O(n)을 초과하지 않아야 한다.
스트림 매칭 프로세스의 구현들을 위한 예시적인 데이터 구조가 도 5와 관련하여 설명된다. 이 예에서는, 각각의 동기 포인트가 6 내지 8 바이트의 시퀀스이고, 각각의 지문이 2 바이트 길이의 값인 것으로 가정한다. 추가적인 (옵션인) 데이터도 데이터 구조들 내에 저장될 수 있다. 도 5를 참조하면, (동기 지문 채취 데이터 구조(Synch fingerprinting data structure; SFDS)로서 지칭되는) 데이터 구조는 다음과 같은 어레이들의 세트를 포함한다:
- 행 1: 256 비트 길이의 어레이로서, 각각의 비트는 ASCII 코드에(동기 포인트 내에 나타날 수 있는 코드에) 대응한다.
- 행 2: 2562 비트 길이의 어레이로서, 256 비트는 행 1 내의 비트들 각각과 관련된다.
- 행 3: 2563 비트 길이의 어레이로서, 256 비트는 행 3 내의 비트들 각각과 관련된다.
- 행 4: 행 3 내의 특정 엔트리들에 대응하는 트리들의 리스트.
초기화 프로세스에서, 동기 포인트들(6-8 바이트의 시퀀스) 및 지문들(추가적인 옵션인 데이터 세트를 갖는 2 바이트 길이의 해시 값)의 쌍들이 아래와 같이 데이터 구조 내에 저장된다:
1. 동기 바이트들 중 제1 바이트는 행 1 내의 관련 비트를 (아직 설정되지 않은 경우에) 설정할 것이다.
2. 동기 바이트들 중 제2 바이트는 행 1에서 설정된 비트와 관련된 행 2의 256 비트 내의 관련 비트를 (아직 설정되지 않은 경우에) 설정할 것이다.
3. 동기 바이트들 중 제3 바이트는 행 2에서 설정된 비트와 관련된 행 3의 256 비트 내의 관련 비트를 (아직 설정되지 않은 경우에) 설정할 것이다.
4. 동기 바이트들의 나머지는 단계 3에서 설정된 비트에 대응하는 트리에 저장된다. (트리는 아직 존재하지 않는 경우에 생성될 것이다.)
5. 지문 및 임의의 추가 데이터가 위의 단계 4로부터의 트리의 관련 리프(leaf)에 연결된다.
아래의 예는 (도 5에서) 전술한 예시적인 데이터 구조들의 사용을 보여준다. 이제, 도 6a-6c의 도면들을 참조하여, 대응하는 지문 값 0x23a9를 갖는 동기 포인트 SP1 = "2, 254, 1, A, A, C"(이 패턴은 ASCII로 나타남)를 구비하는 스트림을 고려한다. 이것은 동기 포인트 SP1과 관련된 비트 블록의 해시가 0x23a9라는 것을 의미한다는 것을 알 것이다. 이 예에 대해, 스트림은 1000의 스트림 ID 및 5의 동기 인덱스를 갖는 것으로 가정한다.
이 쌍 <"2, 254, 1, A, A, C", 0x23a9>는 아래와 같이 데이터 구조에 추가될 수 있다:
1. 동기 포인트 내의 제1 문자는 "2"이며, 따라서 행 1 내의 비트 2를 1로 설정한다.
2. 동기 포인트 내의 제2 문자는 254이며, 따라서 행 1의 비트 2에 대응하는 행 2의 256 비트 중의 비트 254를 1로 설정한다. 즉, 행 2[2][254]를 1로 설정한다.
3. 동기 포인트 내의 제3 문자는 1이며, 따라서 단계 2에서 설정된 비트에 대응하는 행 3의 256 비트 중 제1 비트를 설정한다. 즉, 행 3[2, 254][1]을 1로 설정한다.
4. 단계 3에서 설정된 비트가 그에 대응하는 트리를 이미 갖고 있으며, 그 트리가 이미 'A'를 제1 문자로서 갖고 있는 것으로 가정하면, 'A'(동기 포인트 내의 제4 문자)와 관련된 것은 아무것도 없다.
5. 동기 포인트 내의 제5 문자도 'A'이며, 이것을 트리에 제2 문자로서 추가한다.
6. 동기 포인트 내의 제6 문자는 'C'이며, 따라서 이것을 트리에 제3 문자로서 추가하고, 그 아래에 새로운 빈 리프를 생성한다.
7. 지문 값 (Ox23a9) 및 추가 데이터(스트림 ID 1000 및 동기 인덱스 5)를 레코드에 저장하고, 이를 단계 6에서 생성된 리프와 연관시킨다.
(전술한 바와 같이) 데이터 구조들이 셋업되면, 예를 들어 도 6a-6c를 참조하여 설명된 바와 같이 입력 스트림이 처리될 수 있다. 매칭 프로세스는 2개의 보조 데이터 구조, 즉 매치 동기 리스트(MSL) 데이터 구조(도 6b) 및 벡터들의 매치 서명 리스트(MSLoV) 데이터 구조(도 6c)를 사용한다.
매치 동기 리스트(MSL) 구조는 최대 n개의 엔트리를 갖는 리스트이다(여기서, n은 동기의 길이이다). 이 예에서, 동기 길이는 8이고, MSL은 8개의 엔트리를 갖는다. 리스트는 처리되고 있는 동기들의 주소들(SFDS, 도 5)을 유지한다. 벡터의 엔트리 i는 동기의 주소를 유지하며, 그에 대해 처음 i 바이트가 SFDS 내의 동기와 매칭되었고 그의 (i+1) 번째 바이트는 아직 비교되지 않았다. -1의 값은 해당 길이 내에 "매치가 없음"을 나타낸다.
벡터들의 매치 서명 리스트(MSLoV) 구조는 벡터들의 리스트이다. MSLoV 리스트 내의 각각의 벡터는 주어진 스트림의 동기들 및 그 스트림의 스트림 ID와 매칭되는 동기들의 리스트를 유지한다. 벡터의 j 번째 엔트리는 그 스트림의 동기와 매칭되는 것으로 밝혀진 j 번째 동기의 (SFDS로부터 취해진) 동기 인덱스를 유지한다.
이러한 데이터 구조들을 이용하는 검색 흐름은 다음과 같다:
1. 새로운 패킷이 판독될 때마다, 그 패킷 내의 모든 바이트들이 바이트 단위로 스캐닝된다. 각각의 바이트는 SFDS의 행 1 내의 바이트들과 비교된다. 매치가 존재하는 경우, MSL의 엔트리 1은 SFDS의 행 1 내의 관련 엔트리와 관련된 SFDS의 행 2의 부분으로 설정된다.
2. 매치를 가진 바이트에 이어지는 바이트가 여러 번 비교된다. 이전 바이트가 매치 내의 i 번째인 것으로 가정하면, 현재 바이트는 i번 체크될 것이다. (체크들은 아래의 설명의 역순으로 행해진다. 즉, 먼저 단계 e에서의 체크가 행해지고, 이어서 d에서의 체크가 행해지고, 기타 등등이며, 마지막 체크는 단계 a에서 설명되는 체크이다):
a. (단계 1에서 설명된 바와 같은) 매치 내의 첫 번째
b. MSL의 엔트리 1에 의해 지시되는 부분적 동기로부터 시작되는 매치 내의 제2 바이트 - 매치는 MSL의 엔트리 1에 의해 지시되는 SFDS의 행 2의 관련 부분에 대해 체크된다. 매치가 발견되면, 엔트리 1이 "-1"로 설정되고, 엔트리 2는 (SFDS의 행 2 내의 관련 엔트리인) 지금까지 발견된 부분적 매치의 주소로 갱신된다.
c. MSL의 엔트리 2에 의해 지시되는 부분적 동기로부터 시작되는 매치 내의 제3 바이트 - 매치는 MSL의 엔트리 1에 의해 지시되는 SFDS의 행 3의 관련 부분에 대해 체크된다. 매치가 발견되면, 엔트리 2가 "-1"로 설정되고, 엔트리 3은 (SFDS의 행 2 내의 관련 엔트리인) 지금까지 발견된 부분적 매치의 주소로 갱신된다.
d. ...
e. MSL의 엔트리 i-1에 의해 지시되는 부분적 동기로부터 시작되는 매치 내의 제i 바이트 - 매치는 MSL의 엔트리 i-1에 의해 지시되는 SFDS의 관련 부분에 대해 체크된다. 매치가 발견되면, 엔트리 i-1이 "-1"로 설정되고, 엔트리 i는 (SFDS 내의 관련 엔트리인) 지금까지 발견된 부분적 매치의 주소로 갱신된다.
3. 완전한 동기가 발견될 때마다(즉, 단계 2에서의 i가 완전한 동기의 길이와 동일하고, 단계 2.e가 성공적일 때마다), 지문이 계산된다. 계산된 지문은 MSL의 최종 엔트리 내의 SFDF 부분에 의해 지시되는 SFDF의 트리 리프들에 의해 지시되는 지문과 비교된다. 매칭 지문이 발견되면, 그의 스트림 ID 및 동기 인덱스가 취해지고, MSLoV가 아래와 같이 갱신된다:
a. MSLoV가 그 스트림 ID에 대한 벡터를 갖지 않는 경우, 새로운 벡터가 생성되고, MSLoV의 선두에 추가된다. 새로운 벡터의 스트림 ID는 SFDS로부터 취해진 스트림 ID로 설정된다. 새로운 벡터의 엔트리 1은 SFDS로부터 취해진 동기 인덱스로 설정된다.
b. MSLoV가 이미 그 스트림 ID에 대한 벡터를 갖고 있는 경우, 그의 첫 번째 빈 엔트리가 SFDS로부터 취해진 동기 인덱스로 설정된다.
c. 매칭 동기가 MSLoV 내에 여러 리프를 갖는 경우에, 위의 단계 a/b는 이러한 리프들 각각에 대해 개별적으로 수행된다는 점에 유의한다.
4. MSLoV 벡터 내의 인덱스들의 수가 주어진 양(예로서, 10개 중 8개)을 초과하면, 입력 흐름과, 그 벡터의 스트림 ID에 의해 ID가 저장된 스트림 사이의 매치가 정의된다.
5. 흐름의 사전 정의된 길이를 갖는 부분만이 동기들에 대해 검색된다는 점에 유의한다. 검색이 매칭 스트림의 식별을 갖는 해당 부분을 초과하는 경우, 알려지지 않은 스트림이 존재하는 것으로 가정되고, MSL 및 MSLoV 양자가 소거된다.
최종 예
이 분야의 기술자들은, 본 설명을 읽을 때, 본 명세서에서 설명되는 프로세스들을 구현하기 위해 상이한 그리고/또는 다른 데이터 구조들이 사용될 수 있다는 것을 인식하고 이해할 것이다. 사용되는 데이터 구조들과 관련하여 소정의 효율이 바람직하다는 것을 알아야 한다. 객관적으로, 데이터 구조는 동기 패턴들 각각과 관련된 지문들과 함께 최대 백만 개의 동기 포인트(각각 6-8 바이트)를 저장해야 한다. 설명되는 바와 같이, 데이터 구조는 바람직하게는 미리 오프라인으로 생성되지만(이것은 데이터의 초기 세트에 대해 준비될 것이고, 이어서 필요할 때마다 증대 갱신됨), 검색 자체는 실시간으로 행해질 것이다.
위의 예(도 6a-6c)에서 설명된 데이터 구조들을 이용하면, 백만 개의 동기 엔트리에 대해:
- 처음 3 바이트는 256개의 엔트리의 3개 라인 각각에 추가될 것이다(28의 3배는 1600만 개의 엔트리와 동일한 224와 동일하다). 다음 바이트들은 각각의 프리픽스의 최종 행에 고유하게 추가될 것이다(1% 미만이 동일한 프리픽스를 가질 것이고, 리스트 구조가 충분히 효율적일 것이며, 그렇지 않을 경우에는 상이한 동기 패턴이 새로운 추가된 스트림에 대해 고려될 수 있다).
- 새로운 동기의 추가는 오프라인으로 수행되고 그의 동기 길이의 순서이다.
- 데이터 구조 내의 동기에 대한 검색은 실시간으로 수행될 수 있으며, 동기 길이 O(1)의 순서이다.
패킷화된 데이터 스트림들
일부 예들에서, 데이터의 입력 스트림은 패킷화된 데이터의 형태를 가질 수 있다. 이것은 예를 들어 비교 처리가 라우터와 같은 장치에서 발생하는 경우에 발생할 수 있다. 그러한 경우에, 처리를 수행하는 장치는 처리를 수행하기 위해 둘 이상의 패킷으로부터의 페이로드 데이터를 버퍼링하는 것이 필요할 수 있다.
알려진 바와 같이, (TCP/IP 네트워크, 예를 들어 인터넷과 같은) 패킷 기반 네트워크에서는, 하나의 위치에서 다른 위치로 전송되는 데이터가 패킷화된다(다수의 패킷으로 분할된다). 도 7을 참조하면, 통상적인 패킷은 주소 정보 및 페이로드를 포함한다. 페이로드는 전송될 데이터를 포함하며, 주소 정보는 네트워크가 패킷을 그의 목적지로 라우팅하는 것을 가능하게 하는 정보를 포함한다. 이 분야의 기술자들은, 본 설명을 읽을 때, 많은 형태의 패킷화가 사용될 수 있고, 패킷들의 형태 및 타입이 본 발명을 한정하지 않는다는 것을 인식하고 이해할 것이다. 게다가, 일부 네트워크들은 다수의 레벨의 프로토콜들을 사용할 수 있으며, 따라서 페이로드 자체가 다른 주소 정보를 포함하는 패킷일 수 있다는 것을 알아야 한다. 사용되는 프로토콜(들)에 관계없이, 이 분야의 기술자들은 특정 패킷으로부터 데이터 아이템에 대응하는 데이터를 어떻게 추출할지를 알 것이다.
패킷화의 종류가 미리 알려지면, 각각의 동기 포인트가 단일 패킷의 페이로드 내에 맞도록 동기 포인트들을 선택하는 것이 바람직하다. 그러나, 이것은 가능하지 않을 수 있으므로, 전술한 처리(동기 포인트들을 찾은 후에 그들의 대응 비트 블록을 처리하는 것)를 수행하기 위해 다수의 순차적인 패킷의 페이로드들을 획득하고 버퍼링하는 것이 필요할 수 있다.
이 분야의 기술자들은, 본 설명을 읽을 때, 설명되는 프로세스 및 시스템이 현재 사용되는 접근법들에 비해 2개의 콘텐츠 스트림 간의 비교를 훨씬 더 빠르고 더 효율적인 방식으로 지원한다는 것을 인식하고 이해할 것이다. 게다가, 본 명세서에서 설명되는 접근법은 암호화된 콘텐츠를 처리할 수 있다.
컴퓨팅
상기 방법들을 구현하는 프로그램들(및 다른 타입의 데이터)은 다양한 매체(예로서, 컴퓨터 판독 가능 매체)를 이용하여 다수의 방식으로 저장 및 전송될 수 있다. 하드와이어드 회로 또는 맞춤형 하드웨어가 다양한 실시예들의 프로세스들을 구현할 수 있는 소프트웨어 명령어들 중 일부 또는 전부 대신에 또는 일부 또는 전부와 조합하여 사용될 수 있다. 따라서, 소프트웨어만이 사용되는 대신에, 하드웨어와 소프트웨어의 다양한 조합들이 사용될 수 있다.
도 8은 본 발명의 실시예들을 구현하고 실행할 수 있는 컴퓨터 시스템(800)의 개략도이다.
본 예에 따르면, 컴퓨터 시스템(800)은 버스(801)(즉, 상호접속), 적어도 하나의 프로세서(802), 적어도 하나의 통신 포트(803), 메인 메모리(804), 이동식 저장 매체(805), 판독 전용 메모리(806) 및 대용량 저장 장치(807)를 포함한다.
프로세서(들)(802)는 인텔® 이타늄® 또는 이타늄 2® 프로세서(들), AMD® 옵테론® 또는 애슬론 MP® 프로세서(들), 또는 프로세서들의 모토롤라® 라인들 등과 같은, 그러나 이에 한정되지 않는 임의의 공지 프로세서일 수 있다. 통신 포트(들)(903)는 모뎀 기반 다이얼-업 접속과 함께 사용하기 위한 RS-232 포트, 10/100 이더넷 포트, 구리 또는 섬유를 이용하는 기가비트 포트, 또는 USB 포트 등 중 임의의 포트일 수 있다. 통신 포트(들)(803)는 근거리 네트워크(LAN), 광역 네트워크(WAN), CDN, 또는 컴퓨터 시스템(800)이 접속하는 임의의 네트워크와 같은 네트워크에 따라 선택될 수 있다. 컴퓨터 시스템(800)은 입출력(I/O) 포트(809)를 통해 주변 장치들(예로서, 디스플레이 스크린(830), 입력 장치(들)(816))과 통신할 수 있다.
메인 메모리(804)는 랜덤 액세스 메모리(RAM)일 수 있거나, 이 분야에 널리 알려진 임의의 다른 동적 저장 장치(들)일 수 있다. 판독 전용 메모리(806)는 프로세서(802)에 대한 명령어들과 같은 정적 정보를 저장하기 위한 프로그래밍 가능 판독 전용 메모리(PROM) 칩들과 같은 임의의 정적 저장 장치(들)일 수 있다. 대용량 저장 장치(807)는 정보 및 명령어들을 저장하는 데 사용될 수 있다. 예를 들어, 하드 디스크들, 예를 들어 소형 컴퓨터 직렬 인터페이스(SCSI) 드라이브들의 어댑터® 패밀리, 광 디스크, 디스크들의 어레이, 예를 들어 독립 디스크들의 중복 어레이(RAID), 예를 들어 RAID 드라이브들의 어댑터® 패밀리, 또는 임의의 다른 대용량 저장 장치들이 사용될 수 있다.
버스(801)는 프로세서(들)(802)와 다른 메모리, 저장 및 통신 블록들을 통신적으로 결합한다. 버스(801)는 사용되는 저장 장치 등에 따라 PCI/PCI-X, SCSI, 유니버설 직렬 버스(USB) 기반 시스템 버스(또는 기타)일 수 있다. 이동식 저장 매체(805)는 임의의 종류의 외부 하드 드라이브, 플로피 드라이브, IOMEGA® 짚 드라이브, 컴팩트 디스크 판독 전용 메모리(CD-ROM), 컴팩트 디스크 - 재기록 가능(CD-RW), 디지털 비디오 디스크 - 판독 전용 메모리(DVD-ROM) 등일 수 있다.
본 발명의 실시예들은 프로세스를 수행하도록 컴퓨터(또는 다른 전자 장치들)를 프로그래밍하는 데 사용될 수 있는 명령어들을 저장한 기계 판독 가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품으로서 제공될 수 있다. 본 명세서에서 사용될 때, 용어 "기계 판독 가능 매체"는 컴퓨터, 프로세서 또는 유사한 장치에 의해 판독될 수 있는 데이터(예로서, 명령어들, 데이터 구조들)를 제공하는 것과 관련된 임의의 매체, 복수의 매체 또는 상이한 매체들의 조합을 지칭한다. 그러한 매체는 비휘발성 매체, 휘발성 매체 및 송신 매체를 포함하지만 이에 한정되지 않는 다양한 형태를 취할 수 있다. 비휘발성 매체는 예를 들어 광 또는 자기 디스크들 및 다른 영구 메모리를 포함한다. 휘발성 매체는 통상적으로 컴퓨터의 메인 메모리를 구성하는 동적 랜덤 액세스 메모리를 포함한다. 송신 매체는 프로세서에 결합되는 시스템 버스를 포함하는 와이어들을 포함하여, 동축 케이블, 구리 와이어 및 광섬유를 포함한다. 송신 매체는 음파, 광파 및 전자기 방사, 예를 들어 무선 주파수(RF) 및 적외선(IR) 데이터 통신 동안 생성되는 것들을 포함하거나 운반할 수 있다.
기계 판독 가능 매체는 플로피 디스켓, 광 디스크, CD-ROM, 광자기 디스크, ROM, RAM, 소거 및 프로그래밍 가능 판독 전용 메모리(EPROM), 전기적으로 소거 및 프로그래밍 가능한 판독 전용 메모리(EEPROM), 자기 또는 광학 카드, 플래시 메모리 또는 전자 명령어들을 저장하는 데 적합한 다른 타입의 매체/기계: 판독 가능 매체를 포함할 수 있지만 이에 한정되지 않는다. 더욱이, 본 발명의 실시예들은 컴퓨터 프로그램 제품으로서 다운로드될 수도 있으며, 프로그램은 반송파 또는 다른 전파 매체 내에 구현된 데이터 신호들에 의해 통신 링크(예로서, 모뎀 또는 네트워크 접속)을 통해 원격 컴퓨터로부터 요청 컴퓨터로 전송될 수 있다.
다양한 형태의 컴퓨터 판독 가능 매체가 데이터(예로서, 명령어들의 시퀀스들)를 프로세서로 운반하는 것과 관련될 수 있다. 예를 들어, 데이터는 (i) RAM으로부터 프로세서로 전달되고, (ii) 무선 송신 매체를 통해 운반되고, (iii) 다양한 포맷들, 표준들 또는 프로토콜들에 따라 포맷팅 및/또는 전송되고/되거나, (iv) 이 분야에 공지된 임의의 다양한 방식으로 암호화될 수 있다.
컴퓨터 판독 가능 매체는 방법들을 수행하는 데 적합한 프로그램 요소들을 (임의의 적절한 포맷으로) 저장할 수 있다.
도시된 바와 같이, 메인 메모리(804)는 본 명세서에서 설명되는 바와 같은 기능을 지원하는 애플리케이션(850-1)으로 인코딩된다(애플리케이션(850-1)은 예를 들어 초기 셋업(200) 또는 비교 애플리케이션(216)일 수 있다). 애플리케이션(850-1)(및/또는 본 명세서에서 설명되는 바와 같은 다른 자원들)은 본 명세서에서 설명되는 상이한 실시예들에 따른 기능의 처리를 지원하는 데이터 및/또는 논리 명령어들과 같은 소프트웨어 코드(예로서, 메모리 또는 다른 컴퓨터 판독 가능 매체, 예로서 디스크에 저장되는 코드)로서 구현될 수 있다.
일 실시예의 동작 동안, 프로세서(들)(802)는 애플리케이션(850-1)의 논리 명령어들을 런칭, 구동, 실행, 해석 또는 수행하기 위해 버스(801)를 이용하여 메인 메모리(804)에 액세스한다. 애플리케이션(850-1)의 실행은 프로세스(850-2) 내에 처리 기능을 생성한다. 즉, 프로세스(950-2)는 컴퓨터 시스템(800) 내의 프로세서(들)(802) 내에서 또는 상에서 수행되는 애플리케이션(850-1)의 하나 이상의 부분을 나타낸다.
본 명세서에서 설명되는 바와 같은 동작들을 수행하는 프로세스(850-2)에 더하여, 본 발명의 다른 실시예들은 애플리케이션(850-1) 자체(즉, 실행되지 않거나 수행되지 않는 논리 명령어들 및/또는 데이터)를 포함한다는 점에 유의해야 한다. 애플리케이션(850-1)은 디스크, 하드 디스크와 같은 컴퓨터 판독 가능 매체(예로서, 저장소) 상에 또는 광학 매체 내에 저장될 수 있다. 다른 실시예들에 따르면, 애플리케이션(850-1)은 메모리 타입 시스템 내에, 예로서 펌웨어, 판독 전용 메모리(ROM) 내에, 또는 이 예에서와 같이 메인 메모리(804) 내에 (예로서, 랜덤 액세스 메모리, 즉 RAM 내에) 실행 가능 코드로서 저장될 수도 있다. 예를 들어, 애플리케이션(850-1)은 이동식 저장 매체(805), 판독 전용 메모리(806) 및/또는 대용량 저장 장치(807) 내에 저장될 수도 있다.
컴퓨터 시스템(800)에 의해 지원되는 예시적인 기능, 구체적으로 애플리케이션(850-1)과 관련된 기능은 도 2a-2d 및 4a-4b를 참조하여 위에서 설명되었다.
이 분야의 기술자들은 컴퓨터 시스템(800)이 다른 프로세스들 및/또는 소프트웨어 및 하드웨어 컴포넌트들, 예로서 하드웨어 자원들의 할당 및 사용을 제어하는 운영 체제를 포함할 수 있다는 것을 이해할 것이다.
본 명세서에서 설명되는 바와 같이, 본 발명의 실시예들은 다양한 단계들 또는 동작들을 포함한다. 이러한 다양한 단계들은 하드웨어 컴포넌트들에 의해 수행될 수 있거나, 명령어들로 프로그래밍된 범용 또는 특수 목적 프로세서가 동작들을 수행하게 하는 데 사용될 수 있는 기계 실행 가능 명령어들 내에 구현될 수 있다. 대안으로서, 단계들은 하드웨어, 소프트웨어 및/또는 펌웨어의 조합에 의해 수행될 수 있다. 용어 "모듈"은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 임의의 조합을 포함할 수 있는 독립적인 기능 컴포넌트를 지칭한다.
이 분야의 기술자는, 본 설명을 읽을 때, 장치의 실시예들이 설명되는 프로세스의 (반드시 전부는 아닌) 일부를 수행하도록 동작 가능한 컴퓨터/컴퓨팅 장치를 포함할 수 있다는 것을 쉽게 알고 이해할 것이다.
프로그램 또는 데이터 구조를 저장하는 컴퓨터 판독 가능 매체의 실시예들은 실행시에 프로세서로 하여금 설명되는 프로세스의 (반드시 전부는 아닌) 일부를 수행하게 할 수 있는 프로그램을 저장하는 컴퓨터 판독 가능 매체를 포함한다.
본 명세서에서 프로세스가 설명되는 경우, 이 분야의 기술자들은 프로세스가 어떠한 사용자 개입 없이도 동작할 수 있다는 것을 알 것이다. 다른 실시예에서, 프로세스는 소정의 사람의 개입을 포함한다(예로서, 단계가 사람에 의해 또는 그의 도움으로 수행된다).
청구항들에서 단어 "제1" 및 "제2"는 순차적 또는 수치적 한정을 나타내는 것이 아니라 구별 또는 식별을 위해 사용된다는 것을 알아야 한다. 유사하게, "(a)", "(b)" 등과 같은) 문자 또는 숫자 라벨들의 사용은 임의의 순차적 또는 수치적 한정 또는 배열을 나타내는 것이 아니라 구별 및/또는 식별을 돕기 위해 사용된다.
본 발명은 가장 실용적이고 바람직한 실시예들로서 현재 간주되고 있는 것과 관련하여 설명되었지만, 본 발명은 개시되는 실시예로 한정되는 것이 아니라, 첨부된 청구항들의 사상 및 범위 내에 포함되는 다양한 변경들 및 균등한 배열들을 포함하는 것을 의도한다는 것을 이해해야 한다.

Claims (19)

  1. 소프트웨어와 하드웨어의 조합으로 구현되는 컴퓨터 구현 방법으로서,
    데이터 아이템 내의 복수의 동기 포인트(synch point)를 결정하는 단계 - 상기 데이터 아이템은 임의적인 비트들의 시퀀스로 구성되고, 각각의 동기 포인트는 상기 데이터 아이템 내의 비트들의 시퀀스로 구성됨 -;
    상기 복수의 동기 포인트 각각에 대해, 상기 데이터 아이템 내의 대응하는 비트들의 블록을 결정하는 단계;
    비트들의 블록 각각에 대해, 상기 비트들의 블록에 해시 함수 또는 메시지 다이제스트 함수를 적용함으로써 대응하는 블록 서명을 결정하는 단계; 및
    상기 복수의 동기 포인트 각각을 상기 대응하는 비트들의 블록의 상기 대응하는 블록 서명과 연관시킴으로써 데이터 아이템 서명을 형성하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    각각의 특정 동기 포인트의 상기 대응하는 비트들의 블록은 상기 특정 동기 포인트에 바로 인접하는 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 해시 함수는 SHA 및 MD5를 포함하는 함수들로부터 선택되는 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    각각의 동기 포인트는 32 비트로 구성되는 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    비트들의 블록 각각은 256 바이트로 구성되는 방법.
  6. 장치로서,
    제1항 내지 제5항 중 어느 한 항의 방법을 구현하기 위한 하드웨어 및 소프트웨어
    를 포함하는 장치.
  7. 소프트웨어와 하드웨어의 조합으로 구현되는 컴퓨터 구현 방법으로서,
    (A) 제1 데이터 아이템에 대한 제1 데이터 아이템 서명을 획득하는 단계 - 상기 제1 데이터 아이템 서명은 상기 제1 데이터 아이템 내의 복수의 동기 포인트와 대응하는 복수의 블록 서명 간의 연관성을 포함함 -;
    (B) 제2 데이터 아이템 내에서 상기 복수의 동기 포인트 중 한 동기 포인트(a synch point)를 발견하려고 시도하는 단계;
    (C) 상기 복수의 동기 포인트 중 한 동기 포인트가 상기 제2 데이터 아이템 내에서 발견되는 경우,
    (C)(1) 상기 제2 데이터 아이템 내의 대응하는 비트들의 블록의 블록 서명을 결정하는 단계 - 상기 블록 서명은 상기 제2 데이터 아이템 내의 상기 대응하는 비트들의 블록에 해시 함수 또는 메시지 다이제스트 함수를 적용함으로써 결정됨 -;
    (C)(2) 상기 제2 데이터 아이템으로부터의 상기 동기 포인트 및 상기 대응하는 블록 서명이 상기 제1 데이터 아이템 서명 내의 동기 포인트 및 블록 서명에 대응하는지의 여부를 확인하는 단계; 및
    (C)(3) 상기 제2 데이터 아이템으로부터의 상기 동기 포인트 및 상기 대응하는 블록 서명이 상기 제1 데이터 아이템 서명 내의 동기 포인트 및 블록 서명에 대응할 때, 상기 대응을 지시하는 정보를 유지하는 단계;
    (D) 상기 제2 데이터 아이템의 적어도 일부가 처리되지 않고 남아 있는 동안에, 상기 제2 데이터 아이템으로부터의 사전 결정된 수의 동기 포인트들 및 대응하는 블록 서명들이 상기 제1 데이터 아이템 서명 내의 동기 포인트들 및 대응하는 블록 서명들과 매칭될 때까지 단계 (B) 및 (C)를 반복하는 단계; 및
    (E) 상기 제2 데이터 아이템으로부터의 상기 사전 결정된 수의 동기 포인트들 및 대응하는 블록 서명들이 상기 제1 데이터 아이템 서명 내의 동기 포인트들 및 대응하는 블록 서명들과 매칭될 때, 상기 제1 데이터 아이템과 상기 제2 데이터 아이템 간의 매치를 지시하는 단계
    를 포함하는 방법.
  8. 제7항에 있어서,
    단계 (B) 및 (C)는 상기 제2 데이터 아이템의 다수의 상이한 부분에 대해 병렬로 반복되는 방법.
  9. 제7항 또는 제8항에 있어서,
    (F) (E)에서 결정되는 바와 같은, 상기 제1 데이터 아이템과 상기 제2 데이터 아이템 간의 매치의 경우에, 상기 제2 데이터 아이템에 대한 액세스를 선택적으로 거절하는 단계를 더 포함하는 방법.
  10. 제7항 내지 제9항 중 어느 한 항에 있어서,
    (G) (E)에서 결정되는 바와 같은, 상기 제1 데이터 아이템과 상기 제2 데이터 아이템 간의 매치의 경우에, 상기 제2 데이터 아이템에 대한 정보를 유지하는 단계를 더 포함하는 방법.
  11. 제10항에 있어서,
    상기 처리의 적어도 일부는 특정 장치에서 발생하며, 유지되는 상기 정보는 상기 특정 장치에 대한 정보를 포함하는 방법.
  12. 제11항에 있어서,
    상기 장치는 네트워크 내의 라우터인 방법.
  13. 제7항 내지 제12항 중 어느 한 항에 있어서,
    복수의 패킷을 획득하는 단계; 및
    상기 복수의 패킷으로부터 페이로드 정보를 추출하여, 상기 제2 데이터 아이템의 적어도 일부를 획득하는 단계
    를 더 포함하는 방법.
  14. 제7항 내지 제13항 중 어느 한 항에 있어서,
    (H) (E)에서 결정되는 바와 같은, 상기 제1 데이터 아이템과 상기 제2 데이터 아이템 간의 매치의 경우에, 상기 제2 데이터 아이템에 대해 추가적인 체크를 행하여, 상기 제2 데이터 아이템이 상기 제1 데이터 아이템과 동일한지를 결정하는 단계를 더 포함하는 방법.
  15. 제7항 내지 제14항 중 어느 한 항에 있어서,
    각각의 특정 동기 포인트의 상기 대응하는 비트들의 블록은 상기 특정 동기 포인트에 바로 인접하는 방법.
  16. 제7항 내지 제15항 중 어느 한 항에 있어서,
    상기 해시 함수는 SHA 및 MD5를 포함하는 함수들로부터 선택되는 방법.
  17. 제7항 내지 제16항 중 어느 한 항에 있어서,
    각각의 동기 포인트는 32 비트로 구성되는 방법.
  18. 제7항 내지 제17항 중 어느 한 항에 있어서,
    비트들의 블록 각각은 256 바이트로 구성되는 방법.
  19. 소프트웨어와 하드웨어의 조합으로 구현되는 컴퓨터 구현 방법으로서,
    (A) 복수의 데이터 아이템 각각에 대한 적어도 하나씩의 서명인 복수의 데이터 아이템 서명을 획득하는 단계 - 상기 복수의 데이터 아이템의 각각의 특정 데이터 아이템에 대한 상기 데이터 아이템 서명은 상기 특정 데이터 아이템 내의 복수의 동기 포인트와 상기 특정 데이터 아이템에 대한 대응하는 복수의 블록 서명 간의 연관성을 포함함 -;
    (B) 제2 데이터 아이템 내에서 상기 복수의 데이터 아이템 서명의 동기 포인트를 발견하려고 시도하는 단계;
    (C) 상기 복수의 데이터 아이템 서명의 동기 포인트가 상기 제2 데이터 아이템 내에서 발견되는 경우,
    (C)(1) 상기 제2 데이터 아이템 내의 대응하는 비트들의 블록의 블록 서명을 결정하는 단계 - 상기 블록 서명은 상기 제2 데이터 아이템 내의 상기 대응하는 비트들의 블록에 해시 함수 또는 메시지 다이제스트 함수를 적용함으로써 결정됨 -;
    (C)(2) 상기 제2 데이터 아이템의 상기 동기 포인트 및 상기 대응하는 블록 서명이 상기 복수의 데이터 아이템 서명 중 임의의 데이터 아이템 서명 내의 동기 포인트 및 블록 서명에 대응하는지의 여부를 확인하는 단계; 및
    (C)(3) 상기 제2 데이터 아이템의 상기 동기 포인트 및 상기 대응하는 블록 서명이 상기 복수의 데이터 아이템 서명 중 하나 이상의 데이터 아이템 서명 내의 동기 포인트 및 블록 서명에 대응할 때, 상기 대응을 지시하는 정보를 유지하는 단계;
    (D) 상기 제2 데이터 아이템의 적어도 일부가 처리되지 않고 남아 있는 동안에, 상기 제2 데이터 아이템으로부터의 사전 결정된 수의 동기 포인트들 및 대응하는 블록 서명들이 상기 복수의 데이터 아이템 서명 중 적어도 하나 내의 동기 포인트들 및 대응하는 블록 서명들과 매칭될 때까지 단계 (B) 및 (C)를 반복하는 단계; 및
    (E) 상기 제2 데이터 아이템으로부터의 사전 결정된 수의 동기 포인트들 및 대응하는 블록 서명들이 상기 복수의 데이터 아이템의 제1 데이터 아이템 서명 내의 상기 사전 결정된 수의 동기 포인트들 및 블록 서명들과 매칭될 때, 상기 제1 데이터 아이템과 상기 제2 데이터 아이템 간의 매치를 지시하는 단계
    를 포함하는 방법.
KR1020147024179A 2012-02-29 2013-02-15 스트림 인식 및 필터링 KR20140131333A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201261604859P 2012-02-29 2012-02-29
US61/604,859 2012-02-29
US201261607021P 2012-03-06 2012-03-06
US61/607,021 2012-03-06
PCT/US2013/026264 WO2013130281A1 (en) 2012-02-29 2013-02-15 Stream recognition and filtering

Publications (1)

Publication Number Publication Date
KR20140131333A true KR20140131333A (ko) 2014-11-12

Family

ID=49083160

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147024179A KR20140131333A (ko) 2012-02-29 2013-02-15 스트림 인식 및 필터링

Country Status (8)

Country Link
US (2) US9703869B2 (ko)
EP (1) EP2820564B1 (ko)
JP (1) JP6340668B2 (ko)
KR (1) KR20140131333A (ko)
CN (1) CN104205089B (ko)
AU (1) AU2013226430A1 (ko)
TW (1) TWI594626B (ko)
WO (1) WO2013130281A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9444726B2 (en) * 2012-07-31 2016-09-13 At&T Intellectual Property I, L.P. Distributing communication of a data stream among multiple devices
US9491093B2 (en) 2012-07-31 2016-11-08 At&T Intellectual Property I, L.P. Distributing communication of a data stream among multiple devices
US9356980B2 (en) 2012-07-31 2016-05-31 At&T Intellectual Property I, L.P. Distributing communication of a data stream among multiple devices
US10567489B2 (en) * 2013-03-15 2020-02-18 Time Warner Cable Enterprises Llc System and method for seamless switching between data streams
FR3010606A1 (fr) * 2013-12-27 2015-03-13 Thomson Licensing Procede de synchronisation de metadonnees avec un document audiovisuel en utilisant des parties de trames et dispositif de production de telles metadonnees
CN114756520A (zh) * 2015-10-02 2022-07-15 谷歌有限责任公司 用于在计算系统中同步离线数据的方法和系统
US10437829B2 (en) * 2016-05-09 2019-10-08 Level 3 Communications, Llc Monitoring network traffic to determine similar content
CN108021580A (zh) * 2016-11-04 2018-05-11 广东亿迅科技有限公司 一种数据同步更新方法及其系统
JP2019047331A (ja) * 2017-09-01 2019-03-22 株式会社リコー データ生成装置、データ生成方法、プログラム及びデータ記録システム

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4658093A (en) 1983-07-11 1987-04-14 Hellman Martin E Software distribution system
EP0706686B1 (en) 1993-07-01 1998-10-14 Legent Corporation System and method for distributed storage management on networked computer systems
JP3865775B2 (ja) 1995-04-11 2007-01-10 キネテック インコーポレイテッド データ処理システムにおけるデータの識別
JP3312105B2 (ja) * 1997-02-05 2002-08-05 株式会社東芝 動画像インデックス生成方法および生成装置
US6807632B1 (en) 1999-01-21 2004-10-19 Emc Corporation Content addressable information encapsulation, representation, and transfer
US6717694B1 (en) * 1998-07-31 2004-04-06 Canon Kabushiki Kaisha Data transmission apparatus, system and method, and recording medium
US6574657B1 (en) 1999-05-03 2003-06-03 Symantec Corporation Methods and apparatuses for file synchronization and updating using a signature list
US6819337B2 (en) * 2000-06-28 2004-11-16 Sun Microsystems, Inc. Initializing a series of video routers that employ source-synchronous signaling
JP4219086B2 (ja) * 2000-12-21 2009-02-04 株式会社リコー 抄本データ作成方法、抄本データ作成装置、そのための装置、及び記録媒体
ATE504446T1 (de) * 2002-12-02 2011-04-15 Silverbrook Res Pty Ltd Totdüsenausgleich
JP2004234641A (ja) * 2003-01-08 2004-08-19 Kddi Corp コンテンツファイル制作者の認証方式およびそのプログラム
US7809154B2 (en) 2003-03-07 2010-10-05 Technology, Patents & Licensing, Inc. Video entity recognition in compressed digital video streams
US7373520B1 (en) * 2003-06-18 2008-05-13 Symantec Operating Corporation Method for computing data signatures
US7519726B2 (en) * 2003-12-12 2009-04-14 International Business Machines Corporation Methods, apparatus and computer programs for enhanced access to resources within a network
EP1721438B1 (en) * 2004-03-02 2010-09-08 Divinetworks Ltd. Server, method and system for caching data streams
JP4901164B2 (ja) * 2005-09-14 2012-03-21 ソニー株式会社 情報処理装置、情報記録媒体、および方法、並びにコンピュータ・プログラム
US8271403B2 (en) 2005-12-09 2012-09-18 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Method and apparatus for automatic comparison of data sequences using local and global relationships
US7627641B2 (en) 2006-03-09 2009-12-01 Watchguard Technologies, Inc. Method and system for recognizing desired email
JP5022025B2 (ja) 2006-12-27 2012-09-12 インターナショナル・ビジネス・マシーンズ・コーポレーション コンテンツのデータ・ストリームとメタデータを同期するための方法および装置。
JP2008211022A (ja) * 2007-02-27 2008-09-11 Toshiba Corp 不揮発性半導体記憶装置及びその製造方法
CN101796835B (zh) * 2007-07-02 2012-08-08 Lg电子株式会社 数字广播系统和数据处理方法
US8732236B2 (en) * 2008-12-05 2014-05-20 Social Communications Company Managing network communications between network nodes and stream transport protocol
US20090109840A1 (en) 2007-10-31 2009-04-30 Hallse Brian L Fault-resistant digital-content-stream AV packet switch
US7925708B2 (en) 2008-01-04 2011-04-12 Yahoo! Inc. System and method for delivery of augmented messages
JP5337411B2 (ja) * 2008-06-13 2013-11-06 京セラドキュメントソリューションズ株式会社 情報秘匿化方法および情報秘匿化装置
US8135930B1 (en) * 2008-07-14 2012-03-13 Vizioncore, Inc. Replication systems and methods for a virtual computing environment
US8400566B2 (en) * 2008-08-21 2013-03-19 Dolby Laboratories Licensing Corporation Feature optimization and reliability for audio and video signature generation and detection
US20100138414A1 (en) * 2008-12-01 2010-06-03 Andrew Newman Methods and systems for associative search
JP2009151798A (ja) * 2009-01-19 2009-07-09 Sony Corp 画像処理装置および方法
JP5291523B2 (ja) * 2009-04-21 2013-09-18 株式会社データ変換研究所 類似データ検索装置及びそのプログラム
US9419801B2 (en) * 2009-05-12 2016-08-16 Infrascale Inc. System and method for transmitting needed portions of a data file between networked computers
JP5297297B2 (ja) * 2009-08-11 2013-09-25 Kddi株式会社 動画コンテンツ検出装置
US8325276B2 (en) * 2009-08-26 2012-12-04 Samsung Electronics Co., Ltd. System and method for real-time video content sharing with synchronization via closed-caption metadata
US8910202B2 (en) * 2009-12-08 2014-12-09 Harmonic, Inc. Modification and distribution of video content
US20120176386A1 (en) * 2011-01-10 2012-07-12 Hutchins Edward A Reducing recurrent computation cost in a data processing pipeline

Also Published As

Publication number Publication date
TW201340689A (zh) 2013-10-01
JP2015515770A (ja) 2015-05-28
WO2013130281A1 (en) 2013-09-06
EP2820564A4 (en) 2015-11-25
JP6340668B2 (ja) 2018-06-13
US20150248485A1 (en) 2015-09-03
EP2820564A1 (en) 2015-01-07
EP2820564B1 (en) 2019-04-10
TWI594626B (zh) 2017-08-01
US9703869B2 (en) 2017-07-11
CN104205089B (zh) 2018-10-16
CN104205089A (zh) 2014-12-10
US10068017B2 (en) 2018-09-04
US20140351280A1 (en) 2014-11-27
AU2013226430A1 (en) 2014-09-04

Similar Documents

Publication Publication Date Title
KR20140131333A (ko) 스트림 인식 및 필터링
US10778441B2 (en) Redactable document signatures
CN105718502B (zh) 用于高效特征匹配的方法和设备
JP7157141B2 (ja) ゲノム・ファイルのためのコンテキスト・アウェア差分アルゴリズム
US9348832B2 (en) Method and device for reassembling a data file
CN110489466B (zh) 邀请码的生成方法、装置、终端设备及存储介质
CN107402798B (zh) 转换排序脚本以在不同编码环境下重用jcl的方法和装置
JP2004528651A5 (ko)
WO2011121927A1 (ja) デジタルコンテンツ管理システム、装置、プログラムおよび方法
US10394763B2 (en) Method and device for generating pileup file from compressed genomic data
AU2021287730A1 (en) Systems and methods for compression and encryption of data
CN113076562A (zh) 基于gcm加密模式的数据库加密字段模糊检索方法
KR102110523B1 (ko) 문서 분석 기반 주요 요소 추출 시스템 및 방법
CN104991963B (zh) 文件处理方法和装置
CN109408290B (zh) 一种基于InnoDB的碎片文件恢复方法、装置及存储介质
JP6251437B1 (ja) 分類用符号生成ソフトウェアを記録した記録媒体
Abdullah et al. X_myKarve: Non-contiguous JPEG file carver
CN111026554B (zh) 一种XenServer系统物理内存分析方法及系统
US9189488B2 (en) Determination of landmarks
CN110825363B (zh) 智能合约获取方法、装置、电子设备及存储介质
Pulova-Mihaylova et al. Compressing High Throughput Sequencing Data–Models and Software Implementation
JP2005242668A (ja) パターンマッチング装置および方法ならびにプログラム
JP2007274051A (ja) バイト列探索器及び探索方法
CN107977574A (zh) 病毒识别方法和装置

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid