Calma, não vou pedir seu cartão de crédito. :)
Bem, vamos lá. Encriptar dados sensíveis para serem transmitidos de forma segura não é algo barato, em relação ao custo de processamento.
Encryption as a Service permite separar esse custo de processamento em forma de serviço, esse serviço será encubido por fazer o encrypt e decrypt de dados de forma totalmente independente, reduzindo o custo de processamento por parte dos clientes e ainda ter que proteger chaves compartilhadas por exemplo.
Pense por exemplo em clientes mobile, o processamento de encriptar/decriptar dados torna a experiência do usuário frustrante e o consumo de bateria pode aumentar. Pensando neste contexto reduzir o processamento garante um pouco mais de performance e ainda você tem um serviço especializado nesse serviço.
Ainda pensando na oferta de EaaS, pode ser usado na comunicação entre microservices, onde encriptar dados sensíveis seja uma necessidade.
Contudo esse tipo de serviço requer uma atenção especial no contexto de segurança, pois não queremos que acontece acessos indevidos, por estes motivos segue algumas soluções tratar isto
- Políticas de segurança da informação
- MTLS para Autentiticação Mutua
- Política de whiteLists para IPs confiáveis
- Token de acesso no Header das requisições
- Técnica de Challenge Proofs
Em seguida segue uma POC sobre a oferta de EaaS de forma simples.
Sinta-se livre para evoluir esse projeto :)
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
POST
: /crypto/encryptPOST
: /crypto/decrypt
POST
: /crypto/encrypt/aes/cbcPOST
: /crypto/decrypt/aes/cbc
POST
: /crypto/encrypt/aes/gcmPOST
: /crypto/decrypt/aes/gcm
vim docker-compose.yaml
...
environment:
- AES_KEY=<CHAVE_32_CARACTERES>
- AES_GCM_HEADER=<GCM_HEADER_32_CARACTERES>
...
Comando para gerar 32 caracteres
echo $RANDOM | md5sum | head -c 32; echo;
Executando o serviço
docker-compose up -d --build
docker-compose ps
# Call using HTTPie
http --json :8000/ping
# Example Encrypt Data
http --json POST :8000/crypto/encrypt < payloads/postToEncryptData.json
# Example Decrypt Data by response of encrypt data
http --json POST :8000/crypto/decrypt < payloads/postToDecryptData_AES_GCM.json
# AES GCM
# Encrypt
http --json POST :8000/crypto/encrypt/aes/gcm < payloads/postToEncryptData.json
# Decrypt
http --json POST :8000/crypto/decrypt/aes/gcm < payloads/postToDecryptData_AES_GCM.json
# AES CBC
# Encrypt
http --json POST :8000/crypto/encrypt/aes/cbc < payloads/postToEncryptData.json
# Decrypt
http --json POST :8000/crypto/decrypt/aes/cbc < payloads/postToDecryptData_AES_CBC.json