How does reducing the dimension of feature vectors impact Biometric Systems that use Homomorphic Encryption?
Este repositório contém o código referente ao short paper "How does reducing the dimension of feature vectors impact Biometric Systems that use Homomorphic Encryption?", publicado na trilha principal do SBSeg 2025.
O artigo explora uma pergunta simples: se reduzirmos o tamanho dos vetores biométricos antes de criptografá-los, quanto o sistema acelera e quanta acurácia é perdida? Para testar isso, aplicamos uma Projeção Aleatória Gaussiana para comprimir vetores de 128 dimensões para tamanhos menores, e então medimos tanto a acurácia de comparação quanto o tempo de execução utilizando um sistema com criptografia homomórfica chamado PEBA1, que utiliza a biblioteca TFHE.
As principais hipóteses e conclusões do artigo, para o PEBA1, são:
- A perda de acurácia ao reduzir a dimensão é a mesma em sistemas criptografados e não criptografados, e
- O tempo de execução cai linearmente com a redução do vetor, pois a complexidade do algoritmo do PEBA escala com o comprimento do vetor (distância euclidiana), e não devido a fatores específicos da criptografia homomórfica.
O resumo (em inglês) é:
Homomorphic Encryption (HE) enables biometric systems to perform matching directly on encrypted feature vectors, preserving user privacy throughout the process. However, the high computational cost of encrypted-domain operations, especially on high-dimensional inputs, remain a major barrier to real-world use. This study discusses presents a concrete example of how reducing the dimensionality of biometric feature vectors affects both matching accuracy and runtime, and discusses how system designers could estimate the trade-off between time savings and accuracy loss when choosing a target dimension.
A estrutura desse arquivo é a seguinte:
- Título e Contexto
- Estrutura do README.md
- Selos Considerados
- Informações Básicas
- Dependências
- Preocupações com Segurança
- Instalação
- Teste Mínimo
- Experimentos
- LICENSE
Os selos considerados são: Disponíveis e Funcionais.
Este código foi testado em uma máquina com Linux Mint 21.2 (64-bit), 8 GB de RAM e um processador Intel Core i5-4670 @ 3.40 GHz. O tempo de execução vai variar conforme o hardware, mas a tendência linear no tempo deve se manter. Os resultados de acurácia, por sua vez, são determinísticos e não dependem do sistema.
Para rodar este projeto, você precisará de:
- Git;
- Python (preferencialmente via Conda, Miniforge ou similar);
- Um compilador C++ (ex: g++ ≥ 5.2 ou clang ≥ 3.8);
- CMake (para compilar o TFHE e o PEBA);
- Paciência, pois a execução completa pode ser demorada (explicado mais abaixo)
As dependências estão listadas acima. As bibliotecas Python estão no arquivo requirements.txt.
A execução deste artefato não apresenta riscos de segurança aos avaliadores.
Aqui precisamos compilar duas dependências: TFHE e PEBA1. Primeiro, certifique-se de clonar o repositório com os submódulos:
git clone --recurse-submodules https://github.com/AndreisPurim/HEDimensionality.git hedim
cd hedimIsso irá clonar o repositório e seus submódulos: TFHE no commit bc71bfa e PEBA1 no commit da28120.
Para compilar o TFHE, siga as instruções em tfhe/README.md, ou simplesmente:
cd tfhe
make
make install # use sudo se necessário
cd ..Isso instalará o TFHE globalmente no sistema.
Agora, substitua o arquivo main.cpp original do PEBA1 por nossa versão customizada:
cp -f main.cpp peba1/src/main.cppE então compile o PEBA1:
cd peba1
mkdir build
cd build
cmake ..
make
cd ../../O binário compilado estará em:
peba1/build/peba1O código usa Python para preparar os dados, calcular resultados esperados e plotar. Crie um ambiente conda/miniforge (ou equivalente) e instale os requisitos:
conda create -n hedim python=3.12
conda activate hedim
pip install -r requirements.txtAgora seu ambiente está pronto para execução.
Para executar um teste mínimo:
Rode:
python3 hedim_prepare_data.pyEsse script gera vetores aleatórios de N usuários com M amostras cada, com valores de 0 a 255 e ruído, salvando os vetores (e suas compressões) na pasta output/normal/. O tamanho do vetor reduzido (n) varia de 128 até 1, usando Projeção Aleatória Gaussiana (sklearn). Os vetores são salvos como:
{sample_id} {user_id} {n valores inteiros}
Além disso, o script calcula as distâncias euclidianas esperadas entre os vetores e salva em comp_{n}_scores.csv e as taxas FAR/FRR em comp_{n}_rates.csv.
Agora, para rodar a versão criptografada da distância euclidiana entre dois vetores A e B de tamanho n, execute:
peba1/build/peba1 output/normal/comp_{n}_samples.txt {n} SAMPLE_ID_A SAMPLE_ID_B
Por exemplo:
peba1/build/peba1 output/normal/comp_2_samples.txt 2 11 14
Esse exemplo compara os vetores de IDs 11 e 14 com dimensão 2. A saída será algo como:
[HEDim main.cpp] Sample A (ID 11):
[6 9 ]
[HEDim main.cpp] Sample B (ID 14):
[3 10 ]
[HEDim main.cpp] Executed in 566 seconds
[HEDim main.cpp] The result for HE Euclidean distance is 10 (expected 10)
Repita o processo para mais vetores se quiser calcular médias de tempo. Por exemplo, um vetor com n = 128 pode levar mais de 9 horas (33.536 segundos) para ser comparado.
Você pode escolher entre duas abordagens:
- Executar todos os pares possíveis (N × M × tamanhos comprimidos), o que pode levar mais de 40 dias;
- Ou, escolher um par por dimensão, medir o tempo e usar esses valores no gráfico.
A Figura 2 do artigo pode ser reproduzida com este código. Altere o vetor average_times no script hedim_plot.py com os tempos medidos e execute:
python3 hedim_plot.pyEste repositório está sob a licença MIT, conforme especificado no arquivo LICENSE.