6. Melhores práticas de Segurança

6.1 Melhores Práticas

  • Utilize conexões HTTPS para criptografar a comunicação.
  • Mantenha as chaves de API seguras e não as compartilhe.
  • Monitore e controle o uso da API para evitar taxas excessivas e abusos.
  • Inclua o header "X-Content-Type-Options: nosniff" em todas as requisições para prevenir ataques de tipo MIME sniffing.
  • Implemente o HTTP Response Signing para garantir integridade e autenticidade das respostas da API, demonstrando compromisso com a segurança dos dados transmitidos.
  • Implemente a solução para ser utilizada com o nosso SDK. Qualquer outro método não é considerado seguro para produção.

6.2 Testes de Intrusão

Você deve solicitar ao time responsável a liberação de um ambiente de produção para a realização dos testes. O período de execução dos testes deverá ser claramente informado ao time.

Lembre-se: os testes não devem ser realizados no ambiente sandbox. O ambiente sandbox possui flexibilizações para facilitar a depuração e integração com o SDK. Por isso, qualquer teste de invasão ou segurança precisa obrigatoriamente ser conduzido no ambiente de produção, onde essas flexibilizações não estão presentes, garantindo a precisão e a integridade dos resultados.

6.3 Níveis de Correspondência

Os níveis de correspondência são usados para definir a precisão e a segurança do processo de reconhecimento facial, onde cada nível indica a sensibilidade com que o sistema vai comparar imagens ou características faciais.

A Taxa de Falsa Aceitação (FAR - False Acceptance Rate) indica a probabilidade de o sistema aceitar erroneamente uma correspondência incorreta. Já a Taxa de Falsa Rejeição (FRR - False Rejection Rate) reflete a probabilidade de o sistema rejeitar uma correspondência correta. Idealmente, busca-se um equilíbrio entre as duas taxas, ajustando o nível de correspondência conforme as necessidades de segurança e usabilidade.

Nível de CorrespondênciaTaxa de Falsa Aceitação (FAR)Taxa de Falsa Rejeição (FRR)
161/125.000.0000,0027 (0,27%)
151/62.500.0000,0026 (0,26%)
141/41.700.0000,0026 (0,26%)
131/31.300.0000,0019 (0,19%)
121/25.000.0000,0019 (0,19%)
111/12.500.0000,0019 (0,19%)
101/5.000.0000,0018 (0,18%)
91/2.000.0000,0014 (0,14%)
81/1.000.0000,0014 (0,14%)
71/500.0000,0012 (0,12%)
61/100.0000,0009 (0,09%)
51/10.0000,0005 (0,05%)
41/1.0000,0004 (0,04%)
31/5000,0004 (0,04%)
25/100,0004 (0,04%)
12/400,0004 (0,04%)
0--

Recomendação para aprovação biométrica

Os serviços de biometria facial da Fortface não aprovam nem reprovam automaticamente uma identificação. A API retorna o valor de match level, e a decisão final de aprovação deve ser definida pela regra de negócio da aplicação integradora.

De acordo com a tabela indicada nesta seção, recomendamos que os desenvolvedores considerem valores de match level maiores ou iguais a 13 como referência para aprovação da identificação biométrica, pois esses níveis apresentam uma baixa taxa de falsa aceitação (FAR - False Acceptance Rate), mantendo também uma baixa faixa de falsa rejeição (FRR - False Rejection Rate).

6.4 Response Signature

As API Fortface também disponibiliza a assinatura do payload da requisição no cabeçalho da resposta, onde o cliente pode ter a garantia da integridade da fonte. Tal padrão segue a referencia RFC8446, sendo compatível com qualquer sistema de verificador que esteja seguindo esta normalização.

No headers do response o atributo Signature e Signature-Input, com esses campos é possível ser feita a verificação da assinatura através da chave publica, seguindo um esquema muito parecido com o exemplo (nodejs) logo a abaixo.

Caso deseje utilizar o recurso de assinatura de Payload, entre em contato com o time do Fortface para obtenção das chaves para assinatura.

import { verify } from '@ltonetwork/http-message-signatures'; // Ferramente node que segue a referencia RFC8446
import { createPublicKey, createVerify } from 'crypto'; // Criar uma chave publica vindo de algum arquivo local
import fs from 'fs';

const publicKey = readFileSync(__dirname + '/publicKey.pem');

async function verifierSignature(response: { status: number, headers: Record<string, string> }) {
const verifier = (data: any, signature: any) => {
const publicKey = createPublicKey(publicKey);
const tokenVerify = createVerify('SHA256');
tokenVerify.update(data);
return tokenVerify.verify(publicKey, signature);
}; // Callback function para criar um verificador esquematizado ao padrão utilizado pela fortface.

return verify(response, verifier);
}

const result = await verifierSignature(response);

Contato e Suporte: