Privacy safe joint identification protocol

KR1020260131246APending Publication Date: 2026-09-01SNAP INC
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
KR1020267027031
Authority / Receiving Office
KR · KR
Patent Type
Applications
Current Assignee / Owner
Priority Date
2021-07-20
Filing Date
2022-07-20
Publication Date
2026-09-01

Smart Images

  • Figure PAT00015_ABST
    Figure PAT00015_ABST
Patent Text Reader

Abstract

The technical problem of matching records within different datasets, such as a partner dataset and a host dataset, which store records representing their respective users while maintaining the privacy of each dataset, is solved by providing a privacy-safe joint identification protocol. The privacy-safe joint identification protocol calculates respective anonymous joint identifiers for records within the two datasets. Anonymous joint identifiers are generated such that a host-assigned identifier and a partner-assigned identifier determined to represent the same user are mapped to the same anonymous joint identifier.
Need to check novelty before this filing date? Find Prior Art

Description

Technology Field

[0001] Claim of priority

[0002] This application claims the benefit of priority to U.S. Patent Application No. 17 / 443,036 filed July 20, 2021, the entirety of which is incorporated herein by reference.

[0003] Technology field

[0004] The present disclosure generally relates to data analysis. Specifically, the systems and methods of this specification describe, but are not limited to, generating anonymous joint identifiers for pairs of datasets in a privacy-safe manner. Background Technology

[0005] The popularity of computer-implemented programs that allow users to access and interact with content and other users online continues to grow. There are various computer-implemented applications that allow users to share content with others through messaging clients. Some of these computer-implemented applications, referred to as apps, are installed directly on mobile devices such as phones, tablets, or wearable devices. Applications may have backend services provided on server computer systems to perform operations that may require more resources than is reasonable to perform on the client device (e.g., storing large amounts of data or performing computationally expensive processing). For example, a messaging client and an associated messaging server system may be configured to allow online users to share content. In addition to facilitating content sharing over a network, applications such as messaging clients may be configured to display external content originating from third-party providers. Brief explanation of the drawing

[0006] In drawings that are not necessarily drawn to actual scale, similar numbers may describe similar components within different views. To facilitate the identification of any specific element or act, the top digit or numbers in the reference numbers indicate the drawing number where the element is first introduced. Some examples are illustrated in the attached drawings as examples rather than limitations. FIG. 1 is a schematic representation of a networked environment in which a privacy-safe joint identification protocol may be deployed, according to some examples. FIG. 2 is a schematic representation of a system configured to provide a joint identification protocol according to some examples. Figure 3 is a flowchart of a method for calculating the size of the intersection of a host dataset and a partner dataset according to some examples. FIG. 4 is a schematic representation of a machine in the form of a computer system according to some examples, in which a set of instructions may be executed to enable the machine to perform any one or more of the methodologies discussed in this specification according to some examples. Figure 5 is a block diagram illustrating a software architecture in which examples can be implemented. Specific details for implementing the invention

[0007] An application implemented by a computer may be configured to display external content in addition to providing the functionality of the application itself. The validity of a given external content item displayed by the application can be measured by detecting and counting events defined as successful outcomes following impressions of the given external content within a predetermined time period. An impression indicating that an external content item has been presented to the user of the application is an event associated with retrieving the external content item from its source (e.g., a third-party system) and displaying it on a screen provided by the application, which functions as a delivery system. An event defined as a successful outcome following an impression within a predetermined time period is referred to as a conversion. Examples of conversions include events indicating the downloading of a third-party application, subscription to a newsletter, or registration for an online class, wherein these events occurred within a predetermined time period after the associated external content item was displayed to the user of the application. The attribution process (also referred to simply as attribution) is a process that generates metrics indicating conversions that follow impressions, such as, for example, the number of users who were shown an external content item and subsequently performed a specific activity related to that external content item.

[0008] Attribution calculates the intersection of an impression dataset and a conversion dataset using the private set intersection (PSI) protocol. PSI is a cryptographic technique that allows two parties holding distinct datasets (e.g., an impression dataset and a conversion dataset) to compare encrypted versions of those sets to calculate the intersection in a manner where neither party exposes any personally identifiable information (PII) to the other. Some examples of PII include email addresses, Internet Protocol (IP) addresses, and users' phone numbers. PSI-size is a secure multiparty computation cryptographic technique that allows two parties to personally participate in their private datasets and discover the number of identifiers they have in common, or the size of the established intersection.

[0009] In some examples, PSI-size is performed in relation to a host dataset (a dataset storing user information maintained by a host system configured to display external content originating from a third-party provider) and a partner dataset (a dataset storing user information maintained by a partner system providing external content to the host system). The host system assigns its own internal identifiers (host-assigned identifiers) to its users, and the partner system assigns its own internal identifiers (partner-assigned identifiers) to represent its users. The same user may be identified in the host dataset and the partner dataset by different internal identifiers. In some examples, whether in the host dataset or the partner dataset, an item within the dataset storing user information is a record containing a user identification (host-assigned identifier in the host dataset and partner-assigned identifier in the partner dataset) mapped to a set of PII elements. Examples of PII elements within the dataset records include, for example, an email address, an IP address, and a device identification. The PII elements within the dataset records may be hashed. The intersection between the host dataset and the partner dataset is the number of records representing the same user in the two datasets.

[0010] The technical problem of matching records within different datasets, such as a host dataset and a partner dataset, while maintaining the privacy of each dataset is resolved by providing a privacy-safe joint identifier protocol that computes anonymous joint identifiers that can be used to match user records in the host dataset and the partner dataset in a privacy-safe manner. Anonymous joint identifiers are generated such that a host-assigned identifier and a partner-assigned identifier determined to represent the same user are mapped to the same anonymous joint identifier.

[0011] In one example, the Privacy-Secure Co-Identifier Protocol double-encrypts PII elements from records in both the host dataset and the partner dataset using an encryption key provided by the host system and an encryption key also provided by the partner system. As a result, the double-encrypted PII elements cannot be mapped to their associated host-assigned or partner-assigned identifiers because the host system and the partner system each possess only one of the two encryption keys used to generate the double-encrypted PII elements. The double-encrypted PII elements from both datasets become available to the host system. In the host system, each double-encrypted version of the PII element from the partner dataset is tagged with an encrypted partner-assigned identifier, and each double-encrypted version of the PII element from the host dataset is tagged with a partner-generated anonymous identifier, which means that the host system cannot determine the mapping of any of the double-encrypted PII elements to the host-assigned identifier. If a PII element (e.g., a hashed email address) exists in both the host dataset and the partner dataset, the double-encrypted version of such PII element is tagged with both the associated encrypted partner-assigned identifier and the associated partner-generated anonymous identifier. Subsequently, their respective anonymous joint identifiers are assigned to the double-encrypted PII elements in the host system in such a manner that the same anonymous joint identifier is assigned to the double-encrypted PII elements determined to be associated with the same user. The intersection between the host dataset and the partner dataset can be determined by the number of joint identifiers used to tag PII elements that are already tagged with both the associated encrypted partner-assigned identifier and the associated partner-generated anonymous identifier.

[0012] In some examples, the host system provides the partner system with its respective mappings between anonymous joint identifiers and encrypted partner-assigned identifiers, enabling the partner system to tag its partner-assigned identifiers with its respective anonymous joint identifiers. The host system generates a random identifier for each anonymous joint identifier and, using the generated random identifiers, obtains from the partner system mappings of random identifiers for their respective encrypted host-assigned identifiers. In some examples, the host system discards the double-encrypted PII elements before obtaining mappings of random identifiers for their respective encrypted host-assigned identifiers from the partner system, thereby preventing the host system from determining the mapping of any of the double-encrypted PII elements for the host-assigned identifier. Based on the obtained mappings of random identifiers for their respective encrypted host-assigned identifiers, the host system derives arbitrary existing mappings between the host-assigned identifier and the anonymous joint identifier. Once the anonymous joint identifiers are established between the host dataset and the partner dataset, the PSI-size can be executed based on the mappings between the host-assigned identifier and the anonymous joint identifier. For example, the size of the intersection between the host dataset and the partner dataset can be calculated as the number of anonymous joint identifiers mapped to the host-assigned identifier or the partner-generated anonymous identifier, and also to the encrypted partner-assigned identifier.

[0013] In some examples, the PSI-size is executed at a predetermined cadence, such as daily or weekly. An example of the operation of the Privacy-Safe Co-identifier Protocol can be described as follows.

[0014] A host dataset containing the mapping between host-assigned user identifiers and their respective PII elements, which can be represented as {SAID_i -> [ PII_{i,1}, PII_{i,2}, ... ]}, is shown in Table 1 below.

[0015]

[0016] SAID1, SAID2 and SAID3 are user identifiers assigned by the host system; he1, he2 and he3 are hashed email addresses; and d1, d2 and d3 are device identifiers.

[0017] A partner dataset containing mappings between partner-assigned user identifiers and their respective PII elements, which can be represented as {AFID_j -> [ PII_{j,1}, PII_{j,2}, ... ]}, is shown in Table 2 below.

[0018]

[0019] AFID1, AFID2 and AFID3 are user identifiers assigned by the partner system; he4, he5 and he6 are hashed email addresses; and d4, d5, d6 and d2 are device identifiers.

[0020] In the host system, the protocol generates an Elliptic Curve Cryptography (ECC) key denoted by host_key and a lightweight encryption key denoted by l_key_host. In the partner system, the protocol generates an ECC key denoted by partner_key and a lightweight encryption key denoted by l_key_partner. EncH and EncP represent encryption using host_key and partner_key, respectively.

[0021] Encrypting the identifier using host_key and partner_key produces a result expressed by Equation 1 below.

[0022]

[0023] EncHL and EncPL represent encryption using l_key_host and l_key_partner, respectively. Examples of lightweight encryption include AES (Advanced Encryption Standard), PRF (pseudorandom function family), and hashing with salt.

[0024] In the host system, host-assigned identifiers from the host dataset are encrypted using l_key_host, and PII elements from the host dataset are encrypted using host_key. PII elements from the host dataset are encrypted using host_key and tagged with their respective host-assigned identifiers encrypted using l_key_host. The resulting mappings shown in Table 3 below can be represented as follows:

[0025] [EncL(SAID_i) -> EncH(PII_{i,1}), EncH(PII_{i,2}), .... ].

[0026]

[0027] PII elements from host datasets mapped to their respective host-assigned identifiers from host datasets encrypted using host_key and encrypted using l_key_host are shuffled and transmitted to partner systems.

[0028] In the partner system, the protocol generates a random identifier (referred to as a partner-generated anonymous identifier for the purposes of this description) for each encrypted host-assigned identifier from the host dataset and stores the resulting mappings as shown in Table 4 below.

[0029]

[0030] In the partner system, the protocol shuffles the encrypted PII elements received from the host dataset, encrypts them with the partner_key, and tags them with their respective partner-generated anonymous identifiers. The mappings of the resulting double-encrypted PII elements from the host dataset to their respective partner-generated anonymous identifiers are shown in Table 5 below.

[0031]

[0032] The mappings shown in Table 5 can be represented as follows:

[0033] [ NID_i -> EncP(EncH(PII_{i,1})), EncP(EncH(PII_{i,2})), .... ]

[0034] Mappings of double-encrypted PII elements from the host dataset to their respective partner-generated anonymous identifiers are transmitted to the host system.

[0035] In the partner system, the protocol encrypts PII elements from the partner dataset with the partner_key and tags them with their respective partner-assigned identifiers encrypted with the l_key_partner. The mappings of the resulting PII elements from the partner dataset encrypted with the partner_key to their respective partner-assigned identifiers encrypted with the l_key_partner are shown in Table 6 below.

[0036]

[0037] The mappings shown in Table 6 can be represented as follows:

[0038] [ EncL(AFID_j) -> EncP(PII_{j,1}), EncP(PII_{j,2}), .... ]

[0039] As shown in Table 6, mappings of the resulting PII elements from the partner dataset encrypted with partner_key to their respective partner-assigned identifiers encrypted with l_key_partner are transmitted to the host system.

[0040] The host system receives PII elements from the partner dataset encrypted with the partner_key and encrypts them with the host_key. As a result, the host system now has double-encrypted PII elements derived from the partner dataset as well as double-encrypted PII elements derived from the host dataset. As shown in Table 7 below, the double-encrypted PII elements derived from the partner dataset are tagged with their respective encrypted partner-assigned identifiers, and the double-encrypted PII elements derived from the host dataset are tagged with their respective partner-generated anonymous identifiers.

[0041]

[0042] As explained above and also exemplified by mathematical formula 1, encrypting a PII element with partner_key first and then with host_key results in the same value as when the PII element is encrypted with host_key first and then with partner_key. In Table 7, the rows marked with a strikethrough indicate that EncP(EncH(he2)) is a duplicate of EncH(EncP(he2)) and that EncP(EncH(d2)) is a duplicate of EncH(EncP(d2)). Since the PII elements e2 and d2 appear in both the host dataset and the partner dataset, the associated EncP(EncH(he2)), EncH(EncP(he2), EncP(EncH(d2)), and EncH(EncP(d2)) are tagged with both the associated encrypted partner-assigned identifier EncPL(AFID3) and the associated partner-generated anonymous identifier NID2.

[0043] In the host system, the protocol merges the double-encrypted PII elements into clusters and assigns an anonymous joint identifier to each cluster. The merging of double-encrypted PII elements into clusters can be performed based on various clustering mechanisms, and in some examples, different types of PII elements may utilize their assigned weights. In one example, double-encrypted PII elements tagged with the same partner-generated anonymous identifier are merged into the same cluster. If a double-encrypted PII element within a cluster is tagged with an encrypted partner-assigned identifier, the double-encrypted PII elements tagged with that encrypted partner-assigned identifier are also merged into that cluster, as shown in Table 8 below. In Table 8, PII elements marked with a strikethrough represent results where EncP(EncH(he2)) is equal to EncH(EncP(he2)) and EncP(EncH(d2)) is equal to EncH(EncP(d2)).

[0044]

[0045] In the host system, the protocol generates mappings of anonymous joint identifiers to their respective encrypted partner-assigned identifiers, as shown in Table 9.

[0046]

[0047] Mappings of anonymous joint identifiers to their respective encrypted partner-assigned identifiers, which can be represented as JID<>EncLP(AFID), are transmitted to the partner system. The partner system can now derive mappings between the partner-assigned identifiers and their respective anonymous joint identifiers.

[0048] In the host system, the protocol generates a random identifier (RID) for each c JID and transmits the resulting mappings to the partner system. The mappings between the random identifiers, their respective anonymous joint identifiers, and their respective associated partner-generated identifiers, which can be represented as RID<>JID<>NID, are shown in Table 10 below.

[0049]

[0050] Mappings between random identifiers, which can be represented as RID<>NID, and their respective associated partner-generated identifiers are transmitted to the partner system. Random identifiers are used to prevent the partner system from learning mappings between encrypted host-assigned identifiers and anonymous co-identifiers.

[0051] The partner system transmits mappings between random identifiers, which can be represented as RID<>EncLH(SAID), and their respective encrypted host-assigned identifiers to the host system. In some examples, the double-encrypted PII elements are discarded by the host system before the mappings between the random identifiers and their respective encrypted host-assigned identifiers are received by the host system.

[0052] In the host system, the protocol derives mappings between host-assigned identifiers, which can be represented as SAID<>JID, and their respective anonymous joint identifiers from RID<>EncLH(SAID). The mappings between host-assigned identifiers and their respective anonymous joint identifiers are shown in Table 11 below.

[0053]

[0054] As described above, the size of the intersection between the host dataset and the partner dataset can be calculated as the number of anonymous co-identifiers mapped to the host-assigned identifier or partner-generated anonymous identifier, and also to the encrypted partner-assigned identifier. In this example, in Tables 9 and 11, it can be seen that one anonymous co-identifier, JID2, appears in both tables, and therefore the size of the intersection is 1.

[0055] Privacy-safe co-identification can be performed on a predetermined cadence using newly generated co-identifiers for each cadence. It should be noted that the methodology described herein can be beneficially used in any context to determine the intersection of two datasets in a privacy-safe manner.

[0056] Networked computing environment

[0057] FIG. 1 is a block diagram illustrating an exemplary networking environment (100) for exchanging data (e.g., messages and associated content) over a network. The networking environment (100) includes multiple instances of client devices (102), each of which hosts multiple applications including a messaging client (104) and other applications. Each messaging client (104) is coupled to communicate with other instances of the messaging client (104) (e.g., hosted on their respective other client devices (102)), a messaging server system (108), and third-party servers (110) over a network (112) (e.g., the Internet). The messaging client (104) may also communicate with locally hosted applications using Applications Program Interfaces (APIs).

[0058] A messaging client (104) can communicate and exchange data with other messaging clients (104) and a messaging server system (108) through a network (112). The data exchanged between messaging clients (104) and between a messaging client (104) and a messaging server system (108) includes functions (e.g., commands that invoke functions) as well as payload data (e.g., text, audio, video, or other multimedia data). A messaging client (104) is illustrated as displaying external content (105) that may be provided by third-party servers (110). In some examples, the external content (105) is information that a user may be interested in and / or information that the provider of the third-party servers (110) wishes to make available to a wider audience.

[0059] The messaging server system (108) provides server-side functionality to a specific messaging client (104) via the network (112). Although specific functions of the networking environment (100) are described herein as being performed by the messaging client (104) or the messaging server system (108), the location of specific functionality within the messaging client (104) or the messaging server system (108) may be a design choice. For example, it may be technically desirable to initially place specific technology and functionality within the messaging server system (108), but later migrate this technology and functionality to the messaging client (104) when the client device (102) has sufficient processing capacity.

[0060] The messaging server system (108) supports various services and operations provided to the messaging client (104). Such operations include transmitting data to the messaging client (104), receiving data from it, and processing data generated by it. This data may include, for example, message content, client device information, geolocation information, media augmentation and overlays, message content persistence conditions, social network information, and live event information. Data exchanges within the networking environment (100) are invoked and controlled through functions available via the user interface (UI) of the messaging client (104).

[0061] Now, referring specifically to the messaging server system (108), an application program interface (API) server (116) is coupled to application servers (114) to provide a programmatic interface. The application servers (114) are communicably coupled to a database server (120), which facilitates access to a database (126) that stores data associated with messages processed by the application servers (114). Similarly, a web server (128) is coupled to the application servers (114) and provides web-based interfaces to the application servers (114). To this end, the web server (128) processes incoming network requests via HTTP (Hypertext Transfer Protocol) and various other related protocols.

[0062] An API (Application Program Interface) server (116) receives and transmits message data (e.g., commands and message payloads) between a client device (102) and application servers (114). Specifically, the application program interface (API) server (116) provides a set of interfaces (e.g., routines and protocols) that can be called or queried by a messaging client (104) to invoke the functionality of the application servers (114). The application program interface (API) server (116) exposes various functions supported by the application servers (114), including account registration, login functionality, transmission of messages through the application servers (114) from a specific messaging client (104) to another messaging client (104), transmission of media files (e.g., images or videos) from the messaging client (104) to the messaging server (118), and settings of a collection of media data (e.g., stories) for possible access by another messaging client (104), searching of a list of friends of a user of the client device (102), searching of such collections, searching of messages and content, adding and deleting entities (e.g., friends) to an entity graph (e.g., social graph), locating friends within the social graph, and opening application events (e.g., related to the messaging client (104)).

[0063] Application servers (114) host a number of server applications and subsystems, including, for example, a messaging server (118), an attribution server (122), and a social network server (124). The messaging server (118) implements a number of message processing techniques and functions, particularly those related to the aggregation and other processing of content (e.g., text and multimedia content) contained in messages received from multiple instances of the messaging client (104). As described in more detail, text and media content from multiple sources may be aggregated into collections of content (e.g., called stories or galleries). These collections are then made available to the messaging client (104). Other processor and memory-intensive data processing may also be performed by the messaging server (118) on the server side, taking into account the hardware requirements for such processing.

[0064] The application servers (114) also include an attribution server (122) configured to facilitate a privacy-safe attribution process using the privacy-safe joint identification protocol described in this specification.

[0065] The social network server (124) supports various social networking functions and services and makes these functions and services available to the messaging server (118). To this end, the social network server (124) maintains and accesses an entity graph within a database (126). Examples of functions and services supported by the social network server (124) include the identification of other users in the networking environment (100) with whom a specific user has a relationship or is "following," and also the identification of other entities and interests of the specific user.

[0066] Returning to the messaging client (104), features and functions of external resources (e.g., an application installed on the client device (102) or a web view app running in a web view on the messaging client (104)) are made available to the user through the interface of the messaging client (104). External resources are often provided by a third party, but may also be provided by the creator or provider of the messaging client (104). The messaging client (104) receives a user selection of an option to launch or access the features of these external resources.

[0067] A messaging client (104) may notify a user of a client device (102) or other users associated with such user (e.g., “friends”) of activity occurring in one or more external resources. For example, the messaging client (104) may provide participants in a conversation (e.g., a chat session) in the messaging client (104) with notifications regarding current or recent use of an external resource by one or more members of a group of users. One or more users may be invited to participate in an active external resource or to launch an external resource that was recently used but is currently inactive (in the group of friends). The external resource may provide participants in the conversation, each using their own messaging clients (104), with the ability to share items, situations, states, or locations in the external resource with one or more members of a group of users in a chat session. The shared items may be interactive chat cards that allow members of the chat to interact, for example, to launch a corresponding external resource, view specific information within the external resource, or take a member of the chat to a specific location or state within the external resource. Within a given external resource, response messages can be sent to users on a messaging client (104). The external resource may optionally include different media items in the responses based on the current context of the external resource.

[0068] A developer tools server (125) is also illustrated in FIG. 1. The developer tools server (125) maintains one or more software developer kits (SDKs) that allow the integration of some of the features provided with the messaging server system across third-party applications. These features include, for example, a privacy-safe co-identification protocol provided by the attribution server (122). An example of a third-party application that benefits from integrating the privacy-safe co-identification protocol provided by the attribution server (122) is a partner system that maintains a partner dataset of user records.

[0069] System Architecture

[0070] FIG. 2 is a block diagram of a system (200) implementing a plurality of subsystems supported by a messaging client (104) on the client side and by application servers (114) on the server side. These subsystems include, for example, a short-term timer system (202), a collection management system (204), an attribution service (208), and an external resource system (214).

[0071] The short-term timer system (202) is responsible for enforcing temporary or time-limited access to content by the messaging client (104) and the messaging server (118). The short-term timer system (202) includes a plurality of timers that selectively enable access (e.g., for presentation and display) to messages and associated content through the messaging client (104) based on duration and display parameters associated with a message, or a collection of messages (e.g., a story).

[0072] The collection management system (204) is responsible for managing sets or collections of media (e.g., collections of text, image, video, and audio data). Collections of content (e.g., messages including images, video, text, and audio) may be organized into "event galleries" or "event stories." These collections may be available for a specific time period, such as the duration of the event to which the content is related. For example, content related to a music concert may be available as a "story" for the duration of that music concert. The collection management system (204) may also be responsible for publishing an icon that provides notification of the existence of a specific collection to the user interface of the messaging client (104). In some examples, external content provided by third-party servers (110) is displayed by the messaging client (104) in response to detecting a request from the messaging client (104) to present a specific collection. Metrics indicating conversions following the presentation of an external content item in a messaging client (104) are generated by the attribution service (208).

[0073] The attribution service (208) is illustrated in FIG. 2 as spanning the application servers (114) and third-party servers (110). The attribution service (208) provides various functions that facilitate the privacy-safe co-identification protocol described herein, which can be utilized by external resources provided by the third-party servers (110) via a Software Development Kit (SDK).

[0074] In some examples, an SDK configured to support a privacy-safe joint identification protocol is provided by an external resource system (214).

[0075] External resources, such as the partner system described above, utilize the SDK to perform the actions described above as performed by the partner system. To integrate the functions of the SDK into the external resource, the SDK is downloaded from the messaging server (118) by the third-party server (110), or otherwise received by the third-party server (110). Once downloaded or received, the SDK is included as part of the application code of the external resource, such as the partner system. Subsequently, the code of the external resource may call or invoke specific functions of the SDK to integrate the features of the attribution service (208) into the external resource.

[0076] Process flow

[0077] FIG. 3 is a flowchart of a method (300) for privacy-safe anonymized identity matching according to some examples. The method (300) may be performed by processing logic that may include hardware (e.g., dedicated logic, programmable logic, microcode, etc.), software, or a combination of both. In one example, part of the processing logic resides in the application servers (114) of FIG. 1.

[0078] The described flowchart may represent operations as a sequential process, but many of the operations may be performed in parallel or simultaneously. Furthermore, the order of the operations may be rearranged. A process terminates when its operations are completed. A process may correspond to a method, procedure, algorithm, etc. The operations of the methods may be performed wholly or partially, and may be performed together with some or all of the operations in other methods, and may be performed by any number of different systems, such as the systems described herein, or by any part thereof, such as a processor included in any of the systems. Method (300) begins with operation 310.

[0079] In operation 310, the host system stores a host dataset (e.g., a dataset storing user information maintained by the host system configured to display external content originating from a third-party provider), and the partner system associated with the third-party provider stores a partner dataset (a dataset storing user information maintained by the partner system providing external content to the host system). As described above, the host system assigns its respective host-assigned identifiers to its users, and the partner system assigns its respective partner-assigned identifiers to represent its users. The same user may be identified in the host dataset and the partner dataset by different internal identifiers. Whether in the host dataset or the partner dataset, an item in the dataset storing user information is a record containing a user identification (a host-assigned identifier in the host dataset and a partner-assigned identifier in the partner dataset) mapped to a set of PII elements. Examples of PII elements in the dataset records include, for example, an email address, an IP address, and a device identification. The PII elements in the dataset records may be hashed.

[0080] In operation 320, the host encryption key is generated on the host system, and the partner encryption key is generated on the partner system.

[0081] In operation 330, double-encrypted PII elements are generated by double-encrypting the respective PII elements from the records of the host dataset and the records of the partner dataset using the host encryption key and the partner encryption key. The double-encrypted PII elements derived from the partner dataset are tagged with their respective encrypted partner-assigned identifiers. The double-encrypted PII elements derived from the host dataset are tagged with their respective partner-generated anonymous identifiers.

[0082] In operation 340, each anonymous joint identifier is established for each of the double-encrypted PII elements based on the associated encrypted partner-assigned identifiers and the associated partner-generated anonymous identifiers.

[0083] In operation 350, the size of the intersection of the host dataset and the partner dataset is calculated using their respective anonymous joint identifiers. The size of the intersection of the host dataset and the partner dataset is the number of records representing the same user in both datasets.

[0084] Machine Architecture

[0085] FIG. 4 is a schematic representation of a machine (400) on which instructions (408) (e.g., software, program, application, applet, app, or other executable code) can be executed to cause the machine (400) to perform any one or more of the methodologies discussed herein. For example, instructions (408) can cause the machine (400) to perform any one or more of the methods described herein. Instructions (408) convert a general unprogrammed machine (400) into a specific machine (400) programmed to perform the described and illustrated functions in the described manner. The machine (400) may operate as a standalone device or may be coupled to other machines (e.g., networked). In a networked deployment, the machine (400) may operate as a server machine or a client machine in a server-client network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. The machine (400) may include, but is not limited to, a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a netbook, a set-top box (STB), a personal digital assistant (PDA), an entertainment media system, a cellular phone, a smartphone, a mobile device, a wearable device (e.g., a smartwatch), a smart home device (e.g., a smart appliance), other smart devices, a web appliance, a network router, a network switch, a network bridge, or any machine capable of executing commands (408) that specify actions to be taken by the machine (400) sequentially or otherwise. Furthermore, although only a single machine (400) is exemplified, the term “machine” should also be considered to include a collection of machines that execute commands (408) individually or jointly to perform any one or more of the methodologies discussed herein.For example, the machine (400) may include any one of a plurality of server devices that form part of a client device (102) or a messaging server system (108). In some examples, the machine (400) may also include both client and server systems, and specific operations of a specific method or algorithm are performed on the server side and specific operations of a specific method or algorithm are performed on the client side.

[0086] The machine (400) may include processors (402), memory (404), and I / O (input / output) components (438) that can be configured to communicate with each other via a bus (440). In one example, the processors (402) (e.g., a CPU (Central Processing Unit), a RISC (Reduced Instruction Set Computing) processor, a CISC (Complex Instruction Set Computing) processor, a GPU (Graphics Processing Unit), a DSP (Digital Signal Processor), an ASIC (Application Specific Integrated Circuit), an RFIC (Radio-Frequency Integrated Circuit), other processors, or any suitable combination thereof) may include, for example, a processor (406) and a processor (410) that execute instructions (408). The term "processor" is intended to include multi-core processors that may include two or more independent processors (sometimes referred to as "cores") capable of executing instructions simultaneously. FIG. 4 illustrates multiple processors (402), but the machine (400) may include a single processor having a single core, a single processor having multiple cores (e.g., a multi-core processor), multiple processors having a single core, multiple processors having multiple cores, or any combination thereof.

[0087] The memory (404) includes a main memory (412), a static memory (414), and a storage unit (416), both of which are accessible to the processors (402) via a bus (440). The main memory (404), the static memory (414), and the storage unit (416) store instructions (408) that implement any one or more of the methodologies or functions described herein. The instructions (408) may also exist, wholly or partially, during the execution by the machine (400), in the main memory (412), in the static memory (414), in the machine-readable medium (418) within the storage unit (414), in at least one of the processors (402) (e.g., in the processor's cache memory), or any suitable combination thereof.

[0088] The I / O components (438) may include a wide variety of components for receiving inputs, providing outputs, generating outputs, transmitting information, exchanging information, capturing measurements, etc. The specific I / O components (438) included in a particular machine will depend on the type of machine. For example, portable machines such as mobile phones may include touch input devices or other such input mechanisms, while headless server machines are unlikely to include such touch input devices. It should be noted that the I / O components (438) may include many other components not shown in FIG. 4. In various examples, the I / O components (438) may include user output components (424) and user input components (426). User output components (424) may include visual components (e.g., a display such as a plasma display panel (PDP), a light-emitting diode (LED) display, a liquid crystal display (LCD), a projector, or a cathode ray tube (CRT)), acoustic components (e.g., a speaker), haptic components (e.g., a vibration motor, a resistance mechanism), other signal generators, etc. User input components (426) may include alphanumeric input components (e.g., a keyboard, a touch screen configured to receive alphanumeric input, a photo-optical keyboard, or other alphanumeric input components), point-based input components (e.g., a mouse, a touchpad, a trackball, a joystick, a motion sensor, or other pointing mechanism), tactile input components (e.g., a physical button, a touch screen providing the location and force of a touch or touch gesture, or other tactile input components), audio input components (e.g., a microphone), etc.

[0089] In additional examples, I / O components (438) may include, among various other components, biometric components (428), motion components (430), environment components (432), or position components (434). For example, biometric components (428) include components for detecting expressions (e.g., hand expressions, facial expressions, voice expressions, body gestures, or eye tracking), measuring biosignals (e.g., blood pressure, heart rate, body temperature, sweat, or brain waves), identifying a person (e.g., voice identification, retinal identification, face identification, fingerprint identification, or EEG-based identification), and doing similar things. Motion components (430) include acceleration sensor components (e.g., accelerometers), gravity sensor components, and rotation sensor components (e.g., gyroscopes).

[0090] Environmental components (432) may include, for example, one or more cameras (having still image / photo and video capabilities), light sensor components (e.g., photometers), temperature sensor components (e.g., one or more thermometers for detecting ambient temperature), humidity sensor components, pressure sensor components (e.g., barometers), acoustic sensor components (e.g., one or more microphones for detecting background noise), proximity sensor components (e.g., infrared sensors for detecting nearby objects), gas sensors (e.g., gas detection sensors for detecting concentrations of hazardous gases for safety or measuring contaminants in the atmosphere), or other components capable of providing indications, measurements, or signals corresponding to the surrounding physical environment.

[0091] With respect to the cameras, the client device (102) may have a camera system including, for example, front cameras located on the front of the client device (102) and rear cameras located on the rear of the client device (102). The front cameras may be used, for example, to capture still images and videos (e.g., "selfies") of the user of the client device (102), which may then be augmented with the augmentation data (e.g., filters) described above. The rear cameras may be used, for example, to capture still images and videos in a more traditional camera mode, and these images are similarly augmented with augmentation data. In addition to the front and rear cameras, the client device (102) may also include a 360° camera for capturing 360° photos and videos.

[0092] Additionally, the camera system of the client device (102) may include dual rear cameras (e.g., a depth-sensing camera as well as a main camera) on the front and rear sides of the client device (102), or even triple, quadruple, or quintuple rear camera configurations. These multiple camera systems may include, for example, a wide camera, an ultra-wide camera, a telephoto camera, a macro camera, and a depth sensor.

[0093] Position components (434) include position sensor components (e.g., GPS receiver components), altitude sensor components (e.g., altimeters or barometers that detect air pressure from which altitude can be derived), orientation sensor components (e.g., magnetometers), and similar ones.

[0094] Communication can be implemented using a wide variety of technologies. The I / O components (438) further include communication components (436) operable to connect the machine (400) to the network (420) or devices (422) through their respective combinations or connections. For example, the communication components (436) may include a network interface component, or other suitable device for interfacing with the network (420). In additional examples, the communication components (436) may include wired communication components, wireless communication components, cellular communication components, near-field communication (NFC) components, Bluetooth ® Components (e.g., Bluetooth) ® Low Energy), Wi-Fi ® It may include other communication components that provide communication through components and other aspects. The devices (422) may be other machines or any various peripheral devices (e.g., peripheral devices connected via USB).

[0095] Furthermore, the communication components (636) may include components capable of detecting identifiers or operable to detect identifiers. For example, the communication components (636) may include Radio Frequency Identification (RFID) tag reader components, NFC smart tag detection components, optical reader components (e.g., optical sensors for detecting one-dimensional barcodes such as Universal Product Code (UPC) barcodes, multi-dimensional barcodes such as Quick Response (QR) codes, Aztec codes, Data Matrix, Dataglyph, MaxiCode, PDF417, Ultra Code, UCC RSS-2D barcodes, and other optical codes), or acoustic detection components (e.g., microphones for identifying tagged audio signals). In addition, various information, such as location via Internet Protocol (IP) geolocation, location via Wi-Fi® signal triangulation, and location via detection of NFC beacon signals that can indicate a specific location, can be derived through the communication components (436).

[0096] Various memories (e.g., main memory (412), static memory (414), and memory of the processors (402)) and storage unit (416) may store one or more sets of instructions and data structures (e.g., software) that implement any one or more of the methodologies or functions described herein. These instructions (e.g., instructions (408)) enable various operations to implement the disclosed examples when executed by the processors (402).

[0097] Commands (408) may be transmitted or received over a network (420) using a transmission medium through a network interface device (e.g., a network interface component included in the communication components (436)) and using any one of several well-known transmission protocols (e.g., HTTP (hypertext transfer protocol)). Similarly, commands (408) may be transmitted or received using a transmission medium through a connection to the devices (422) (e.g., peer-to-peer connection).

[0098] Glossary

[0099] "Carrier signal" refers to any intangible medium capable of storing, encoding, or carrying instructions for execution by a machine, and includes digital or analog communication signals or other intangible media to facilitate the communication of such instructions. Instructions may be transmitted or received over a network using a transmission medium through a network interface device.

[0100] "Client device" refers to any machine that interfaces with a communication network to obtain resources from one or more server systems or other client devices. A client device may be, but is not limited to, a mobile phone, a desktop computer, a laptop, PDAs (portable digital assistants), smartphones, tablets, ultrabooks, netbooks, laptops, multi-processor systems, microprocessor-based or programmable consumer electronics, game consoles, set-top boxes, or any other communication device that a user can use to access the network.

[0101] "Communication network" refers to one or more parts of a network that may be an ad-hoc network, intranet, extranet, VPN (virtual private network), LAN (local area network), wireless LAN (WLAN), WAN (wide area network), wireless WAN (WWAN), MAN (metropolitan area network), the Internet, part of the Internet, part of the PSTN (Public Switched Telephone Network), POTS (plain old telephone service) network, cellular telephone network, wireless network, Wi-Fi® network, other types of networks, or a combination of two or more of these networks. For example, a network or part of a network may include a wireless or cellular network, and a coupling may be a CDMA (Code Division Multiple Access) connection, a GSM (Global System for Mobile communications) connection, or other types of cellular or wireless coupling.In this example, the combination can implement any of the various types of data transmission technologies, such as 1xRTT (Single Carrier Radio Transmission Technology), EVDO (Evolution-Data Optimized) technology, GPRS (General Packet Radio Service) technology, EDGE (Enhanced Data rates for GSM Evolution) technology, 3GPP (third Generation Partnership Project) including 3G, 4th generation wireless (4G) networks, UMTS (Universal Mobile Telecommunications System), HSPA (High Speed ​​Packet Access), WiMAX (Worldwide Interoperability for Microwave Access), LTE (Long Term Evolution) standards, other things defined by various standard-setting organizations, other long-range protocols, or other data transmission technologies.

[0102] "Component" refers to a device, physical entity, or logic having boundaries defined by function or subroutine calls, branch points, APIs, or other techniques that provide the division or modularization of specific processing or control functions. Components may be combined with other components through their interfaces to perform machine processes. A component may be a packaged functional hardware unit designed to be used with other components and, typically, with a part of a program that performs a specific function among the related functions. Components may constitute software components (e.g., code embodied on a machine-readable medium) or hardware components. "Hardware component" is a tangible unit capable of performing specific operations and may be configured or arranged in a specific physical manner. In various exemplary embodiments, one or more computer systems (e.g., standalone computer systems, client computer systems, or server computer systems) or one or more hardware components of a computer system (e.g., a processor or a group of processors) may be configured by software (e.g., an application or a part of an application) as hardware components that operate to perform specific operations as described herein. Hardware components may also be implemented mechanically, electronically, or any suitable combination thereof. For example, a hardware component may include dedicated circuits or logic that are permanently configured to perform specific operations. A hardware component may be a special-purpose processor, such as a field-programmable gate array (FPGA) or an application-specific integrated circuit (ASIC). A hardware component may also include programmable logic or circuits that are temporarily configured by software to perform specific operations.For example, a hardware component may include software executed by a general-purpose processor or another programmable processor. Once configured by such software, the hardware components become specific machines (or specific components of a machine) uniquely customized to perform the configured functions and are no longer general-purpose processors. It will be recognized that the decision to implement a hardware component mechanically, in a dedicated, permanently configured circuit, or in a temporarily configured circuit (e.g., configured by software) may be driven by cost and time considerations. Accordingly, the phrase “hardware component” (or “hardware-implemented component”) should be understood to encompass tangible entities as long as they are physically configured, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate in a particular manner or to perform the specific operations described herein. When considering embodiments in which hardware components are temporarily configured (e.g., programmed), it is not necessary for each hardware component to be configured or instantiated at any single time instance. For example, in the case where a general-purpose processor is configured by software such that a hardware component becomes a special-purpose processor, the general-purpose processor may be configured as different special-purpose processors at different times (e.g., including different hardware components). Thus, the software configures a specific processor or processors to configure a specific hardware component at one time instance and a different hardware component at a different time instance. A hardware component may provide information to other hardware components and receive information from them. Therefore, the described hardware components may be considered as being coupled in a communicable manner.In cases where multiple hardware components exist simultaneously, communication may be achieved through signal transmission between two or more of the hardware components or between two or more (e.g., via appropriate circuits and buses). In embodiments where multiple hardware components are configured or instantiated at different times, communication between such hardware components may be achieved, for example, through the storage and retrieval of information within memory structures accessible to multiple hardware components. For example, one hardware component may perform an operation and store the output of that operation in a memory device to which it is communicably coupled. Subsequently, additional hardware components may access the memory device to retrieve and process the stored output. Hardware components may also initiate communication with input or output devices and may operate on resources (e.g., collections of information). Various operations of the exemplary methods described herein may be performed at least partially by one or more processors configured temporarily (e.g., by software) or permanently to perform the relevant operations. Whether configured temporarily or permanently, such processors may constitute processor-implemented components that operate to perform one or more operations or functions described herein. As used herein, "processor-implemented component" refers to a hardware component implemented using one or more processors. Similarly, the methods described herein may be implemented at least partially by a processor, and specific processors or processors are examples of hardware.For example, at least some of the operations of the method may be performed by one or more processors (402) or components implemented by processors. Furthermore, one or more processors may also operate to support the performance of the relevant operations in a "cloud computing" environment or as "software as a service" (SaaS). For example, at least some of the operations may be performed by a group of computers (as examples of machines including processors), and these operations may be accessible via a network (e.g., the Internet) and through one or more appropriate interfaces (e.g., APIs). The performance of certain operations may not only exist within a single machine but may also be distributed among processors deployed across multiple machines. In some exemplary embodiments, the processors or components implemented by processors may be located in a single geographic location (e.g., a home environment, an office environment, or within a server farm). In other exemplary embodiments, the processors or components implemented by processors may be distributed across multiple geographic locations.

[0103] "Computer-readable storage medium" refers to both machine storage media and transmission media. Accordingly, the terms include both storage devices / medias and carriers / modulated data signals. The terms "machine-readable medium," "computer-readable medium," and "device-readable medium" mean the same thing and may be used interchangeably in this disclosure.

[0104] "Machine storage medium" refers to a single or multiple storage devices and media (e.g., centralized or distributed databases, and associated caches and servers) that store executable instructions, routines, and data. Accordingly, the term should be considered to include, but not be limited to, solid-state memories including memory inside or outside processors, and optical and magnetic media. Specific examples of machine storage medium, computer storage medium, and device storage medium include, by example, non-volatile memory including semiconductor memory devices, e.g., EPROM (erasable programmable read-only memory), EEPROM (electrically erasable programmable read-only memory), FPGAs, and flash memory devices; magnetic disks such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The terms "machine storage medium," "device storage medium," and "computer storage medium" mean the same thing and may be used interchangeably in this disclosure. The terms "machine storage medium," "computer storage medium," and "device storage medium" specifically exclude carrier waves, modulated data signals, and other such media, at least some of which are included under the term "signal medium."

[0105] "Non-transient computer-readable storage medium" refers to a type of medium capable of storing, encoding, or carrying instructions for execution by a machine.

[0106] "Signal medium" refers to any intangible medium capable of storing, encoding, or carrying instructions for execution by a machine, and includes digital or analog communication signals or other intangible media for facilitating the communication of software or data. The term "signal medium" should be considered to include any form of modulated data signal, carrier wave, etc. The term "modulated data signal" means a signal in which one or more of its characteristics are set or altered, such as in the matter of encoding information within the signal. The terms "transmission medium" and "signal medium" mean the same thing and may be used interchangeably in this disclosure.

[0107] Software Architecture

[0108] FIG. 5 is a block diagram (500) illustrating a software architecture (504) that may be installed in any one or more of the devices described herein. The software architecture (504) is supported by hardware such as a machine (502) that includes processors (520), memory (526), ​​and I / O components (538). In this example, the software architecture (504) may be conceptualized as a stack of layers, each layer providing specific functionality. The software architecture (504) includes layers such as an operating system (512), libraries (510), frameworks (508), and applications (506). Operationally, applications (506) invoke API calls (550) through the software stack and receive messages (552) in response to the API calls (550).

[0109] The operating system (512) manages hardware resources and provides common services. The operating system (512) includes, for example, a kernel (514), services (516), and drivers (522). The kernel (514) acts as an abstraction layer between the hardware and other software layers. For example, the kernel (514) provides, among other functions, memory management, processor management (e.g., scheduling), component management, networking, and security settings. Services (516) may provide other common services for other software layers. Drivers (522) are responsible for controlling or interfacing with the underlying hardware. For example, drivers (522) may include display drivers, camera drivers, BLUETOOTH® or BLUETOOTH® Low Energy drivers, flash memory drivers, serial communication drivers (e.g., USB drivers), WI-FI® drivers, audio drivers, power management drivers, etc.

[0110] Libraries (510) provide a common low-level infrastructure used by applications (506). Libraries (510) may include system libraries (518) (e.g., the C standard library) that provide functions such as memory allocation functions, string manipulation functions, mathematical functions, etc. Additionally, the libraries (510) may include API libraries (524) such as media libraries (e.g., libraries that support the presentation and manipulation of various media formats such as MPEG4 (Moving Picture Experts Group-4), Advanced Video Coding (H.264 or AVC), MP3 (Moving Picture Experts Group Layer-3), AAC (Advanced Audio Coding), AMR (Adaptive Multi-Rate) audio codecs, Joint Photographic Experts Group (JPEG or JPG), or PNG (Portable Network Graphics), graphics libraries (e.g., OpenGL frameworks used to render graphic content on a display in two dimensions (2D) and three dimensions (3D)), database libraries (e.g., SQLite providing various relational database functions), web libraries (e.g., WebKit providing web browsing functionality). The libraries (510) may also include a wide variety of other libraries (528) that provide many different APIs to applications (506).

[0111] Frameworks (508) provide common high-level infrastructure used by applications (506). For example, frameworks (508) provide various graphical user interface (GUI) functions, high-level resource management, and high-level location services. Frameworks (508) may provide a wide range of other APIs that can be used by applications (506), some of which may be specific to a particular operating system or platform.

[0112] In one example, applications (506) may include a wide range of other applications such as a home application (536), a contacts application (530), a browser application (532), a book reader application (534), a location application (542), a media application (544), a messaging application (546), a game application (548), and a third-party application (540). Applications (506) are programs that execute functions defined in programs. Various programming languages ​​may be used to create one or more of applications (506) that are structured in various ways, such as an object-oriented programming language (e.g., Objective-C, Java, or C++) or a procedural programming language (e.g., C or assembly language). In a specific example, a third-party application (540) (e.g., an application developed by an entity other than a vendor of a specific platform using an ANDROID™ or IOS™ software development kit (SDK)) may be mobile software running on a mobile operating system such as IOS™, ANDROID™, WINDOWS® Phone, or other mobile operating systems. In this example, the third-party application (540) may invoke API calls (550) provided by the operating system (512) to facilitate the functionality described herein.

[0113] Glossary

[0114] "Carrier signal" refers to any intangible medium capable of storing, encoding, or carrying instructions for execution by a machine, and includes digital or analog communication signals or other intangible media to facilitate the communication of such instructions. Instructions may be transmitted or received over a network using a transmission medium through a network interface device.

[0115] "Client device" refers to any machine that interfaces with a communication network to obtain resources from one or more server systems or other client devices. A client device may be, but is not limited to, a mobile phone, a desktop computer, a laptop, PDAs (portable digital assistants), smartphones, tablets, ultrabooks, netbooks, laptops, multi-processor systems, microprocessor-based or programmable consumer electronics, game consoles, set-top boxes, or any other communication device that a user can use to access the network.

[0116] "Communication network" refers to one or more parts of a network that may be an ad-hoc network, intranet, extranet, VPN (virtual private network), LAN (local area network), wireless LAN (WLAN), WAN (wide area network), wireless WAN (WWAN), MAN (metropolitan area network), the Internet, part of the Internet, part of the PSTN (Public Switched Telephone Network), POTS (plain old telephone service) network, cellular telephone network, wireless network, Wi-Fi® network, other types of networks, or a combination of two or more of these networks. For example, a network or part of a network may include a wireless or cellular network, and a coupling may be a CDMA (Code Division Multiple Access) connection, a GSM (Global System for Mobile communications) connection, or other types of cellular or wireless coupling.In this example, the combination can implement any of the various types of data transmission technologies, such as 1xRTT (Single Carrier Radio Transmission Technology), EVDO (Evolution-Data Optimized) technology, GPRS (General Packet Radio Service) technology, EDGE (Enhanced Data rates for GSM Evolution) technology, 3GPP (third Generation Partnership Project) including 3G, 4th generation wireless (4G) networks, UMTS (Universal Mobile Telecommunications System), HSPA (High Speed ​​Packet Access), WiMAX (Worldwide Interoperability for Microwave Access), LTE (Long Term Evolution) standards, other things defined by various standard-setting organizations, other long-range protocols, or other data transmission technologies.

[0117] "Component" refers to a device, physical entity, or logic having boundaries defined by function or subroutine calls, branch points, APIs, or other techniques that provide the division or modularization of specific processing or control functions. Components may be combined with other components through their interfaces to perform machine processes. A component may be a packaged functional hardware unit designed to be used with other components and, typically, with a part of a program that performs a specific function among the related functions. Components may constitute software components (e.g., code embodied on a machine-readable medium) or hardware components. "Hardware component" is a tangible unit capable of performing specific operations and may be configured or arranged in a specific physical manner. In various examples, one or more computer systems (e.g., standalone computer systems, client computer systems, or server computer systems) or one or more hardware components of a computer system (e.g., a processor or a group of processors) may be configured by software (e.g., an application or a part of an application) as hardware components that operate to perform specific operations as described herein. Hardware components may also be implemented mechanically, electronically, or any suitable combination thereof. For example, a hardware component may include dedicated circuits or logic that are permanently configured to perform specific operations. A hardware component may be a special-purpose processor, such as a field-programmable gate array (FPGA) or an application-specific integrated circuit (ASIC). A hardware component may also include programmable logic or circuits that are temporarily configured by software to perform specific operations.For example, a hardware component may include software executed by a general-purpose processor or another programmable processor. Once configured by such software, the hardware components become specific machines (or specific components of a machine) uniquely customized to perform the configured functions and are no longer general-purpose processors. It will be recognized that the decision to implement a hardware component mechanically, in a dedicated, permanently configured circuit, or in a temporarily configured circuit (e.g., configured by software) may be driven by cost and time considerations. Accordingly, the phrase "hardware component" (or "hardware-implemented component") should be understood to encompass tangible entities as long as they are physically configured, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate in a particular way or to perform the specific actions described herein. When considering examples where hardware components are temporarily configured (e.g., programmed), it is not necessary for each hardware component to be configured or instantiated in any single time instance. For example, in the case where a general-purpose processor is configured by software such that a hardware component becomes a special-purpose processor, the general-purpose processor may be configured as different special-purpose processors at different times (e.g., including different hardware components). Thus, the software configures a specific processor or processors to configure a specific hardware component at one time instance and a different hardware component at a different time instance. A hardware component may provide information to other hardware components and receive information from them. Therefore, the described hardware components may be considered as being coupled in a communicable manner.In cases where multiple hardware components exist simultaneously, communication may be achieved through signal transmission between two or more of the hardware components or between two or more (e.g., via appropriate circuits and buses). In examples where multiple hardware components are configured or instantiated at different times, communication between such hardware components may be achieved, for example, through the storage and retrieval of information within memory structures accessible to multiple hardware components. For example, one hardware component may perform an operation and store the output of that operation in a memory device to which it is communicably coupled. Subsequently, additional hardware components may access the memory device to retrieve and process the stored output. Hardware components may also initiate communication with input or output devices and operate on resources (e.g., collections of information). Various operations of the exemplary methods described herein may be performed at least partially by one or more processors configured temporarily (e.g., by software) or permanently to perform the relevant operations. Whether configured temporarily or permanently, such processors may constitute processor-implemented components that operate to perform one or more operations or functions described herein. As used herein, "processor-implemented component" refers to a hardware component implemented using one or more processors. Similarly, the methods described herein may be implemented at least partially by a processor, and specific processors or processors are examples of hardware.For example, at least some of the operations of the method may be performed by one or more processors (402) or components implemented by processors. Furthermore, one or more processors may also operate to support the performance of the relevant operations in a "cloud computing" environment or as "software as a service" (SaaS). For example, at least some of the operations may be performed by a group of computers (as examples of machines containing processors), and these operations may be accessible via a network (e.g., the Internet) and through one or more appropriate interfaces (e.g., APIs). The performance of certain operations may not only exist within a single machine but may also be distributed among processors deployed across multiple machines. In some examples, the processors or components implemented by processors may be located in a single geographic location (e.g., a home environment, an office environment, or within a server farm). In other examples, the processors or components implemented by processors may be distributed across multiple geographic locations.

[0118] "Computer-readable storage medium" refers to both machine storage media and transmission media. Accordingly, the terms include both storage devices / medias and carriers / modulated data signals. The terms "machine-readable medium," "computer-readable medium," and "device-readable medium" mean the same thing and may be used interchangeably in this disclosure.

[0119] An "ephemeral message" refers to a message accessible for a time-limited duration. Ephemeral messages can be text, images, videos, etc. The access time for an ephemeral message can be set by the message sender. Alternatively, the access time can be a default setting or a setting specified by the recipient. Regardless of the setting method, the message is transitory.

[0120] "Machine storage medium" refers to a single or multiple storage devices and media (e.g., centralized or distributed databases, and associated caches and servers) that store executable instructions, routines, and data. Accordingly, the term should be considered to include, but not be limited to, solid-state memories including memory inside or outside processors, and optical and magnetic media. Specific examples of machine storage medium, computer storage medium, and device storage medium include, by example, non-volatile memory including semiconductor memory devices, e.g., EPROM (erasable programmable read-only memory), EEPROM (electrically erasable programmable read-only memory), FPGAs, and flash memory devices; magnetic disks such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The terms "machine storage medium," "device storage medium," and "computer storage medium" mean the same thing and may be used interchangeably in this disclosure. The terms "machine storage medium," "computer storage medium," and "device storage medium" specifically exclude carrier waves, modulated data signals, and other such media, at least some of which are included under the term "signal medium."

[0121] "Non-transient computer-readable storage medium" refers to a type of medium capable of storing, encoding, or carrying instructions for execution by a machine.

[0122] "Signal medium" refers to any intangible medium capable of storing, encoding, or carrying instructions for execution by a machine, and includes digital or analog communication signals or other intangible media for facilitating the communication of software or data. The term "signal medium" should be considered to include any form of modulated data signal, carrier wave, etc. The term "modulated data signal" means a signal in which one or more of its characteristics are set or altered, such as in the matter of encoding information within the signal. The terms "transmission medium" and "signal medium" mean the same thing and may be used interchangeably in this disclosure.

Claims

Claim 1 As a method, the step of generating host ECC-encrypted PII elements by encrypting personally identifiable information (PII) elements from records of a host dataset using a host elliptic curve cryptography (ECC) key; the step of generating encrypted host-assigned identifiers by encrypting host-assigned identifiers of said records using a host lightweight encryption key — said encryption using the host lightweight encryption key requires less computation than said encryption using the host ECC key —; from a partner system, (i) the host ECC-encrypted PII elements further encrypted using a partner ECC key, and (ii) receiving partner ECC-encrypted PII elements from a partner dataset associated with partner-assigned identifiers encrypted using a partner lightweight encryption key; encrypting the partner ECC-encrypted PII elements from the partner dataset using the host ECC key to generate host- and-partner ECC-encrypted PII elements derived from the partner dataset; identifying encrypted matchings between the host- and-partner ECC-encrypted PII elements derived from the host dataset and the host- and-partner ECC-encrypted PII elements derived from the partner dataset; and determining the size of the intersection of the host dataset and the partner dataset based on the number of matched host- and-partner ECC-encrypted PII elements. Claim 2 A method according to claim 1, further comprising the step of merging the PII elements into clusters; and the step of establishing respective anonymous joint identifiers for each cluster of the encrypted PII elements based on associated encrypted partner identifiers. Claim 3 A method according to claim 2, further comprising the step of using each anonymous joint identifier to calculate the size of the intersection of the host dataset and the partner dataset, comprising communicating mappings between the associated host-and-partner ECC-encrypted PII elements and each anonymous joint identifier to the partner system. Claim 4 A method according to paragraph 3, further comprising the step of discarding the encrypted PII elements before providing the mappings. Claim 5 A method according to paragraph 3, further comprising the step of generating the mapping by generating random identifiers for individual anonymous joint identifiers, wherein a first random identifier among the random identifiers is associated with a specific anonymous joint identifier and an encrypted partner identifier. Claim 6 A method according to claim 1, comprising the step of generating the host lightweight encryption key, wherein the partner dataset and the partner lightweight encryption key are provided by the partner system. Claim 7 A method according to claim 6, wherein encrypting the PII elements comprises: generating host-encrypted PII elements by encrypting each PII element from records of the host dataset using the host lightweight encryption key; providing the host-encrypted PII elements to the partner system; and receiving the host-encrypted PII elements encrypted using the partner lightweight encryption key. Claim 8 In claim 6, the method wherein the ECC-encrypted PII elements are encrypted using the partner lightweight encryption key and tagged with their respective associated partner-assigned identifiers. Claim 9 In claim 6, the method comprises the step of receiving mappings of respective associated partner-assigned identifiers for the host-encrypted PII elements encrypted using the partner lightweight encryption key, wherein the ECC-encrypted PII elements are encrypted using the partner lightweight encryption key. Claim 10 A method according to claim 6, wherein providing the ECC-encrypted PII elements to the partner system comprises the step of providing mappings of each encrypted host identifier to each host-encrypted PII elements. Claim 11 In claim 5, the method of encrypting the PII elements comprises: receiving each PII element from records of the partner dataset encrypted using the partner lightweight encryption key; and encrypting each PII element from records of the partner dataset encrypted using the partner lightweight encryption key using the host lightweight encryption key, wherein each PII element from records of the partner dataset encrypted using the received partner lightweight encryption key is tagged with each associated host- and-partner ECC-encrypted PII element. Claim 12 A method according to claim 1, wherein each PII element from the records of the host dataset and the partner dataset comprises hashed email addresses and hashed Internet Protocol (IP) addresses. Claim 13 In claim 1, the host dataset includes a host identifier assigned by a host system, and the partner-assigned identifiers are assigned by a partner system, a method. Claim 14 In claim 1, the encryption of the PII elements is based on a partner lightweight encryption key, and the method further comprises the step of generating the host lightweight encryption key in a host system, wherein the partner dataset and the partner lightweight encryption key are provided by the partner system. Claim 15 A method according to claim 1, wherein the encryption of the PII elements is additionally from records of a partner dataset, and each record of the partner dataset includes the partner-assigned identifier mapped to its respective PII elements. Claim 16 A method according to claim 1, further comprising the step of encrypting the partner-assigned identifiers before accessing the host-and-partner ECC-encrypted PII elements. Claim 17 A method according to claim 1, further comprising: establishing respective partner-assigned identifiers for each of the PII elements based on the associated host-and-partner ECC-encrypted PII elements; and using the respective partner-assigned identifiers to calculate the size of the intersection of the host dataset and the partner dataset. Claim 18 A method according to claim 1, wherein the PII elements are derived from the host dataset and tagged with their respective associated partner-assigned identifiers. Claim 19 A system comprising: one or more processors; and a non-transient computer-readable storage medium comprising instructions, wherein the instructions, when executed by the one or more processors, cause the one or more processors to generate host ECC-encrypted PII elements by encrypting personally identifiable information (PII) elements from records of a host dataset using a host elliptic curve cryptography (ECC) key; and generate encrypted host-assigned identifiers by encrypting host-assigned identifiers of the records using a host lightweight encryption key — encryption using the host lightweight encryption key requires less computation than encryption using the host ECC key —; from a partner system, (i) the host ECC-encrypted PII elements further encrypted using a partner ECC key, and (ii) receiving partner ECC-encrypted PII elements from a partner dataset associated with partner-assigned identifiers encrypted using a partner lightweight encryption key; encrypting the partner ECC-encrypted PII elements from the partner dataset using the host ECC key to generate host- and-partner ECC-encrypted PII elements derived from the partner dataset; identifying encrypted matchings between host- and-partner ECC-encrypted PII elements derived from the host dataset and host- and-partner ECC-encrypted PII elements derived from the partner dataset; and determining the size of the intersection of the host dataset and the partner dataset based on the number of matched host- and-partner ECC-encrypted PII elements. A system that performs operations including: (ii) receiving partner ECC-encrypted PII elements from a partner dataset associated with partner-assigned identifiers encrypted using a partner lightweight encryption key; generating host- and-partner ECC-encrypted PII elements derived from the partner dataset; identifying encrypted matchings between host- and-partner ECC-encrypted PII elements derived from the host dataset and host- and-partner ECC-encrypted PII elements derived from the partner dataset. Claim 20 A machine-readable non-transient storage medium having instruction data executable by a machine, wherein the instruction data causes the machine to generate host ECC-encrypted PII elements by encrypting privately identifiable information (PII) elements from records of a host dataset using a host elliptic curve cryptography (ECC) key; to generate encrypted host-assigned identifiers by encrypting host-assigned identifiers of the records using a host lightweight encryption key — encryption using the host lightweight encryption key requires less computation than encryption using the host ECC key —; from a partner system, (i) the host ECC-encrypted PII elements further encrypted using a partner ECC key, and (ii) receiving partner ECC-encrypted PII elements from a partner dataset associated with partner-assigned identifiers encrypted using a partner lightweight encryption key; generating host-and-partner ECC-encrypted PII elements derived from the partner dataset by encrypting the partner ECC-encrypted PII elements from the partner dataset using the host ECC key; identifying encrypted matchings between host-and-partner ECC-encrypted PII elements derived from the host dataset and host-and-partner ECC-encrypted PII elements derived from the partner dataset; and determining the size of the intersection of the host dataset and the partner dataset based on the number of matched host-and-partner ECC-encrypted PII elements. A machine-readable, non-transient storage medium that enables operations including: receiving partner ECC-encrypted PII elements from a partner dataset associated with partner-assigned identifiers encrypted using a partner lightweight encryption key; generating host-and-partner ECC-encrypted PII elements derived from the partner dataset by encrypting the partner ECC-encrypted PII elements derived from the host dataset.