1. A method for generating an encrypted database from a raw database, the raw database comprising a plurality of records, wherein each record comprises a corresponding record index value and a plurality of attribute values, and wherein the method comprises: generating a first data structure used for searching for at least one primary attribute value, wherein generating the first data structure comprises computing a first entry for each attribute value of the plurality of attribute values, and wherein the first entry comprises an encrypted tuple list and a search tag; wherein the encrypted tuple list comprises a plurality of tuple list values obtained based on a randomized index value, and wherein the plurality of tuple list values comprises a first tuple value obtained by encrypting the randomized index value with a key, and a second tuple value obtained by: applying a first pseudorandom function to the randomized index value to create a first intermediate tuple value; applying a second pseudorandom function to the attribute value and a current count associated with the attribute value to create a second intermediate tuple value; and dividing the first intermediate tuple value by the second intermediate tuple value; and generating a second data structure used for searching for at least one secondary attribute value, wherein generating the second data structure comprises computing a second entry for each attribute value of the plurality of attribute values, and wherein the second entry is computed based in part on the encrypted randomized index value; wherein the steps are performed in accordance with one or more processing devices.
1. A method for generating an encrypted database from a raw database, the raw database comprising a plurality of records, wherein each record comprises a corresponding record index value and a plurality of attribute values, and wherein the method comprises: generating a first data structure used for searching for at least one primary attribute value, wherein generating the first data structure comprises computing a first entry for each attribute value of the plurality of attribute values, and wherein the first entry comprises an encrypted tuple list and a search tag; wherein the encrypted tuple list comprises a plurality of tuple list values obtained based on a randomized index value, and wherein the plurality of tuple list values comprises a first tuple value obtained by encrypting the randomized index value with a key, and a second tuple value obtained by: applying a first pseudorandom function to the randomized index value to create a first intermediate tuple value; applying a second pseudorandom function to the attribute value and a current count associated with the attribute value to create a second intermediate tuple value; and dividing the first intermediate tuple value by the second intermediate tuple value; and generating a second data structure used for searching for at least one secondary attribute value, wherein generating the second data structure comprises computing a second entry for each attribute value of the plurality of attribute values, and wherein the second entry is computed based in part on the encrypted randomized index value; wherein the steps are performed in accordance with one or more processing devices. 8. The method of claim 1 , wherein the second entry is computed by applying a pseudorandom function to the attribute value to obtain an intermediate value, multiplying the intermediate value with the encrypted randomized index value to obtain a product, and performing an exponentiation of the product in an algebraic group.