Patent ID: 7613302

Claim:
One or more computer-readable media having computer-executable instructions that, when executed by a computer, perform acts for distributing a first data subset of a database to a first user and a second data subset of a database to a second user, the first user being excluded from accessing the second data subset and the second user being excluded from accessing the first data subset, the acts comprising: logically dividing the database into multiple segments, the first user being entitled to a plurality of segments that make up the first data subset, the second user being entitled to a plurality of segments that make up the second data subset; encrypting each segment of the database to derive an encrypted database; deriving a first key from which the first user can derive a set of segment keys, each segment key being uniquely associated with one segment in the first data subset; deriving a second key from which the second user can derive a set of segment keys, each segment key being uniquely associated with one segment in the second data subset; distributing the encrypted database and the first key to the first user; distributing the encrypted database and the second key to the second user; deriving a first key further comprises: determining a first complement prime set that includes prime numbers that are not associated with any segments in the first data subset; and raising a random value, modulo the modulus, to a power of a product of the first complement prime set; deriving the second key further comprises: determining a second complement prime set that includes prime numbers that are not associated with any segments in the second data subset; and raising a random value, modulo the modulus, to a power of a product of the second complement prime set; and wherein the first user can gain access to the first data subset from the first key but cannot access any segment that is not included in the first data subset, and the second user can gain access to the second data subset from the second key but cannot access any segment that is not included in the second data subset.