-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Closed
Description
We want to support encrypting and decrypting data that is recorded in Iceberg tables. There are several API extensions that we can consider to make this work:
- Define a
KeyReferencefield, which is a byte blob in theDataFileobject. AKeyReferenceis a pointer to a key. - Define an
EncryptionKeywhich is a composition of the key bytes, the iv, and the key algorithm (see e.g. here and here)
struct EncryptionKey {
byte[] encodedKey();
String keyAlgorithm();
byte[] iv();
}
- Define a
KeyManagerwhich manages creating new keys and retrieving keys based on key references. TheTableOperationsAPI should support returning anOptional<KeyManager>; returnOptional.empty()if the table operations doesn't support encryption.
struct CreatedKey {
EncryptionKey key();
byte[] keyReference();
}
interface KeyManager {
CreatedKey createKey(String pathToEncrypt);
EncryptionKey getKey(byte[] reference);
}
dongjoon-hyun, turtlemonvh and prodeezy
Metadata
Metadata
Assignees
Labels
No labels