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ência | Taxa de Falsa Aceitação (FAR) | Taxa de Falsa Rejeição (FRR) |
|---|---|---|
| 16 | 1/125.000.000 | 0,0027 (0,27%) |
| 15 | 1/62.500.000 | 0,0026 (0,26%) |
| 14 | 1/41.700.000 | 0,0026 (0,26%) |
| 13 | 1/31.300.000 | 0,0019 (0,19%) |
| 12 | 1/25.000.000 | 0,0019 (0,19%) |
| 11 | 1/12.500.000 | 0,0019 (0,19%) |
| 10 | 1/5.000.000 | 0,0018 (0,18%) |
| 9 | 1/2.000.000 | 0,0014 (0,14%) |
| 8 | 1/1.000.000 | 0,0014 (0,14%) |
| 7 | 1/500.000 | 0,0012 (0,12%) |
| 6 | 1/100.000 | 0,0009 (0,09%) |
| 5 | 1/10.000 | 0,0005 (0,05%) |
| 4 | 1/1.000 | 0,0004 (0,04%) |
| 3 | 1/500 | 0,0004 (0,04%) |
| 2 | 5/10 | 0,0004 (0,04%) |
| 1 | 2/40 | 0,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:
- Para obter suporte, você pode entrar em contato conosco através do nosso e-mail suporte@fortface.com.br