DETAILED ACTION
Notice of Pre-AIA or AIA Status
The present application, filed on or after March 16, 2013, is being examined under the first inventor to file provisions of the AIA .
This communication is in response to the amendments filed on 02/12/2026. Claims 1, 3-11, and 13-20 are currently pending in the application. It is noted that claims 2 an12 remain cancelled from the application.
Response to Arguments
The 35 U.S.C. 112(d) rejections made regarding claims 16-20 have been withdrawn as a result of applicant’s explanations.
Applicant’s arguments with respect to claim 11 have been considered but are not persuasive. Applicant argued that the art of Nachenberg et al. (US.20180268135) does not teach any secondary bloom filters and considers Nachenberg Bloom filter 240 as a master Bloom filter. The examiner disagrees with this assertion because the bloom filter 280 created in paragraphs 61-62, and FIG. 2 of Nachenberg that is used to test whether a potentially stolen data record is a member of a set of data represented by a Bloom filter by comparing it to the Bloom filter 240 is interpreted as the claimed secondary Bloom filter. Claim 11 is anticipated by the art of Nachenberg based on the claim language limitations, while claim 1 is rejected based on obviousness by the art of Nachenberg and Hao as a result of the claim language limitations. It is not meant for the examiner to import from applicant’s specification into the claim limitations.
Applicant also argued that Nachenberg does not disclose the mapping function
(the same one used to generate a representation from the extracted identified sensitive data) maps extracted identified sensitive data to at least one secondary Bloom filter. This argument is not correct because it is hash functions that were used to generate the representation as disclosed in ¶0035, and hash functions that were used for the claimed mapping as disclosed in ¶0060-¶0061, FIG. 2.
Applicant, in his arguments asserts that Bloom filter 280 was independently constructed from tuples 260 and is not related to the Bloom filter 240. The examiner disagrees with this assertion based on the disclosure in ¶0061 of Nachenberg reference as cited in the office action. The word independently/later on as underlined by the applicant do not exist in the art of Nachenberg. What the applicant is trying to drive at by coining those words is not clear. It is also argued that the art of Nachenberg does not disclose inserting a representation into an empty/existing data structure. Again, this argument is not correct because this limitation is disclosed in ¶0059, of Nachenberg reference “Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”). The elements of the bloom 240 initially have value of zeros and using set of hash functions to set the elements to value of ones in the bloom filter.
Consequently, the examiner maintains the US 102 rejections made in respect of claim 11 of the application as well as the US. 103 rejections made in respect of claim 1 of the application.
Claim Rejections - 35 USC § 102
The following is a quotation of the appropriate paragraphs of 35 U.S.C. 102 that form the basis for the rejections under this section made in this Office action:
A person shall be entitled to a patent unless –
Claims 5, 11, and 17-19 are rejected under 35 U.S.C. 102(a)(1) as being anticipated by U.S. PGPub. No. 20180268135 to Nachenberg et al. (hereinafter Nachenberg).
Regarding claim 11, Nachenberg discloses a computer-implemented method for enabling identification of data leakage (FIG. 1, “Data breach detection system 110”), comprising:
receiving a data item (¶0074, FIG. 4, “The system receives a set of private data (402)…”);
identifying sensitive data within the data item (¶0074, “a data owner may identify a set of private data for which the owner would like a breach detection system to monitor for data breaches. The set of private data may be all or some portion of the data maintained by the data owner. For example, the set of private data may be data that is more likely to be stolen, such as credit card data that could be sold”);
extracting the identified sensitive data from the data item (¶0057, “the secure data application 154 of FIG. 1 may generate the set of tuples 220 based on the data stored in the database 210 and pre-specified tuple types. A tuple type specifies the types of data to be included in each tuple. In this example, the tuple types are “name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address.”);
generating a representation from the extracted identified sensitive data (¶0080, FIG. 5, step 506, “The system generates a secure representation of each tuple (506)…”) using a mapping function (¶0061, “The secure data application 144 can apply each hash function of a set of hash functions 270 to each tuple in the set of tuples 260…”), (¶0035, “…The secure data application 144 may generate the secure representations of each data record using the same techniques (e.g., same hash function(s)) as the secure data application 144…”), see also ¶0058, wherein each representation generated using the mapping function comprises an output of the mapping function (¶0061, “…The set of hash functions 270 can be the same as the set of hash functions 230 used to create the Bloom filter 240. The output of the three hash functions for a particular tuple sets the values of three elements of a Bloom filter 280 that represents the particular tuple. The Bloom filter 280 for the tuple can then be compared to the Bloom filter 240 for the database 210. Alternatively, the values computed on the tuple from the data finder may simply be sent to the provider, where they can be used to check for a match in the provider's bloom filter(s)”), and wherein the mapping function maps the extracted identified sensitive data to at least one secondary Bloom filter (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter); and
constructing a data structure from the representation (¶0055-¶0058, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 (data structure) and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, wherein a bloom filter is a space-efficient probabilistic data structure), wherein constructing the data structure from the representation comprises either:
constructing an empty data structure (¶0055-¶0059, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, the bloom filter 240 is interpreted as the claimed empty data structure as each element have an initial value of zero) and populating it by inserting the representation into the empty data structure (¶0029, “…For sensitive documents, the secure data application 154 may compute min-hashes or Rabin fingerprints for each document and insert these min-hashes or fingerprints into the Bloom filter…”, wherein the min hashes are the representations inserted into the bloom filter which is in line with applicant’s disclosures in paragraphs 108-110 wherein applicant defined first, second, and third representations as hashes ); or
updating an existing data structure by inserting the representation into the existing data structure (¶0059, “Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”);
wherein inserting the representation into the empty or existing data structure comprises setting a value for one or more positions in the data structure that are produced by applying, to the representation, one or more hash functions associated with the empty or existing data structure (¶0059, “A Bloom filter 240 is an array of elements with each element having a respective value. Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”, wherein the elements of the bloom 240 initially have value of zeros and using set of hash functions to set the elements to value of ones in the bloom filter.”).
Regarding claim 5, Nachenberg discloses the method according to claim 11.
Nachenberg further comprising one or more of:
saving the data structure to a memory, (¶0036, “The front-end server 112 may optionally store the secure representations in one or more data storage devices 116, e.g., one or more hard drives, flash memory, etc…”), (¶0006, “…Each first probabilistic representation can include a first Bloom filter. Each second probabilistic representation can include one or more bit numbers that each identifies a respective bit of a second Bloom filter that has been set based on the second data record represented by the second probabilistic representation”), (¶0031, “…The secure data application 154 may then generate a secure representation (e.g., a Bloom filter), using the tuples for each (or at least some) of this set of fields for each credit card. In some implementations, the secure data application 154 generates a separate secure representation for each type of tuple…”);
distributing the data structure to another computer via a network (¶0036, “The data finders' computers 140 send the secure representations 146 of the potentially stolen data 142 to the front-end server 112 via the network 130…”); and
retrieving the data structure in response to a user request (¶0051-¶0052, “…For example, a data finder may provide secure representations of potentially stolen data and request a particular amount for its secure representation to be compared to data owners' data….”).
Regarding claim 17, Nachenberg discloses a data processing apparatus comprising a processor configured to perform the steps of claim 11 (¶0063, “FIG. 3 depicts a flowchart of an example process for detecting data breaches. Operations of the process 300 can be implemented, for example, by a system that includes one or more data processing apparatus, such as the data breach detection system 110 of FIG. 1…”), (¶0081, “The apparatus can be implemented in a computer program product tangibly embodied in an information carrier, e.g., in a machine-readable storage device for execution by a programmable processor; and method steps can be performed by a programmable processor executing a program of instructions to perform functions of the described implementations by operating on input data and generating output…”).
a computer-implemented method for enabling identification of data leakage (FIG. 1, “Data breach detection system 110”), comprising:
receiving a data item (¶0074, FIG. 4, “The system receives a set of private data (402)…”);
identifying sensitive data within the data item (¶0074, “a data owner may identify a set of private data for which the owner would like a breach detection system to monitor for data breaches. The set of private data may be all or some portion of the data maintained by the data owner. For example, the set of private data may be data that is more likely to be stolen, such as credit card data that could be sold”);
extracting the identified sensitive data from the data item (¶0057, “the secure data application 154 of FIG. 1 may generate the set of tuples 220 based on the data stored in the database 210 and pre-specified tuple types. A tuple type specifies the types of data to be included in each tuple. In this example, the tuple types are “name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address.”);
generating a representation from the extracted identified sensitive data (¶0080, FIG. 5, step 506, “The system generates a secure representation of each tuple (506)…”) using a mapping function (¶0061, “The secure data application 144 can apply each hash function of a set of hash functions 270 to each tuple in the set of tuples 260…”), see also ¶0058, wherein each representation generated using the mapping function comprises an output of the mapping function (¶0061, “…The set of hash functions 270 can be the same as the set of hash functions 230 used to create the Bloom filter 240. The output of the three hash functions for a particular tuple sets the values of three elements of a Bloom filter 280 that represents the particular tuple. The Bloom filter 280 for the tuple can then be compared to the Bloom filter 240 for the database 210. Alternatively, the values computed on the tuple from the data finder may simply be sent to the provider, where they can be used to check for a match in the provider's bloom filter(s)”), and wherein the mapping function maps the extracted identified sensitive data to at least one secondary Bloom filter (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter); and
constructing a data structure from the representation (¶0055-¶0058, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 (data structure) and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, wherein a bloom filter is a space-efficient probabilistic data structure), wherein constructing the data structure from the representation comprises either:
constructing an empty data structure (¶0055-¶0059, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, the bloom filter 240 is interpreted as the claimed empty data structure as each element have an initial value of zero) and populating it by inserting the representation into the empty data structure (¶0029, “…For sensitive documents, the secure data application 154 may compute min-hashes or Rabin fingerprints for each document and insert these min-hashes or fingerprints into the Bloom filter…”, wherein the min hashes are the representations inserted into the bloom filter which is in line with applicant’s disclosures in paragraphs 108-110 wherein applicant defined first, second, and third representations as hashes ); or
updating an existing data structure by inserting the representation into the existing data structure (¶0059, “Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”);
wherein inserting the representation into the empty or existing data structure comprises setting a value for one or more positions in the data structure that are produced by applying, to the representation, one or more hash functions associated with the empty or existing data structure (¶0059, “A Bloom filter 240 is an array of elements with each element having a respective value. Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”, wherein the elements of the bloom 240 initially have value of zeros and using set of hash functions to set the elements to value of ones in the bloom filter.).
Regarding claim 18, Nachenberg discloses a computer program comprising instructions stored on a non-transitory computer-readable storage medium which, when the program is executed by a computer, cause the computer to carry out the steps of claim 11 (¶0063, “FIG. 3 depicts a flowchart of an example process for detecting data breaches. Operations of the process 300 can be implemented, for example, by a system that includes one or more data processing apparatus, such as the data breach detection system 110 of FIG. 1…”), (¶0081, “The apparatus can be implemented in a computer program product tangibly embodied in an information carrier, e.g., in a machine-readable storage device for execution by a programmable processor; and method steps can be performed by a programmable processor executing a program of instructions to perform functions of the described implementations by operating on input data and generating output…”),
a computer-implemented enabling identification of data leakage (FIG. 1, “Data breach detection system 110”), comprising:
receiving a data item (¶0074, FIG. 4, “The system receives a set of private data (402)…”);
identifying sensitive data within the data item (¶0074, “a data owner may identify a set of private data for which the owner would like a breach detection system to monitor for data breaches. The set of private data may be all or some portion of the data maintained by the data owner. For example, the set of private data may be data that is more likely to be stolen, such as credit card data that could be sold”);
extracting the identified sensitive data from the data item (¶0057, “the secure data application 154 of FIG. 1 may generate the set of tuples 220 based on the data stored in the database 210 and pre-specified tuple types. A tuple type specifies the types of data to be included in each tuple. In this example, the tuple types are “name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address.”);
generating a representation from the extracted identified sensitive data (¶0080, FIG. 5, step 506, “The system generates a secure representation of each tuple (506)…”) using a mapping function (¶0061, “The secure data application 144 can apply each hash function of a set of hash functions 270 to each tuple in the set of tuples 260…”), see also ¶0058, wherein each representation generated using the mapping function comprises an output of the mapping function (¶0061, “…The set of hash functions 270 can be the same as the set of hash functions 230 used to create the Bloom filter 240. The output of the three hash functions for a particular tuple sets the values of three elements of a Bloom filter 280 that represents the particular tuple. The Bloom filter 280 for the tuple can then be compared to the Bloom filter 240 for the database 210. Alternatively, the values computed on the tuple from the data finder may simply be sent to the provider, where they can be used to check for a match in the provider's bloom filter(s)”), and wherein the mapping function maps the extracted identified sensitive data to at least one secondary Bloom filter (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter); and
constructing a data structure from the representation (¶0055-¶0058, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 (data structure) and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, wherein a bloom filter is a space-efficient probabilistic data structure), wherein constructing the data structure from the representation comprises either:
constructing an empty data structure (¶0055-¶0059, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, the bloom filter 240 is interpreted as the claimed empty data structure as each element have an initial value of zero) and populating it by inserting the representation into the empty data structure (¶0029, “…For sensitive documents, the secure data application 154 may compute min-hashes or Rabin fingerprints for each document and insert these min-hashes or fingerprints into the Bloom filter…”, wherein the min hashes are the representations inserted into the bloom filter which is in line with applicant’s disclosures in paragraphs 108-110 wherein applicant defined first, second, and third representations as hashes ); or
updating an existing data structure by inserting the representation into the existing data structure (¶0059, “Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”);
wherein inserting the representation into the empty or existing data structure comprises setting a value for one or more positions in the data structure that are produced by applying, to the representation, one or more hash functions associated with the empty or existing data structure (¶0059, “A Bloom filter 240 is an array of elements with each element having a respective value. Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”, wherein the elements of the bloom 240 initially have value of zeros and using set of hash functions to set the elements to value of ones in the bloom filter.).
Regarding claim 19, Nachenberg discloses a non-transitory computer-readable storage medium having stored thereon the computer program of claim 18 (¶0082, “…The essential elements of a computer are a processor for executing instructions and one or more memories for storing instructions and data. Generally, a computer will also include, or be operatively coupled to communicate with, one or more mass storage devices for storing data files; such devices include magnetic disks, such as internal hard disks and removable disks; magneto-optical disks; and optical disks…”).
a computer-implemented enabling identification of data leakage (FIG. 1, “Data breach detection system 110”), comprising:
receiving a data item (¶0074, FIG. 4, “The system receives a set of private data (402)…”);
identifying sensitive data within the data item (¶0074, “a data owner may identify a set of private data for which the owner would like a breach detection system to monitor for data breaches. The set of private data may be all or some portion of the data maintained by the data owner. For example, the set of private data may be data that is more likely to be stolen, such as credit card data that could be sold”);
extracting the identified sensitive data from the data item (¶0057, “the secure data application 154 of FIG. 1 may generate the set of tuples 220 based on the data stored in the database 210 and pre-specified tuple types. A tuple type specifies the types of data to be included in each tuple. In this example, the tuple types are “name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address.”);
generating a representation from the extracted identified sensitive data (¶0080, FIG. 5, step 506, “The system generates a secure representation of each tuple (506)…”) using a mapping function (¶0061, “The secure data application 144 can apply each hash function of a set of hash functions 270 to each tuple in the set of tuples 260…”), see also ¶0058, wherein each representation generated using the mapping function comprises an output of the mapping function (¶0061, “…The set of hash functions 270 can be the same as the set of hash functions 230 used to create the Bloom filter 240. The output of the three hash functions for a particular tuple sets the values of three elements of a Bloom filter 280 that represents the particular tuple. The Bloom filter 280 for the tuple can then be compared to the Bloom filter 240 for the database 210. Alternatively, the values computed on the tuple from the data finder may simply be sent to the provider, where they can be used to check for a match in the provider's bloom filter(s)”), and wherein the mapping function maps the extracted identified sensitive data to at least one secondary Bloom filter (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter); and
constructing a data structure from the representation (¶0055-¶0058, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 (data structure) and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, wherein a bloom filter is a space-efficient probabilistic data structure), wherein constructing the data structure from the representation comprises either:
constructing an empty data structure (¶0055-¶0059, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, the bloom filter 240 is interpreted as the claimed empty data structure as each element have an initial value of zero) and populating it by inserting the representation into the empty data structure (¶0029, “…For sensitive documents, the secure data application 154 may compute min-hashes or Rabin fingerprints for each document and insert these min-hashes or fingerprints into the Bloom filter…”, wherein the min hashes are the representations inserted into the bloom filter which is in line with applicant’s disclosures in paragraphs 108-110 wherein applicant defined first, second, and third representations as hashes ); or
updating an existing data structure by inserting the representation into the existing data structure (¶0059, “Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”);
wherein inserting the representation into the empty or existing data structure comprises setting a value for one or more positions in the data structure that are produced by applying, to the representation, one or more hash functions associated with the empty or existing data structure (¶0059, “A Bloom filter 240 is an array of elements with each element having a respective value. Initially, each element of the Bloom filter may have a value of zero. Each hash function can be applied to each tuple of data. Based on the application, each hash function will set an element of the Bloom filter 240 to a particular value, e.g., a value of one. As the set of hash functions 230 includes three hash functions, the set of hash functions can set up to three elements of the Bloom filter 240 for each tuple. For example, the first hash function may set one of the elements of the Bloom filter 240 to a value of one based on the data in a particular tuple while the second hash function may set a different element of the Bloom filter 240 to a value of one based on the data in the particular tuple.”, wherein the elements of the bloom 240 initially have value of zeros and using set of hash functions to set the elements to value of ones in the bloom filter.).
Claim Rejections - 35 USC § 103
The following is a quotation of 35 U.S.C. 103 which forms the basis for all obviousness rejections set forth in this Office action:
A patent for a claimed invention may not be obtained, notwithstanding that the claimed invention is not identically disclosed as set forth in section 102, if the differences between the claimed invention and the prior art are such that the claimed invention as a whole would have been obvious before the effective filing date of the claimed invention to a person having ordinary skill in the art to which the claimed invention pertains. Patentability shall not be negated by the manner in which the invention was made.
The factual inquiries for establishing a background for determining obviousness under 35 U.S.C. 103 are summarized as follows:
1. Determining the scope and contents of the prior art.
2. Ascertaining the differences between the prior art and the claims at issue.
3. Resolving the level of ordinary skill in the pertinent art.
4. Considering objective evidence present in the application indicating obviousness or nonobviousness.
Claims 1, 4, 6, 8-10, 13-16, and 20 are rejected under 35 U.S.C. 103 as being unpatentable over U.S. PGPub. No. 20180268135 to Nachenberg et al. (hereinafter Nachenberg) in view of U.S. PGPub. No. 20080313132 to Hao et al. (hereinafter Hao).
Regarding claim 1, Nachenberg discloses a computer-implemented method for identifying data leakage (FIG. 1, “Data breach detection system 110”) comprising:
receiving (step 302 of FIG. 3) a data structure (¶0055, FIG. 2, 240, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 and using the Bloom filter 240 to detect a data breach…”) formed from a plurality of representations of sensitive data (¶0055, block 210, “The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner. The example database 210 includes data related to a set of people, including their names, national identity numbers (e.g., social security numbers), credit card numbers, and addresses”) wherein the plurality of representations have been generated from underlying sensitive data using a mapping function that maps sensitive data to at least one secondary Bloom filter (¶0080, “The system generates a secure representation of each tuple (506). For example, the system may apply a set of hash functions to the data of each tuple…”), (¶0058-¶0059, 230, “a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240. In this example, the set of hash functions 230 includes three different hash functions…”, ¶0055 discloses Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…so applying a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240 is generating the representation using the hash function, wherein the hash function is the claimed mapping function), (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter);
receiving (¶0078, FIG. 5, step 502, “The system receives a set of potentially stolen data (502). For example, a user may find potentially stolen data in an Internet forum, such as an underground Internet forum where stolen data is often sold or traded.”) a data item for a determination as to its sensitivity (¶0060, “To determine whether a set of potentially stolen data 250 represents a breach of the data stored in the database 210, the potentially stolen data 250 can be processed in a similar way as the data stored in the database 210 is processed to generate the Bloom filter 240. In particular, a set of tuples 260 may be generated using the potentially stolen data 250”);
extracting (¶0079, FIG. 5, step 504, “The system generates tuples of the data (504)…”) candidate data from the data item (¶0060, FIG. 2, step 260, “…In particular, a set of tuples 260 may be generated using the potentially stolen data 250. The types of tuples in the set of tuples 260 are the same as the types of tuples in the set of tuples 220…”); and
for a first secondary Bloom filter of the at least one secondary filter (¶0061, FIG. 2, “Bloom filter 240”)
performing a membership query for the extracted candidate data in the first secondary Bloom filter (¶0061, wherein multiple hash function is applied to the generated set of tuples 260 to produce bloom filter 280 which is the compared to the bloom filter 240…”, Wherein a membership query is understood as probabilistic check to determine whether a specific element is present in a large dataset), (¶0068, FIG. 3, step 306, “The system determines whether the secure representations of the potentially stolen data match the secure representation of a data owner's data (306)…”, the disclosure in these two paragraphs is interpreted as membership querying in Bloom Filter..”); and
outputting an alert signifying that the data item may be a sensitive data item (¶0071, “If the count does exceed the threshold, the system may determine that the secure representations of the potentially stolen data match the secure representation of a data owner's data and that a data breach occurred for the data owner (310). In response, the system may notify the data owner of the breach (312)…”), see also ¶0039, (¶0041, “If the breach detection server 114 determines that a data owner has experienced a data breach, the breach detection server 114 may send a breach notification 158 to the data owner's computer 150 (or other device) by way of the front-end server 112 and the network 130…”).
However, Nachenberg does not explicitly disclose the limitation of:
“wherein the membership query returns an output based on one or more array positions of
the first secondary Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and
outputting an alert in accordance with a positive result of the membership query,
Hao discloses performing a membership query for the extracted candidate data in the first
secondary Bloom filter “wherein the membership query returns an output based on one or more array positions of the first Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and outputting an alert in accordance with a positive result of the membership query (¶0044, “The bloom filter is use in set membership queries by mapping a newly arrived key (e.g., a portion of a data packet or datagram) to a group according to the first hash function and then mapping the newly arrived key to the bloom filter using the k hash functions associated with the group. The newly arrived key is deemed to be a member of a set of initial keys only if mapped to set bits in the bloom filter.”, wherein the set bits in the bloom filter is interpreted as the array positions of the bloom filter), (¶0058, “…While executing the computer instructions the processor operates to hash received data into respective groups according to a first hash function and to hash each of the groups into a bloom filter according to k respective hash functions, where k is an integer greater than zero. In this manner, a matching of received data to a desired search term is indicated when data is hashed into only set bits within the bloom filter. In this embodiment and the other embodiments discussed above, after determining that a key or search term has yielded a match, an indication of the match and/or the key or search term is stored for subsequent use, transmitted to another processing element or program, or used to trigger/instantiate a process, warning or other event.”).
Thus, one of ordinary skill in the art would have found it obvious before the effective filing date of applicant’s claimed invention to modify the computer implemented method of Nachenberg to include positive result of membership query in bloom filter as disclosed by Hao and be motivated in doing so in order to improve query performance by reducing false positive probability in the bloom filter membership queries-Hao ¶0005 in parts.
Regarding claim 4, Nachenberg in view of Hao discloses the method of claim 1.
Nachenberg further discloses further comprising: in accordance with a negative result of the membership query for the extracted candidate data, indicating no membership of the extracted candidate data in the first secondary Bloom filter, sending the data item and/or extracted candidate data to another computer via a network (¶0068, “...the system may compare each secure representation (e.g., each Bloom filter) of a potentially stolen data record to the secure representation (e.g., Bloom filter) of the data owner. For each secure representation of a potentially stolen data record that matches the corresponding portion of the secure representation of the data owner, the system may increment a counter of the number of matching secure representations between the potentially stolen data and the data owner's data. If the count does not exceed the threshold, the system may determine that the secure representations of the potentially stolen data do not match the secure representation of a data owner's data.”), (¶0036, “The data finders' computers 140 send the secure representations 146 of the potentially stolen data 142 to the front-end server 112 via the network 130…”).
Regarding claim 6, Nachenberg in view of Hao discloses the method of claim 1.
Nachenberg further discloses wherein the data item comprises structured data (¶0029, “…the secure data application 154 may generate a probabilistic data structure using one or more cryptographic hash functions…”) and wherein extracting candidate data from the data item comprises extracting one or more fields from the structured data using an extraction function based on a known mapping (¶0031, “…The secure data application 154 may generate one or more tuples of data for each entity and generate the secure representation using the tuples. Each tuple can include one or more types of data and each tuple can include different types of data than each other tuple. In a credit card data example, the secure data application 154 may generate, for each credit card, a first tuple with the credit card number, cardholder name, and cardholder billing address and a second tuple with credit card number, expiration date, and cardholder name...”), (¶0061, FIG. 2, 230, 240, 270, and 280, “The secure data application 144 can apply each hash function of a set of hash functions 270 to each tuple in the set of tuples 260. The set of hash functions 270 can be the same as the set of hash functions 230 used to create the Bloom filter 240. The output of the three hash functions for a particular tuple sets the values of three elements of a Bloom filter 280 that represents the particular tuple.”, wherein bit array 240 is associated with hash functions 230, and bit array 280 is associated with hash functions 270. Applicant discloses in ¶0079 of the specification that a data structure may comprise a bit array associated with one or more hash functions.)
Regarding claim 8, Nachenberg in view of Hao discloses the method of claim 6.
Nachenberg further discloses wherein a representation generated from the extracted candidate data corresponds to one of the one or more fields (¶0031, “Each tuple can include one or more types of data and each tuple can include different types of data than each other tuple. In a credit card data example, the secure data application 154 may generate, for each credit card, a first tuple with the credit card number, cardholder name, and cardholder billing address and a second tuple with credit card number, expiration date, and cardholder name. The secure data application 154 may then generate a secure representation (e.g., a Bloom filter), using the tuples for each (or at least some) of this set of fields for each credit card”, taking the credit card data as the claimed candidate data, the fields will be credit card number, cardholder name, cardholder billing address, etc ).
Regarding claim 9, Nachenberg in view of Hao discloses the method of claim 6.
Nachenberg further discloses wherein a representation generated from the extracted candidate data corresponds to more than one field of the one or more fields (¶0031, “Each tuple can include one or more types of data and each tuple can include different types of data than each other tuple. In a credit card data example, the secure data application 154 may generate, for each credit card, a first tuple with the credit card number, cardholder name, and cardholder billing address and a second tuple with credit card number, expiration date, and cardholder name. The secure data application 154 may then generate a secure representation (e.g., a Bloom filter), using the tuples for each (or at least some) of this set of fields for each credit card”).
Regarding claim 10, Nachenberg in view of Hao discloses the method of claim 1.
Nachenberg further discloses further comprising, prior to generating a representation generated from the extracted candidate data, one or more of: canonicalizing the extracted candidate data; normalising the extracted candidate data; (¶0055-¶0058, wherein data in the database 210 is arranged in rows to produce specified tuples before generating secure representations from the tuples and wherein canonicalizing/normalizing/formatting the extracted candidate data is interpreted as the arrangement of the data into standard format for the generation of secure representation of the data. canonicalizing/normalizing/formatting of data is interpreted to mean the same process based on applicant’s disclosure in ¶0101 of the specification); and
formatting the extracted candidate data (¶0079, “The system generates tuples of the data (504). The tuples can be of the same format as those generated for data owner's private data…”).
Regarding claim 13, Nachenberg discloses a computer-implemented method for identifying data leakage (FIG. 1, “Data breach detection system 110”), comprising:
receiving a data item (¶0074, FIG. 4, “The system receives a set of private data (402)…”);
identifying sensitive data within the data item (¶0074, “a data owner may identify a set of private data for which the owner would like a breach detection system to monitor for data breaches. The set of private data may be all or some portion of the data maintained by the data owner. For example, the set of private data may be data that is more likely to be stolen, such as credit card data that could be sold”);
extracting the identified sensitive data from the data item (¶0057, “the secure data application 154 of FIG. 1 may generate the set of tuples 220 based on the data stored in the database 210 and pre-specified tuple types. A tuple type specifies the types of data to be included in each tuple. In this example, the tuple types are “name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address.””);
generating a representation from the extracted identified sensitive data (¶0080, FIG. 5, step 506, “The system generates a secure representation of each tuple (506)…”) using a mapping function (¶0061, “The secure data application 144 can apply each hash function of a set of hash functions 270 to each tuple in the set of tuples 260…”), see also ¶0058, wherein the representation comprises an output of the mapping function (¶0061, “…The set of hash functions 270 can be the same as the set of hash functions 230 used to create the Bloom filter 240. The output of the three hash functions for a particular tuple sets the values of three elements of a Bloom filter 280 that represents the particular tuple. The Bloom filter 280 for the tuple can then be compared to the Bloom filter 240 for the database 210. Alternatively, the values computed on the tuple from the data finder may simply be sent to the provider, where they can be used to check for a match in the provider's bloom filter(s)”), and wherein the mapping function maps the extracted identified sensitive data to at least one secondary Bloom filter (¶0035, “The secure data application 144 may generate the secure representations of each data record using the same techniques (e.g., same hash function(s)) as the secure data application 144. “), (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter);
constructing a data structure from the representation (¶0055-¶0058, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 (data structure) and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, wherein a bloom filter is a space-efficient probabilistic data structure);
receiving (¶0078, FIG. 5, step 502, “The system receives a set of potentially stolen data (502). For example, a user may find potentially stolen data in an Internet forum, such as an underground Internet forum where stolen data is often sold or traded.”) a data item for a determination as to its sensitivity (¶0060, “To determine whether a set of potentially stolen data 250 represents a breach of the data stored in the database 210, the potentially stolen data 250 can be processed in a similar way as the data stored in the database 210 is processed to generate the Bloom filter 240. In particular, a set of tuples 260 may be generated using the potentially stolen data 250”);
extracting (¶0079, FIG. 5, step 504, “The system generates tuples of the data (504)…”) candidate data from the data item (¶0060, FIG. 2, step 260, “…In particular, a set of tuples 260 may be generated using the potentially stolen data 250. The types of tuples in the set of tuples 260 are the same as the types of tuples in the set of tuples 220…”); and
for a first secondary Bloom filter of the at least one secondary filter (¶0061, FIG. 2, “Bloom filter 240”):
performing a membership query for the extracted candidate data in the first secondary Bloom filter (¶0061, wherein multiple hash function is applied to the generated set of tuples 260 to produce bloom filter 280 which is the compared to the bloom filter 240…”, Wherein a membership query is understood as probabilistic check to determine whether a specific element is present in a large dataset), (¶0068, FIG. 3, step 306, “The system determines whether the secure representations of the potentially stolen data match the secure representation of a data owner's data (306)…”, the disclosure in these two paragraphs is interpreted as membership querying in Bloom Filter, Wherein a membership query is understood as probabilistic check to determine whether a specific element is present in a large dataset); and
outputting an alert signifying that the data item may be a sensitive data item (¶0071, “If the count does exceed the threshold, the system may determine that the secure representations of the potentially stolen data match the secure representation of a data owner's data and that a data breach occurred for the data owner (310). In response, the system may notify the data owner of the breach (312)…”), see also ¶0039, (¶0041, “If the breach detection server 114 determines that a data owner has experienced a data breach, the breach detection server 114 may send a breach notification 158 to the data owner's computer 150 (or other device) by way of the front-end server 112 and the network 130…”).
However, Nachenberg does not explicitly disclose the limitation of:
“wherein the membership query returns an output based on one or more array positions of
the first secondary Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and
outputting an alert in accordance with a positive result of the membership query,
Hao discloses performing a membership query for the extracted candidate data in the first
secondary Bloom filter “wherein the membership query returns an output based on one or more array positions of the first Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and outputting an alert in accordance with a positive result of the membership query (¶0044, “The bloom filter is use in set membership queries by mapping a newly arrived key (e.g., a portion of a data packet or datagram) to a group according to the first hash function and then mapping the newly arrived key to the bloom filter using the k hash functions associated with the group. The newly arrived key is deemed to be a member of a set of initial keys only if mapped to set bits in the bloom filter.”, wherein the set bits in the bloom filter is interpreted as the array positions of the bloom filter), (¶0058, “…While executing the computer instructions the processor operates to hash received data into respective groups according to a first hash function and to hash each of the groups into a bloom filter according to k respective hash functions, where k is an integer greater than zero. In this manner, a matching of received data to a desired search term is indicated when data is hashed into only set bits within the bloom filter. In this embodiment and the other embodiments discussed above, after determining that a key or search term has yielded a match, an indication of the match and/or the key or search term is stored for subsequent use, transmitted to another processing element or program, or used to trigger/instantiate a process, warning or other event.”).
Thus, one of ordinary skill in the art would have found it obvious before the effective filing date of applicant’s claimed invention to modify the computer implemented method of Nachenberg to include positive result of membership query in bloom filter as disclosed by Hao and be motivated in doing so in order to improve query performance by reducing false positive probability in the bloom filter membership queries-Hao ¶0005 in parts.
Regarding claim 14, Nachenberg in view of Hao discloses a data processing apparatus comprising a processor configured to perform the steps of claim 1. (¶0063, “FIG. 3 depicts a flowchart of an example process for detecting data breaches. Operations of the process 300 can be implemented, for example, by a system that includes one or more data processing apparatus, such as the data breach detection system 110 of FIG. 1…”), (¶0081, “The apparatus can be implemented in a computer program product tangibly embodied in an information carrier, e.g., in a machine-readable storage device for execution by a programmable processor; and method steps can be performed by a programmable processor executing a program of instructions to perform functions of the described implementations by operating on input data and generating output…”):
a computer-implemented method for identifying data leakage (FIG. 1, “Data breach detection system 110”) comprising:
receiving (step 302 of FIG. 3) a data structure (¶0055, FIG. 2, 240, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 and using the Bloom filter 240 to detect a data breach…”) formed from a plurality of representations of sensitive data (¶0055, block 210, “The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner. The example database 210 includes data related to a set of people, including their names, national identity numbers (e.g., social security numbers), credit card numbers, and addresses”) wherein the plurality of representations have been generated from underlying sensitive data using a mapping function that maps sensitive data to at least one secondary Bloom filter (¶0080, “The system generates a secure representation of each tuple (506). For example, the system may apply a set of hash functions to the data of each tuple…”), (¶0058-¶0059, 230, “a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240. In this example, the set of hash functions 230 includes three different hash functions…”, ¶0055 discloses Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…so applying a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240 is generating the representation using the hash function, wherein the hash function is the claimed mapping function), (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter);
receiving (¶0078, FIG. 5, step 502, “The system receives a set of potentially stolen data (502). For example, a user may find potentially stolen data in an Internet forum, such as an underground Internet forum where stolen data is often sold or traded.”) a data item for a determination as to its sensitivity (¶0060, “To determine whether a set of potentially stolen data 250 represents a breach of the data stored in the database 210, the potentially stolen data 250 can be processed in a similar way as the data stored in the database 210 is processed to generate the Bloom filter 240. In particular, a set of tuples 260 may be generated using the potentially stolen data 250”);
extracting (¶0079, FIG. 5, step 504, “The system generates tuples of the data (504)…”) candidate data from the data item (¶0060, FIG. 2, step 260, “…In particular, a set of tuples 260 may be generated using the potentially stolen data 250. The types of tuples in the set of tuples 260 are the same as the types of tuples in the set of tuples 220…”); and
for a first secondary Bloom filter of the at least one secondary filter (¶0061, FIG. 2, “Bloom filter 240”)
performing a membership query for the extracted candidate data in the first secondary Bloom filter (¶0061, wherein multiple hash function is applied to the generated set of tuples 260 to produce bloom filter 280 which is the compared to the bloom filter 240…”, Wherein a membership query is understood as probabilistic check to determine whether a specific element is present in a large dataset), (¶0068, FIG. 3, step 306, “The system determines whether the secure representations of the potentially stolen data match the secure representation of a data owner's data (306)…”, the disclosure in these two paragraphs is interpreted as membership querying in Bloom Filter.); and
outputting an alert signifying that the data item may be a sensitive data item (¶0071, “If the count does exceed the threshold, the system may determine that the secure representations of the potentially stolen data match the secure representation of a data owner's data and that a data breach occurred for the data owner (310). In response, the system may notify the data owner of the breach (312)…”), see also ¶0039, (¶0041, “If the breach detection server 114 determines that a data owner has experienced a data breach, the breach detection server 114 may send a breach notification 158 to the data owner's computer 150 (or other device) by way of the front-end server 112 and the network 130…”).
However, Nachenberg does not explicitly disclose the limitation of:
“wherein the membership query returns an output based on one or more array positions of
the first secondary Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and
outputting an alert in accordance with a positive result of the membership query,
Hao discloses performing a membership query for the extracted candidate data in the first
secondary Bloom filter “wherein the membership query returns an output based on one or more array positions of the first Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and outputting an alert in accordance with a positive result of the membership query (¶0044, “The bloom filter is use in set membership queries by mapping a newly arrived key (e.g., a portion of a data packet or datagram) to a group according to the first hash function and then mapping the newly arrived key to the bloom filter using the k hash functions associated with the group. The newly arrived key is deemed to be a member of a set of initial keys only if mapped to set bits in the bloom filter.”, wherein the set bits in the bloom filter is interpreted as the array positions of the bloom filter), (¶0058, “…While executing the computer instructions the processor operates to hash received data into respective groups according to a first hash function and to hash each of the groups into a bloom filter according to k respective hash functions, where k is an integer greater than zero. In this manner, a matching of received data to a desired search term is indicated when data is hashed into only set bits within the bloom filter. In this embodiment and the other embodiments discussed above, after determining that a key or search term has yielded a match, an indication of the match and/or the key or search term is stored for subsequent use, transmitted to another processing element or program, or used to trigger/instantiate a process, warning or other event.”).
Thus, one of ordinary skill in the art would have found it obvious before the effective filing date of applicant’s claimed invention to modify the computer implemented method of Nachenberg to include positive result of membership query in bloom filter as disclosed by Hao and be motivated in doing so in order to improve query performance by reducing false positive probability in the bloom filter membership queries-Hao ¶0005 in parts.
Regarding claim 15, Nachenberg in view of Hao discloses a computer program comprising instructions stored on a non-transitory computer-readable storage medium which, when the program is executed by a computer, cause the computer to carry out the steps of claim 1 (¶0081, “…The apparatus can be implemented in a computer program product tangibly embodied in an information carrier, e.g., in a machine-readable storage device for execution by a programmable processor;…”), (¶0082, “…The essential elements of a computer are a processor for executing instructions and one or more memories for storing instructions and data. Generally, a computer will also include, or be operatively coupled to communicate with, one or more mass storage devices for storing data files; such devices include magnetic disks, such as internal hard disks and removable disks; magneto-optical disks; and optical disks…”),
a computer-implemented method for identifying data leakage (FIG. 1, “Data breach detection system 110”) comprising:
receiving (step 302 of FIG. 3) a data structure (¶0055, FIG. 2, 240, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 and using the Bloom filter 240 to detect a data breach…”) formed from a plurality of representations of sensitive data (¶0055, block 210, “The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner. The example database 210 includes data related to a set of people, including their names, national identity numbers (e.g., social security numbers), credit card numbers, and addresses”) wherein the plurality of representations have been generated from underlying sensitive data using a mapping function that maps sensitive data to at least one secondary Bloom filter (¶0080, “The system generates a secure representation of each tuple (506). For example, the system may apply a set of hash functions to the data of each tuple…”), (¶0058-¶0059, 230, “a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240. In this example, the set of hash functions 230 includes three different hash functions…”, ¶0055 discloses Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…so applying a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240 is generating the representation using the hash function, wherein the hash function is the claimed mapping function), (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter);
receiving (¶0078, FIG. 5, step 502, “The system receives a set of potentially stolen data (502). For example, a user may find potentially stolen data in an Internet forum, such as an underground Internet forum where stolen data is often sold or traded.”) a data item for a determination as to its sensitivity (¶0060, “To determine whether a set of potentially stolen data 250 represents a breach of the data stored in the database 210, the potentially stolen data 250 can be processed in a similar way as the data stored in the database 210 is processed to generate the Bloom filter 240. In particular, a set of tuples 260 may be generated using the potentially stolen data 250”);
extracting (¶0079, FIG. 5, step 504, “The system generates tuples of the data (504)…”) candidate data from the data item (¶0060, FIG. 2, step 260, “…In particular, a set of tuples 260 may be generated using the potentially stolen data 250. The types of tuples in the set of tuples 260 are the same as the types of tuples in the set of tuples 220…”); and
for a first secondary Bloom filter of the at least one secondary filter (¶0061, FIG. 2, “Bloom filter 240”)
performing a membership query for the extracted candidate data in the first secondary Bloom filter (¶0061, wherein multiple hash function is applied to the generated set of tuples 260 to produce bloom filter 280 which is the compared to the bloom filter 240..”, Wherein a membership query is understood as probabilistic check to determine whether a specific element is present in a large dataset), (¶0068, FIG. 3, step 306, “The system determines whether the secure representations of the potentially stolen data match the secure representation of a data owner's data (306)…”, the disclosure in these two paragraphs is interpreted as membership querying in Bloom Filter.); and
outputting an alert signifying that the data item may be a sensitive data item (¶0071, “If the count does exceed the threshold, the system may determine that the secure representations of the potentially stolen data match the secure representation of a data owner's data and that a data breach occurred for the data owner (310). In response, the system may notify the data owner of the breach (312)…”), see also ¶0039, (¶0041, “If the breach detection server 114 determines that a data owner has experienced a data breach, the breach detection server 114 may send a breach notification 158 to the data owner's computer 150 (or other device) by way of the front-end server 112 and the network 130…”).
However, Nachenberg does not explicitly disclose the limitation of:
“wherein the membership query returns an output based on one or more array positions of
the first secondary Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and
outputting an alert in accordance with a positive result of the membership query,
Hao discloses performing a membership query for the extracted candidate data in the first
secondary Bloom filter “wherein the membership query returns an output based on one or more array positions of the first Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and outputting an alert in accordance with a positive result of the membership query (¶0044, “The bloom filter is use in set membership queries by mapping a newly arrived key (e.g., a portion of a data packet or datagram) to a group according to the first hash function and then mapping the newly arrived key to the bloom filter using the k hash functions associated with the group. The newly arrived key is deemed to be a member of a set of initial keys only if mapped to set bits in the bloom filter.”, wherein the set bits in the bloom filter is interpreted as the array positions of the bloom filter), (¶0058, “…While executing the computer instructions the processor operates to hash received data into respective groups according to a first hash function and to hash each of the groups into a bloom filter according to k respective hash functions, where k is an integer greater than zero. In this manner, a matching of received data to a desired search term is indicated when data is hashed into only set bits within the bloom filter. In this embodiment and the other embodiments discussed above, after determining that a key or search term has yielded a match, an indication of the match and/or the key or search term is stored for subsequent use, transmitted to another processing element or program, or used to trigger/instantiate a process, warning or other event.”).
Thus, one of ordinary skill in the art would have found it obvious before the effective filing date of applicant’s claimed invention to modify the computer implemented method of Nachenberg to include positive result of membership query in bloom filter as disclosed by Hao and be motivated in doing so in order to improve query performance by reducing false positive probability in the bloom filter membership queries-Hao ¶0005 in parts.
Regarding claim 16, Nachenberg in view of Hao discloses a non-transitory computer-readable storage medium having stored thereon the computer program of claim 15 (¶0063, “The process 300 can also be implemented by instructions stored on a computer storage medium, where execution of the instructions by a system that includes a data processing apparatus cause the data processing apparatus to perform the operations of the process 300.”), (¶0082, “…Generally, a computer will also include, or be operatively coupled to communicate with, one or more mass storage devices for storing data files; such devices include magnetic disks, such as internal hard disks and removable disks; magneto-optical disks; and optical disks…”).
receiving (step 302 of FIG. 3) a data structure (¶0055, FIG. 2, 240, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 and using the Bloom filter 240 to detect a data breach…”) formed from a plurality of representations of sensitive data (¶0055, block 210, “The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner. The example database 210 includes data related to a set of people, including their names, national identity numbers (e.g., social security numbers), credit card numbers, and addresses”) wherein the plurality of representations have been generated from underlying sensitive data using a mapping function that maps sensitive data to at least one secondary Bloom filter (¶0080, “The system generates a secure representation of each tuple (506). For example, the system may apply a set of hash functions to the data of each tuple…”), (¶0058-¶0059, 230, “a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240. In this example, the set of hash functions 230 includes three different hash functions…”, ¶0055 discloses Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…so applying a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240 is generating the representation using the hash function, wherein the hash function is the claimed mapping function), (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter);
receiving (¶0078, FIG. 5, step 502, “The system receives a set of potentially stolen data (502). For example, a user may find potentially stolen data in an Internet forum, such as an underground Internet forum where stolen data is often sold or traded.”) a data item for a determination as to its sensitivity (¶0060, “To determine whether a set of potentially stolen data 250 represents a breach of the data stored in the database 210, the potentially stolen data 250 can be processed in a similar way as the data stored in the database 210 is processed to generate the Bloom filter 240. In particular, a set of tuples 260 may be generated using the potentially stolen data 250”);
extracting (¶0079, FIG. 5, step 504, “The system generates tuples of the data (504)…”) candidate data from the data item (¶0060, FIG. 2, step 260, “…In particular, a set of tuples 260 may be generated using the potentially stolen data 250. The types of tuples in the set of tuples 260 are the same as the types of tuples in the set of tuples 220…”); and
for a first secondary Bloom filter of the at least one secondary filter (¶0061, FIG. 2, “Bloom filter 240”)
performing a membership query for the extracted candidate data in the first secondary Bloom filter (¶0061, wherein multiple hash function is applied to the generated set of tuples 260 to produce bloom filter 280 which is the compared to the bloom filter 240…”, Wherein a membership query is understood as probabilistic check to determine whether a specific element is present in a large dataset), (¶0068, FIG. 3, step 306, “The system determines whether the secure representations of the potentially stolen data match the secure representation of a data owner's data (306)…”, the disclosure in these two paragraphs is interpreted as membership querying in Bloom Filter.); and
outputting an alert signifying that the data item may be a sensitive data item (¶0071, “If the count does exceed the threshold, the system may determine that the secure representations of the potentially stolen data match the secure representation of a data owner's data and that a data breach occurred for the data owner (310). In response, the system may notify the data owner of the breach (312)…”), see also ¶0039, (¶0041, “If the breach detection server 114 determines that a data owner has experienced a data breach, the breach detection server 114 may send a breach notification 158 to the data owner's computer 150 (or other device) by way of the front-end server 112 and the network 130…”).
However, Nachenberg does not explicitly disclose the limitation of:
“wherein the membership query returns an output based on one or more array positions of
the first secondary Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and
outputting an alert in accordance with a positive result of the membership query,
Hao discloses performing a membership query for the extracted candidate data in the first
secondary Bloom filter “wherein the membership query returns an output based on one or more array positions of the first Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and outputting an alert in accordance with a positive result of the membership query (¶0044, “The bloom filter is use in set membership queries by mapping a newly arrived key (e.g., a portion of a data packet or datagram) to a group according to the first hash function and then mapping the newly arrived key to the bloom filter using the k hash functions associated with the group. The newly arrived key is deemed to be a member of a set of initial keys only if mapped to set bits in the bloom filter.”, wherein the set bits in the bloom filter is interpreted as the array positions of the bloom filter), (¶0058, “…While executing the computer instructions the processor operates to hash received data into respective groups according to a first hash function and to hash each of the groups into a bloom filter according to k respective hash functions, where k is an integer greater than zero. In this manner, a matching of received data to a desired search term is indicated when data is hashed into only set bits within the bloom filter. In this embodiment and the other embodiments discussed above, after determining that a key or search term has yielded a match, an indication of the match and/or the key or search term is stored for subsequent use, transmitted to another processing element or program, or used to trigger/instantiate a process, warning or other event.”).
Thus, one of ordinary skill in the art would have found it obvious before the effective filing date of applicant’s claimed invention to modify the computer implemented method of Nachenberg to include positive result of membership query in bloom filter as disclosed by Hao and be motivated in doing so in order to improve query performance by reducing false positive probability in the bloom filter membership queries-Hao ¶0005 in parts.
Regarding claim 20, Nachenberg in view of Hao discloses a data processing apparatus comprising a processor configured to perform the steps of claim 13 (¶0063, “FIG. 3 depicts a flowchart of an example process for detecting data breaches. Operations of the process 300 can be implemented, for example, by a system that includes one or more data processing apparatus, such as the data breach detection system 110 of FIG. 1…”), (¶0081, “The apparatus can be implemented in a computer program product tangibly embodied in an information carrier, e.g., in a machine-readable storage device for execution by a programmable processor; and method steps can be performed by a programmable processor executing a program of instructions to perform functions of the described implementations by operating on input data and generating output…”).
a computer-implemented method for identifying data leakage (FIG. 1, “Data breach detection system 110”), comprising:
receiving a data item (¶0074, FIG. 4, “The system receives a set of private data (402)…”);
identifying sensitive data within the data item (¶0074, “a data owner may identify a set of private data for which the owner would like a breach detection system to monitor for data breaches. The set of private data may be all or some portion of the data maintained by the data owner. For example, the set of private data may be data that is more likely to be stolen, such as credit card data that could be sold”);
extracting the identified sensitive data from the data item (¶0057, “the secure data application 154 of FIG. 1 may generate the set of tuples 220 based on the data stored in the database 210 and pre-specified tuple types. A tuple type specifies the types of data to be included in each tuple. In this example, the tuple types are “name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address.””);
generating a representation from the extracted identified sensitive data (¶0080, FIG. 5, step 506, “The system generates a secure representation of each tuple (506)…”) using a mapping function (¶0061, “The secure data application 144 can apply each hash function of a set of hash functions 270 to each tuple in the set of tuples 260…”), see also ¶0058, wherein the representation comprises an output of the mapping function (¶0061, “…The set of hash functions 270 can be the same as the set of hash functions 230 used to create the Bloom filter 240. The output of the three hash functions for a particular tuple sets the values of three elements of a Bloom filter 280 that represents the particular tuple. The Bloom filter 280 for the tuple can then be compared to the Bloom filter 240 for the database 210. Alternatively, the values computed on the tuple from the data finder may simply be sent to the provider, where they can be used to check for a match in the provider's bloom filter(s)”), and wherein the mapping function maps the extracted identified sensitive data to at least one secondary Bloom filter (¶0061, FIG. 2, blocks 260, 270, and 280, wherein the set of tuples 260 with tuple types such as name, national identity number,” “name, credit card number, address,” and “national identity number, credit card number, address as mentioned in ¶0057 is interpreted as the claimed sensitive data and bloom filter 280 is interpreted as the claimed secondary bloom filter);
constructing a data structure from the representation (¶0055-¶0058, FIG. 2, “FIG. 2 depicts a flow diagram of an example process 200 for generating a Bloom filter 240 (data structure) and using the Bloom filter 240 to detect a data breach. The example Bloom filter 240 is a secure representation of data included in a database 210 of data maintained by a data owner…a set of hash functions 310 is applied to the tuples in the set of tuples 210, e.g., by the secure data application 154 of FIG. 1, to generate the Bloom filter 240…”, wherein a bloom filter is a space-efficient probabilistic data structure);
receiving (¶0078, FIG. 5, step 502, “The system receives a set of potentially stolen data (502). For example, a user may find potentially stolen data in an Internet forum, such as an underground Internet forum where stolen data is often sold or traded.”) a data item for a determination as to its sensitivity (¶0060, “To determine whether a set of potentially stolen data 250 represents a breach of the data stored in the database 210, the potentially stolen data 250 can be processed in a similar way as the data stored in the database 210 is processed to generate the Bloom filter 240. In particular, a set of tuples 260 may be generated using the potentially stolen data 250”);
extracting (¶0079, FIG. 5, step 504, “The system generates tuples of the data (504)…”) candidate data from the data item (¶0060, FIG. 2, step 260, “…In particular, a set of tuples 260 may be generated using the potentially stolen data 250. The types of tuples in the set of tuples 260 are the same as the types of tuples in the set of tuples 220…”); and
for a first secondary Bloom filter of the at least one secondary filter (¶0061, FIG. 2, “Bloom filter 240”):
performing a membership query for the extracted candidate data in the first secondary Bloom filter (¶0061, wherein multiple hash function is applied to the generated set of tuples 260 to produce bloom filter 280 which is the compared to the bloom filter 240…”, Wherein a membership query is understood as probabilistic check to determine whether a specific element is present in a large dataset), (¶0068, FIG. 3, step 306, “The system determines whether the secure representations of the potentially stolen data match the secure representation of a data owner's data (306)…”, the disclosure in these two paragraphs is interpreted as membership querying in Bloom Filter.); and
outputting an alert signifying that the data item may be a sensitive data item (¶0071, “If the count does exceed the threshold, the system may determine that the secure representations of the potentially stolen data match the secure representation of a data owner's data and that a data breach occurred for the data owner (310). In response, the system may notify the data owner of the breach (312)…”), see also ¶0039, (¶0041, “If the breach detection server 114 determines that a data owner has experienced a data breach, the breach detection server 114 may send a breach notification 158 to the data owner's computer 150 (or other device) by way of the front-end server 112 and the network 130…”).
However, Nachenberg does not explicitly disclose the limitation of:
“wherein the membership query returns an output based on one or more array positions of
the first secondary Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and
outputting an alert in accordance with a positive result of the membership query,
Hao discloses performing a membership query for the extracted candidate data in the first
secondary Bloom filter “wherein the membership query returns an output based on one or more array positions of the first Bloom filter that are produced by applying, to the extracted candidate data, one or more hash functions associated with the first secondary Bloom filter” and outputting an alert in accordance with a positive result of the membership query (¶0044, “The bloom filter is use in set membership queries by mapping a newly arrived key (e.g., a portion of a data packet or datagram) to a group according to the first hash function and then mapping the newly arrived key to the bloom filter using the k hash functions associated with the group. The newly arrived key is deemed to be a member of a set of initial keys only if mapped to set bits in the bloom filter.”, wherein the set bits in the bloom filter is interpreted as the array positions of the bloom filter), (¶0058, “…While executing the computer instructions the processor operates to hash received data into respective groups according to a first hash function and to hash each of the groups into a bloom filter according to k respective hash functions, where k is an integer greater than zero. In this manner, a matching of received data to a desired search term is indicated when data is hashed into only set bits within the bloom filter. In this embodiment and the other embodiments discussed above, after determining that a key or search term has yielded a match, an indication of the match and/or the key or search term is stored for subsequent use, transmitted to another processing element or program, or used to trigger/instantiate a process, warning or other event.”).
Thus, one of ordinary skill in the art would have found it obvious before the effective filing date of applicant’s claimed invention to modify the computer implemented method of Nachenberg to include positive result of membership query in bloom filter as disclosed by Hao and be motivated in doing so in order to improve query performance by reducing false positive probability in the bloom filter membership queries-Hao ¶0005 in parts.
Claim 3 is rejected under 35 U.S.C. 103 as being unpatentable over U.S. PGPub. No. 20180268135 to Nachenberg et al. (hereinafter Nachenberg) in view of U.S. PGPub. No. 20080313132 to Hao et al. (hereinafter Hao) and further in view of U.S. PGPub. No. 20110149973 to Esteve et al. (hereinafter Esteve).
Regarding claim 3, Nachenberg in view of Hao discloses the method of claim 1.
However, Nachenberg in view of Hao does not explicitly disclose:
wherein the mapping function produces each secondary Bloom filter from the candidate and/or sensitive data by inserting it into an empty Bloom filter.
Esteve discloses the limitation (¶0146, “…every link ID is associated with a set of d LITs that are computed by applying a multi-valued mapping function to each LID, so that the LITs are computed in the same way for each link ID. d is a system parameter that can be optimized depending on the network…”), (¶0035, “…The method comprises initially generating d representations of the identifiers, and d candidate compact representations of set membership are generated from the d representations of the identifiers. One of the candidate compact representations of set membership is then selected for use.”), (¶0136, “…A plurality of candidate Bloom Filters (or a plurality of other compact representations of set membership) are generated from the plurality of representations of the identifiers, and one of the Bloom Filters (or other compact representation of set membership) is selected from the candidates.”), (¶0169, “The Routing function constructing the BF inserts the LIT1 representation of every link ID in a first candidate Bloom Filter BF1 by simple ORing the LIT1s (step 2(1) of FIG. 20). Similarly, following the same method it inserts the LIT2 representation of every link ID in a second candidate Bloom Filter BF2 by simple ORing the LIT2s (step 2(2) of FIG. 20), and so on, taking the next LIT representation of every link to be inserted until the d.sup.th candidate Bloom Filter BFd is constructed by inserting the LITd representation of every link ID (step 2(d) of FIG. 2), resulting in d BFs that represent the same network path(s)…”).
Thus, one of ordinary skill in the art would have found it obvious before the effective filing date of applicant’s claimed invention to modify the method of Nachenberg and Hao in claim 1 to include using a candidate representation to generate secondary Bloom Filters ad disclosed by Esteve and be motivated in doing so in order to select a candidate Bloom Filter with the lowest rate of returning false positives-Esteve ¶0133 in parts.
Claim 7 is rejected under 35 U.S.C. 103 as being unpatentable over U.S. PGPub. No. 20180268135 to Nachenberg et al. (hereinafter Nachenberg) in view of U.S. PGPub. No. 20080313132 to Hao et al. (hereinafter Hao) and further in view U.S. Pat. No. 9971809 to Tarsi et al. (hereinafter Tarsi).
Regarding claim 7, Nachenberg in view of Hao discloses the method of claim 1.
However, Nachenberg in view of Hao does not explicitly disclose wherein the data item comprises unstructured data, and wherein extracting data from the data item comprises extracting one or more fields from the unstructured data using one or more filters based on regular expressions.
Tarsi discloses wherein the data item comprises unstructured data, and wherein extracting candidate data from the data item comprises extracting one or more fields from the unstructured data using one or more filters based on regular expressions (Col. 11, lines 44-60, “… extracting module 108 may identify candidate unstructured documents that may satisfy the matching criteria by identifying unstructured documents that contain a token that matches the known pattern. In some examples, extracting module 108 may identify candidate unstructured documents that may satisfy the matching criteria using a regular expression based on the known pattern...”).
Thus, one of ordinary skill in the art would have found it obvious before the effective filing date of applicant’s claimed invention to modify the method of Nachenberg and Hao to include extracting one or more fields from the unstructured data using one or more filters based on regular expressions as disclosed by Tarsi and be motivated in doing so in order to generate a secure search index (e.g., a Bloom filter) for searching the unstructured documents for the sensitive data-Tarsi abstract.
Conclusion
THIS ACTION IS MADE FINAL. Applicant is reminded of the extension of time policy as set forth in 37 CFR 1.136(a).
A shortened statutory period for reply to this final action is set to expire THREE MONTHS from the mailing date of this action. In the event a first reply is filed within TWO MONTHS of the mailing date of this final action and the advisory action is not mailed until after the end of the THREE-MONTH shortened statutory period, then the shortened statutory period will expire on the date the advisory action is mailed, and any nonprovisional extension fee (37 CFR 1.17(a)) pursuant to 37 CFR 1.136(a) will be calculated from the mailing date of the advisory action. In no event, however, will the statutory period for reply expire later than SIX MONTHS from the mailing date of this final action.
Any inquiry concerning this communication or earlier communications from the examiner should be directed to MUDASIRU K OLAEGBE whose telephone number is (571)272-2082. The examiner can normally be reached MON-FRI. 7.30AM-5.30PM.
Examiner interviews are available via telephone, in-person, and video conferencing using a USPTO supplied web-based collaboration tool. To schedule an interview, applicant is encouraged to use the USPTO Automated Interview Request (AIR) at http://www.uspto.gov/interviewpractice.
If attempts to reach the examiner by telephone are unsuccessful, the examiner’s supervisor, Farid Homayounmehr can be reached at 5712723739. The fax phone number for the organization where this application or proceeding is assigned is 571-273-8300.
Information regarding the status of published or unpublished applications may be obtained from Patent Center. Unpublished application information in Patent Center is available to registered users. To file and manage patent submissions in Patent Center, visit: https://patentcenter.uspto.gov. Visit https://www.uspto.gov/patents/apply/patent-center for more information about Patent Center and https://www.uspto.gov/patents/docx for information about filing in DOCX format. For additional questions, contact the Electronic Business Center (EBC) at 866-217-9197 (toll-free). If you would like assistance from a USPTO Customer Service Representative, call 800-786-9199 (IN USA OR CANADA) or 571-272-1000.
/MUDASIRU K OLAEGBE/Examiner, Art Unit 2495
/FARID HOMAYOUNMEHR/Supervisory Patent Examiner, Art Unit 2495