IP Library Granted Patent US 10,733,305
Granted Patent B2
US 10,733,305 · App. 15/814,357 · Granted Aug 4, 2020

System and method for implementing cryptography in a storage system

Inventors: André Lucas (Berkshire, GB); Alex Chircop (Buckinghamshire, GB)
Assignee: StorageOS Limited
G06F21/602G06F21/6218H04L9/0869H04L9/0894H04L9/14H04L9/3226
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,733,305
App. No.
15/814,357
Granted
Aug 4, 2020
Kind
B2
Abstract

A method for performing cryptography operations on data blocks within a volume of data is disclosed. The method involves generating a volume master key, generating a user key, generating a volume initialization vector, generating an intermediate key, generating a user volume key, and performing cryptography operations on data blocks within an individual volume of data using the volume master key, the user key, the volume initialization vector, the intermediate key, and the user volume key.

Claims (131)

1. A method for performing cryptography operations on data blocks within a volume of data of a storage system, the method comprising:

implementing a write operation from a client to a server over a network connection that involves:

generating a client-side volume master key which is composed of random data and is stored in transient storage;

generating a client-side user key which is derived by processing a client-side user password component known only to a client-side user, and which is stored by the client-side user in non-transient storage;

generating a client-side volume initialization vector which is stored at the storage system in non-transient storage and not known to the client-side user;

generating an client-side intermediate key which is derived by combining the client-side user key and the client-side volume initialization vector which is supplied by the storage system;

generating a client-side user volume key, specific to the volume of data, which is generated by encrypting the client-side volume master key with the client-side intermediate key, and which is stored at the storage system in non-transient storage and is not known to the client-side user; and

performing a volume master key recovery operation to recover the client-side volume master key that involves:

receiving the client-side user key;

retrieving the client-side user volume key associated with the client-side user key;

retrieving the client-side volume initialization vector for the volume of data;

generating the client-side intermediate key which is derived by combining the received client-side user key and the client-side volume initialization vector that was retrieved for the volume of data;

decrypting the client-side user volume key with the client-side intermediate key that was generated by combining the received client-side user key and the client side volume initialization vector that was retrieved for the volume of data to recover the client-side volume master key; and

encrypting the data blocks using the recovered client-side volume master key;

transmitting the encrypted data blocks from the client to the server;

generating a server-side volume master key which is composed of random data and is stored in transient storage, wherein the client-side volume master key is different from the server-side volume master key;

generating a server-side user key which is derived by processing a server-side user password component known only to a server-side user, and which is stored by the server-side user in non-transient storage;

generating a server-side volume initialization vector which is stored at the storage system in non-transient storage and not known to the server-side user;

generating a server-side intermediate key which is derived by combining the server-side user key and the server-side volume initialization vector which is supplied by the storage system;

generating a server-side user volume key, specific to the volume of data, which is generated by encrypting the server-side volume master key with the server-side intermediate key, and which is stored at the storage system in non-transient storage and is not known to the server-side user; and

performing a volume master key recovery operation to recover the server-side volume master key that involves:

receiving the server-side user key;

retrieving the server-side user volume key associated with the server-side user key;

retrieving the server-side volume initialization vector for the volume of data;

generating the server-side intermediate key which is derived by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data;

decrypting the server-side user volume key with the server-side intermediate key that was generated by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data to recover the server-side volume master key; and

encrypting the encrypted data blocks using the recovered server-side volume master key to generate double-encrypted data blocks;

writing the double-encrypted data blocks to memory at the server.

2. The method of claim 1 further comprising;

generating multiple user volume keys linked to a single volume master key for a specific volume, wherein each user volume key of the user volume keys is generated by encrypting the volume master key with a user-specific intermediate key, and storing the generated user volume keys at the storage system in non-transient storage such that the user volume keys are not known to users.

3. The method of claim 1 further comprising removing the client-side user volume key from the non-transient storage in which the client-side user volume key is stored to prevent computation of the client-side volume master key for the client-side user.

4. The method of claim 1 further comprising removing the client-side volume initialization vector for a specific volume from the non-transient storage in which the client-side volume initialization vector is stored to prevent computation of the client-side volume master key for all users.

5. The method of claim 1 further comprising:

implementing a read operation from the server to the client over the network connection that involves:

performing a volume master key recovery operation to recover the server-side volume master key that involves:

receiving the server-side user key;

retrieving the server-side user volume key associated with the server-side user key;

retrieving the server-side volume initialization vector for the volume of data;

generating the server-side intermediate key which is derived by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data;

decrypting the server-side user volume key with the server-side intermediate key that was generated by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data to recover the server-side volume master key; and

reading the double-encrypted data blocks from a memory of the server;

decrypting the double-encrypted data blocks using the recovered server-side volume master key to generate the encrypted data blocks;

transmitting the encrypted data blocks to the client over the network connection;

performing a volume master key recovery operation to recover the client-side volume master key that involves:

receiving the client-side user key;

retrieving the client-side user volume key associated with the client-side user key;

retrieving the client-side volume initialization vector for the volume of data;

generating the client-side intermediate key which is derived by combining the received client-side user key and the client-side volume initialization vector that was retrieved for the volume of data;

decrypting the client-side user volume key with the client-side intermediate key that was generated by combining the received client-side user key and the client side volume initialization vector that was retrieved for the volume of data to recover the client side volume master key; and

decrypting the encrypted data blocks using the recovered client-side volume master key;

providing the decrypted data blocks to the client.

6. A non-transitory computer readable medium that stores computer executable code, which when executed by one or more processors, implements a method for provisioning a volume of data of a storage system, the method comprising:

implementing a write operation from a client to a server over network connection that involves;

generating a client-side volume master key which is composed of random data and is stored in transient storage;

generating a client-side user key which is derived by processing a client-side user password component known only to a client-side user, and which is stored by the client-side user in non-transient storage;

generating a client-side volume initialization vector which is stored at the storage system in non-transient storage and not known to the client-side user;

generating at client-side intermediate key which is derived by combining the client-side user key and the client-side volume initialization vector which is supplied by the storage system;

generating a client-side user volume key, specific to the volume of data, which is generated by encrypting the client-side volume master key with the client-side intermediate key, and which is stored at the storage system in non-transient storage and is not known to the client-side user; and

performing a volume master key recovery operation to recover the client-side volume master key that involves:

receiving the client-side user key;

retrieving the client-side user volume key associated with the client-side user key;

retrieving the client-side volume initialization vector for the volume of data;

generating the client-side intermediate key which is derived by combining the received client-side user key and the client-side volume initialization vector that was retrieved for the volume of data;

decrypting the client-side user volume key with the client-side intermediate key that was generated by combining the received client-side user key and the client-side volume initialization vector that was retrieved for the volume of data to recover the client-side volume master key; and

encrypting data blocks using the recovered client-side volume master key;

transmitting the encrypted data blocks from the client to the server;

generating a server-side volume master key which is composed of random data and is stored in transient storage, wherein the client-side volume master key is different from the server-side volume master key;

generating a server-side user key which is derived by processing a server-side user password component known only to a server-side user, and which is stored by the server-side user in non-transient storage;

generating a server-side volume initialization vector which is stored at the storage system in non-transient storage and not known to the server-side user;

generating a server-side intermediate key which is derived by combining the server-side user key and the server-side volume initialization vector which is supplied by the storage system;

generating a server-side user volume key, specific to the volume of data, which is generated by encrypting the server-side volume master key with the server-side intermediate key, and which is stored at the storage system in non-transient storage and is not known to the server-side user; and

performing a volume master key recovery operation to recover the server-side volume master key that involves:

receiving the server-side user key;

retrieving the server-side user volume key associated with the server-side user key;

retrieving the server-side volume initialization vector for the volume of data;

generating the server-side intermediate key which is derived by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data;

decrypting the server-side user volume key with the server-side intermediate key that was generated by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data to recover the server-side volume master key; and

encrypting the encrypted data blocks using the recovered server-side volume master key to generate double-encrypted data blocks;

writing the double-encrypted data blocks to memory at the server.

7. The non-transitory computer readable medium of claim 6 further comprising:

generating multiple user volume keys linked to a single volume master key for a specific volume, wherein each user volume key of the user volume keys is generated by encrypting the volume master key with a user-specified intermediate key, and storing the generated user volume keys at the storage system in non-transient storage such that the user volume keys are not known to users.

8. The non-transitory computer readable medium of claim 6 further comprising removing the client-side user volume key from the non-transient storage in which the client-side user volume key is stored to prevent computation of the client-side volume master key for the client-side user.

9. The non-transitory computer readable medium of claim 6 further comprising removing the client-side volume initialization vector for a specific volume from the non-transient storage in which the client-side volume initialization vector is stored to prevent computation of the client-side volume master key for all users.

10. The non-transitory computer readable medium of claim 6 further comprising:

implementing a read operation from the server to the client over the network connection that involves:

performing a volume master key recovery operation to recover the server-side volume master key that involves:

receiving the server-side user key;

retrieving the server-side user volume key associated with the server-side user key;

retrieving the server-side volume initialization vector for the volume of data;

generating the server-side intermediate key which is derived by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data;

decrypting the server-side user volume key with the server-side intermediate key that was generated by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data to recover the server-side volume master key; and

reading the double-encrypted data blocks from a memory of the server;

decrypting the double-encrypted data blocks using the recovered server-side volume master key to generate the encrypted data blocks;

transmitting the encrypted data blocks to the client over the network connection;

performing a volume master key recovery operation to recover the client-side volume master key that involves:

receiving the client-side user key;

retrieving the client-side user volume key associated with the client-side user key;

retrieving the client-side volume initialization vector for the volume of data;

generating the client-side intermediate key which is derived by combining the received client-side user key and the client-side volume initialization vector that was retrieved for the volume of data;

decrypting the client-side user volume key with the client-side intermediate key that was generated by combining the received client-side user key and the client side volume initialization vector that was retrieved for the volume of data to recover the client-side volume master key; and

decrypting the encrypted data blocks using the recovered client-side volume master key;

providing the decrypted data blocks to the client.

11. A method for performing cryptography operations on data blocks within a volume of data of a storage system, the method comprising:

implementing a read operation from a server to a client over a network connection that involves:

generating a server-side volume master key which is composed of random data and is stored in transient storage;

generating a server-side user key which is derived by processing a server-side user password component known only to a server-side user, and which is stored by the server-side user in non-transient storage;

generating a server-side volume initialization vector which is stored at the storage system in non-transient storage and not known to the server-side user;

generating a server-side intermediate key which is derived by combining the server-side user key and the server-side volume initialization vector which is supplied by the storage system;

generating a server-side user volume key, specific to the volume of data, which is generated by encrypting the server-side volume master key with the server-side intermediate key, and which is stored at the storage system in non-transient storage and is not known to the server-side user; and

performing a volume master key recovery operation to recover the server-side volume master key that involves:

receiving the server-side user key;

retrieving the server-side user volume key associated with the server-side user key;

retrieving the server-side volume initialization vector for the volume of data;

generating the server-side intermediate key which is derived by combining the received server-side user key and the server-side volume initialization vector that was retrieved for the volume of data;

decrypting the server-side user volume key with the server-side intermediate key that was generated by combining the received server-side user key and the server-side volume initialization vector to recover the server-side volume master key; and

reading double-encrypted data blocks from a memory of the server;

decrypting the double-encrypted data blocks using the server-side volume master key to generate encrypted data blocks;

transmitting the encrypted data blocks to the client over the network connection;

generating a client-side volume master key which is composed of random data and is stored in transient storage, wherein the client-side volume master key is different from the server-side volume master key;

generating a client-side user key which is derived by processing a client-side user password component known only to a client-side user, and which is stored by the client-side user in non-transient storage;

generating a client-side volume initialization vector which is stored at the storage system in non-transient storage and not known to the client-side user;

generating a client-side intermediate key which is derived by combining the client-side user key and the client-side volume initialization vector which is supplied by the storage system;

generating a client-side user volume key, specific to the volume of data, which is generated by encrypting the client-side volume master key with the client-side intermediate key, and which is stored at the storage system in non-transient storage and is not known to the client-side user; and

performing a volume master key recovery operation to recover the client-side volume master key that involve:

receiving the client-side user key;

retrieving the client-side user volume key associated with the client-side user key;

retrieving the client-side volume initialization vector for the volume of data;

generating the client-side intermediate key which is derived by combining the received client-side user key and the client-side volume initialization vector that was retrieved for the volume of data;

decrypting the client-side user volume key with the client-side intermediate key that was generated by combining the received client-side user key and the client side volume initialization vector that was retrieved for the volume of data to recover the client-side volume master key; and

decrypting the encrypted data blocks using the recovered client-side volume master key;

providing the decrypted data blocks to the client.

Assignments (4)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 13, 2023
From: STORAGEOS LTD
To: AKAMAI TECHNOLOGIES, INC.
Reel/Frame 063315/0364 →
RELEASE OF SECURITY INTEREST Recorded Apr 4, 2023
From: SILICON VALLEY BANK UK LIMITED
To: STORAGEOS LTD
Reel/Frame 063219/0746 →
SECURITY INTEREST Recorded Mar 23, 2021
From: STORAGEOS LTD
To: SILICON VALLEY BANK
Reel/Frame 055681/0812 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 1, 2017
From: LUCAS, ANDRE; CHIRCOP, ALEX
To: STORAGEOS LIMITED
Reel/Frame 044279/0424 →
Continuity (3)
Provisional Application 62422376 · Nov 15, 2016
Provisional Application 62486829 · Apr 18, 2017
Related Publication 20180137293A1 · May 17, 2018