Este projeto é um trabalho de conclusão de curso e tem por objetivo a construção de uma aplicação mobile de código aberto e gratuita para autenticação multifator com o intuito de possibilitar que usuários possam adicionar um camada extra de proteção ao ratificar seu acesso em qualquer serviço que ofereça suporte a esta tecnologia de forma prática. Caso deseje aprender um pouco mais sobrea framework Ionic basta acessar este link.
- Requisitos do projeto
- Ionic 6 CLI
- Android Studio ou Xcode instalado
Para Baixar este projeto basta digitar o seguinte comando no terminal:
https://github.com/Ricardo07g/Multifactor-main.git
Para as dependências basta se dirigir ao diretório raiz do mesmo e digitar o seguinte comando no terminal:
npm install
Caso deseje desenvolver este projeto para o sistema operacional IOS é recomendado seguir a documentação da própria Framework pois podem haver peculiaridades na configuração do ambimente de compilação do mesmo, sugiro acessar este link.
Por fim para executar o Projeto basta se dirigir ao diretório raiz do mesmo e digitar o seguinte comando no terminal :
$ ionic cordova run ios -l --external
Caso deseje desenvolver este projeto para o sistema operacional Android é recomendado seguir a documentação da própria Framework pois podem haver peculiaridades na configuração do ambimente de compilação do mesmo, sugiro acessar este link.
Por fim para executar o Projeto basta se dirigir ao diretório raiz do mesmo e digitar o seguinte comando no terminal:
$ ionic cordova run android -l
Neste capitulo ensinarei como criar estruturalmente este projeto, o código fonte para funcionamento do mesmo não será inserido na documentação pois o mesmo ainda passa por manutenções para otimização e refinamento de código, contudo por se tratar de um projeto de código aberto, basta fazer download do código atualizado.
Para instalar o Ionic e suas dependências basta colar o seguinte comando no terminal:
npm install -g @ionic/cli native-run cordova-res
Após esta etapa, no mesmo diretório digite o seguinte comando para criar um novo projeto Ionic Angular em branco com o nome de sua preferência:
ionic start "nomeDoProjeto" blank --type=angular
Esta dependência permite que a aplicação crie e acesse o bancos de dados SQLite do mesmo no dispositivo em que estiver instalado.É fundamental para armazenarmos os segredos no próprio dispositivo de forma persistente, uma vez que utilizar o localStorage ou sessionStorage do In App Browser da propria framework Ionic está fora de questão para maior segurança e persistência das informações a serem armazenadas, uma vez que qualquer limpeza de cache poderia apagar as credenciais armazenadas.
npm install cordova-sqlite-storage
npm install @awesome-cordova-plugins/sqlite
ionic capacitor sync
Este plugin que permite o gerenciamento de área de transferência do dispositivo em que a aplicaçã for instalada.Será utilizado para inserir na areá de transferência algum OTP gerado que o usuário selecionar para se autenticar em alguma plataforma.
npm install @ionic-native/clipboard
ionic capacitor sync
Este componente permite mostrar um Toast nativo (pequeno pop-up de texto) no dispositivo em que a aplicação estiver instalada. É útil para mostrar uma notificação nativa que seja menos invasiva e direta para o usuário final, por exemplo quando algum OTP for selecionado pelo usuário e movido para a areá de transferência do dispositivo, informamos que o mesmo foi devidamente copiado.
npm install --save @ionic-native/toast@4
ionic capacitor sync
Uma biblhoteca escrita em TypeScript/JavaScript que implementa de forma completa todas as Secure Hash Standard (SHA) (SHA-1, SHA-224/256/384/512, SHA3-224/256/384/512, SHAKE128/256, cSHAKE128/256, e KMAC128/256) com HMAC.
npm install jssha@1.6.2 --save
ionic capacitor sync
Para este projeto iremos à raiz do projeto, se dirigir a pasta \textbf{./src/app/ }e no mesmo criar uma nova pasta com o nome services. Futuramente esta pasta pode ser utilizada pode ser utilizada para inserir novos serviços na aplicação, como um componente para comunicação com serviços via API, entre outros.
Um serviço pode ser entendido como uma componente que desempenha um papel fundamental nas regras de negócio de um sistema. Ele permite armazenar e centralizar funcionalidades de forma organizada.
No contexto de um projeto Ionic, os serviços não possuem uma interface visual, consistindo apenas de código reutilizável. Isso ocorre porque sua principal função é disponibilizar funcionalidades que podem ser importadas e utilizadas em várias partes da aplicação, como páginas, componentes, diretivas e até mesmo outros serviços.
Os serviços no Ionic desempenham um papel crucial na criação de funcionalidades compartilhadas e na separação de preocupações. Eles permitem encapsular lógicas de negócio complexas e torná-las acessíveis em diferentes partes do aplicativo. Além disso, a reutilização de serviços promove um código mais limpo e organizado, facilitando a manutenção e o desenvolvimento contínuo do projeto.
Em resumo, os serviços no Ionic são unidades funcionais que atuam como blocos de construção essenciais para a implementação das regras de negócio. Sua importância reside na capacidade de armazenar e disponibilizar funcionalidades de forma organizada, promovendo a reutilização de código e facilitando o desenvolvimento de um aplicativo robusto e escalável.
O serviço database contém toda a regra de negócio que necessária para utilizar o banco de dados da aplicação, desde a criação do mesmo, assim como métodos para leitura, inserção e deleção de dados.
ionic generate service database
ionic capacitor sync
O serviço password contém toda a regra de negócio que utilizaremos para calcular e gerar de forma correta os segredos descartáveis.
ionic generate service password
ionic capacitor sync
No fim desta etapa o projeto estará com a seguinte configuração:
./src/app/services
├── database
| ├── database.service.spec.ts
| └── database.service.ts
├── password
| ├── password.service.spec.ts
| └── password.service.ts
Para construção desta aplicação foram utilizadas as seguintes referências:
ALOUL WASSIM EL-HAJJ, S. Z. F. A. Multi factor authentication using mobile phones. International Journal of Applied Mathematics and Computer Science, v. 2, p. 65–80, 2009. ISSN 1814-0424. Disponível em: https://www.researchgate.net/publication/228972704_Multi_Factor_Authentication_Using_Mobile_Phones
APWG. Phishing Activity Trends Report, 2nd Quarter 2020. [S.l.], 2020. Disponível em: https://docs.apwg.org//reports/apwg_trends_report_q2_2020.pdf
BASIT A., Z. M. L.-X. e. a. A comprehensive survey of ai-enabled phishing attacks detection techniques. Telecommun Syst, v. 76, p. 139–154, January 2021. ISSN 1572-9451. Disponível em: https://doi.org/10.1007/s11235-020-00733-2
LAMPORT, A. I. . C. L. Password authentication with insecure communication. Communications of the ACM, v. 24, p. 770–772, 1981. Disponível em: https://doi.org/10.1145/358790.358797
RABOY, N. Phishing Activity Trends Report, 2nd Quarter 2020. [S.l.], 2014. Disponível em: https://www.thepolyglotdeveloper.com/2014/10/generate-time-based-one-time-passwords-javascript
RABOY, N. Build A Time-Based One-Time Password Manager With Ionic 2. [S.l.], 2016. Disponível em: https://www.thepolyglotdeveloper.com/2016/08/build-time-based-one-time-password-manager-ionic-2
VERIZON. 2021 Data Breach Investigations Report. [S.l.], 2021. Disponível em: https://www.verizon.com/business/resources/reports/2021-data-breach-investigations-report.pdf