Задача
Мы хотим зашифровать личную информацию. Они не должны быть читаемыми. Однако, поскольку результаты также будут использоваться для машинного обучения, каждый раз, когда значение (скажем, «ABC») шифруется, результирующие данные должны быть одинаковыми.
Большинство шифровальных шифров содержат вектор инициализации . Это идет вразрез с тем, что нам нужно. Чтобы было ясно, данные должны быть зашифрованы, но это не должно быть пуленепробиваемым. Данные никогда не передаются за пределы организации, и это просто делается для соблюдения GDPR.
Context
Мы решили использовать надувной замок , потому что он поддерживает большое количество режимов шифрования, включая (очевидно, быстрый ECC). Поскольку мы говорим о шифровании нескольких ТБ в день, было бы неплохо иметь хорошую производительность.
Решение проблем
Несмотря на то, что библиотека надувных замков хорошо написана, кажется, трудно найти хорошую документацию и примеры использования. Я изо всех сил пытаюсь найти свою точку входа. Нужно ли смотреть на пакет org.bouncycastle.crypto
или org.bouncycastle.crypto.engines
? или crypto.ec
? Я нашел класс ZeroBytePadding
, который, как мне кажется, должен указать мне на потенциальный двигатель, который делает то, что я хочу, но я не могу найти то, что я ищу.
Цель
Класс, имеющий набор методов, подобных этому:
class Anonomyzer{
def initialize(publicKey: String, privateKey: String): Unit
def encode(data: Array[Byte]): Array[Byte]
def decode(data: Array[Byte]): Array[Byte]
}
Следующий код должен быть верным
Anonomyzer.initialize("PUBLIC", "PRIVATE")
val once = Anonomyzer.encode(data)
val twice = Anonomyzer.encode(data)
Arrays.equals(once, twice)
Edit:
Я прочитал больше об этом и обнаружил, что то, что я ищу, называется
Электронная кодовая книга Режим работы. Хотя это не совсем безопасно, это лучшее, что мы можем надеяться на AFAIK.