KR20230058314A - 다중 키 정보 검색 - Google Patents
다중 키 정보 검색 Download PDFInfo
- Publication number
- KR20230058314A KR20230058314A KR1020227037130A KR20227037130A KR20230058314A KR 20230058314 A KR20230058314 A KR 20230058314A KR 1020227037130 A KR1020227037130 A KR 1020227037130A KR 20227037130 A KR20227037130 A KR 20227037130A KR 20230058314 A KR20230058314 A KR 20230058314A
- Authority
- KR
- South Korea
- Prior art keywords
- client
- encrypted
- server
- queries
- decryption keys
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/0825—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using asymmetric-key encryption or public key infrastructure [PKI], e.g. key signature or public key certificates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9032—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9038—Presentation of query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/008—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols involving homomorphic encryption
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
- H04L9/0819—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s)
- H04L9/0822—Key transport or distribution, i.e. key establishment techniques where one party creates or otherwise obtains a secret value, and securely transfers it to the other(s) using key encryption key
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0866—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving user or device identifiers, e.g. serial number, physical or biometrical information, DNA, hand-signature or measurable physical characteristics
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0894—Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2463/00—Additional details relating to network architectures or network communication protocols for network security covered by H04L63/00
- H04L2463/062—Additional details relating to network architectures or network communication protocols for network security covered by H04L63/00 applying encryption of the keys
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
서버로부터 정보를 검색하기 위해 컴퓨터 저장 매체에 인코딩된 컴퓨터 프로그램을 포함하는 방법, 시스템 및 장치가 개시된다. 방법에는 클라이언트-암호화된 쿼리 세트를 수신하는 서버가 포함될 수 있다. 서버는 서버-암호화된 복호화 키 세트를 식별하고 클라이언트 장치로 전송한다. 서버는 클라이언트 장치에 의해 암호화된 서버-암호화된 복호화 키 세트를 포함하는 클라이언트-서버-암호화된 복호화 키 세트를 수신한다. 서버는 또한 클라이언트 장치에서 파생된 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트를 수신한다. 서버는 클라이언트-서버-암호화된 복호화 키 세트와 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트 간의 매치를 지정하는 매치 맵을 생성한다. 서버는 맵을 사용하여 클라이언트-암호화된 쿼리 세트를 필터링하여 필터링된 클라이언트-암호화된 쿼리 세트를 만들고 쿼리 결과 세트를 생성한다.
Description
본 명세서는 데이터 처리 및 정보 검색에 관한 것이다.
콘텐츠 배포자와 같은 사용자 장치 및 콘텐츠 플랫폼은 콘텐츠 제공자가 저장한 정보를 검색하기 위해 콘텐츠 제공자를 조회할 수 있다. 그러나 어떤 정보가 쿼리되고 있는지에 대한 세부 정보를 콘텐츠 제공자에게 공개하는 것이 콘텐츠 플랫폼의 이익이 아닌 상황이 있을 수 있다. 다른 상황에서는 콘텐츠 제공자의 컴퓨팅 시스템에 저장된 다른 정보에 대한 세부 정보를 콘텐츠 플랫폼에 공개하는 것이 콘텐츠 제공자의 이익이 아닐 수 있다.
일반적으로, 본 명세서에 기술된 주제의 하나의 혁신적인 양태는 방법으로 구현될 수 있으며, 방법은, 하나 이상의 프로세서를 포함하는 서버에 의해 그리고 클라이언트 장치로부터, 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된(client-encrypted) 쿼리들의 세트를 수신하는 단계; 상기 서버에 의해, 상기 클라이언트-암호화된 쿼리들의 세트에 기초하여 서버-암호화된(server-encrypted) 복호화 키들의 세트를 식별하는 단계; 상기 서버에 의해, 상기 서버-암호화된 복호화 키들의 세트를 상기 클라이언트 장치에 전송하는 단계; 상기 서버에 의해 그리고 상기 클라이언트 장치로부터, 상기 클라이언트 장치에 의해 추가로 암호화된 서버-암호화된 복호화 키들의 세트를 포함하는 클라이언트-서버-암호화된 복호화 키들의 세트를 수신하는 단계; 상기 서버에 의해 그리고 상기 클라이언트 장치로부터, (i) 상기 서버-암호화된 복호화 키들의 세트와 무관하게 상기 클라이언트 장치에 의해 파생되고 그리고 (ii) 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된/클라이언트-파생된(client-derived) 복호화 키들의 세트를 수신하는 단계; 상기 서버에 의해, (i) 상기 클라이언트-서버-암호화된 복호화 키들의 세트와 (ii) 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트 사이의 매치를 지정하는 매칭(matching) 복호화 키 맵을 생성하는 단계; 상기 서버에 의해, 상기 매칭 복호화 키 맵을 사용하여 상기 클라이언트-암호화된 쿼리들의 세트를 필터링하여 필터링된 클라이언트-암호화된 쿼리들의 세트를 생성하는 단계; 그리고 상기 서버에 의해, 상기 필터링된 클라이언트-암호화된 쿼리들의 세트를 사용하여 쿼리 결과들의 세트를 생성하는 단계를 포함할 수 있다.
이 양태의 다른 실시예는 컴퓨터 저장 장치 상에 인코딩된, 방법의 동작을 수행하도록 구성된 대응하는 방법, 장치, 및 컴퓨터 프로그램을 포함한다. 이들 및 다른 실시예는 각각 다음의 특징 중 하나 이상을 선택적으로 포함할 수 있다.
방법은 상기 클라이언트 장치로부터 클라이언트-암호화된 엔티티 식별자들의 세트를 수신하는 단계; 상기 서버에 의해, 상기 클라이언트-암호화된 엔티티 식별자들의 세트를 암호화하여 서버-클라이언트-암호화된 식별자들의 세트를 생성하는 단계; 상기 서버에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 상기 클라이언트 장치에 전송하는 단계를 포함한다.
방법은 상기 클라이언트 장치에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 쿼리들의 세트를 생성하는 단계; 상기 클라이언트 장치에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 복호화 키들의 세트를 생성하는 단계; 상기 클라이언트 장치에 의해, 상기 쿼리들의 세트를 암호화하여 클라이언트-암호화된 쿼리들을 생성하는 단계를 더 포함한다.
방법은 상기 서버에 의해, 데이터베이스에 저장된 데이터 세트를 암호화하는 단계 - 상기 데이터베이스의 복수의 엔티티들에 대해, 각각의 데이터베이스 엔티티는 서버-암호화되고 그리고 해당 복호화 키에 의해 복호화될 수 있음-; 상기 서버에 의해, 상기 데이터베이스의 상기 복수의 엔트리들에 대한 각각의 해당 복호화 키를 암호화하는 단계; 상기 서버에 의해, 상기 클라이언트-암호화된 쿼리들에 포함된 데이터베이스 버킷 식별자들에 기초하여 상기 서버-암호화된 복호화 키들의 세트를 생성하는 단계를 더 포함하며, 상기 서버-암호화된 복호화 키들의 세트는 상기 클라이언트-암호화된 쿼리들에 포함된 버킷 식별자들에 대응하는 각 데이터베이스 엔티티에 대한 상기 서버-암호화된 복호화 키를 포함한다.
방법은 상기 서버에 의해, 상기 클라이언트-서버-암호화된 복호화 키들의 세트로부터 서버 암호화를 제거하여 상기 클라이언트-암호화된 쿼리들에 포함된 버킷 식별자들에 대응하는 각 데이터베이스 엔티티에 대한 각 해당 복호화 키의 클라이언트-암호화된 버전들을 포함하는 복구된 클라이언트-암호화된 복호화 키들의 세트를 생성하는 단계; 상기 서버에 의해, 상기 복구된 클라이언트-암호화된 복호화 키들의 세트를 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트와 비교하는 단계; 그리고 상기 비교에 기초하여, 상기 복구된 클라이언트-암호화된 복호화 키들의 세트 모두에 포함된 클라이언트-암호화된 복호화 키들을 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트에 매칭시키는 표시를 생성하는 단계를 포함하며, 상기 클라이언트-암호화된 쿼리들의 세트를 필터링하는 단계는 상기 클라이언트-암호화된 쿼리들로부터, 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들과 매칭하지 않는 복구된 클라이언트-암호화된 복호화 키들의 세트에 대응하는 데이터베이스 엔티티들에 대한 버킷 식별자들을 갖는 쿼리들을 제거하는 단계를 포함한다.
방법은 상기 서버에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 셔플링(shuffling)하여 서버-클라이언트-암호화된 식별자들의 세트와는 순서가 다른 셔플된 서버-클라이언트-암호화된 식별자들의 세트를 생성하는 단계를 더 포함하며, 상기 서버-클라이언트-암호화된 식별자들의 세트를 상기 클라이언트 장치로 전송하는 단계는 상기 셔플된 서버-클라이언트-암호화된 식별자들을 상기 클라이언트 장치로 전송하는 단계를 포함하고; 그리고 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된 쿼리들의 세트를 수신하는 단계는 상기 셔플된 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 생성된 셔플된 클라이언트-암호화된 쿼리들의 세트를 수신하는 단계를 포함한다.
방법은 (i) 셔플된 서버-클라이언트 암호화된 식별자들을 사용하여 상기 클라이언트 장치에 의해 파생되고 그리고 (ii) 상기 클라이언트 장치에 의해 암호화된 셔플된 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트를 수신하는 단계를 포함할 수 있다.
본 명세서에 기술된 주제의 특정 실시예는 다음 이점 중 하나 이상을 실현하도록 구현될 수 있다. 여기에서 설명된 기술은 클라이언트가 서버에 쿼리의 내용을 공개하지 않고 그리고 클라이언트가 콘텐츠 제공자의 전체 암호화된 데이터베이스를 다운로드할 것을 요구하지 않고 서버로부터 정보를 검색할 수 있게 하는 반면에, 이전 시스템에서는 서버가 쿼리에 포함된 특정 정보를 얻지 못하도록 전체 암호화된 데이터베이스를 다운로드해야 할 수 있다. 이와 같이, 여기에서 설명된 기술은 사용자 프라이버시를 보호하는 동시에 네트워크를 통해 교환되어야 하고 클라이언트 장치에 의해 저장되어야 하는 데이터의 양을 제한한다.
본 명세서에서 설명된 주제의 하나 이상의 실시예의 세부사항은 첨부 도면 및 아래의 설명에 설명되어 있다. 주제의 다른 특징, 양태 및 이점은 설명, 도면 및 청구범위에서 명백해질 것이다.
도 1a는 콘텐츠가 배포되고 사용자 장치에 제공되는 예시적인 환경의 블록도이다.
도 1b는 예시적인 정보 검색 프로토콜의 블록도이다.
도 2는 클라이언트가 서버로부터 콘텐츠를 검색하는 예시적인 프로세스의 스윔 레인 다이어그램이다.
도 3은 서버-암호화된 식별자로부터 쿼리를 생성하는 예시적인 프로세스의 흐름도이다.
도 4는 서버에 의해 쿼리를 처리하는 예시적인 프로세스의 흐름도이다.
도 5는 클라이언트에 콘텐츠를 제공하기 위해 서버에 의해 수행되는 예시적인 프로세스의 흐름도이다.
도 6은 예시적인 컴퓨터 시스템의 블록도이다.
도 1b는 예시적인 정보 검색 프로토콜의 블록도이다.
도 2는 클라이언트가 서버로부터 콘텐츠를 검색하는 예시적인 프로세스의 스윔 레인 다이어그램이다.
도 3은 서버-암호화된 식별자로부터 쿼리를 생성하는 예시적인 프로세스의 흐름도이다.
도 4는 서버에 의해 쿼리를 처리하는 예시적인 프로세스의 흐름도이다.
도 5는 클라이언트에 콘텐츠를 제공하기 위해 서버에 의해 수행되는 예시적인 프로세스의 흐름도이다.
도 6은 예시적인 컴퓨터 시스템의 블록도이다.
본 명세서는 데이터 처리 및 정보 검색에 관한 것이다. 보다 구체적으로, 본 명세서는 클라이언트와 서버의 개인 정보를 보호하면서 데이터베이스에서 데이터를 검색하는 기술을 설명한다. 예를 들어, 클라이언트가 서버 데이터베이스를 쿼리하는 경우 클라이언트는 쿼리 중인 데이터(클라이언트 쿼리 개인 정보(client query privacy)라고도 함)에 대한 세부 정보를 서버에 공개하지 않는다. 동시에 서버는 클라이언트가 쿼리하지 않은 데이터베이스 내용에 대한 세부 정보(서버 데이터베이스 개인정보 보호라고도 함)를 클라이언트에 공개하지 않는다. 이러한 기술은 쿼리의 일괄 처리(batch processing)에 사용되어 클라이언트 개인 정보도 보호하는 보다 효율적인 정보 검색 시스템을 제공할 수 있다. 예를 들어 클라이언트가 한 명 이상의 사용자에 대한 데이터를 검색하는 경우, 사용자 개인 정보는 쿼리 중인 서버가 클라이언트가 서버에 쿼리하는 사용자에 대한 정보를 알 수 없도록 하여 보호되고, 또한 클라이언트가 서버에 의해 저장될 수 있는 다른 사용자에 대한 정보를 학습하는 것을 방지한다.
도 1a는 콘텐츠가 사용자 장치에 배포되고 제공되는 예시적인 환경(100)의 블록도이다. 예시적인 환경(100)은 LAN(Local Area Network), WAN(Wide Area Network), 인터넷, 또는 이들의 조합과 같은 네트워크(102)를 포함한다. 네트워크(102)는 콘텐츠 플랫폼(106)과 콘텐츠 제공자(110)를 연결한다. 예시적인 환경(100)은 많은 상이한 콘텐츠 제공자(110), 콘텐츠 플랫폼(106), 및 사용자 장치(104)를 포함할 수 있다.
사용자 장치(104)는 네트워크(102)를 통해 콘텐츠를 요청하고 수신할 수 있는 전자 장치이다. 예시적인 사용자 장치(104)는 개인용 컴퓨터, 모바일 통신 디바이스, 디지털 어시스턴트 디바이스, 및 네트워크(102)를 통해 데이터를 송수신할 수 있는 다른 디바이스를 포함한다. 사용자 장치(104)는 일반적으로 장치 하드웨어 및 애플리케이션과 같은 소프트웨어 리소스를 관리하는 일을 주로 담당하는 운영 체제를 포함한다. 사용자 장치(104)는 또한 특정 구현, 애플리케이션 및 사용 사례에 기초하여 데이터를 일시적으로 또는 영구적으로 저장하기 위한 디바이스 스토리지를 포함한다. 사용자 장치(104)는 일반적으로 네트워크(102)를 통한 데이터 송수신을 용이하게 하기 위해 웹 브라우저 또는 이메일 클라이언트와 같은 사용자 애플리케이션을 포함하고, 사용자 장치(104)에 의해 실행되는 네이티브 애플리케이션은 또한 네트워크(102)를 통한 콘텐츠의 전송 및 수신을 용이하게 할 수 있다. 사용자 장치(104)에 제공되는 콘텐츠의 예는 웹페이지, 워드 프로세싱 문서, PDF(Portable Document Format) 문서, 이미지, 비디오, 검색 결과 페이지 및 디지털 광고를 포함한다.
콘텐츠 플랫폼(106)은 콘텐츠의 배포를 가능하게 하는 컴퓨팅 플랫폼이다. 예시적인 콘텐츠 플랫폼(106)은 검색 엔진, 소셜 미디어 플랫폼, 뉴스 플랫폼, 데이터 수집기 플랫폼, 또는 다른 콘텐츠 공유 플랫폼을 포함한다. 각각의 콘텐츠 플랫폼(106)은 콘텐츠 플랫폼 서비스 제공자에 의해 운영될 수 있다. 콘텐츠 플랫폼(106)은 하나 이상의 콘텐츠 제공자(110)에 의해 제공되는 콘텐츠를 제시할 수 있다. 위의 예에서, 뉴스 플랫폼은 다른 작성자에 의해 생성되고 하나 이상의 콘텐츠 제공자(110)에 의해 제공되는 콘텐츠를 표시할 수 있다. 다른 예로서, 콘텐츠 플랫폼(106)은 그 자신의 콘텐츠 중 어느 것도 발행하지 않지만, 상이한 뉴스 웹사이트(예를 들어, 콘텐츠 제공자(110))에 의해 제공되는 뉴스 기사를 집계하고 제시하는 데이터 수집기 플랫폼일 수 있다.
일부 구현에서, 콘텐츠 플랫폼(106)은 디지털 콘텐츠를 하나 이상의 엔티티에 배포할 수 있다. 엔티티의 예는 사용자 장치(104)를 통해 인터넷에 연결된 사용자를 포함할 수 있다. 예를 들어, 콘텐츠 플랫폼(106)은 하나 이상의 사용자가 콘텐츠 플랫폼(106)에 가입 및/또는 등록하게 할 수 있다. 이에 응답하여, 콘텐츠 플랫폼(106)은 콘텐츠 제공자(110)로부터 디지털 콘텐츠를 검색하고 검색된 콘텐츠를 사용자의 사용자 장치(104)에 제공할 수 있다. 콘텐츠 제공자(110)는 키-값 쌍의 형태로 디지털 콘텐츠를 저장하는 데이터 저장 장치(데이터베이스라고도 함)를 포함한다. 예를 들어, 콘텐츠 제공자(110)의 데이터베이스는 복수의 키 및 각각의 키에 대해 콘텐츠 플랫폼(106)에 의해 검색되는 대응하는 값을 포함할 수 있다.
일부 구현에서, 콘텐츠 플랫폼(106)은 하나 이상의 엔티티 각각에 엔티티 식별자를 할당할 수 있다. 이 예에서, 콘텐츠 플랫폼(106)은 콘텐츠 플랫폼이 사용자들을 구별할 수 있도록 엔티티 식별자를 하나 이상의 사용자 각각에게 할당할 수 있다. 일부 구현에서, 콘텐츠 플랫폼(106)은 고유 엔티티 식별자로서 하나 이상의 사용자 및/또는 사용자 장치에 의해 제공되는 정보를 사용할 수 있다. 예를 들어, 콘텐츠 플랫폼(106)은 사용자가 제공한 전자 메일 식별자(이메일 ID), 사용자가 제공한 휴대폰 번호 또는 사용자의 사용자 장치(104)의 미디어 액세스 제어(MAC) 주소를 고유 엔티티 식별자로 사용할 수 있다. 일부 구현에서, 콘텐츠 플랫폼(106)은 사용자 그룹의 사용자 특성에 기초하여 2명 이상의 사용자 그룹에 엔티티 식별자를 할당할 수 있다. 예를 들어, 콘텐츠 플랫폼(106)은 사용자에 의해 액세스되는 디지털 콘텐츠의 컨텍스트에서 유사한 관심에 기초하여 공통 엔티티 식별자를 사용자 그룹에 할당할 수 있다. 다른 예에서, 사용자는 그룹에 할당될 수 있고 디지털 콘텐츠에 대한 구독에 기초하여 공통 엔티티 식별자가 할당될 수 있다. 일부 구현에서, 콘텐츠 플랫폼(106)은 단일 사용자에게 복수의 엔티티 식별자를 할당할 수 있다. 예를 들어, 콘텐츠 플랫폼(106)은 사용자에 대한 엔티티 식별자로서 이메일 ID 및 휴대 전화 번호 둘 다를 할당할 수 있다.
콘텐츠 제공자(110)로부터 디지털 콘텐츠를 검색하기 위해, 콘텐츠 플랫폼(106) 및 콘텐츠 제공자(110)는 콘텐츠 플랫폼(106)이 어떤 정보가 쿼리되고 있는지에 대해 콘텐츠 제공자(110)에 어떠한 세부사항도 공개하지 않는 방식으로 데이터 프라이버시를 보장하는 정보 검색 기술을 구현한다. 검색 기술은 콘텐츠 제공자(110)가 콘텐츠 제공자(110)의 컴퓨팅 시스템에 저장된 다른 정보에 대해 콘텐츠 플랫폼(106)에 어떠한 세부사항도 공개하지 않는 것을 추가로 보장한다. 본 명세서는 콘텐츠 제공자(110) 및 콘텐츠 플랫폼(106)을 언급하지만, 여기에서 설명된 정보 검색 기술은 개인 정보 보호 방식으로 정보를 교환하려는 임의의 두 시스템에서 사용할 수 있다. 예를 들어, 개인 정보 보호 방식으로 정보를 교환하는 두 시스템을 클라이언트 및 클라이언트가 정보 검색 프로토콜을 사용하여 서버에서 정보를 검색하는 서버라고 한다. 물론, 다른 시스템이 여기에서 설명된 동작을 수행할 수 있다. 정보 검색 기술의 높은 수준의 개요는 도 1b를 참조하여 설명된다.
도 1b는 서버로부터 정보를 검색하기 위해 클라이언트(150)에 의해 사용되는 예시적인 정보 검색 프로토콜의 블록도이다. 일부 구현에서, 클라이언트(150) 및 서버(160) 각각은 별개의 의사난수 함수를 갖는다. 이를 각각 "clientPRF" 및 "serverPRF"라고 한다. PRF는 함수의 출력이 무작위로 선택된 키 k에 대해 구별할 수 없는 일부 키 k에 대한 일부 값 x의 함수 이다. 다시 말해, k가 알려지지 않은 경우, 값이 일부 에 의해 생성되었는지 또는 의 가능한 출력에서 무작위로 선택되었는지 여부를 결정하는 것은 계산적으로 불가능해야 한다. 또한, 에 대한 가능한 출력이 충분히 많아야 동일한 출력을 갖는 두 개의 서로 다른 입력의 확률이 미미하다. 예를 들어, 는 264 가능한 고유한 출력 값을 가질 수 있다.
서버(160)는 또한 서버(160)와 클라이언트(150) 사이의 제2 파티(two-party) 프로토콜인 서버OPRF(serverOPRF)(164)로 지칭되는 OPRF(Oblivious pseudorandom function)를 소유할 수 있으며, 여기서 서버에만 알려진 일부 의사랜덤 함수 가 있다. serverOPRF(164)는 서버(160)에 어떠한 정보도 누설하지 않고 클라이언트(150)에 의해 알려진 어떤 값 x에 대해 클라이언트(150)가 를 학습하게 한다. 즉, serverOPRF(164)는 PRF에 대한 키를 보유하는 서버(160)와 입력을 보유하는 클라이언트(150) 사이의 프로토콜이다. 서버-클라이언트 상호작용의 끝에서, 클라이언트(150)는 원하는 경우 다른 것을 학습하지 않고 클라이언트(150)에 의해 제공된 입력에 대해 serverOPRF(164)의 출력을 학습할 수 있다. 서버(160)는 클라이언트(150)의 입력 또는 OPRF 출력에 대해 아무것도 학습하지 않는다.
일부 구현에서, serverOPRF(164), serverPRF(180), 및 clientPRF(174)는 결정적 교환 암호화를 사용하여 구현될 수 있다. 일부 구현에서는 타원 곡선의 "Pohlig-Hellman" 암호를 사용하여 결정적 및 교환적 암호화를 제공할 수 있다.
클라이언트(150)는 하나 이상의 엔티티 각각에 복수의 엔티티 식별자를 할당할 수 있다. 예를 들어, 클라이언트(150)가 M개의 사용자를 갖고 M개의 사용자 각각에게 클라이언트(150)가 N개의 엔티티 식별자를 할당한다고 가정하자. 콘텐츠를 검색하기 위해, 클라이언트(150)는 각각의 쿼리가 엔티티에 할당된 N개의 엔티티 식별자 중 하나에 대응하는 M개의 엔티티 각각에 대해 N개의 쿼리를 생성할 수 있다. 다른 구현에서, 클라이언트(150)는 각각의 쿼리 그룹이 각각의 엔티티에 할당된 N개의 식별자에 각각 대응하는 N개의 쿼리를 포함할 수 있도록 M개의 엔티티 각각에 대한 쿼리 그룹을 생성할 수 있다. 예를 들어, 클라이언트(150)가 M개의 쿼리 그룹 및 M개의 쿼리 그룹 각각에 대해 N개의 대응하는 쿼리를 생성하는 구현을 참조하여 기술 및 방법이 설명될 것이다.
서버(160)는 키와 값(키-값 쌍으로 지칭됨) 간의 매핑 형태로 디지털 콘텐츠를 저장하는 서버 데이터베이스(192)를 구현한다. 키는 엔터티 식별자 및/또는 클라이언트가 쿼리하는 디지털 콘텐츠인 값에 대한 포인터일 수 있다. 서버 데이터베이스(192)는 복수의 키 및 각각의 키에 대해 키에 대응하는 개별 값을 포함할 수 있다. 예를 들어, 서버는 데이터베이스(192)에 복수의 키를 포함할 수 있으며, 여기서 각각의 키는 클라이언트가 서버로부터 콘텐츠를 검색하는 클라이언트의 하나 이상의 엔티티를 고유하게 식별할 수 있다. 다른 예에서, 서버는 엔티티를 반드시 식별할 필요는 없는 키를 데이터베이스에 포함할 수 있다. 그러한 구현에서, 대응하는 키의 값은 클라이언트가 클라이언트 또는 엔터티에 각각 부여된 클라이언트 권한 또는 엔터티 권한과 같은 다른 요소를 기반으로 클라이언트가 쿼리하도록 허용하는 데이터이다.
일부 구현에서, 서버 데이터베이스(182)의 키-값 쌍의 키는 클라이언트에 의해 엔티티에 할당된 하나 이상의 엔티티 식별자와 연관된다. 서버(160)에 쿼리하는 동안, 클라이언트(150)는 개체 식별자의 세부 사항이 서버에 공개되지 않는 방식으로 개체 식별자를 포함하는 쿼리를 서버(160)에 제공한다. 나중에 설명하겠지만, 서버는 엔티티 식별자가 서버에서 마스킹되더라도 엔티티 식별자에 기초하여 서버 데이터베이스에서 콘텐츠(예: 모든 종류의 데이터)를 선택할 수 있다.
일부 구현에서, 서버(160)는 서버 OPRF 데이터베이스(170)로 지칭되는 서버 데이터베이스의 엔트리를 사용하여 매핑(예: 사전, 테이블, 데이터베이스 등)을 생성한다. 서버 OPRF 데이터베이스(170)는 서버 데이터베이스의 각 키를 자신의 serverOPRF의 serverPRF에 매핑한 것이다. 이는 를 사용하여 나타낼 수 있으며, K는 서버 데이터베이스의 모든 키 세트이고, k는 K에 있다.
일부 구현에서, 서버(160)는 서버-암호화된 데이터베이스의 각 데이터베이스 엔트리가 서버 암호화되고(server-encrypted), 대응하는(해당) 클라이언트 파생된 OPRF 값에 의해 복호화될 수 있도록 서버-암호화된 데이터베이스를 생성하기 위해 서버 데이터베이스(192)를 암호화한다. 서버(160)는 AES(Advanced Encryption Standard)와 같은 결정론적 동형 암호화 기술을 사용하여 서버-암호화된 데이터베이스(server encrypted database)를 생성한다. AES 키는 HKDF(HMAC-based Extract-and-Expand Key Derivation Function)를 사용하여 serverOPRF 값에서 파생(derived)될 수 있다. 서버 암호화는 와 같이 나타낼 수 있으며, 여기서 서버(160)는 각각의 키 k를 암호화하고 여기서 K는 서버 데이터베이스의 모든 키 세트이고 그리고 HKDF(serverOPRF(k))는 AES 암호화에 사용되는 키이다. 그러한 구현에서, 그 serverOPRF의 serverPRF는 서버-암호화된 데이터베이스를 생성하는 동안 서버-암호화된 서버 데이터베이스의 엔트리에 대한 복호화 키이다.
정보 검색 프로토콜을 추가로 설명하기 위해, 클라이언트(150)와 서버(160)가 두 개의 통신 당사자이고 그리고 정보 검색 프로토콜은 서버(160)로부터 정보를 검색하는 동안, 클라이언트(150)가 쿼리에 기초하여 추론할 수 있는 것 이상으로 어떤 것도 추론할 수 없어야 하고 서버(160)가 임의의 키가 클라이언트 쿼리에 포함되어 있는지 여부를 결정할 수 없어야 함을 보장한다.
정보 검색 프로토콜은 클라이언트(150)가 정보를 검색하고자 하는 엔티티의 플레인텍스트(plaintext)로 엔티티 식별자(162)를 획득하는 클라이언트(150)로 시작할 수 있다. 엔티티 식별자(162)를 검색한 후, 클라이언트(150)는 서버OPRF(164)를 사용하여 엔티티 식별자(162) 각각에 대응하는 OPRF 값을 획득할 수 있다. 예를 들어, 클라이언트(150)는 대응하는 OPRF 값을 생성하는 서버OPRF에 대한 입력으로서 M*N개의 엔티티 식별자(162)를 제공할 수 있다. 클라이언트(150)가 serverOPRF에 대한 입력을 선택했기 때문에(그리고 OPRF의 OP(oblivious property)에 의해), 서버(160)는 이러한 클라이언트 파생된(client derived) OPRF 값(166)이라고 부르는 결과 값을 학습하지 않는다. 예를 들어, M*N OPRF 값의 세트는 클라이언트 파생된 OPRF 값(166)의 세트라고 한다.
일부 구현들에서, 클라이언트(150)는 클라이언트 파생된 OPRF 값들의 세트(166)를 생성한 후, clientPRF(174)를 사용하여 세트(166) 내의 클라이언트 파생된(client derived) OPRF 값들 각각을 암호화하고 대응하는 클라이언트-암호화된(client-encrypted)/클라이언트-파생된(client-derived) OPRF 값을 생성한다. 클라이언트 암호화된/클라이언트 파생된 OPRF 값을 함께 서버(160)로 전송되는 클라이언트 암호화된/클라이언트 파생된 OPRF 값(178)의 세트라고 한다.
일부 구현에서, 클라이언트(150)는 세트(166)에서 각각의 클라이언트 파생된 OPRF 값에 대응하는 쿼리(queries)(168)를 생성한다. 일부 구현에서, 클라이언트(150)는 쿼리 그룹의 N개의 쿼리 각각이 특정 엔티티에 할당된 엔티티 식별자에 대응하도록, 각각의 쿼리 그룹이 N개의 쿼리를 포함하는 M개의 엔티티 각각에 대한 쿼리 그룹을 생성한다. M개의 쿼리 그룹(168)은 그 다음 서버(160)로 전송된다.
일부 구현예에서, 쿼리 그룹(168)을 수신한 후, 서버(160)는 서버 OPRF 데이터베이스(170) 상의 쿼리 그룹(168)의 세트 내의 쿼리 그룹 각각의 쿼리를 실행하여 각각의 서버-암호화된 OPRF 쿼리 결과를 생성한다. 모든 서버-암호화된 OPRF 쿼리 결과(172)의 세트는 그 다음 클라이언트(150)로 전송된다. 예를 들어, 서버(160)는 서버 OPRF 데이터베이스(162) 상의 M개의 쿼리 그룹 각각에 대해 N개의 쿼리를 실행하여 서버-암호화된 OPRF 쿼리 결과(172)의 세트를 생성한다.
일부 구현에서, 클라이언트(150)는 서버-암호화된 OPRF 쿼리 결과(172)의 세트를 수신한 후, 서버(160)로 다시 전송되는 클라이언트-서버-암호화된 OPRF 쿼리 결과(176)의 세트를 생성하기 위해 클라이언트 암호화 계층을 추가하도록 세트(172)의 각 서버-암호화된 OPRF 쿼리 결과를 (예: clientPRF(174) 사용하여) 암호화한다. 클라이언트(150)는 동일한 clientPRF(174)를 사용하여 클라이언트 암호화된/클라이언트 파생된 OPRF 쿼리 값(178) 세트 및 클라이언트-서버-암호화된(client-server-encrypted) OPRF 쿼리 결과(176) 세트를 생성한다는 점에 유의한다.
정보 검색 프로토콜의 이 단계에서, 서버(160)는 클라이언트 암호화된/클라이언트 파생된 OPRF 쿼리 값 세트(178) 및 클라이언트-서버-암호화된 OPRF 쿼리 결과 세트(176)를 갖는다는 점에 유의한다.
일부 구현에서, 서버(160)는 서버-클라이언트-암호화된/클라이언트-파생된 OPRF 값(182)의 세트를 생성하기 위해 서버 암호화 계층을 추가하도록 서버 PRF(serverPRF)(180)를 사용하여 세트(178) 내의 클라이언트-암호화된/클라이언트-파생된 OPRF 쿼리 값 각각을 암호화한다. 서버-클라이언트 암호화된/클라이언트 파생된 OPRF 쿼리 값 세트(182)는 M 쿼리 그룹의 M*N 쿼리에 대응하는 서버-클라이언트-암호화된/클라이언트-파생된 OPRF 값을 포함한다.
일부 구현에서, 클라이언트(150)는 세트(176 및 182) 모두에 존재하는, 클라이언트(150)와 서버 모두에 의해 암호화된 모든 OPRF 값을 선택하기 위해 서버-클라이언트 암호화된/클라이언트-파생된 OPRF 쿼리 값(182)의 세트와 클라이언트-서버-암호화된 OPRF 쿼리 결과(176)의 세트를 비교할 수 있다. 두 세트(176, 182)에 존재하는 모든 OPRF 값을 선택한 후, 서버(160)는 매칭 쿼리 세트(186) 내의 쿼리들이 서버OPRF(serverOPRF) 데이터베이스(170)상에서 서버(160)에 의해 성공적으로 실행되었음을 나타내는 필터링된 OPRF 값에 대응하는 M*N 쿼리의 쿼리를 포함하는 매칭 쿼리(186) 세트(매칭 쿼리들의 세트)를 생성할 수 있다.
일부 구현에서, 서버(160)는 필터(188)를 구현하여 매칭 쿼리(186)의 세트로부터 쿼리의 서브세트(190)를 선택하여 M개의 사용자 각각에 대해 최상의 매치(best match)인 값을 서버 데이터베이스로부터 검색할 수 있다. 예를 들어, 쿼리 서브세트(190)의 필터링은 사용자에게 할당된 N개의 식별자의 순서에 기초하여 서버 데이터베이스(192)로부터 값을 선택하도록 조정될 수 있다. 이를 위해, 클라이언트(150)는 식별자 품질(identifier quality)의 내림차순으로 각각의 쿼리 그룹을 배열할 수 있고, 서버(160)는 서버(160)가 데이터를 가지고 있는 단일 최고의 품질 식별자를 선택할 수 있다.
일부 구현에서, 쿼리는 클라이언트(150)가 쿼리로부터 임의의 값을 도출할 수 있는지 여부와 또한 클라이언트(150)가 이러한 목적을 위해 서버(160)에 제공하고자 하는 임의의 추가 데이터(예: 쿼리 메타데이터(196))를 고려하여 임의의 정교한 로직에 기초하여 필터링될 수 있다. 예를 들어, 필터링은 각 쿼리에 대한 리터럴(literal)이 클라이언트(150)가 쿼리로부터 값을 도출할 수 있는지 여부를 나타내는 하나 이상의 부울 표현식(Boolean expression)을 평가함으로써 수행될 수 있다.
쿼리(190)의 서브세트를 선택한 후, 서버(160)는 클라이언트(150)에 추가로 전송되는 쿼리 결과(194)를 검색하기 위해 서버 데이터베이스(192)에 대한 쿼리를 실행할 수 있다. 일부 구현에서 쿼리는 동형 암호화(homomorphic encryption)를 사용하여 암호화되므로 결과도 동형 암호화로 암호화된다. 이러한 구현에서, 쿼리(192)의 서브세트를 실행한 후, 서버(160)는 클라이언트(150)에 추가로 전송되는 서버 암호화 쿼리 결과(194)를 검색한다. 그러한 구현에서, 클라이언트(150)는 서버 암호화 쿼리 결과(194)를 수신한 후 해당 클라이언트 파생된 OPRF 값(166)을 사용하여 서버 암호화를 복호화(또는 제거)하여 서버 암호화 검색 쿼리 결과(194)의 플레인텍스트 값을 생성한다.
일부 구현에서, 클라이언트(150)는 오류가 있는 링 학습(RWLE: ring learning with errors)과 같은 동형 암호화를 사용하거나 가블드 회로(garbled circuit)를 사용하여 쿼리를 생성할 수 있다. 일부 구현에서, 쿼리 결과는 결과의 해당 데이터베이스 키의 serverOPRF에서 파생된 AES 키를 갖는 AES 암호화로 암호화된다.
일부 구현에서, 쿼리는 클라우드 제공자, 클린룸 환경 또는 제3자 컴퓨팅 시스템에 의해 부분적으로 또는 완전히 실행될 수 있다.
정보 검색 기술은 도 2를 참조하여 더 설명되고, 데이터베이스에 정보를 요청하는 엔티티를 클라이언트라고 하고, 데이터베이스에 정보를 저장하고 반환하는 정보를 데이터베이스에 저장하는 엔티티를 서버라고 한다.
도 2는 클라이언트가 서버로부터 콘텐츠를 검색하는 예시적인 프로세스(200)의 스윔 레인 다이어그램이다. 프로세스(200)의 동작은 예를 들어 클라이언트(202) 및 서버(204)에 의해 구현될 수 있다. 프로세스(200)의 동작은 또한 하나 이상의 컴퓨터 판독 가능 매체에 저장된 명령어로서 구현될 수 있으며, 이는 비일시적일 수 있고, 하나 이상의 데이터 처리 장치에 의한 명령어의 실행은 하나 이상의 데이터 처리 장치가 프로세스(200)의 동작을 수행하게 할 수 있다.
도 2를 참조하여 설명된 예는 서버(204)가 서버 데이터베이스를 암호화하고 클라이언트 파생된 OPRF 값의 특정 구현인 복호화 키를 사용하여 클라이언트(202)에 의해 나중에 복호화되는 암호화된 결과를 생성하는 예시적인 구현이다.
일부 구현에서, 복수의 쿼리를 수신한 후 서버(204)는 서버 데이터베이스에서 가장 잘 매치하는 쿼리에 기초하여 데이터를 선택한다. 예를 들어 N개의 엔티티 식별자가 특정 사용자에게 할당되었다고 가정한다. 서버가 N개의 엔티티 식별자 각각에 해당하는 내용(콘텐츠)을 포함할 수 있는 상황이 있을 수 있다. 이러한 상황에서 서버는 가장 높은 우선 순위가 할당된 개체 식별자에 해당하는 콘텐츠를 선택할 수 있다. 다른 예에서, 서버와 클라이언트는 서버가 N개의 엔티티 식별자의 순서에 기초하여 콘텐츠를 선택하고 전송할 수 있도록 N개의 엔티티 식별자를 주문하는 것에 상호 동의할 수 있다. 다른 상황에서, 서버는 N개의 엔티티 식별자 중에서 일부 엔티티 식별자에 해당하는 콘텐츠를 갖지 않을 수 있다. 예를 들어 서버에 특정 엔터티 식별자에 대한 콘텐츠가 포함되어 있지 않은 경우, 서버는 순서의 다른 엔터티 식별자에 기초하여 콘텐츠를 선택할 수 있다. 간결함을 위해, 프로세스(200)는 N개의 엔티티 식별자가 순서대로 있고 서버가 N개의 엔티티 식별자 중에서 제1 엔티티 식별자에 기초하여 콘텐츠를 선택할 것이라고 가정한다. 서버 데이터베이스에 첫 번째(제1) 엔터티 식별자에 해당하는 데이터가 없으면 서버는 두 번째(제2) 엔터티 식별자 등을 기반으로 콘텐츠를 선택한다.
클라이언트(202)는 고유 엔티티 식별자를 획득한다(212). 하나 이상의 엔티티를 고유하게 식별하기 위해, 클라이언트(202)는 하나 이상의 엔티티 각각에 하나 이상의 엔티티 식별자를 할당할 수 있다. 일부 구현들에서, 클라이언트(202)는 엔티티 식별자들로서 사용자들 및/또는 사용자 장치들(104)과 같은 엔티티들에 의해 제공되는 정보를 사용할 수 있다. 예를 들어, 클라이언트(202)는 고유 엔티티 식별자로서 사용자 장치(104)의 전자 메일 식별자(이메일 ID 또는 이메일 주소), 휴대 전화 번호, 또는 MAC(미디어 액세스 제어) 주소를 사용할 수 있다. 클라이언트는 정보를 저장하거나 데이터베이스를 유지 관리하는 다른 시스템(예: 서버 시스템)으로부터 정보를 요청하는 임의의 컴퓨팅 시스템일 수 있다. 클라이언트(202)는 엔터티 식별자를 차원 M*N의 매트릭스(매트릭스 P로 지칭됨)로서 유지할 수 있으며, 여기서 M은 엔터티의 수이고 N은 각 엔터티(예를 들어, 사용자)에 할당된 엔터티 식별자의 수이다.
클라이언트(202) 장치는 엔티티 식별자를 암호화하여 클라이언트-암호화된 식별자를 생성한다(214). 서버(204)가 플레인텍스트의 엔티티 식별자에 액세스하는 것을 방지하려면, 클라이언트(202)는 엔터티 식별자("클라이언트-암호화된 식별자"라고 함)의 암호화된 형태를 생성하기 위해 결정론적 교환(가환) 암호화 기술(deterministic and commutative encryption technique)을 사용하여 매트릭스 P의 엔터티 식별자를 암호화한다. 본 명세서 전반에 걸쳐 사용된 "클라이언트-암호화된 식별자"라는 문구는 서버가 아닌 클라이언트에 의해 암호화된 식별자를 나타낸다. 일반적으로 가환(교환) 암호화(commutative encryption)는 다른 엔티티의 공개키로 플레인텍스트를 두 번 이상 암호화할 수 있는 암호화의 일종이다. 이 시스템에서는 암호화/재암호화 과정 전에 복호화가 필요하지 않는다. 또한, 생성된 암호문(ciphertext)(암호화된 텍스트라고도 함)은 암호화/재암호화 프로세스에서 사용되는 공개 키의 순서를 고려하지 않고 지정된 복호화 기술에 의해 복호화될 수 있다. 다시 말해, 암호화 및 복호화에 사용되는 키의 순서는 계산 결과에 영향을 미치지 않으며, 다른 당사자(예: 서버)가 첫 번째 암호화 당사자가 암호화한 데이터에 추가 암호화를 적용한 후에도 한 암호화 당사자(예: 클라이언트(202))가 자신의 암호화를 제거할 수 있다.
클라이언트(202)는 클라이언트-암호화된 식별자를 서버(204)로 전송한다(216). 예를 들어, 매트릭스 P의 엔티티 식별자를 암호화한 후, 클라이언트(202)는 클라이언트-암호화된 식별자를 네트워크(102)를 통해 서버(204)로 전송한다. 더 구체적으로, 클라이언트(202)는 M*N개의 클라이언트-암호화된 식별자 세트를 생성하기 위해 매트릭스 P의 M*N 엔티티 식별자 각각을 암호화하고, 이는 서버(204)에 추가로 전송된다.
서버(204)는 클라이언트-암호화된 식별자를 암호화하여 서버-클라이언트-암호화된 식별자를 생성한다(218). 일부 구현에서, 클라이언트(202)로부터 M*N 클라이언트-암호화된 식별자 세트를 수신한 후, 서버(204)는 클라이언트 암호화된 식별자의 서버-암호화된 형태("서버-클라이언트-암호화된 식별자"라고 함)를 생성하기 위해 교환 및 결정론적 암호화 기술을 사용하여 클라이언트 암호화된 식별자를 재암호화(예를 들어, 추가 암호화)한다. 다시 말해서, 서버(204)는 M*N개의 클라이언트-암호화된 식별자 각각에 다른 암호화 계층을 추가한다. 서버(204)는 식별자가 클라이언트(202)에 의해 이미 암호화되어 있고 서버(204)는 복호화 키를 갖고 있지 않기 때문에 플레인텍스트로된 식별자에 접근할 수 없음에 유의한다. 본 명세서 전체에서 사용된 "서버-클라이언트-암호화된 식별자"라는 문구는 클라이언트와 서버 모두에 의해 암호화된 식별자를 나타낸다.
서버(204)는 서버-클라이언트-암호화된 식별자를 클라이언트(202)로 다시 전송한다(220). 예를 들어, M*N개의 서버-클라이언트-암호화된 식별자 세트(서버-클라이언트-암호화된 식별자들의 세트)를 생성한 후, 서버(204)는 서버-클라이언트-암호화된 식별자를 네트워크(102)를 통해 클라이언트(202)에 전송한다.
클라이언트(202)는 서버-암호화된 식별자를 획득하기 위해 서버-클라이언트-암호화된 식별자로부터 이전 클라이언트 암호화를 제거한다(222). 일부 구현에서, M*N 서버-클라이언트-암호화된 식별자 세트를 수신한 후, 클라이언트(202)는 M*N개의 서버-클라이언트-암호화된 식별자 각각에 대한 "서버-암호화된 식별자"를 생성하기 위해 단계 214에서 클라이언트(202)에 의해 수행된 암호화를 복호화(또는 제거)하는 기술을 사용한다. 암호화 기술은 본질적으로 교환(commutative) 가능하기 때문에 클라이언트(202)는 클라이언트 암호화를 제거할 수 있음에 유의한다. 클라이언트 암호화를 제거한 후 생성되는 서버-암호화된 식별자는 서버에서 가환(교환) 및 결정적 암호화 기술을 사용하여 암호화한 식별자이다. 다시 말해, 클라이언트(202)가 식별자에 적용된 원래 암호화를 제거한 후, 식별자는 서버에 의해 암호화된 상태로 유지되며, 클라이언트 식별자의 서버 암호화 버전이며, 이는 식별자에 대응하는 정보를 요청하기 위해 서버(204)에 제출될 쿼리를 생성하기 위해 클라이언트(202)에 의해 사용된다. 본 명세서 전반에 걸쳐 사용된 "서버-암호화된 식별자"라는 문구는 서버에 의해 암호화되지만 클라이언트에 의해 암호화되지 않은 식별자를 나타낸다.
일부 구현에서, 프로세스(200)의 단계 218-222는 serverOPRF를 사용하여 구현될 수 있다. 앞에서 언급했듯이 Oblivious PRF는 PRF(Pseudo Random Function)에 대한 키를 보유하고 있는 서버와 입력을 보유하고 있는 클라이언트 사이의 프로토콜이다. 서버-클라이언트 상호작용이 끝나면 클라이언트는 클라이언트가 제공한 입력에 대한 OPRF의 출력을 학습하고 다른 것은 학습하지 않는다. 서버는 클라이언트의 입력이나 OPRF 출력에 대해 아무것도 학습하지 않는다.
쿼리 생성을 용이하게 하기 위해, 클라이언트(202)는 각 서버-암호화된 식별자에 대한 샤드 인덱스(shard index) 및 버킷 식별자(bucket identifier)를 생성한다(224). 일부 구현에서, 클라이언트(202)는 샤드 인덱스 및 버킷 식별자(버킷 ID로도 지칭됨)를 포함할 수 있는 쿼리를 생성하기 위해 해싱(hashing) 기술을 구현한다. 쿼리를 생성하는 예시적인 해싱 기술은 도 3을 참조하여 더 설명된다. 클라이언트(202)는 프로세스(300)를 사용하여 M*N개의 서버-암호화된 식별자 각각에 대한 쿼리를 생성한다. 각 식별자에 대해 생성되는 각 쿼리에는 아래에서 설명하는 것처럼 서버-암호화된 식별자를 사용하여 생성된 버킷 ID와 샤드 인덱스가 포함된다.
클라이언트(202)는 각각의 서버-암호화된 식별자를 사용하여 클라이언트-파생된(client-derived) 복호화 키를 생성한다(226). 클라이언트-파생된 복호화 키는 클라이언트(202)에 의해 제출된 쿼리에 응답하여 서버(204)에 의해 제공된 쿼리 결과를 복호화하기 위해 클라이언트에 의해 사용될 것이다. 일부 구현들에서, 클라이언트(202)는 222에서 생성된 서버-암호화된 식별자들 각각에 대한 클라이언트-파생된 복호화 키를 생성할 수 있다. 예를 들어, 클라이언트(202)는 키를 하나 이상의 암호학적으로 강력한 비밀 키로 확장하기 위한 HMAC(해시 기반 메시지 인증 코드) 암호 키 유도 함수인 HKDF를 구현할 수 있다. M*N 서버-암호화된 식별자에 대한 복호화 키를 함께 클라이언트-파생된 복호화 키들의 세트라고 한다.
클라이언트(202)는 쿼리를 생성하고 암호화한다(228). 일부 구현에서, 클라이언트(202)는 길이 n/P의 표시자 벡터를 생성하기 위해 프로세스(300)를 사용하여 계산된 버킷 ID를 사용하며, 여기서 버킷 ID와 동일한 인덱스를 갖는 요소는 1이고 다른 요소는 0이다(P는 샤드(shard)의 수이고 n/P는 고유한 버킷 ID의 수이다). 일부 구현에서, 표시자 벡터는 알려진 압축 기술을 사용하여 압축될 수 있다. 클라이언트(202)는 M*N개의 서버-암호화된 식별자 각각에 대한 표시자 벡터를 생성한다.
일부 구현에서, 클라이언트(202)는 대응하는 FHE 암호화된 버킷 벡터를 생성하기 위해 M*N 표시자 벡터의 각각을 암호화할 수 있다. 일반적으로 동형 암호화는 사용자가 먼저 암호를 해독(복호화)하지 않고 암호화된 데이터에 대해 계산을 수행할 수 있도록 하는 암호화의 한 형태이다. 이러한 결과 계산은 암호화된 형식으로 남아 있으며, 해독될 때 암호화되지 않은 데이터에 대해 동작이 수행되었을 때 생성된 것과 동일한 출력이 생성된다. FHE의 속성에는 더하기, 곱하기 및 흡수(absorption)이 포함될 수 있다. 설명을 위해, {x}가 x의 FHE를 나타내는 경우, {x} + {y}를 더하면 x, y 또는 x+y를 나타내지 않고 {x+y}가 산출될 수 있다. 유사하게, 곱셈 {x} * {y}는 x, y 또는 xy를 나타내지 않고 {xy}를 산출할 수 있고, 흡수 {x} * y는 x를 나타내지 않고 {xy}를 산출할 수 있다. 일부 구현에서, FHE의 속성에는 벡터의 아이템에 대한 세부 정보를 공개하지 않고 암호화된 벡터(벡터의 각 아이템에 대해 하나씩)를 지정된 수의 개별 암호화된 값으로 변환하는 기능이 포함될 수 있다.
각각의 표시자 벡터를 암호화한 후, 클라이언트(202)는 대응하는 샤드 인덱스 및 대응하는 FHE 암호화된 버킷 벡터를 포함하는 대응하는 쿼리(클라이언트-암호화된 쿼리라고 함)를 생성할 수 있다. 각 쿼리는 FHE QUERY(데이터베이스, 쿼리)로 표시될 수 있으며, 여기서 데이터베이스는 키와 값의 매핑을 저장하는 데이터 저장소를 나타내며, 즉, 데이터베이스는 여러 키를 저장하고 각 키에 해당하는 값을 저장한다. 이러한 구현에서, 클라이언트는 각 쿼리가 서버-암호화된 식별자에 해당하는 총 M*N 쿼리를 생성한다.
일반적으로, 클라이언트(202)가 서버 데이터베이스로부터 데이터를 검색하는 고유 엔티티 식별자의 수는 서버 데이터베이스의 고유 엔티티 식별자(키-값 쌍의 키)의 수보다 적다. 일부 구현에서, 프로세스(200)의 단계(224)에서 생성된 샤드에 대한 실제 쿼리 및 분포를 마스킹하기 위해, 클라이언트(202)는 서버(204)에 전송될 수 있는 패딩 쿼리(padding queries)를 생성할 수 있다. 클라이언트(202)는 예를 들어 서버(204)에 의해 제공된 정보에 기초하여 필요한 패딩 쿼리의 수를 결정할 수 있다. 예를 들어, 서버(204)는 클라이언트(202)에 의해 제출되는 각각의 실제 쿼리에 대해 클라이언트(202)에 의해 생성 및 제출되어야 하는 특정 수의 패딩 쿼리(예: 99개의 패딩 쿼리 또는 다른 적절한 수의 패딩 쿼리)를 지정할 수 있다.
클라이언트(202)는 쿼리를 서버(204)로 전송한다(230). 예를 들어, M*N개의 서버-암호화된 식별자 및 패딩 쿼리 각각에 대한 클라이언트-암호화된 쿼리를 생성한 후, 클라이언트(202)는 전체 쿼리 세트를 네트워크(102)를 통해 서버(204)에 전송한다. 일부 구현에서, 서버가 동시에(예를 들어, 배치 프로세스에서) 쿼리를 처리(프로세싱)할 수 있도록 복수의 쿼리가 일괄 처리로 서버에 전송된다.
서버(204)는 데이터베이스를 암호화하고 분할한다(232). 데이터베이스를 암호화함으로써, 서버는 데이터베이스에 저장된 데이터 세트를 암호화하여, 각 데이터베이스 엔티티가 서버-암호화되고(server-encrypted) 해당 복호화 키로 복호화될 수 있다. 서버(204)는 또한 클라이언트(202)가 서버-클라이언트-암호화된 식별자를 수신한 후 클라이언트(202)에 의해 구성된 하나 이상의 쿼리를 수신하기 전에 서버 데이터베이스를 암호화할 수 있다. 예를 들어, 서버(204)가 서버 데이터베이스를 구축하거나 데이터베이스에 정보를 추가할 때, 서버는 동형 암호화가 데이터에 적용되기 전에 서버 데이터베이스에 저장되는 데이터를 암호화할 수 있다. 일부 구현에서, 서버(204)는 AES(Advanced Encryption Standard)와 같은 암호화 기술을 사용하여 서버 데이터베이스를 암호화한다. 예를 들어, 서버(204)는 HMAC 기반 HKDF(Extract-and-Expand Key Derivation Function)를 사용하여 생성된 AES 키와 키-값 쌍의 해당 키에 기초하여, AES 암호화 기술을 사용하여 서버 데이터베이스의 각 키-값 쌍의 값을 암호화한다. 서버 데이터베이스의 키-값 쌍의 각 키는 키를 [0, n] 범위 내의 정수로 매핑하는 해시 함수(예: SHA256)를 사용하여 생성된 정수(레코드 키라고 함)로 추가로 대체되며, 여기서 n은 서버(204)와 클라이언트(202) 모두에 알려진 조정 가능한 파라미터이다. 결과적으로 서버 데이터베이스의 각 키-값 쌍 대신 레코드 키-AES 암호화된 값 쌍이 생성된다. 해시 함수는 해싱 전에 키-값 쌍의 각 키에 추가된 암호화 솔트(cryptographic salt)를 추가로 활용할 수 있다. 일부 구현에서, 암호화 솔트는 쿼리를 암호화하는 동안 클라이언트(202)에 의해 사용될 수 있는 클라이언트(202)에도 알려져 있다.
일부 구현에서, 서버(204)는 서버 데이터베이스를 샤드로 분할한다. 예를 들어 클라이언트가 샤드 인덱스를 파생(deriving)하는 데 사용하는 것과 동일한 기술을 사용하여 레코드 키에서 샤드 인덱스를 파생한다. 각 샤드는 여러 레코드 키-AES 암호화된 값 쌍을 포함할 수 있다. 일부 구현에서, 서버(204)는 클라이언트가 사용한 것과 동일한 기술을 사용하여 샤드의 각 레코드 키에 대한 버킷 ID를 유도함으로써 각 샤드를 버킷이라고 하는 더 작은 파티션으로 분할한다. 예를 들어, 샤드 인덱스와 버킷 ID는 변환된 숫자를 P로 나눈 나머지와 정수 몫으로 각각 계산할 수 있다. 이렇게 하면 샤드당 최대 n/P 버킷이 생성된다.
각 샤드를 여러 버킷으로 분할한 후, 레코드 키-AES 암호화된 값 쌍의 AES 암호화된 값은 레코드 키-AES 암호화된 값 쌍의 레코드 키가 샤드와 샤드 내부의 버킷을 모두 인덱싱하도록 각 버킷 내부에 저장된다. 서버(204)는 클라이언트(202)와 동일한 방법론을 사용하여 서버 데이터베이스의 키-값 쌍의 각 키로부터 샤드 번호 및 버킷 ID를 도출한다는 점에 유의해야 한다.
일부 구현에서, 서버(204)는 각 버킷의 AES 암호화된 값을 바이트열(bytestring)로 연결한다. 예를 들어 특정 버킷에 3개의 AES 암호화 값이 포함된 경우 3개의 AES 암호화 값을 차례로 연결하여 바이트열을 생성한다. 서버(204)는 AES 암호화 값의 오프셋 값(바이트열의 인덱스 위치)을 식별하고 해당 레코드 키에 기초하여 AES와 같은 암호화 기술을 사용하여 오프셋 값을 암호화한다. 예를 들어, 바이트열에 길이가 균일한 AES 암호화 값이 3개 포함되어 있으면, 서버는 레코드 키-AES 암호화된 값 쌍의 각 레코드 키에 기초하여 AES를 사용하여 바이트열에 있는 3개의 AES 암호화된 값 각각의 오프셋 값을 암호화한다. 암호화된 오프셋 값을 생성한 후, 서버(203)는 암호화된 오프셋 값을 바이트열에 추가한다. 서버(204)는 AES 암호화된 값의 수를 바이트열에 추가로 추가한다. 이 예에서, 서버(204)는 값 3을 바이트열에 추가한다. 서버(204)는 바이트열을 각각 c 바이트의 청크(chunks)로 분할하며, 여기서 c는 클라이언트와 서버 모두에 미리 알려진 정수이다. c-바이트 청크는 바이트열에서 상대적 위치에 따라 추가로 인덱싱될 수 있다. 예를 들어, c=1인 경우, 버킷 B는 B = [“p”,”q”,”r”,”s”]로 표시될 수 있으며, 여기서 "pqrs"는 버킷에 각각 인덱스 1-4를 갖는 c-바이트 청크 "p", "q", "r" 및 "s"로 분할되는 바이트열일 수 있다. 다른 예에서 c=2인 경우, 버킷 B는 B = [“pq”,”rs”,”tu”,”v”]로 표시될 수 있으며, 여기서 "pqrstuv"는 버킷에 각각 인덱스 1-4를 갖는 c-바이트 청크 "pq", "rs", "tu" 및 "v"로 분할되는 바이트열일 수 있다.
서버(204)는 서버 OPRF 데이터베이스를 생성한다(234). 일부 구현에서, 서버(202)는 단계 230을 참조하여 설명된 바와 같이 AES와 같은 암호화 기술을 사용하여 암호화된 서버 데이터베이스의 키-값 쌍의 값 각각에 대한 복호화 키를 생성할 수 있다. 예를 들어, 서버(204)는 먼저 결정론적 교환 암호화를 사용하여 서버 데이터베이스의 키-값 쌍의 키를 암호화한 다음 서버-암호화된 키에 기초하여 HKDF를 사용하여 대응하는 복호화 키를 생성할 수 있다. 일부 구현에서, 서버(204)에 의해 생성된 복호화 키는 서버-암호화된 복호화 키를 생성하기 위해 결정론적 교환 암호화를 사용하여 추가로 암호화된다. 본 명세서 전반에 걸쳐 사용된 바와 같이, "서버-암호화된 복호화 키"라는 문구는 서버에 의해 암호화되지만 클라이언트에 의해 암호화되지 않은 복호화 키를 의미한다.
일부 구현에서, 서버(204)는 서버-암호화된 복호화 키를 저장하는 데이터베이스(서버 OPRF 데이터베이스라고 함)를 생성함으로써 서버-암호화된 복호화 키를 유지할 수 있다. 이러한 구현에서, 서버-암호화된 데이터베이스는 서버-암호화된 키 및 각 서버-암호화된 키에 대해 대응하는 서버-암호화된 복호화 키를 저장한다. 즉, 서버-암호화된 데이터베이스의 각 엔트리는 서버-암호화된 키와 서버-암호화된 복호화 키의 쌍이다.
일부 구현에서, 서버(204)는 서버-암호화된 데이터베이스를 샤드(서버 데이터베이스와 유사)로 분할한다. 서버-암호화된 데이터베이스를 분할하려면, 서버-암호화된 데이터베이스에 있는 쌍의 각 서버-암호화된 키는 키를 [0, n) 범위 내의 정수로 매핑하는 해시 함수(예: SHA256)를 사용하여 생성된 무부호 정수(unsigned integers)(230단계에서 생성한 레코드 키와 동일)로 추가로 대체되며, 여기서 n은 서버(204)와 클라이언트(202) 모두에 알려진 조정 가능한 파라미터이다. 서버(204)는 샤드 인덱스를 도출하기 위해 클라이언트에 의해 사용된 동일한 기술을 사용하여 무부호 정수로부터 샤드 인덱스를 도출함으로써 서버-암호화된 데이터베이스를 분할(partition)한다.
각 샤드는 서버-암호화된 키와 서버-암호화된 복호화 키의 여러 쌍을 포함할 수 있다. 일부 구현에서, 서버(204)는 클라이언트가 사용한 것과 동일한 기술을 사용하여 샤드의 각 무부호 정수에 대한 버킷 ID를 유도함으로써 각 샤드를 버킷이라고 하는 훨씬 더 작은 파티션으로 분할한다. 예를 들어, 샤드 인덱스와 버킷 ID는 변환된 숫자를 P로 나눈 나머지와 정수 몫으로 각각 계산될 수 있다.
각 샤드를 여러 버킷으로 분할한 후, 서버-암호화된 데이터베이스에 있는 쌍의 서버-암호화된 복호화 키는 각 버킷 내부에 저장되어 무부호 정수(unsigned integer)가 샤드와 샤드 내부의 버킷 모두를 인덱싱한다. 서버(204)는 클라이언트(202)와 동일한 방법론을 사용하여 샤드 번호 및 버킷 ID를 도출한다는 점에 유의해야 한다.
서버 데이터베이스와 유사하게, 서버(204)는 각 버킷의 서버-암호화된 복호화 키를 바이트열로 연결한다. 예를 들어 특정 버킷에 3개의 서버-암호화된 복호화 키가 포함된 경우 3개의 서버-암호화된 복호화 키를 차례로 연결하여 바이트열을 생성한다. 서버(204)는 서버-암호화된 복호화 키의 오프셋 값(바이트열의 인덱스 위치)을 식별하고 해당하는 무부호 정수에 기초하여 AES와 같은 암호화 기술을 사용하여 오프셋 값을 암호화한다. 예를 들어, 바이트열에 길이가 균일한 서버-암호화된 복호화 키 3개가 포함되어 있으면, 서버는 서버-암호화된 데이터베이스 쌍의 각 무부호 정수에 기초하여 AES를 사용하여 바이트열에 있는 3개의 서버-암호화된 복호화 키 각각의 오프셋 값을 암호화한다. 암호화된 오프셋 값을 생성한 후, 서버(203)는 암호화된 오프셋 값을 바이트열에 추가한다. 서버(204)는 서버-암호화된 복호화 키의 수를 바이트열에 추가로 추가한다. 이 예에서, 서버(204)는 값 3을 바이트열에 추가한다. 서버(204)는 바이트열을 각각 c 바이트의 청크로 분할하며, 여기서 c는 클라이언트와 서버 모두에 미리 알려진 정수이다. c-바이트 청크는 바이트열에서 상대적 위치에 따라 추가로 인덱싱될 수 있다.
서버(204)는 쿼리를 실행하고 복호화 키를 매칭함으로써 서버-암호화된 복호화 키의 세트를 식별한다(236). 일부 구현에서, 서버(204)는 M*N개의 클라이언트 암호화 쿼리 각각을 실행하여 서버 OPRF 데이터베이스의 복수의 서버-암호화된 복호화 키 중에서 클라이언트 암호화 쿼리에 대응하는 서버-암호화된 복호화 키 세트를 식별한다.
서버(204)는 서버 OPRF 데이터베이스로부터 콘텐츠를 검색하는 데 필요한 리소스 소비를 줄이는 최적화된 배치 프로세스를 사용하여 클라이언트-암호화된 쿼리를 처리할 수 있다. 최적화된 프로세스는 서버-암호화된 데이터베이스를 더 작은 청크(샤드라고 하며 샤드 인덱스를 사용하여 식별)로 분할하여 동시 처리를 용이하게 하는 방식으로 구현될 수 있으며, 다중 컴퓨팅 시스템에서 병렬로 처리하여 서버 OPRF 데이터베이스에서 서버-암호화된 복호화 키 세트를 검색하는 데 필요한 계산 리소스를 줄인다. 이는 도 4를 참조하여 더 설명된다.
일부 구현에서, 서버(204)는 선택적으로 서버-암호화된 복호화 키를 셔플링한다(238). 서버(204)는 클라이언트(102)에 세트를 전송하기 전에 서버-암호화된 복호화 키 세트에서 M*N개의 서버-암호화된 복호화 키를 셔플링한다. 이는 클라이언트-암호화된 쿼리가 클라이언트(202)로부터 수신된 순서와 비교할 때 서버-암호화된 복호화 키의 순서를 무작위로 변경하는 것을 포함한다.
서버(204)는 예를 들어 서버-암호화된 복호화 키의 순서를 클라이언트-암호화된 쿼리의 순서에 매핑하는 매핑을 저장함으로써 셔플링 프로세스를 추적한다. 일부 상황에서, 서버(204)는 예를 들어, 서버-클라이언트-암호화된 식별자를 셔플링하고 나중 시점에서 순서화 시퀀스를 생성하는 데 사용될 수 있는 시드 값(seed value)에 대한 고정된 파라미터 세트로 셔플링 알고리즘을 구현할 수 있다. 서버(204)는 셔플된 시퀀스의 순서를 비공개로 유지하고 이를 클라이언트(202)와 공유하지 않는다. 예를 들어, 매핑 또는 시드 값은 서버(204)에 저장되고 클라이언트(202)와 공유되지 않는다.
향후 기술에 대한 더 나은 이해를 위해, 먼저 프로세스(200)의 단계(238)에서 서버(204)에 의해 생성된 서버-암호화된 복호화 키 세트를 분석한다. 이 문서의 앞부분에서 설명했듯이, 클라이언트(202)는 각각의 엔티티에 복수의 엔티티 식별자가 할당되는 지정된 수의 엔티티에 대해 서버 데이터베이스로부터 콘텐츠를 검색하기 위한 쿼리를 제출한다. 예를 들어, 클라이언트(202)는 M개의 엔티티를 갖고 M개의 엔티티 각각은 N개의 엔티티 식별자를 할당받았다. 서버 데이터베이스에는 M개 이상의 엔터티에 대한 콘텐츠가 포함되어 있으며, 서버 데이터베이스의 각 엔터티에 대해 서버에는 여러 식별자(서버 데이터베이스의 키라고 함)가 포함될 수 있다. 또한 복수의 식별자가 클라이언트(202)에 의해 엔티티에 할당된 N개의 엔티티 식별자와 상관될 수 있다는 점에 유의해야 한다. 서버 OPRF 데이터베이스에서 쿼리를 실행한 후, 서버(204)는 M*N 엔티티 식별자에 대응하는 복호화 키인 서버-암호화된 복호화 키 세트를 식별한다. 그러나, M개의 엔티티 각각에 대해, 서버(204)는 각각의 엔티티에 할당된 모든 식별자 중에서 가장 매치하는 하나의 특정 엔티티 식별자에 기초하여 콘텐츠를 선택할 것이다. 일부 구현에서 가장 매치하는 식별자는 매치가 감지되는 가장 잘 정의된 식별자이다. 예를 들어 매치하는 식별자 하나가 이메일 주소이고 매치하는 두 번째 식별자가 이메일 주소와 우편번호라고 가정한다. 이 예에서, 두 번째 매치 식별자는 이메일 주소만 제공하는 것보다 더 많은 정보를 제공하므로 더 잘 정의되어 두 번째 식별자와 관련하여 저장된 콘텐츠가 쿼리에 대한 응답으로 제공된다. 프로세스(200)의 향후 기술은 클라이언트(202)가 어떤 엔티티 식별자가 콘텐츠를 선택하기 위해 서버(204)에 의해 사용되었는지에 대한 지식 없이 하나의 특정 엔티티 식별자에 기초하여 콘텐츠를 선택한다.
서버(204)는 서버-암호화된 복호화 키 세트를 클라이언트(202)에 전송한다(240). 예를 들어, 서버-암호화된 데이터베이스에 대해 클라이언트-암호화된 쿼리를 실행하여 서버-암호화된 복호화 키 세트를 식별하고, 서버-암호화된 복호화 키 세트를 셔플링한 후, 서버(204)는 네트워크(102)를 통해 클라이언트(202)에 하나 이상의 사용자의 셔플된 서버-암호화된 복호화 키 세트를 전송한다.
클라이언트(202) 장치는 클라이언트-서버-암호화된 복호화 키를 획득하기 위해 서버-암호화된 복호화 키를 암호화한다(242). 서버(204)로부터 서버-암호화된 복호화 키 세트를 수신한 후, 클라이언트(202)는 클라이언트-서버-암호화된 복호화 키 세트를 생성하기 위해 서버-암호화된 복호화 키 세트에서 M*N 서버-암호화된 복호화 키를 재암호화(예를 들어, 추가로 암호화)한다. 다시 말해서, 클라이언트(202)는 서버-암호화된 복호화 키 각각에 다른 암호화 계층을 추가한다. 클라이언트(202)는 복호화 키가 서버(204)에 의해 이미 암호화되었기 때문에 플레인텍스트로 된 서버-암호화된 복호화 키에 접근할 수 없다는 점에 유의한다. 본 명세서 전반에 걸쳐 사용된 "클라이언트-서버-암호화된 복호화 키"라는 문구는 서버와 클라이언트에 의해 암호화되는 복호화 키를 의미한다.
클라이언트(202)는 클라이언트-서버-암호화된 복호화 키 세트를 서버(204)로 전송한다(244). 예를 들어, 서버-암호화된 복호화 키 세트에서 서버-암호화된 복호화 키를 암호화한 후, 클라이언트(202)는 클라이언트-서버-암호화된 복호화 키 세트를 네트워크(102)를 통해 서버(204)로 전송한다. 차례로, 서버는 클라이언트 장치로부터 클라이언트 장치에 의해 추가로 암호화된 서버-암호화된 복호화 키 세트를 포함하는 클라이언트-서버-암호화된 복호화 키 세트를 수신한다.
단계 238에서 서버가 복호화 키를 셔플링했다면, 서버(204)는 클라이언트-서버-암호화된 복호화 키를 언셔플링(unshuffling)한다(246). 일부 구현에서, M*N개의 클라이언트-서버-암호화된 복호화 키를 수신한 서버(204)는 프로세스(200)의 단계 238에서 서버에 의해 수행된 셔플링을 무효화하기 위해 클라이언트-서버-암호화된 복호화 키를 언셔플링한다. 복호화 키를 셔플링 및 셔플링 해제함으로써, 서버(204)는 엔티티 식별자의 순서에 관한 정보를 클라이언트(202)에 누설하지 않고 클라이언트(202)로부터 클라이언트-서버-암호화된 복호화 키 세트를 얻을 수 있음에 유의한다(242-246단계).
클라이언트(202)는 클라이언트-암호화/클라이언트-파생된 복호화 키를 얻기 위해 클라이언트-파생된 복호화 키를 암호화한다(248). 프로세스(200)의 단계(226)에서 클라이언트 파생 복호화 키 세트를 생성한 후, 클라이언트(202)는 클라이언트-암호화/클라이언트-파생된 복호화 키들의 세트를 생성하기 위해 클라이언트-파생된 복호화 키들의 세트 내의 클라이언트-파생된 복호화 키들 각각을 암호화한다. 다시 말해서, 클라이언트(202)는 클라이언트-파생된 복호화 키 각각에 암호화 계층을 추가한다. 본 명세서 전반에 걸쳐 사용된 "클라이언트-암호화된/클라이언트-파생된 복호화 키"라는 문구는 클라이언트에 의해 암호화되지만 서버에 의해 암호화되지 않은 클라이언트-파생된 복호화 키를 나타낸다.
클라이언트(202)는 클라이언트-암호화된/클라이언트-파생된 복호화 키를 서버(204)로 전송한다(250). 예를 들어, 클라이언트 파생된 복호화 키 세트(클라이언트 파생된 복호화 키들의 세트)에서 클라이언트 파생된 복호화 키 각각을 암호화한 후, 클라이언트(202)는 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트를 네트워크(102)를 통해 서버(204)로 전송한다. 차례로, 서버(205)는 클라이언트(202)로부터, (i) 서버-암호화된 복호화 키 세트(서버-암호화된 복호화 키들의 세트)와 독립적인 클라이언트 장치에 의해 파생되고(도출된) 그리고 (ii) 클라이언트 장치에 의해 암호화된 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트를 수신한다.
서버는 클라이언트-암호화된/클라이언트-파생된 복호화 키를 암호화한다(252). 일부 구현에서, 서버(204)는 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트를 수신한 후 세트 내의 클라이언트-암호화된/클라이언트-파생된 복호화 키 각각을 암호화하여 대응하는 서버 클라이언트-암호화된/클라이언트-파생된 복호화 키를 생성한다. 다시 말해서, 서버(204)는 클라이언트-암호화된/클라이언트-파생된 복호화 키 각각에 암호화 계층을 추가한다.
서버(204)는 클라이언트-암호화된 쿼리를 필터링한다(254). 일부 구현에서, 서버(204)는 서버-클라이언트-암호화된/클라이언트-파생된 복호화 키 세트(서버-클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트)와 클라이언트-서버-암호화된 복호화 키 세트(클라이언트-서버-암호화된 복호화 키들의 세트)를 비교하여, 서버 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트와 클라이언트-서버-암호화된 복호화 키 세트 모두에 존재하는 암호화된 복호화 키를 식별한다. 서버 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트는 클라이언트(202)에 의해 생성된 클라이언트-암호화된 쿼리 세트와 연관되어 있음을 유의한다. 매트릭스 P의 M*N 식별자와 클라이언트-서버-암호화된 복호화 키 세트에 기초하여 서버 데이터베이스에 있는 키-값 쌍과 연결된다.
단계(254)를 구현하기 위해, 서버(202)는 인디케이터 매트릭스(indicator matrix)의 각 요소가 0 또는 1인 차원 MxN의 인디케이터 매트릭스을 생성할 수 있다. 예를 들어, 인디케이터 매트릭스의 요소는 해당 요소가 매치하는 복호화 키인 경우 값 1을 갖는다. 요소가 매치하는 복호화 키가 아닌 경우 해당 값은 0으로 설정된다.
일부 구현에서, 서버(202)는 매칭 복호화 키 맵으로도 지칭될 수 있는 인디케이터 매트릭스(또는 매칭하는 복호화 키)에 기초하여 클라이언트-암호화된 쿼리 세트(클라이언트-암호화된 쿼리들의 세트)로부터 유효한 쿼리를 필터링할 수 있다. 클라이언트-암호화된 쿼리 세트는 차원 MxN의 매트릭스 P에 기초하여 클라이언트(202)에 의해 생성되었음을 상기하며, 여기서 M은 엔티티의 수이고 그리고 N은 엔티티 식별자의 수이며, 각 엔티티 식별자는 클라이언트(202)가 프로세스(200)의 단계(222)에서 이전 클라이언트 암호화를 제거한 후 서버-암호화(server encrypted)되었다. 클라이언트(202)는 각각의 서버-암호화된 식별자에 대해 클라이언트-암호화된 쿼리를 생성하여 총 M*N개의 클라이언트-암호화된 쿼리를 생성했음을 추가로 상기한다. 클라이언트-암호화된 쿼리 세트로부터 유효한 쿼리를 필터링하기 위해 서버(204)는 인디케이터 매트릭스(indicator matrix)의 해당 요소가 값 1을 갖는 클라이언트-암호화된 쿼리를 선택한다. 다시 말해서, 서버(204)는 대응하는 클라이언트-서버-암호화된 복호화 키가 매칭 복호화 키인 클라이언트-암호화된 쿼리들의 세트로부터 쿼리들을 선택한다. 인디케이터 매트릭스의 해당 요소 값이 0인 나머지 클라이언트-암호화된 쿼리의 경우 선택되지 않는다.
서버(204)는 서버 데이터베이스에서 베스트 매치(best match)를 갖는 클라이언트-암호화된 쿼리를 선택한다(256). 앞서 언급된 바와 같이, 클라이언트(202)는 하나 이상의 엔티티 각각에 복수의 엔티티 식별자를 할당할 수 있다. 예를 들어, 클라이언트(202)는 M개의 사용자를 갖고 M개의 사용자 각각에게 클라이언트(202)는 N개의 엔티티 식별자를 할당한다. 복수의 클라이언트-암호화된 쿼리를 수신한 후 서버(204)는 서버 데이터베이스에서 가장 잘 매치하는 쿼리에 기초하여 데이터를 선택한다. 쿼리 선택은 예를 들어 서버가 가장 높은 우선순위 및/또는 순서가 할당된 엔티티 식별자에 대응하는 콘텐츠를 선택할 수 있는 필터를 사용하여 수행될 수 있다.
프로세스(200)는 N개의 엔티티 식별자가 순서대로(1에서 N까지) 있고 서버(204)가 그 순서에 기초하여 콘텐츠를 선택할 수 있다고 가정하기 때문에, 서버(202)는 동일한 순서를 사용하여 클라이언트-암호화된 쿼리를 선택할 수 있다. 예를 들어, M명의 사용자 중 특정 사용자에게 N개의 엔티티 식별자와 인디케이터 매트릭스의 해당 이진 벡터가 할당된다. 이 예에서, 서버(204)는 이진 벡터에서 대응하는 값이 1이고 동시에 이진 벡터에서 1의 첫 번째 발생인 엔티티 식별자에 기초하여 단일 클라이언트-암호화된 쿼리를 선택할 것이다. 서버(204)에 의해 구현된 이 로직은 선택된 쿼리가 유효하고 클라이언트(202)와 서버(204) 모두에 의해 미리 지정된 엔티티 식별자의 순서에 따라 유효하도록 허용한다.
서버(204)는 서버 데이터베이스에서 필터링된 클라이언트-암호화된 쿼리를 실행한다(258). 엔티티 식별자의 순서에 따라 그리고 유효한 쿼리를 필터링한 후, 서버(204)는 콘텐츠를 검색하기 위해 서버-암호화된 데이터베이스에 대한 쿼리를 실행할 수 있다. 서버(204)는 프로세스(400)(프로세스(200)의 단계(236)를 참조하여 설명됨)를 사용하여, 쿼리의 샤드 인덱스를 사용하여 샤드를 식별한 다음 서버(204)에 의해 수행된 흡수 연산을 사용하여 선택된 FHE 암호화된 값의 목록을 생성하기 위해 샤드의 각 버킷을 쿼리한다.
서버(204)는 FHE 암호화된 값의 목록을 클라이언트(202)로 전송한다(260). 서버(204)는 필터링된 쿼리 각각에 대한 버킷 벡터 및 c-바이트 청크의 FHE 암호화 값 목록을 생성한 후 네트워크(102)를 통해 하나 이상의 목록을 클라이언트(202)에 전송한다.
클라이언트(202)는 클라이언트-파생된 복호화 키를 사용하여 FHE 암호화를 복호화한다(262). 일부 구현에서, 클라이언트(202)에 의해 전송된 쿼리 각각에 대한 c-바이트 청크 및 버킷 벡터의 FHE 암호화된 값의 목록을 수신한 후, 클라이언트는 쿼리되고 원래 서버 데이터베이스에 저장된 키-값 쌍의 값을 획득하기 위해 FHE 암호화를 복호화하기 위해 프로세스(200)의 단계 226에서 생성된 복호화 키를 사용할 수 있다.
도 3은 서버-암호화된 식별자들로부터 쿼리를 생성하는 예시적인 프로세스(300)의 흐름도이다. 프로세스(300)는 단일 식별자를 참조하여 설명되지만 다중 식별자에 대해 수행될 수 있다. 프로세스(300)의 동작은 예를 들어 클라이언트(202) 또는 다른 엔티티로부터 콘텐츠를 검색하기 위해 이 문서에 설명된 기술을 구현하는 임의의 엔티티에 의해 구현될 수 있다. 프로세스(300)의 동작은 또한 하나 이상의 컴퓨터 판독 가능 매체에 저장된 명령어로서 구현될 수 있으며, 이는 비일시적일 수 있고, 하나 이상의 데이터 처리 장치에 의한 명령어의 실행은 하나 이상의 데이터 처리 장치가 프로세스(300)의 동작을 수행하게 할 수 있다.
도 3은 예시적인 식별자(350)(john.smith@example.com)를 사용하여 쿼리를 생성하는 프로세스(300)를 설명한다. 프로세스(200)의 단계(222)를 사용하여 식별자(350)를 처리(프로세싱)한 후, 식별자(350)를 나타내는 서버-암호화된 식별자(360)는 SERV_ENC{john.smith@example.com}:=adhf8f2g&34!d0sfgn2로 표시되며, 여기서 SERV_ENC는 클라이언트(202)가 단계 214에서 추가된 클라이언트 암호화를 제거한 후 식별자(350)의 서버 암호화이고 그리고 "adhf8f2g&34!d0sfgn2"는 서버-암호화된 식별자(350)의 암호문을 나타낸다.
클라이언트(202)는 서버-암호화된 식별자를 해시(해싱)하여 무부호 정수를 생성한다(310). 일부 구현에서, 클라이언트(202)는 서버-암호화된 식별자(360)를 처리하여 무부호 정수(370)를 생성하도록 구성된 해시 함수를 구현할 수 있다. 이는 HASH_FN[SERV_ENC{john.smith@example.com}]:= 324423510001001110으로 나타낼 수 있으며, 여기서 HASH_FN은 클라이언트(202)에 의해 구현된 해시 함수이고 "324423510001001110"은 무부호 정수이다. 해시 함수(암호화 해시 함수라고도 함)는 실질적으로 반전 또는 반전이 불가능하고, 임의 크기의 데이터를 고정 크기 값으로 매핑하는 데 사용할 수 있는 단방향 함수일 수 있다. 이러한 해시 함수의 예로는 MD5 메시지 다이제스트 알고리즘(MD5 message-digest algorithm), 보안 해시 알고리즘(Secure Hash Algorithm) 1, 2 및 3이 있다.
클라이언트(202)는 무부호 정수를 지정된 범위 내에 있는 변환된 넘버(숫자)로 변환한다(320). 일부 구현에서, 클라이언트(202)는 지정된 범위 내에 있는 변환된 숫자(380)를 생성하기 위해 무부호 정수(370)를 처리하도록 구성된 변환 함수를 구현할 수 있다. 해시 함수와 변환 함수는 클라이언트(202)와 서버(204) 모두가 알고 있으므로, 변환 함수를 사용하여 생성되는 변환된 숫자의 범위는 미리 지정된다. 이 예에서, 변환된 숫자 380은 CONV[HASH_FN[SERV_ENC{john.smith@example.com }]]:= 324425로 표시되며, 여기서 CONV는 클라이언트(202)에 의해 구현된 변환 함수이다. 예를 들어, 무부호 정수를 0에서 9999 사이의 숫자로 변환하는 한 가지 방법은 무부호 정수의 나머지를 10000으로 나눈 값을 사용하는 것이다.
클라이언트(202)는 변환된 넘버를 샤드 인덱스와 버킷 ID(bucket-id)로 분할한다(330). 샤드 인덱스는 0에서 P-1 사이의 숫자이며, 여기서 P는 샤드 수이다. 버킷 ID의 범위는 0과 n/P-1 사이이며, 여기서 n은 단계 320에서 생성된 변환된 숫자(380)가 취할 수 있는 가장 큰 값이다. 일부 구현에서, 클라이언트(202)는 첫 번째 부분이 샤드 인덱스이고 두 번째 부분이 버킷 ID가 되도록 단계 320에서 생성된 변환된 숫자(380)를 두 부분으로 나눈다(split). 예를 들어, n이 변환된 숫자(380)가 취할 수 있는 가장 큰 값인 경우 숫자 n을 나타내는 데 필요한 비트 수는 log2n 비트이다. 이러한 시나리오에서, P가 2의 거듭제곱(P = 2^K일 때)이면 클라이언트(202)는 처음 K 비트를 샤드 인덱스로 사용할 수 있고 나머지 비트를 버킷 ID로 사용할 수 있다. 이 예에서, 클라이언트(202)는 도 3에 도시된 바와 같이 변환된 숫자(380)를 결과의 두 부분으로 분할(나눈)하여 샤드 인덱스가 32이고 버킷 ID가 4425가 되도록 한다(390). 다른 구현에서, P가 샤드의 수를 나타내는 경우 변환된 수를 P로 나눈 나머지로 샤드 인덱스를 계산할 수 있다. 이 경우, 버킷 ID는 변환된 숫자를 P로 나눌 때 정수 몫으로 계산될 수 있다. 이 경우 P=100이면 인덱스 25와 버킷 ID 3244를 샤드한다.
도 4는 서버-암호화된 데이터베이스로부터 서버-암호화된 복호화 키 세트를 검색하기 위해 쿼리를 처리하는 예시적인 프로세스(400)의 흐름도이다. 프로세스(400)의 동작은 예를 들어 서버(204) 또는 콘텐츠가 검색되는 데이터베이스를 구현하는 임의의 엔티티에 의해 구현될 수 있다. 프로세스(400)의 동작은 또한 비일시적일 수 있는 하나 이상의 컴퓨터 판독 가능 매체에 저장된 명령어로서 구현될 수 있으며, 하나 이상의 데이터 처리 장치에 의한 명령어의 실행은 하나 이상의 데이터 처리 장치가 프로세스(400)의 동작을 수행하게 할 수 있다.
각각의 쿼리에 대해, 서버(204)는 쿼리의 샤드 인덱스를 사용하여 서버-암호화된 데이터베이스에서 샤드를 식별한다(402). 프로세스(200)의 단계 224-228을 참조하여 앞서 언급한 바와 같이, 각각의 쿼리는 샤드 인덱스 및 대응하는 FHE 암호화된 버킷 벡터를 포함한다. 쿼리를 수신한 후, 서버(204)는 쿼리의 샤드 인덱스에 기초하여 특정 샤드를 식별한다. 예를 들어 쿼리의 샤드 인덱스가 32인 경우 서버는 서버-암호화된 데이터베이스의 샤드 인덱스에 기초하여 32번째 샤드를 식별한다. 또한 쿼리에 대한 정보가 쿼리된 샤드에 기초하여 수집되는 것을 방지하기 위해 각 샤드가 정확히 동일한 횟수로 선택되도록 시스템을 설계할 수 있다.
각각의 쿼리에 대해, 서버(204)는 샤드의 각 버킷을 쿼리하고 서버-암호화된 복호화 키 세트(서버-암호화된 복호화 키들의 세트)를 생성한다(404). 일부 구현에서, 서버는 클라이언트-암호화된 쿼리에 포함된 데이터베이스 버킷 식별자에 기초하여 서버-암호화된 복호화 키 세트를 생성할 수 있다. 서버-암호화된 복호화 키 세트에는 클라이언트-암호화된 쿼리에 포함된 버킷 식별자에 해당하는 각 데이터베이스 엔티티에 대한 서버-암호화된 복호화 키가 포함된다. 일부 구현에서, 서버(204)는 쿼리로부터의 FHE 암호화된 버킷 벡터를 사용하여 샤드 인덱스에 의해 식별된 특정 샤드의 각 버킷을 쿼리한다. 예를 들어, 쿼리의 샤드 인덱스를 사용하여 식별된 샤드에 32개의 버킷이 있는 경우 서버(204)는 32개의 버킷 각각을 쿼리한다.
버킷을 쿼리하는 방법은 다양하며 적절한 버킷 쿼리 기술을 사용할 수 있다. 예를 들어, 서버(204)는 특정 버킷에 대한 FHE 암호화된 값을 획득하기 위해 쿼리로부터 FHE 암호화된 버킷 벡터에 대해 OEO(oblivious expansion operation)을 수행한다. 그런 다음 특정 버킷에 대한 FHE 암호화된 값과 버킷의 각 c-바이트 청크 간에 별도의 FHE 흡수 연산을 수행한다. 이는 다음의 비제한적인 예를 통해 논리적으로 설명될 수 있다.
예를 들어, 특정 샤드에 4개의 버킷이 있다고 가정한다. 또한 첫 번째 버킷에 다음 청크 ["A", "B", "C", "D"]가 있다고 가정한다. 마찬가지로 두 번째, 세 번째 및 네 번째 버킷에는 각각 다음 청크 ["E", "F", "G"], ["H"] 및 ["I", "J", "K"]가 있다. 또한 인디케이터 벡터가 [0, 1, 0, 0]이라고 가정한다. 흡수 연산은 [0, "E", 0, 0]으로 표시될 수 있는 4개의 버킷 모두에서 인덱스 1을 가진 청크의 서버-암호화된 복호화 키를 생성한다. 마찬가지로 4개의 모든 버킷에서 인덱스가 2-4인 청크의 FHE 암호화된 값은 각각 [0, "F", 0, 0], [0, "G", 0, 0] 및 [0, 0, 0, 0]이다.
일부 구현에서, 서버(204)는 모든 버킷에 걸쳐 FHE 덧셈 연산을 사용하여 버킷 벡터 및 c-바이트 청크의 서버-암호화된 복호화 키의 값을 집계하고 서버-암호화된 복호화 키 세트를 생성할 수 있다. 다시 말해, 동일한 쿼리 및 청크 인덱스(chunk_index)로 이전에 설명된 트리플 세트(set of triples)의 모든 엔트리는 서버-암호화된 복호화 키를 합산하여 하나로 결합된다. 예를 들어, 특정 인덱스(예를 들어, 인덱스 1)가 있는 c-바이트 청크와 버킷 벡터의 서버-암호화된 복호화 키의 값들에 대한 집계 연산은 샤드의 4개 버킷 모두에서 인덱스가 1인 모든 청크 중에서 청크 "E"를 선택한다. 유사하게, 두 번째, 세 번째 및 네 번째 인덱스에 있는 청크의 집계 값은 샤드의 모든 버킷에서 각각 "F","G" 및 0이다. 서버(204)는 버킷에서 청크를 선택한 후 서버-암호화된 복호화 키 세트를 생성하고 클라이언트(202)에 해당 세트를 전송할 수 있다. 예를 들어, 서버는 흡수 연산을 사용하여 선택된 서버-암호화된 복호화 키의 세트 ["E", "F", "G"]를 생성하고 클라이언트(202)에 세트를 전송할 수 있다.
프로세스(400)는 다중 쿼리가 다중 컴퓨팅 시스템에서 병렬로 처리되는 방식으로 구현된다. 일부 구현에서, 모든 쿼리가 쿼리의 배치로 처리될 수 있도록 하는 맵 축소 프로세스가 사용될 수 있으며, 이는 쿼리에 대한 응답을 생성하는 데 필요한 시간을 줄이고 각 쿼리를 개별적으로 처리하는 것에 비해 처리 리소스를 절약한다. 예를 들어, 데이터베이스가 해싱 키에 의해 n개의 버킷으로 분할되고 버킷이 선행 k 비트에 기초하여 샤드로 분할된다고 가정한다. 이 예에서 서버는 각 쿼리와 함께 제출된 제공된 샤드 인덱스에 기초하여 샤드별로 쿼리를 분할할 수 있다. 그런 다음 서버는 암호화된 버킷 선택기를 압축 해제하여 각 쿼리를 해당 샤드의 서버-암호화된 복호화 키 버킷으로 팬아웃( fan out)할 수 있다. 각 샤드 내에서, 각 버킷은 버킷에 대한 쿼리의 서버-암호화된 복호화 키와 조인된다. 각 버킷에 대해: 버킷 청크 및 쿼리의 서버-암호화된 복호화 키의 데카르트(cartesian) 곱의 각 쌍에 대해 FHE 흡수를 수행한다. 이 단계의 출력은 (query_id, chunk_index) 쌍에서 서버-암호화된 복호화 키에 대한 멀티맵이다. 값은 집계기로 FHE 덧셈을 사용하여 집계된다. 이는 멀티맵이 아니라는 점을 제외하고 이전 단계와 동일한 출력 형식을 가지며, 각 키에는 정확히 하나의 서버-암호화된 복호화 키가 있다. 청크 인덱스(chunk_index)로 정렬된 서버-암호화된 복호화 키 세트가 집계되고 출력 형식은 쿼리에서 서버-암호화된 복호화 키 세트로의 맵이다. 샤드당 동일한 수의 쿼리를 제공하고 적절한 샤딩(sharding)을 사용하면 쿼리 배포에 대한 정보를 공개하지 않고 많은 샤드를 보유하여 계산 비용을 줄일 수 있다.
클라이언트(202)는 서버 데이터베이스에 저장된 키-값 쌍의 값의 서브세트만을 조회한다. 키-값 쌍 및 클라이언트-암호화된 쿼리와 관련된 복호화 키 세트를 선택하기 위해, 서버(204)는 서버-암호화된 데이터베이스에 대한 쿼리를 실행하여 서버 데이터베이스의 다른 키-값 쌍과 연결되지 않은 복호화 키를 필터링한다. 다시 말해서, 서버(204)는 클라이언트 암호화 쿼리에 대응하는 서버-암호화된 복호화 키를 선택한다.
도 5는 클라이언트 쿼리에 응답하여 데이터를 제공하기 위한 예시적인 프로세스(500)의 흐름도이다. 프로세스(500)의 동작은 서버(202)에 의해 수행되는 것으로 아래에서 설명된다. 프로세스(500)의 동작은 단지 예시를 위해 아래에서 설명된다. 프로세스(500)의 동작은 임의의 적절한 장치 또는 시스템, 예를 들어 임의의 적절한 데이터 처리 장치에 의해 수행될 수 있다. 프로세스(500)의 동작은 또한 비일시적 컴퓨터 판독가능 매체에 저장된 명령어로서 구현될 수 있다. 명령어의 실행은 하나 이상의 데이터 처리 장치가 프로세스(500)의 동작을 수행하게 한다.
서버(204)는 클라이언트 장치에 의해 암호화된 클라이언트-암호화된 쿼리 세트(클라이언트-암호화된 쿼리들의 세트)를 수신한다(502). 클라이언트(202)는 하나 이상의 엔티티 각각에 하나 이상의 엔티티 식별자를 할당함으로써 하나 이상의 엔티티를 고유하게 식별할 수 있다. 클라이언트(202)는 MxN 차원의 매트릭스(매트릭스 P로 지칭됨)로서 엔티티 식별자를 유지할 수 있으며, 여기서 M은 엔티티의 수이고 N은 엔티티 식별자의 수이다.
이전에 설명된 바와 같이, 서버(204)가 플레인텍스트로 엔티티 식별자에 액세스하는 것을 방지하기 위해, 클라이언트(202)는 엔터티 식별자("클라이언트-암호화된 식별자"라고 함)의 암호화된 형태를 생성하기 위해 결정론적 교환 암호화 기술을 사용하여 매트릭스 P의 엔터티 식별자를 암호화하고 클라이언트-암호화된 식별자를 서버(204)에 전송한다. 클라이언트-암호화된 식별자를 수신한 후, 서버(204)는 교환 암호화 기술을 사용하여 클라이언트-암호화된 식별자를 재암호화하여 암호화된 형태의 클라이언트-암호화된 식별자("서버-클라이언트-암호화된 식별자"라고 함)를 생성하고 이를 클라이언트(202)로 다시 전송한다.
일부 구현에서, 서버(204)는 또한 클라이언트(202)로 다시 전송하기 전에 서버-클라이언트-암호화된 식별자 세트를 셔플링할 수 있다. 이 셔플링은 서버-클라이언트-암호화된 식별자 세트와 순서가 다른 셔플된 서버-클라이언트-암호화된 식별자 세트를 생성하며, 이는 클라이언트가 서버(204)에 원래 제출된 클라이언트-암호화된 식별자에 대응하는 서버-클라이언트-암호화된 식별자를 식별할 수 없도록 한다. 이러한 구현에서, 서버(204)는 셔플된 서버-클라이언트-암호화된 식별자를 클라이언트 장치(202)에 전송한다. 또한, 서버가 셔플링을 수행할 때, 서버는 셔플된 서버-클라이언트-암호화된 식별자 세트를 사용하여 생성된 셔플된 클라이언트-암호화된 쿼리 세트를 수신할 수 있으며, 이는 쿼리가 셔플된 서버-클라이언트-암호화된 식별자를 사용하여 클라이언트에 의해 생성되기 때문이다.
서버-클라이언트-암호화된 식별자를 수신한 후, 클라이언트(202)는 각각의 서버-클라이언트-암호화된 식별자로부터 "서버-암호화된 식별자"를 생성하기 위해 단계 214에서 클라이언트(202)에 의해 수행된 암호화를 복호화(또는 제거)하는 기술을 사용한다. 클라이언트(202)는 샤드 인덱스 및 버킷 식별자(버킷 ID라고도 함)를 포함할 수 있는 쿼리를 생성하기 위해 해싱 기술(도 3 및 프로세스(300)를 참조하여 설명됨)을 구현함으로써 각 서버-암호화된 식별자에 대한 샤드 인덱스 및 버킷 식별자를 생성한다. 클라이언트(202)는 클라이언트-암호화된 쿼리 세트라고 하는 M*N 서버-클라이언트-암호화된 식별자 각각에 대한 쿼리를 생성한다. 그런 다음 클라이언트(202)는 클라이언트-암호화된 쿼리 세트를 서버(204)에 전송한다.
서버(204)는 서버-암호화된 복호화 키 세트를 식별한다(504). 위에서 설명된 바와 같이, 서버(202)는 AES와 같은 암호화 기술을 사용하여 암호화된 서버 데이터베이스의 키-값 쌍의 값 각각에 대한 복호화 키를 생성할 수 있다. 서버(204)는 서버-암호화된 복호화 키를 저장하는 데이터베이스(서버-암호화된 데이터베이스라고 함)를 생성함으로써 서버-암호화된 복호화 키를 유지할 수 있다. 서버(204)는 서버-암호화된 데이터베이스를 샤드로 분할하고 샤드를 버킷으로 분할한다. 서버-암호화된 복호화 키 세트를 식별하기 위해, 서버(204)는 서버-암호화된 복호화 키 세트를 생성하기 위해 프로세스(400)를 사용하여 서버-암호화된 데이터베이스에 대한 M*N 클라이언트-암호화된 쿼리 각각을 실행한다.
서버(204)는 서버-암호화된 복호화 키 세트를 클라이언트(202)에 전송한다(506). 예를 들어, 서버-암호화된 복호화 키 세트를 생성한 후, 서버(204)는 서버-암호화된 복호화 키 세트에서 M*N개의 서버-암호화된 복호화 키를 셔플링한다. 서버(204)는 셔플된 서버-암호화된 복호화 키 세트를 네트워크(102)를 통해 클라이언트(202)에 전송한다.
서버(204)는 클라이언트-서버-암호화된 복호화 키 세트를 수신한다(508). 위에서 설명된 바와 같이, 서버(204)로부터 서버-암호화된 복호화 키 세트를 수신한 후, 클라이언트(202)는 클라이언트-서버-암호화된 복호화 키들의 세트를 생성하기 위해 교환 암호화 기술을 사용하여 서버-암호화된 복호화 키들의 세트에 있는 M*N개의 서버-암호화된 복호화 키들을 재암호화(예를 들어, 추가로 암호화)한다. 클라이언트(202)는 클라이언트-서버-암호화된 복호화 키 세트를 네트워크(102)를 통해 서버(204)로 전송한다. 서버(204)는 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트를 수신한다(510). 예를 들어, 프로세스(200)의 단계(226)에서 클라이언트 파생 복호화 키 세트를 생성한 후, 클라이언트(202)는 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트를 생성하기 위해 교환 암호화 기술을 사용하여 클라이언트 유래 복호화 키 세트 내의 클라이언트 유래 복호화 키 각각을 암호화한다. 클라이언트 파생 복호화 키 세트에서 클라이언트 파생 복호화 키 각각을 암호화한 후, 클라이언트(202)는 네트워크(102)를 통해 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트를 전송하고, 클라이언트-암호화된/클라이언트-파생된 복호화 키가 서버(204)에 의해 수신된다.
서버가 서버-클라이언트-암호화된 식별자 세트를 셔플링한 경우, 위에서 설명한 바와 같이 클라이언트에 의해 생성된 복호화 키(즉, 클라이언트-파생된 복호화 키)가 셔플링된다. 이러한 상황에서, 서버(204)는 (i) 셔플된 서버-클라이언트-암호화된 식별자를 사용하여 클라이언트 장치에 의해 파생(derived)되고 (ii) 클라이언트 장치에 의해 암호화된 셔플된 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트(클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트)를 수신한다. 차례로, 서버(204)는 셔플링을 제거할 수 있다.
서버는 (i) 클라이언트-서버-암호화된 복호화 키 세트와 (ii) 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트 사이의 매치(matches)를 지정하는 매칭(matching) 복호화 키 맵을 생성한다(512). 클라이언트-서버-암호화된 복호화 키 세트를 수신한 후, 서버(204)는 M*N 클라이언트-서버-암호화된 복호화 키 각각에 대한 "클라이언트-암호화된 복호화 키"를 생성하기 위해 단계 242에서 서버(204)에 의해 수행된 암호화를 복호화(또는 제거)하는 기술을 사용한다.
서버(204)가 복호화 키를 셔플링한 상황에서, 서버(204)는 M*N개의 서버-암호화된 복호화 키를 생성한 후 서버-암호화된 복호화 키를 언셔플링하여 프로세스(200)의 선택적 단계(238)에서 서버에 의해 수행된 셔플링을 무효화한다. 서버(204)는 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트와 클라이언트-암호화된 복호화 키 세트를 비교하여 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트와 클라이언트-암호화된 복호화 키 세트 모두에 존재하는 클라이언트-암호화된 복호화 키를 식별한다. 서버(202)는 인디케이터 매트릭스의 각 요소가 0 또는 1인 차원 MxN의 인디케이터 매트릭스을 생성할 수 있다. 예를 들어, 인디케이터 매트릭스의 요소는 해당 요소가 매치하는 복호화 키인 경우 값 1을 갖으며, 요소가 매치하는 복호화 키가 아닌 경우 해당 값은 0으로 설정된다.
본 명세서 전반에 걸쳐 사용된 바와 같이, "매칭 복호화 키 맵"이라는 문구는 해당 표현의 형식에 관계없이 클라이언트-암호화된/클라이언트-파생된 복호화 키를 클라이언트-암호화된 복호화 키와 비교함으로써 식별된 매칭 복호화 키 세트(매칭 복호화 키들의 세트)의 표현을 나타낸다. 매칭 복호화 키 맵은 (i) 클라이언트-서버-암호화된 복호화 키 세트와 (ii) 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트 간의 매치를 지정한다.
일부 구현에서, 매칭 복호화 키 맵을 생성하는 것은 서버에 의해 클라이언트-서버-암호화된 복호화 키의 세트로부터 서버 암호화를 제거하여 클라이언트-암호화 복호화 키의 복구된 세트를 초래하는 것을 포함할 수 있다. 복구된 클라이언트-암호화된 복호화 키 세트에는 클라이언트-암호화된 쿼리에 포함된 버킷 식별자에 해당하는 각 데이터베이스 엔티티에 대한 각 해당 복호화 키의 클라이언트 암호화 버전이 포함된다. 매칭 복호화 키 맵의 생성은 또한 서버에 의해 복구된 클라이언트-암호화된 복호화 키 세트를 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트와 비교하는 것을 포함할 수 있으며, 상기 비교에 기초하여, 복구된 클라이언트-암호화된 복호화 키 세트 모두에 포함된 클라이언트-암호화된 복호화 키를 클라이언트-암호화된/클라이언트-파생된 복호화 키 세트에 매칭시키는 표시를 생성하는 단계를 포함한다.
서버(204)는 필터링된 클라이언트-암호화된 쿼리 세트를 생성하기 위해 매칭 복호화 키 맵을 사용하여 클라이언트-암호화된 쿼리를 필터링한다(514). 서버(202)는 인디케이터 매트릭스(또는 매칭 복호화 키)에 기초하여 클라이언트-암호화된 쿼리 세트로부터 유효한 쿼리를 필터링할 수 있다. 클라이언트-암호화된 쿼리 세트로부터 유효한 쿼리를 필터링하기 위해 서버(204)는 인디케이터 매트릭스의 해당 요소가 값 1을 갖는 클라이언트-암호화된 쿼리를 선택한다. 다시 말해서, 서버(204)는 대응하는 클라이언트-암호화된 복호화 키가 매칭 복호화 키인 클라이언트-암호화된 쿼리 세트로부터 쿼리를 선택한다. 인디케이터 매트릭스의 해당 요소 값이 0인 나머지 클라이언트-암호화된 쿼리의 경우 선택되지 않는다. 일부 구현에서, 클라이언트-암호화된 쿼리 세트의 필터링은 클라이언트-암호화된 쿼리에서, 클라이언트-암호화된/클라이언트-파생된 복호화 키와 매칭하지 않는 복구된 클라이언트-암호화된 복호화 키 세트에 해당하는 데이터베이스 엔티티에 대한 버킷 식별자가 있는 쿼리를 제거함으로써 수행된다.
서버(204)는 다중 클라이언트-암호화된 쿼리를 수신한 후 서버 데이터베이스에서 가장 잘 매치(best match)하는 쿼리에 기초하여 데이터를 선택한다. 예를 들어, 서버는 가장 높은 우선순위 및/또는 순서가 할당된 엔티티 식별자에 해당하는 콘텐츠를 선택할 수 있다. 예를 들어, M명의 사용자 중 특정 사용자에게 N개의 엔티티 식별자와 인디케이터 매트릭스의 해당 이진 벡터가 할당된다. 서버(204)는 이진 벡터에서 대응하는 값이 1이고 동시에 이진 벡터에서 1의 첫 번째 발생인 엔티티 식별자에 기초한 단일 클라이언트-암호화된 쿼리를 선택할 것이다. 일부 상황에서는 앞에서 설명한 것처럼 매치하는 가장 잘 정의된 쿼리가 된다. 서버(204)에 의해 구현된 이 로직은 선택된 쿼리가 유효하고 클라이언트(202)와 서버(204) 모두에 의해 미리 지정된 엔티티 식별자의 순서에 따라 유효하도록 허용한다.
서버(204)는 필터링된 클라이언트-암호화된 쿼리 세트를 사용하여 쿼리 결과 세트를 생성한다(516). 유효하고 엔티티 식별자의 순서에 따른 쿼리를 필터링한 후, 서버(204)는 콘텐츠를 검색하기 위해 서버 데이터베이스에 대한 쿼리를 실행할 수 있다. 서버(204)는 프로세스(400)(프로세스(200)의 단계(236)를 참조하여 설명됨)를 사용하여 쿼리의 샤드 인덱스를 사용하여 샤드를 식별한 다음, 서버(204)에 의해 수행된 흡수 연산을 사용하여 선택된 FHE 암호화된 값의 목록을 생성하기 위해 샤드의 각 버킷을 쿼리한다. 물론, 쿼리를 필터링하는 대신 쿼리를 실행하고 결과를 필터링할 수 있지만(더 많은 처리가 필요함), 쿼리를 실행하기 전에 쿼리를 필터링하면 더 효율적인 정보 검색 프로세스로 이어질 수 있다.
도 6는 위에서 설명된 동작을 수행하는 데 사용될 수 있는 예시적인 컴퓨터 시스템(600)의 블록도이다. 시스템(600)은 프로세서(610), 메모리(620), 저장 장치(630), 및 입/출력 장치(640)를 포함한다. 컴포넌트(610, 620, 630, 640) 각각은 예를 들어 시스템 버스(650)를 사용하여 상호연결될 수 있다. 프로세서(610)는 시스템(600) 내에서 실행하기 위한 명령어을 처리할 수 있다. 일부 구현에서, 프로세서(610)는 단일 스레드 프로세서이다. 다른 구현에서, 프로세서(610)는 다중 스레드 프로세서이다. 프로세서(610)는 메모리(620) 또는 저장 장치(630)에 저장된 명령어를 처리할 수 있다.
메모리(620)는 시스템(600) 내의 정보를 저장한다. 일 구현에서, 메모리(620)는 컴퓨터 판독가능 매체이다. 일부 구현에서, 메모리(620)는 휘발성 메모리 유닛이다. 다른 구현에서, 메모리(620)는 비휘발성 메모리 유닛이다.
저장 장치(630)는 시스템(600)에 대용량 저장 장치를 제공할 수 있다. 일부 구현에서, 저장 장치(630)는 컴퓨터 판독 가능 매체이다. 다양한 다양한 구현에서, 저장 장치(630)는 예를 들어 하드 디스크 장치, 광 디스크 장치, 네트워크를 통해 여러 컴퓨팅 장치(예: 클라우드 저장 장치)에 의해 공유되는 저장 장치, 또는 일부 다른 대용량 저장 장치를 포함할 수 있다.
입/출력 장치(640)는 시스템(600)에 대한 입/출력 동작을 제공한다. 일부 구현에서, 입/출력 장치(640)는 네트워크 인터페이스 장치(예: 이더넷 카드), 직렬 통신 장치(예: RS-232 포트), 및/또는 무선 인터페이스 장치(예: 802.11 카드) 중 하나 이상을 포함할 수 있다. 다른 구현에서, 입/출력 장치는 입력 데이터를 수신하고 출력 데이터를 외부 장치(660), 예를 들어, 키보드, 프린터 및 디스플레이 장치로 보내도록 구성된 드라이버 장치를 포함할 수 있다. 그러나, 모바일 컴퓨팅 장치, 모바일 통신 장치, 셋톱 박스 텔레비전 클라이언트 장치 등과 같은 다른 구현도 사용될 수 있다.
예시적인 처리 시스템이 도 6에 설명되어 있지만, 본 명세서에 기술된 주제 및 기능적 동작의 구현은 다른 유형의 디지털 전자 회로, 또는 컴퓨터 소프트웨어, 펌웨어 또는 하드웨어(본 명세서에 개시된 구조 및 그 구조적 등가물 포함), 또는 이들 중 하나 이상의 조합으로 구현될 수 있다.
본 명세서에 기술된 요지 및 동작의 실시예는 디지털 전자 회로, 또는 본 명세서에 개시된 구조 및 그 구조적 등가물을 포함하는 컴퓨터 소프트웨어, 펌웨어 또는 하드웨어, 또는 이들 중 하나 이상의 조합으로 구현될 수 있다. 본 명세서에 기술된 요지의 실시예는 하나 이상의 컴퓨터 프로그램, 즉, 데이터 처리 장치에 의해 실행되거나 데이터 처리 장치의 동작을 제어하기 위해 컴퓨터 저장 매체(미디어)에 인코딩된 컴퓨터 프로그램 명령어의 하나 이상의 모듈로서 구현될 수 있다. 대안으로 또는 추가적으로, 프로그램 명령어는 데이터 처리 장치에 의한 실행을 위해 적절한 수신기 장치로 전송하기 위한 정보를 인코딩하기 위해 생성된 인공적으로 생성된 전파 신호, 예를 들어 기계 생성 전기, 광학 또는 전자기 신호에 인코딩될 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독 가능 저장 장치, 컴퓨터 판독 가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 어레이 또는 장치, 또는 이들 중 하나 이상의 조합일 수 있거나 이에 포함될 수 있다. 더욱이, 컴퓨터 저장 매체는 전파 신호가 아니지만, 컴퓨터 저장 매체는 인위적으로 생성된 전파 신호로 인코딩된 컴퓨터 프로그램 명령어의 소스 또는 목적지가 될 수 있다. 컴퓨터 저장 매체는 또한 하나 이상의 개별 물리적 컴포넌트 또는 매체(예: 다중 CD, 디스크 또는 기타 저장 장치)일 수 있거나 이에 포함될 수 있다.
본 명세서에서 설명되는 동작들은 하나 이상의 컴퓨터 판독 가능 저장 장치에 저장되거나 다른 소스로부터 수신된 데이터에 대해 데이터 처리 장치가 수행하는 동작으로 구현될 수 있다.
"데이터 처리 장치"라는 용어는 데이터를 처리하기 위한 모든 종류의 장치, 장치 및 기계를 포함하며, 예를 들어 프로그래밍 가능한 프로세서, 컴퓨터, 칩 시스템 상의 시스템, 또는 전술한 것들의 다중 또는 조합을 포함한다. 장치는 예를 들어 FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)와 같은 특수 목적 논리 회로를 포함할 수 있다. 장치는 하드웨어 외에도 문제의 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드(예: 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 플랫폼 간 런타임 환경을 구성하는 코드), 가상 머신, 또는 이들 중 하나 이상의 조합을 포함할 수 있다. 장치 및 실행 환경은 웹 서비스, 분산 컴퓨팅 및 그리드 컴퓨팅 인프라와 같은 다양한 컴퓨팅 모델 인프라를 실현할 수 있다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트 또는 코드라고도 함)은 컴파일 또는 해석된 언어, 선언적 또는 절차적 언어를 포함한 모든 형태의 프로그래밍 언어로 작성할 수 있다. 독립 실행형 프로그램 또는 모듈, 컴포넌트, 서브루틴, 객체 또는 컴퓨팅 환경에서 사용하기에 적합한 기타 단위를 포함하여 모든 형태로 분배될 수 있다. 컴퓨터 프로그램은 파일 시스템의 파일에 대응할 수 있지만 반드시 그런 것은 아니다. 프로그램은 다른 프로그램이나 데이터를 포함하는 파일의 일부(예: 마크업 언어 문서에 저장된 하나 이상의 스크립트), 해당 프로그램 전용 단일 파일 또는 여러 조정 파일(예: 하나 이상의 모듈, 하위 프로그램 또는 코드 부분을 저장하는 파일)에 저장할 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 또는 한 사이트에 있거나 여러 사이트에 분산되어 있고 통신 네트워크로 상호 연결된 여러 컴퓨터에서 실행되도록 분배될 수 있다.
본 명세서에 설명된 프로세스 및 논리 흐름은 입력 데이터에 대해 작동하고 출력을 생성함으로써 동작을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍 가능한 프로세서에 의해 수행될 수 있다. 프로세스 및 논리 흐름 그리고 장치는 또한 FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)와 같은 특수 목적 논리 회로에 의해 수행될 수 있고, 구현될 수 있다.
컴퓨터 프로그램의 실행에 적합한 프로세서는 예를 들어 범용 및 특수 목적 마이크로프로세서, 및 임의의 종류의 디지털 컴퓨터의 임의의 하나 이상의 프로세서를 포함한다. 일반적으로 프로세서는 읽기 전용 메모리나 랜덤 액세스 메모리 또는 둘 다에서 명령어과 데이터를 수신한다. 컴퓨터의 필수 요소는 명령어에 따라 동작을 수행하기 위한 프로세서와 명령어 및 데이터를 저장하기 위한 하나 이상의 메모리 장치이다. 일반적으로, 컴퓨터는 또한 데이터를 저장하기 위한 하나 이상의 대용량 저장 장치, 예를 들어 자기, 광자기 디스크 또는 광 디스크로부터 데이터를 수신하거나 이들로 데이터를 전송하거나 둘 다 포함하거나 작동 가능하게 연결된다. 그러나 컴퓨터에는 그러한 장치가 필요하지 않는다. 또한 컴퓨터는, 휴대폰, PDA(personal digital assistant), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기, 또는 휴대용 저장 장치(예: USB(Universal Serial Bus) 플래시 드라이브) 등과 같은 다른 장치에 임베딩될 수 있다. 컴퓨터 프로그램 명령어(명령어) 및 데이터를 저장하기에 적합한 장치는 모든 형태의 비휘발성 메모리, 매체 및 메모리 장치를 포함하며, 예를 들어 EPROM, EEPROM 및 플래시 메모리 장치와 같은 반도체 메모리 장치; 자기 디스크, 예를 들어 내부 하드 디스크 또는 이동식 디스크; 자기 광 디스크; 그리고 CD ROM 및 DVD-ROM 디스크를 포함할 수 있다. 프로세서와 메모리는 특수 목적 논리 회로에 의해 보완되거나 통합될 수 있다.
사용자와의 상호작용을 제공하기 위해, 본 명세서에 기술된 요지의 실시예는 사용자에게 정보를 표시하기 위한 디스플레이 장치, 예를 들어, CRT(cathode ray tube) 또는 LCD(liquid crystal display) 모니터 및 키보드 및 포인팅 장치, 예를 들어, 마우스 또는 트랙볼을 갖는 컴퓨터에서 구현될 수 있으며, 이를 통해 사용자는 컴퓨터에 입력을 제공할 수 있다. 다른 종류의 장치도 사용자와의 상호 작용을 제공하는 데 사용할 수 있다. 예를 들어, 사용자에게 제공되는 피드백은 시각적 피드백, 청각적 피드백 또는 촉각적 피드백과 같은 임의의 형태의 감각적 피드백일 수 있고, 그리고 사용자로부터의 입력은 음향, 음성 또는 촉각 입력을 포함한 모든 형태로 수신될 수 있다. 또한 컴퓨터는 사용자가 사용하는 장치로 문서를 보내고 문서를 수신하여 사용자와 상호 작용할 수 있다. 예를 들어 웹 브라우저에서 수신된 요청에 대한 응답으로 사용자 클라이언트 장치의 웹 브라우저에 웹 페이지를 전송한다.
본 명세서에 기술된 요지의 실시예는 백엔드 컴포넌트(예를 들어 데이터 서버)를 포함하는, 미들웨어 컴포넌트(예: 애플리케이션 서버)를 포함하는, 프론트 엔드 컴포넌트(예를 들어 그래픽 사용자 인터페이스가 있는 클라이언트 컴퓨터 또는 사용자가 본 명세서에 설명된 요지의 구현과 상호작용할 수 있는 웹 브라우저)를 포함하는, 또는 하나 이상의 백엔드, 미들웨어 또는 프론트엔드 컴포넌트의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트는 통신 네트워크와 같은 디지털 데이터 통신의 모든 형태 또는 매체에 의해 상호 연결될 수 있다. 통신 네트워크의 예는, 근거리 통신망("LAN") 및 광역 네트워크("WAN"), 인터-네트워크(예: 인터넷) 및 P2P 네트워크(예: Ad Hoc peer-to-peer 네트워크)를 포함할 수 있다.
컴퓨팅 시스템은 클라이언트와 서버를 포함할 수 있다. 클라이언트와 서버는 일반적으로 서로 멀리 떨어져 있으며 일반적으로 통신 네트워크를 통해 상호 작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터에서 실행되고 서로 클라이언트-서버 관계를 갖는 컴퓨터 프로그램 덕분에 발생한다. 일부 실시예에서, 서버는 데이터(예를 들어, HTML 페이지)를 클라이언트 장치로 전송한다(예를 들어, 클라이언트 장치에 데이터를 표시하고 클라이언트 장치와 상호작용하는 사용자로부터 사용자 입력을 수신하기 위해). 클라이언트 장치에서 생성된 데이터(예: 사용자 상호 작용의 결과)는 서버에서 클라이언트 장치로부터 수신될 수 있다.
본 명세서는 많은 특정 구현 세부사항을 포함하지만, 이는 임의의 발명의 범위 또는 청구될 수 있는 것에 대한 제한으로 해석되어서는 안 되며, 오히려 특정 발명의 특정 실시예에 특정한 특징의 설명으로 해석되어서는 안 된다. 별도의 실시예와 관련하여 본 명세서에 설명된 특정 특징은 단일 실시예에서 조합하여 구현될 수도 있다. 역으로, 단일 실시예의 컨텍스트에서 설명된 다양한 특징은 또한 개별적으로 또는 임의의 적절한 하위 조합으로 다중 실시예에서 구현될 수 있다. 더욱이, 특징들이 특정 조합으로 작용하는 것으로 위에서 설명될 수 있고 심지어 초기에 그렇게 청구될 수도 있지만, 청구된 조합의 하나 이상의 특징이 어떤 경우에는 조합에서 제거될 수 있으며, 청구된 조합은 하위 조합 또는 하위 조합의 변형에 관한 것일 수 있다.
유사하게, 동작이 특정 순서로 도면에 도시되어 있지만, 이는 바람직한 결과를 달성하기 위해 그러한 동작이 도시된 특정 순서 또는 순차적인 순서로 수행되거나 도시된 모든 동작이 수행될 것을 요구하는 것으로 이해되어서는 안 된다. 특정 상황에서는 멀티태스킹과 병렬 처리가 유리할 수 있다. 더욱이, 상술한 실시예에서 다양한 시스템 컴포넌트의 분리가 모든 실시예에서 그러한 분리를 요구하는 것으로 이해되어서는 안되며, 설명된 프로그램 컴포넌트 및 시스템은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 여러 소프트웨어 제품에 패키징될 수 있음을 이해해야 한다.
따라서, 요지의 특정 실시예가 설명되었다. 다른 실시예는 다음 청구항의 범위 내에 있다. 어떤 경우에는 청구범위에 인용된 액션이 다른 순서로 수행될 수 있으며 여전히 바람직한 결과를 얻을 수 있다. 또한, 첨부된 도면에 도시된 프로세스는 바람직한 결과를 달성하기 위해 도시된 특정 순서 또는 순차적인 순서를 반드시 필요로 하는 것은 아니다. 특정 구현에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다.
Claims (20)
- 컴퓨터로 구현되는 방법으로서,
하나 이상의 프로세서를 포함하는 서버에 의해 그리고 클라이언트 장치로부터, 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된(client-encrypted) 쿼리들의 세트를 수신하는 단계;
상기 서버에 의해, 상기 클라이언트-암호화된 쿼리들의 세트에 기초하여 서버-암호화된(server-encrypted) 복호화 키들의 세트를 식별하는 단계;
상기 서버에 의해, 상기 서버-암호화된 복호화 키들의 세트를 상기 클라이언트 장치에 전송하는 단계;
상기 서버에 의해 그리고 상기 클라이언트 장치로부터, 상기 클라이언트 장치에 의해 추가로 암호화된 서버-암호화된 복호화 키들의 세트를 포함하는 클라이언트-서버-암호화된 복호화 키들의 세트를 수신하는 단계;
상기 서버에 의해 그리고 상기 클라이언트 장치로부터, (i) 상기 서버-암호화된 복호화 키들의 세트와 무관하게 상기 클라이언트 장치에 의해 파생되고 그리고 (ii) 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된/클라이언트-파생된(client-derived) 복호화 키들의 세트를 수신하는 단계;
상기 서버에 의해, (i) 상기 클라이언트-서버-암호화된 복호화 키들의 세트와 (ii) 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트 사이의 매치를 지정하는 매칭(matching) 복호화 키 맵을 생성하는 단계;
상기 서버에 의해, 상기 매칭 복호화 키 맵을 사용하여 상기 클라이언트-암호화된 쿼리들의 세트를 필터링하여 필터링된 클라이언트-암호화된 쿼리들의 세트를 생성하는 단계; 그리고
상기 서버에 의해, 상기 필터링된 클라이언트-암호화된 쿼리들의 세트를 사용하여 쿼리 결과들의 세트를 생성하는 단계를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제1항에 있어서, 상기 방법은,
상기 클라이언트 장치로부터 클라이언트-암호화된 엔티티 식별자들의 세트를 수신하는 단계;
상기 서버에 의해, 상기 클라이언트-암호화된 엔티티 식별자들의 세트를 암호화하여 서버-클라이언트-암호화된 식별자들의 세트를 생성하는 단계;
상기 서버에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 상기 클라이언트 장치에 전송하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제2항에 있어서, 상기 방법은,
상기 클라이언트 장치에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 쿼리들의 세트를 생성하는 단계;
상기 클라이언트 장치에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 복호화 키들의 세트를 생성하는 단계;
상기 클라이언트 장치에 의해, 상기 쿼리들의 세트를 암호화하여 클라이언트-암호화된 쿼리들을 생성하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제3항에 있어서, 상기 방법은,
상기 서버에 의해, 데이터베이스에 저장된 데이터 세트를 암호화하는 단계 - 상기 데이터베이스의 복수의 엔티티들에 대해, 각각의 데이터베이스 엔티티는 서버-암호화되고 그리고 해당 복호화 키에 의해 복호화될 수 있음-;
상기 서버에 의해, 상기 데이터베이스의 상기 복수의 엔트리들에 대한 각각의 해당 복호화 키를 암호화하는 단계;
상기 서버에 의해, 상기 클라이언트-암호화된 쿼리들에 포함된 데이터베이스 버킷 식별자들에 기초하여 상기 서버-암호화된 복호화 키들의 세트를 생성하는 단계를 더 포함하며,
상기 서버-암호화된 복호화 키들의 세트는 상기 클라이언트-암호화된 쿼리들에 포함된 버킷 식별자들에 대응하는 각 데이터베이스 엔티티에 대한 상기 서버-암호화된 복호화 키를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제4항에 있어서, 매칭 복호화 키 맵을 생성하는 단계는,
상기 서버에 의해, 상기 클라이언트-서버-암호화된 복호화 키들의 세트로부터 서버 암호화를 제거하여 상기 클라이언트-암호화된 쿼리들에 포함된 버킷 식별자들에 대응하는 각 데이터베이스 엔티티에 대한 각 해당 복호화 키의 클라이언트-암호화된 버전들을 포함하는 복구된 클라이언트-암호화된 복호화 키들의 세트를 생성하는 단계;
상기 서버에 의해, 상기 복구된 클라이언트-암호화된 복호화 키들의 세트를 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트와 비교하는 단계; 그리고
상기 비교에 기초하여, 상기 복구된 클라이언트-암호화된 복호화 키들의 세트 모두에 포함된 클라이언트-암호화된 복호화 키들을 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트에 매칭시키는 표시를 생성하는 단계를 포함하며,
상기 클라이언트-암호화된 쿼리들의 세트를 필터링하는 단계는 상기 클라이언트-암호화된 쿼리들로부터, 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들과 매칭하지 않는 복구된 클라이언트-암호화된 복호화 키들의 세트에 대응하는 데이터베이스 엔티티들에 대한 버킷 식별자들을 갖는 쿼리들을 제거하는 단계를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제3항에 있어서, 상기 방법은,
상기 서버에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 셔플링(shuffling)하여 서버-클라이언트-암호화된 식별자들의 세트와는 순서가 다른 셔플된 서버-클라이언트-암호화된 식별자들의 세트를 생성하는 단계를 더 포함하며,
상기 서버-클라이언트-암호화된 식별자들의 세트를 상기 클라이언트 장치로 전송하는 단계는 상기 셔플된 서버-클라이언트-암호화된 식별자들을 상기 클라이언트 장치로 전송하는 단계를 포함하고; 그리고
상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된 쿼리들의 세트를 수신하는 단계는 상기 셔플된 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 생성된 셔플된 클라이언트-암호화된 쿼리들의 세트를 수신하는 단계를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제6항에 있어서,
클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트를 수신하는 단계는 (i) 셔플된 서버-클라이언트 암호화된 식별자들을 사용하여 상기 클라이언트 장치에 의해 파생되고 그리고 (ii) 상기 클라이언트 장치에 의해 암호화된 셔플된 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트를 수신하는 단계를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 시스템으로서,
하나 이상의 프로세서를 포함하는 서버에 의해 그리고 클라이언트 장치로부터, 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된(client-encrypted) 쿼리들의 세트를 수신하는 동작;
상기 서버에 의해, 상기 클라이언트-암호화된 쿼리들의 세트에 기초하여 서버-암호화된(server-encrypted) 복호화 키들의 세트를 식별하는 동작;
상기 서버에 의해, 상기 서버-암호화된 복호화 키들의 세트를 상기 클라이언트 장치에 전송하는 동작;
상기 서버에 의해 그리고 상기 클라이언트 장치로부터, 상기 클라이언트 장치에 의해 추가로 암호화된 서버-암호화된 복호화 키들의 세트를 포함하는 클라이언트-서버-암호화된 복호화 키들의 세트를 수신하는 동작;
상기 서버에 의해 그리고 상기 클라이언트 장치로부터, (i) 상기 서버-암호화된 복호화 키들의 세트와 무관하게 상기 클라이언트 장치에 의해 파생되고 그리고 (ii) 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된/클라이언트-파생된(client-derived) 복호화 키들의 세트를 수신하는 동작;
상기 서버에 의해, (i) 상기 클라이언트-서버-암호화된 복호화 키들의 세트와 (ii) 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트 사이의 매치를 지정하는 매칭(matching) 복호화 키 맵을 생성하는 동작;
상기 서버에 의해, 상기 매칭 복호화 키 맵을 사용하여 상기 클라이언트-암호화된 쿼리들의 세트를 필터링하여 필터링된 클라이언트-암호화된 쿼리들의 세트를 생성하는 동작; 그리고
상기 서버에 의해, 상기 필터링된 클라이언트-암호화된 쿼리들의 세트를 사용하여 쿼리 결과들의 세트를 생성하는 동작을 포함하는 것을 특징으로 하는 시스템. - 제8항에 있어서, 상기 시스템은,
상기 클라이언트 장치로부터 클라이언트-암호화된 엔티티 식별자들의 세트를 수신하는 동작;
상기 서버에 의해, 상기 클라이언트-암호화된 엔티티 식별자들의 세트를 암호화하여 서버-클라이언트-암호화된 식별자들의 세트를 생성하는 동작;
상기 서버에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 상기 클라이언트 장치에 전송하는 동작을 더 포함하는 것을 특징으로 하는 시스템. - 제9항에 있어서, 상기 시스템은,
상기 클라이언트 장치에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 쿼리들의 세트를 생성하는 동작;
상기 클라이언트 장치에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 복호화 키들의 세트를 생성하는 동작;
상기 클라이언트 장치에 의해, 상기 쿼리들의 세트를 암호화하여 클라이언트-암호화된 쿼리들을 생성하는 동작을 더 포함하는 것을 특징으로 하는 시스템. - 제10항에 있어서, 상기 시스템은,
상기 서버에 의해, 데이터베이스에 저장된 데이터 세트를 암호화하는 동작 - 상기 데이터베이스의 복수의 엔티티들에 대해, 각각의 데이터베이스 엔티티는 서버-암호화되고 그리고 해당 복호화 키에 의해 복호화될 수 있음-;
상기 서버에 의해, 상기 데이터베이스의 상기 복수의 엔트리들에 대한 각각의 해당 복호화 키를 암호화하는 동작;
상기 서버에 의해, 상기 클라이언트-암호화된 쿼리들에 포함된 데이터베이스 버킷 식별자들에 기초하여 상기 서버-암호화된 복호화 키들의 세트를 생성하는 동작을 더 포함하며,
상기 서버-암호화된 복호화 키들의 세트는 상기 클라이언트-암호화된 쿼리들에 포함된 버킷 식별자들에 대응하는 각 데이터베이스 엔티티에 대한 상기 서버-암호화된 복호화 키를 포함하는 것을 특징으로 하는 시스템. - 제11항에 있어서, 매칭 복호화 키 맵을 생성하는 동작은,
상기 서버에 의해, 상기 클라이언트-서버-암호화된 복호화 키들의 세트로부터 서버 암호화를 제거하여 상기 클라이언트-암호화된 쿼리들에 포함된 버킷 식별자들에 대응하는 각 데이터베이스 엔티티에 대한 각 해당 복호화 키의 클라이언트-암호화된 버전들을 포함하는 복구된 클라이언트-암호화된 복호화 키들의 세트를 생성하는 동작;
상기 서버에 의해, 상기 복구된 클라이언트-암호화된 복호화 키들의 세트를 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트와 비교하는 동작; 그리고
상기 비교에 기초하여, 상기 복구된 클라이언트-암호화된 복호화 키들의 세트 모두에 포함된 클라이언트-암호화된 복호화 키들을 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트에 매칭시키는 표시를 생성하는 동작을 포함하며,
상기 클라이언트-암호화된 쿼리들의 세트를 필터링하는 동작은 상기 클라이언트-암호화된 쿼리들로부터, 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들과 매칭하지 않는 복구된 클라이언트-암호화된 복호화 키들의 세트에 대응하는 데이터베이스 엔티티들에 대한 버킷 식별자들을 갖는 쿼리들을 제거하는 동작을 포함하는 것을 특징으로 하는 시스템. - 제10항에 있어서, 상기 시스템은,
상기 서버에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 셔플링(shuffling)하여 서버-클라이언트-암호화된 식별자들의 세트와는 순서가 다른 셔플된 서버-클라이언트-암호화된 식별자들의 세트를 생성하는 동작을 더 포함하며,
상기 서버-클라이언트-암호화된 식별자들의 세트를 상기 클라이언트 장치로 전송하는 동작은 상기 셔플된 서버-클라이언트-암호화된 식별자들을 상기 클라이언트 장치로 전송하는 동작을 포함하고; 그리고
상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된 쿼리들의 세트를 수신하는 동작은 상기 셔플된 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 생성된 셔플된 클라이언트-암호화된 쿼리들의 세트를 수신하는 동작을 포함하는 것을 특징으로 하는 시스템. - 제13항에 있어서,
클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트를 수신하는 동작은 (i) 셔플된 서버-클라이언트 암호화된 식별자들을 사용하여 상기 클라이언트 장치에 의해 파생되고 그리고 (ii) 상기 클라이언트 장치에 의해 암호화된 셔플된 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트를 수신하는 동작을 포함하는 것을 특징으로 하는 시스템. - 하나 이상의 데이터 처리 장치에 의해 실행될 때, 상기 하나 이상의 데이터 처리 장치로 하여금 동작들을 수행하게 하는 명령어를 저장한 비일시적 컴퓨터 판독 가능 매체로서, 상기 동작들은,
하나 이상의 프로세서를 포함하는 서버에 의해 그리고 클라이언트 장치로부터, 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된(client-encrypted) 쿼리들의 세트를 수신하는 동작;
상기 서버에 의해, 상기 클라이언트-암호화된 쿼리들의 세트에 기초하여 서버-암호화된(server-encrypted) 복호화 키들의 세트를 식별하는 동작;
상기 서버에 의해, 상기 서버-암호화된 복호화 키들의 세트를 상기 클라이언트 장치에 전송하는 동작;
상기 서버에 의해 그리고 상기 클라이언트 장치로부터, 상기 클라이언트 장치에 의해 추가로 암호화된 서버-암호화된 복호화 키들의 세트를 포함하는 클라이언트-서버-암호화된 복호화 키들의 세트를 수신하는 동작;
상기 서버에 의해 그리고 상기 클라이언트 장치로부터, (i) 상기 서버-암호화된 복호화 키들의 세트와 무관하게 상기 클라이언트 장치에 의해 파생되고 그리고 (ii) 상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된/클라이언트-파생된(client-derived) 복호화 키들의 세트를 수신하는 동작;
상기 서버에 의해, (i) 상기 클라이언트-서버-암호화된 복호화 키들의 세트와 (ii) 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트 사이의 매치를 지정하는 매칭(matching) 복호화 키 맵을 생성하는 동작;
상기 서버에 의해, 상기 매칭 복호화 키 맵을 사용하여 상기 클라이언트-암호화된 쿼리들의 세트를 필터링하여 필터링된 클라이언트-암호화된 쿼리들의 세트를 생성하는 동작; 그리고
상기 서버에 의해, 상기 필터링된 클라이언트-암호화된 쿼리들의 세트를 사용하여 쿼리 결과들의 세트를 생성하는 동작을 포함하는 것을 특징으로 하는 비일시적 컴퓨터 판독 가능 매체. - 제15항에 있어서, 상기 동작들은,
상기 클라이언트 장치로부터 클라이언트-암호화된 엔티티 식별자들의 세트를 수신하는 동작;
상기 서버에 의해, 상기 클라이언트-암호화된 엔티티 식별자들의 세트를 암호화하여 서버-클라이언트-암호화된 식별자들의 세트를 생성하는 동작;
상기 서버에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 상기 클라이언트 장치에 전송하는 동작을 더 포함하는 것을 특징으로 하는 비일시적 컴퓨터 판독 가능 매체. - 제16항에 있어서, 상기 동작들은,
상기 클라이언트 장치에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 쿼리들의 세트를 생성하는 동작;
상기 클라이언트 장치에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 복호화 키들의 세트를 생성하는 동작;
상기 클라이언트 장치에 의해, 상기 쿼리들의 세트를 암호화하여 클라이언트-암호화된 쿼리들을 생성하는 동작을 더 포함하는 것을 특징으로 하는 비일시적 컴퓨터 판독 가능 매체. - 제17항에 있어서, 상기 동작들은,
상기 서버에 의해, 데이터베이스에 저장된 데이터 세트를 암호화하는 동작 - 상기 데이터베이스의 복수의 엔티티들에 대해, 각각의 데이터베이스 엔티티는 서버-암호화되고 그리고 해당 복호화 키에 의해 복호화될 수 있음-;
상기 서버에 의해, 상기 데이터베이스의 상기 복수의 엔트리들에 대한 각각의 해당 복호화 키를 암호화하는 동작;
상기 서버에 의해, 상기 클라이언트-암호화된 쿼리들에 포함된 데이터베이스 버킷 식별자들에 기초하여 상기 서버-암호화된 복호화 키들의 세트를 생성하는 동작을 더 포함하며,
상기 서버-암호화된 복호화 키들의 세트는 상기 클라이언트-암호화된 쿼리들에 포함된 버킷 식별자들에 대응하는 각 데이터베이스 엔티티에 대한 상기 서버-암호화된 복호화 키를 포함하는 것을 특징으로 하는 비일시적 컴퓨터 판독 가능 매체. - 제18항에 있어서, 매칭 복호화 키 맵을 생성하는 동작은,
상기 서버에 의해, 상기 클라이언트-서버-암호화된 복호화 키들의 세트로부터 서버 암호화(server encryption)를 제거하여 상기 클라이언트-암호화된 쿼리들에 포함된 버킷 식별자들에 대응하는 각 데이터베이스 엔티티에 대한 각 해당 복호화 키의 클라이언트-암호화된 버전들을 포함하는 복구된 클라이언트-암호화된 복호화 키들의 세트를 생성하는 동작;
상기 서버에 의해, 상기 복구된 클라이언트-암호화된 복호화 키들의 세트를 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트와 비교하는 동작; 그리고
상기 비교에 기초하여, 상기 복구된 클라이언트-암호화된 복호화 키들의 세트 모두에 포함된 클라이언트-암호화된 복호화 키들을 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들의 세트에 매칭시키는 표시를 생성하는 동작을 포함하며,
상기 클라이언트-암호화된 쿼리들의 세트를 필터링하는 동작은 상기 클라이언트-암호화된 쿼리들로부터, 상기 클라이언트-암호화된/클라이언트-파생된 복호화 키들과 매칭하지 않는 복구된 클라이언트-암호화된 복호화 키들의 세트에 대응하는 데이터베이스 엔티티들에 대한 버킷 식별자들을 갖는 쿼리들을 제거하는 동작을 포함하는 것을 특징으로 하는 비일시적 컴퓨터 판독 가능 매체. - 제17항에 있어서, 상기 동작들은,
상기 서버에 의해, 상기 서버-클라이언트-암호화된 식별자들의 세트를 셔플링(shuffling)하여 서버-클라이언트-암호화된 식별자들의 세트와는 순서가 다른 셔플된 서버-클라이언트-암호화된 식별자들의 세트를 생성하는 동작을 더 포함하며,
상기 서버-클라이언트-암호화된 식별자들의 세트를 상기 클라이언트 장치로 전송하는 동작은 상기 셔플된 서버-클라이언트-암호화된 식별자들을 상기 클라이언트 장치로 전송하는 동작을 포함하고; 그리고
상기 클라이언트 장치에 의해 암호화된 클라이언트-암호화된 쿼리들의 세트를 수신하는 동작은 상기 셔플된 서버-클라이언트-암호화된 식별자들의 세트를 사용하여 생성된 셔플된 클라이언트-암호화된 쿼리들의 세트를 수신하는 동작을 포함하는 것을 특징으로 하는 비일시적 컴퓨터 판독 가능 매체.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2021/055514 WO2023069072A1 (en) | 2021-10-19 | 2021-10-19 | Multi-key information retrieval |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20230058314A true KR20230058314A (ko) | 2023-05-03 |
Family
ID=78617513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227037130A KR20230058314A (ko) | 2021-10-19 | 2021-10-19 | 다중 키 정보 검색 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20230318809A1 (ko) |
EP (2) | EP4283485A3 (ko) |
JP (1) | JP7440662B2 (ko) |
KR (1) | KR20230058314A (ko) |
WO (1) | WO2023069072A1 (ko) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8891762B2 (en) | 2010-12-10 | 2014-11-18 | Mitsubishi Electric Research Laboratories, Inc. | Method for privacy-preserving order selection of encrypted element |
US10097522B2 (en) * | 2015-05-21 | 2018-10-09 | Nili Philipp | Encrypted query-based access to data |
US10691754B1 (en) * | 2015-07-17 | 2020-06-23 | Hrl Laboratories, Llc | STAGS: secure, tunable, and accountable generic search in databases |
US10721057B2 (en) | 2017-01-20 | 2020-07-21 | Enveil, Inc. | Dynamic channels in secure queries and analytics |
US11669624B2 (en) | 2019-04-24 | 2023-06-06 | Google Llc | Response-hiding searchable encryption |
EP4315137A1 (en) * | 2021-06-15 | 2024-02-07 | Google LLC | Encrypted information retrieval |
-
2021
- 2021-10-19 KR KR1020227037130A patent/KR20230058314A/ko unknown
- 2021-10-19 US US17/926,238 patent/US20230318809A1/en active Pending
- 2021-10-19 EP EP23202858.9A patent/EP4283485A3/en active Pending
- 2021-10-19 JP JP2022565671A patent/JP7440662B2/ja active Active
- 2021-10-19 EP EP21806894.8A patent/EP4193290B1/en active Active
- 2021-10-19 WO PCT/US2021/055514 patent/WO2023069072A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
JP7440662B2 (ja) | 2024-02-28 |
JP2023548727A (ja) | 2023-11-21 |
EP4283485A3 (en) | 2024-02-21 |
EP4283485A2 (en) | 2023-11-29 |
WO2023069072A1 (en) | 2023-04-27 |
US20230318809A1 (en) | 2023-10-05 |
EP4193290B1 (en) | 2023-12-06 |
EP4193290A1 (en) | 2023-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sun et al. | An efficient non-interactive multi-client searchable encryption with support for boolean queries | |
EP3058678B1 (en) | System and method for dynamic, non-interactive, and parallelizable searchable symmetric encryption | |
Salam et al. | Implementation of searchable symmetric encryption for privacy-preserving keyword search on cloud storage | |
Yavuz et al. | Dynamic searchable symmetric encryption with minimal leakage and efficient updates on commodity hardware | |
CN107077469B (zh) | 服务器装置、检索系统、终端装置以及检索方法 | |
WO2016153602A1 (en) | Systems, methods, and apparatus to provide private information retrieval | |
US20240104234A1 (en) | Encrypted information retrieval | |
US9971904B2 (en) | Method and system for range search on encrypted data | |
Liu et al. | Cooperative private searching in clouds | |
Liu et al. | Efficient searchable symmetric encryption for storing multiple source dynamic social data on cloud | |
EP4073673B1 (en) | Encrypted search with a public key | |
WO2016018298A1 (en) | Key search token for encrypted data | |
He et al. | Secure encrypted data deduplication based on data popularity | |
Sun et al. | A dynamic and non-interactive boolean searchable symmetric encryption in multi-client setting | |
US10395060B2 (en) | Multiple message retrieval for secure electronic communication | |
US20230006813A1 (en) | Encrypted information retrieval | |
Dhumal et al. | Confidentiality-conserving multi-keyword ranked search above encrypted cloud data | |
JP7440662B2 (ja) | マルチキー情報検索 | |
Xu et al. | Symmetric searchable encryption with supporting search pattern and access pattern protection in multi‐cloud | |
Duan et al. | A searchable encryption scheme with hidden search pattern and access pattern on distributed cloud system | |
Negi | Privacy-preserving efficient top-k spatial keyword search in outsourced cloud |