APIs e Microsserviços

7 abr, 2017

Criando segurança com a verificação de identidade em tempo real da Uber

Publicidade

A segurança das pessoas e a segurança da nossa aplicação são o centro do negócio da Uber. Uma parte importante da segurança é a verificação de que o motorista parceiro está pegando os clientes é a mesma pessoa que foi aprovada pelo processo de verificação da Uber. Através da engenharia, adotamos uma abordagem proativa através de uma nova solução de segurança chamada Real-Time ID Check, que garante que a pessoa correta está atrás do volante.

Essa funcionalidade protege os passageiros de motoristas não verificados e também evita fraudes, garantindo que as contas dos motoristas não foram comprometidas. Aqui está história de como a equipe de engenharia da Uber construiu essa ferramenta.

Construindo uma solução com selfies

Para construir uma solução efetiva e escalonável, nós precisávamos de uma tecnologia que pudesse ser utilizada globalmente e ainda fornecesse resultados com um alto nível de confiança. Nós começamos avaliando as várias soluções de ponta para reconhecimento de rosto, voz, e gestos. Cada tecnologia apresentava desafios únicos, especialmente dado o alto grau de variação de ambientes onde nosso produto é utilizado ao redor do mundo.

Um desafio com as soluções de reconhecimento de voz era sua performance drasticamente prejudicada com a interferência de músicas ao fundo ou tráfego. Essa solução também não era prática para motoristas parceiros de nossa plataforma com problemas de fala. Algoritmos de reconhecimento de gestos entregavam resultados promissores em um ambiente controlado com um conjunto limitado de usuários com experiência em tecnologia. No entanto, eles não atingiram nossos requisitos de escala global devido aos desafios de experiência dos usuários e uma acentuada curva de aprendizado.

A verificação facial ficou no topo, comparada com todas as outras opções que avaliamos. Um algoritmo de reconhecimento facial típico envolve três passos principais:

  1. Detecção facial: Identificar a face em uma determinada imagem. Se a face não for detectada, os próximos passos são pulados, pois não existe face para comparar.
  2. Extração da face: Construir um conjunto de funcionalidades que extraia características faciais, como posição dos olhos e formato da face, da imagem.
  3. Comparação facial: Comparar o conjunto de características com um conjunto de características já validado para uma determinada face.

Quando definimos que utilizaríamos verificação facial, exploramos alguns dos principais fornecedores e fizemos uma análise comparativa. Nós traçamos gráficos dos resultados de proporção de taxa de positivos reais (TPR) contra taxa de falsos positivos (ROC) de acordo com os variados graus de limite de confiança das combinações. A curva resultante de operação de recepção de características (ROC) nos permitiu determinar o TPR máximo possível minimizando o FPR. Buscando a solução com o maior TPR, nós finalmente escolhemos utilizar a API de reconhecimento de face da Microsoft de seu conjunto de serviços cognitivos.

A API da Microsoft não foi somente a mais precisa em nossos testes, mas também forneceu um forte conjunto de funcionalidades críticas para nosso produto. Nossa verificação de identidade em tempo real utiliza duas APIs específicas:

  • Face-Detect (Detecção de Rostos): Detecta rostos humanos em uma imagem e fornece atributos adicionais, como se o rosto tem ou não óculos. Essa API é esperta o suficiente até para diferenciar óculos de leitura de óculos de sol. Isso nos ajudou a filtrar imagens sem um rosto e a melhorar o resultado de combinações para verificação de selfies.
  • Face-Verify (Verificação de Rostos): Compara um rosto detectado pela API Face-Detect com um rosto já verificado, e fornece um resultado de confiança se os dois rostos pertencem à mesma pessoa ou não. Baseado no resultado de confiança, podemos adotar as ações de verificações apropriadas, tais como solicitar que o usuário tire uma nova selfie.

A experiência do usuário

Um dos objetivos principais da verificação de identidade em tempo real era evitar atritos desnecessários para nossos motoristas parceiros. Portanto, focamos em tornar a experiência do usuário o mais simples possível em cada estágio do projeto. Nós refinamos o design e ajustamos a engenharia com base no feedback dos usuários e nos testes de protótipo. Isso nos permitiu criar uma experiência simples, mas efetiva, que os motoristas podem completar em apenas alguns segundos.

 Aqui está como parece a experiência:

  • Os motoristas parceiros são selecionados aleatoriamente para enviar uma selfie para verificação;
  • A API Face da Microsoft é utilizada para detectar se a foto submetida tem ou não um rosto. Se nenhum rosto for detectado, o motorista parceiro é solicitado a submeter novamente a foto.
  • Assim que o rosto for detectado, a API Face da Microsoft verifica as características do rosto com uma foto verificada associada à conta do motorista.
  • Se o rosto combinar, o motorista parceiro pode começar a pegar os passageiros. Se o rosto não combinar, o motorista fica temporariamente bloqueado enquanto investigamos a situação.

Do protótipo à escala global

Os primeiros protótipos demonstraram que as expectativas globais dessa ferramenta de verificação de identidade – fazê-la funcionar para os motoristas em qualquer lugar – trariam seu próprio conjunto de desafios únicos.

Condições de pouca iluminação

Nossa interface de usuário inicial aprimorou a experiência de captura de fotos existente no aplicativo do motorista para tirar fotos para o perfil. Logo nos percebemos que o fundo escuro do aplicativo impedia resultado utilizáveis em condições com pouca iluminação, como durante a noite. Para tratar esse desafio, nós mudamos para uma interface branca e aumentamos o brilho da tela, levando a uma drástica melhora na qualidade da foto capturada.

Fragmentação do dispositivo

Antes de utilizar a API Face da Microsoft, nós originalmente utilizamos a detecção de rostos do lado do cliente para assegurar que existia um rosto presente na selfie. No entanto, aparelhos Android inferiores, utilizados por muitos dos nossos motoristas parceiros, não suportam a detecção de rostos. Mesmo alguns aparelhos que afirmavam suportar, não funcionavam bem.

Utilizando a API Face da Microsoft, nós mudamos a lógica da detecção de rostos para o backend e removemos essas limitações de hardware. Isso trouxe resultados consistentes, independentemente do aparelho, e nos deu melhores ideias para diagnosticar falhas de detecção. Adicionalmente, esse processo melhorou a qualidade das fotos de perfil dos motoristas parceiros.

Selfies enquanto dirigem

Para ser uma medida de segurança efetiva, a verificação de identidade em tempo real solicita para motoristas parceiros aleatoriamente selecionados para verificar suas identidades. Devido à natureza aleatória do processo de seleção, a solicitação poderia surgir enquanto o motorista parceiro estivesse dirigindo. Para evitar a direção insegura e distraída, nós adicionamos a detecção de movimento utilizando o GPS do telefone do motorista. Se o veículo está se movimentando, nós solicitamos que os motoristas encostem antes de iniciar o processo de verificação.

Selfies com óculos

Embora a API Face da Microsoft possa detectar um rosto mesmo que o usuário esteja usando óculos de sol ou se existir reflexo dos óculos regulares, esses acessórios podem impactar se a nova selfie vai combinar com a foto de perfil do motorista. Nos casos onde as fotos não combinam e óculos são detectados, a funcionalidade pede para o motorista parceiro tirar os óculos e tentar novamente.

Impacto no mundo real

O verdadeiro sucesso de um produto é refletido pelo impacto que ele causa na vida das pessoas. Desde nosso lançamento em setembro de 2016, mais de 99% dos nossos motoristas foram verificados através da verificação de identidade em tempo real nos locais que ela está disponível, e a maioria das incompatibilidades foram devidas a fotos de perfil pouco claras.

Os passageiros podem se sentir seguros sabendo que seus motoristas foram verificados e os motoristas parceiros podem ficar tranquilos sabendo que um golpista não está utilizando sua conta. Se você estiver interessado em impactar o mundo real com o desenvolvimento de segurança conosco, venha fazer parte de nossa história.

***

Este artigo é do Uber Engineering Team. Ele foi escrito por Brian Attwell. A tradução foi feita pela Redação iMasters com autorização. Você pode conferir o original em: https://eng.uber.com/real-time-id-check/.