IP Library Granted Patent US 10,140,370
Granted Patent B1
US 10,140,370 · App. 15/490,051 · Granted Nov 27, 2018

Systems and methods for maintaining encrypted search indexes on third-party storage systems

Inventors: Haibin Zhang (Davis, CA); Scott Schneider (Sun Valley, CA); Walter Bogorad (Daville, CA); Sharada Sundaram (Mountain View, CA)
Assignee: Veritas Technologies LLC
G06F17/30864G06F21/602H04L9/0618
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,140,370
App. No.
15/490,051
Granted
Nov 27, 2018
Kind
B1
Abstract

A computer-implemented method for maintaining encrypted search indexes on third party storage systems may include (1) identifying a plurality of encrypted files, (2) identifying a plurality of keywords contained in the plurality of encrypted files, and (3) generating an encrypted search index for searching the plurality of encrypted files by (i) identifying, for each keyword in the plurality of keywords, a list of encrypted files in the plurality of encrypted files that contain the keyword, (ii) encrypting the list of encrypted files, and (iii) storing the encrypted list of encrypted files such that the encrypted list of encrypted files can be identified using a lookup key generated by applying a pseudo-random function to the keyword. Various other methods, systems, and computer-readable media are also disclosed.

Claims (80)

1. A computer-implemented method for maintaining encrypted search indexes on third party storage systems, at least a portion of the method being performed by a computing device comprising at least one processor, the method comprising:

identifying, as part of a plugin of a search engine, a dynamic search index used by the search engine, wherein:

the dynamic search index comprises a plurality of data chunks;

each of the plurality of data chunks comprises one or more data blocks;

each of the plurality of data chunks has been encrypted using a unique nonce; and

a search-index initialization vector is designated and stored for encrypting the dynamic search index; and

enabling a single data chunk in the plurality of data chunks to be accessed by decrypting, as part of the plugin of the search engine, the single data chunk by:

calculating a chunk initialization vector for decrypting the single data chunk by:

identifying the unique nonce used to encrypt the single data chunk; and

deriving the chunk initialization vector by summing the search-index initialization vector with a product of the unique nonce and a number of the one or more data blocks; and

using the chunk initialization vector to decrypt the single data chunk; and

reencrypting, as part of the plugin of the search engine after the single data chunk has been accessed, the single data chunk by:

calculating a new chunk initialization vector for encrypting the single data chunk such that no two data chunks in the plurality of data chunks have identical initialization vectors by:

calculating a new unique nonce for the single data chunk; and

deriving the new chunk initialization vector by summing the search-index initialization vector with a product of the new unique nonce and the number of the one or more data blocks; and

using the new chunk initialization vector to encrypt the single data chunk.

2. The method of claim 1 , wherein a size of each of the plurality of data chunks is equal to a size of a block of data that the search engine writes to the dynamic search index in a single write operation.

3. The method of claim 1 , wherein a size of each of the one or more data blocks of each of the plurality of data chunks is equal to a size of a block of data that is encrypted by a block cipher in a single operation.

4. The method of claim 1 , wherein the plugin of the search engine comprises at least one of:

an addon; and

an extention.

5. The method of claim 1 , wherein enabling the single data chunk to be accessed comprises:

receiving a request from the search engine for the single data chunk; and

individually decrypting the single data chunk without decrypting any other data chunk in the plurality of data chunks.

6. The method of claim 1 , wherein unique nonces of the plurality of data chunks are calculated using a global counter such that no nonce is used more than once.

7. The method of claim 1 , wherein an additional new unique nonce is generated for the single data chunk each time the single data chunk is reencrypted.

8. The method of claim 1 , further comprising:

encrypting the new unique nonce using format-preserving encryption; and

storing the encrypted new unique nonce.

9. The method of claim 1 , wherein the new unique nonce is smaller than the chunk initialization vector.

10. The method of claim 1 , wherein:

using the chunk initialization vector to encrypt the single data chunk comprises encrypting the single data chunk using a mode of operation with a randomized counter; and

the randomized counter is generated based at least in part on the chunk initialization vector.

11. The method of claim 10 , further comprising ensuring that each value in a counter range used to encrypt the single data chunk is used only once.

12. A system for maintaining encrypted dynamic search indexes on third party storage systems, the system comprising:

a search-index identifying module, stored in memory, that identifies, as part of a plugin of a search engine, a dynamic search index used by the search engine, wherein:

the dynamic search index comprises a plurality of data chunks;

each of the plurality of data chunks comprises one or more data blocks;

each of the plurality of data chunks has been encrypted using a unique nonce; and

a search-index initialization vector is designated and stored for encrypting the dynamic search index;

a decrypting module, stored in memory, that enables a single data chunk in the plurality of data chunks to be accessed by decrypting, as part of the plugin of the search engine, the single data chunk by:

calculating a chunk initialization vector for decrypting the single data chunk by:

identifying the unique nonce used to encrypt the single data chunk; and

deriving the chunk initialization vector by summing the search-index initialization vector with a product of the unique nonce and a number of the one or more data blocks; and

using the chunk initialization vector to decrypt the single data chunk;

a search-index encrypting module, stored in memory, that reencrypts, as part of the plugin of the search engine after the single data chunk has been accessed, the single data chunk by:

calculating a new chunk initialization vector for encrypting the single data chunk such that no two data chunks in the plurality of data chunks have identical initialization vectors by:

calculating a new unique nonce for the single data chunk; and

deriving the new chunk initialization vector by summing the search-index initialization vector with a product of the new unique nonce and the number of the one or more data blocks; and

using the new chunk initialization vector to encrypt the single data chunk; and

at least one processor that executes the search-index identifying module and the search-index encrypting module.

13. The system of claim 12 , wherein a size of each of the plurality of data chunks is equal to a size of a block of data that the search engine writes to the dynamic search index in a single write operation.

14. The system of claim 12 , wherein a size of each of the one or more data blocks of each of the plurality of data chunks is equal to a size of a block of data that is encrypted by a block cipher in a single operation.

15. The system of claim 12 , wherein the plugin of the search engine comprises at least one of:

an addon; and

an extention.

16. The system of claim 12 , wherein the decrypting module enables the single data chunk to be accessed by:

receiving a request from the search engine for the single data chunk; and

individually decrypting the single data chunk without decrypting any other data chunk in the plurality of data chunks.

17. The system of claim 12 , wherein the search-index encrypting module calculates unique nonces of the plurality of data chunks using a global counter such that no nonce is used more than once.

18. The system of claim 12 , wherein the search-index encrypting module generates an additional new unique nonce for the single data chunk each time the single data chunk is reencrypted.

19. The system of claim 12 , wherein the search-index encrypting module further:

encrypts the new unique nonce using format-preserving encryption; and

stores the encrypted new unique nonce.

20. A non-transitory computer-readable medium comprising one or more computer-executable instructions that, when executed by at least one processor of a computing device, cause the computing device to:

identify, as part of a plugin of a search engine, a dynamic search index used by the search engine, wherein:

the dynamic search index comprises a plurality of data chunks;

each of the plurality of data chunks comprises one or more data blocks;

each of the plurality of data chunks has been encrypted using a unique nonce; and

a search-index initialization vector is designated and stored for encrypting the dynamic search index; and

enable a single data chunk in the plurality of data chunks to be accessed by decrypting, as part of the plugin of the search engine, the single data chunk by:

calculating a chunk initialization vector for decrypting the single data chunk by:

identifying the unique nonce used to encrypt the single data chunk; and

deriving the chunk initialization vector by summing the search-index initialization vector with a product of the unique nonce and a number of the one or more data blocks; and

using the chunk initialization vector to decrypt the single data chunk; and

reencrypt, as part of the plugin of the search engine after the single data chunk has been accessed, the single data chunk by:

calculating a new chunk initialization vector for encrypting the single data chunk such that no two data chunks in the plurality of data chunks have identical initialization vectors by:

calculating a new unique nonce for the single data chunk; and

deriving the new chunk initialization vector by summing the search-index initialization vector with a product of the new unique nonce and the number of the one or more data blocks; and

using the new chunk initialization vector to encrypt the single data chunk.

Assignments (17)
SECURITY INTEREST Recorded Dec 12, 2025
From: ARCTERA US LLC
To: CITIBANK, N.A., AS COLLATERAL AGENT
Reel/Frame 073951/0470 →
TERMINATION AND RELEASE OF PATENT SECURITY AGREEMENT AT R/F 070530/0497 Recorded Dec 1, 2025
From: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
To: ARCTERA US LLC
Reel/Frame 073833/0730 →
TERMINATION AND RELEASE OF PATENT SECURITY AGREEMENT AT R/F 069585/0150 Recorded Dec 1, 2025
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
To: ARCTERA US LLC
Reel/Frame 073833/0848 →
RELEASE OF SECURITY INTEREST Recorded Dec 16, 2024
From: ACQUIOM AGENCY SERVICES LLC, AS COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 069697/0238 →
RELEASE OF SECURITY INTEREST Recorded Dec 13, 2024
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 069634/0584 →
PATENT SECURITY AGREEMENT Recorded Dec 10, 2024
From: ARCTERA US LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 069585/0150 →
SECURITY INTEREST Recorded Dec 10, 2024
From: ARCTERA US LLC
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 069563/0243 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 9, 2024
From: VERITAS TECHNOLOGIES LLC
To: ARCTERA US LLC
Reel/Frame 069548/0468 →
ASSIGNMENT OF SECURITY INTEREST IN PATENT COLLATERAL Recorded Nov 25, 2024
From: BANK OF AMERICA, N.A., AS ASSIGNOR
To: ACQUIOM AGENCY SERVICES LLC, AS ASSIGNEE
Reel/Frame 069440/0084 →
SECURITY AGREEMENT Recorded Sep 13, 2022
From: NORTONLIFELOCK INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062220/0001 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS AT R/F 052426/0001 Recorded Nov 30, 2020
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 054535/0565 →
SECURITY INTEREST Recorded Aug 20, 2020
From: VERITAS TECHNOLOGIES LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 054370/0134 →
PATENT SECURITY AGREEMENT SUPPLEMENT Recorded Apr 16, 2020
From: VERITAS TECHNOLOGIES, LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 052426/0001 →
PATENT SECURITY AGREEMENT SUPPLEMENT Recorded Mar 18, 2020
From: VERITAS TECHNOLOGIES LLC
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 052189/0311 →
CHANGE OF NAME Recorded Feb 14, 2020
From: SYMANTEC CORPORATION
To: NORTONLIFELOCK INC.
Reel/Frame 051935/0228 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 23, 2018
From: SYMANTEC CORPORATION
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 045418/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 18, 2017
From: ZHANG, HAIBIN; SCHNEIDER, SCOTT; BOGORAD, WALTER; SUNDARAM, SHARADA
To: SYMANTEC CORPORATION
Reel/Frame 042042/0106 →
Continuity (2)
Continuation 14199240 · Mar 6, 2014
Provisional Application 61926555 · Jan 13, 2014
Cited By (1)
US 12,647,254