Какие криптовальные библиотеки поддерживают шифрование с поддержкой формата (FPE)?

Есть ли доступная версия с открытым исходным кодом FPE? Я не эксперт в области криптографии, но я знаю основные понятия FPE, и я ищу общую библиотеку, которая помогает мне внедрить FPE для чувствительных данных, таких как номера телефонов, номера социального страхования и т.д. Отсутствие сильных предпочтений в отношении языка программирования, но надежность алгоритма и реализации.

Что я нашел до сих пор:

но я еще не использовал их лично.

Существуют ли какие-либо другие библиотеки, поддерживающие FPE, или будут в ближайшем будущем? Какие из этих или других рекомендуются и почему?

Ответ 1

Я сделал небольшой javascript (node) lib для fpe:

https://github.com/mderazon/node-fpe

Он использует метод prefix cipher. Материал из Википедии:

Один простой способ создать алгоритм FPE на {0,..., N-1} - назначить псевдослучайный вес каждому целому числу, затем отсортировать по весу. Веса определяются путем применения существующего блочного шифрования к каждому целому. Black и Rogaway называют этот метод "префиксным шифрованием" и показали, что он был так же хорош, как и используемый блок-шифр.

Таким образом, чтобы создать FPE в домене {0,1,2,3}, заданный ключ K применяет AES (K) к каждому целому числу, давая, например,

weight(0) = 0x56c644080098fc5570f2b329323dbf62
weight(1) = 0x08ee98c0d05e3dad3eb3d6236f23e7b7
weight(2) = 0x47d2e1bf72264fa01fb274465e56ba20
weight(3) = 0x077de40941c93774857961a8a772650d

Сортировка [0,1,2,3] по весу дает [3,1,2,0], поэтому шифр

F(0) = 3
F(1) = 1
F(2) = 2
F(3) = 0.

Этот метод полезен только при малых значениях N. Для больших значений, размер таблицы поиска и необходимое количество шифров инициализация таблицы становится слишком большой, чтобы быть практичной.