A computer-implemented method of securely updating data stored over a plurality of servers, the method comprising: distributing a data item from a source computer to the plurality of servers as a corresponding plurality of obfuscated portions of the data item, wherein the plurality of servers comprises two or more groups of servers, wherein each of the plurality of obfuscated portions includes some data of the data item and some random data, wherein each of the servers stores exactly one of the obfuscated portions; and wherein the data item comprises a bit matrix and a row of the data item comprises a subportion of the bit matrix; identifying, by the source computer, the row of the data item to update from a current value to a new value; computing, by the source computer, an update delta value for the row of the data item based on the current value and the new value; generating, by the source computer, a randomized component that combines an index of the row with a random value; distributing, by the source computer, update messages based on the update delta value and the randomized component to the plurality of servers, the update messages causing the plurality of servers to update the corresponding plurality of obfuscated portions stored by the servers using the update delta value so as to update the current value of the row from the current value to the new value; generating, by the source computer, a plurality of query vectors initialized to random values; encoding, by the source computer, the index of the row into one of the query vectors, wherein the index can be obtained from a bitwise addition of the query vectors; distributing, by the source computer, the plurality of query vectors to the servers; and determining, by the source computer, the new value of the row using query result vectors received from the plurality of servers in response to the plurality of query vectors. distributing a data item from a source computer to the plurality of servers as a corresponding plurality of obfuscated portions of the data item, wherein the plurality of servers comprises two or more groups of servers, wherein each of the plurality of obfuscated portions includes some data of the data item and some random data, wherein each of the servers stores exactly one of the obfuscated portions; and wherein the data item comprises a bit matrix and a row of the data item comprises a subportion of the bit matrix; identifying, by the source computer, the row of the data item to update from a current value to a new value; computing, by the source computer, an update delta value for the row of the data item based on the current value and the new value; generating, by the source computer, a randomized component that combines an index of the row with a random value; distributing, by the source computer, update messages based on the update delta value and the randomized component to the plurality of servers, the update messages causing the plurality of servers to update the corresponding plurality of obfuscated portions stored by the servers using the update delta value so as to update the current value of the row from the current value to the new value; generating, by the source computer, a plurality of query vectors initialized to random values; encoding, by the source computer, the index of the row into one of the query vectors, wherein the index can be obtained from a bitwise addition of the query vectors; distributing, by the source computer, the plurality of query vectors to the servers; and determining, by the source computer, the new value of the row using query result vectors received from the plurality of servers in response to the plurality of query vectors.