APIPreçosDocumentaçãoBlogParceirosContato
Voltar ao blog
Tutorial

Segurança de Dados Biométricos em Trânsito: Criptografia, Assinaturas e Conformidade

Como proteger dados biométricos de ponto do dispositivo ao cloud até sua aplicação — com TLS, assinaturas HMAC e arquitetura pronta para LGPD.

PunchConnect Team·Mar 28, 2026·5 min read

Introduction

Um template de impressão digital vaza. Diferente de uma senha, você não pode redefini-la. Os dados biométricos dos seus funcionários são irrevogáveis — e protegê-los não é negociável.

Os dados de ponto biométrico incluem templates de impressão digital, vetores de reconhecimento facial, IDs de funcionários e timestamps. Na maioria das jurisdições, isso se qualifica como dados pessoais sensíveis. A LGPD (Brasil), a Portaria 671 do MTE, o RGPD (UE) — todos exigem criptografia em trânsito, controles de acesso e trilhas de auditoria.

Conforme o Art. 5º, II da LGPD, dados biométricos são expressamente classificados como "dados pessoais sensíveis", exigindo tratamento especial sob os Arts. 11-13 da lei.

O Modelo de Ameaças

<svg viewBox="0 0 700 300" xmlns="http://www.w3.org/2000/svg" style="max-width:700px;width:100%;font-family:system-ui,sans-serif">
<rect width="700" height="300" fill="#1a1a2e" rx="12"/>
<text x="350" y="30" fill="#e0e0e0" font-size="17" font-weight="bold" text-anchor="middle">Dados Biométricos — Três Superfícies de Ataque</text>
<rect x="30" y="55" width="195" height="120" rx="8" fill="#3e1e1e" stroke="#ef5350" stroke-width="1"/>
<text x="127" y="80" fill="#ef5350" font-size="15" font-weight="bold" text-anchor="middle">① Dispositivo → Cloud</text>
<text x="127" y="105" fill="#ccc" font-size="14" text-anchor="middle">Man-in-the-middle</text>
<text x="127" y="125" fill="#ccc" font-size="14" text-anchor="middle">Captura de pacotes</text>
<text x="127" y="145" fill="#ccc" font-size="14" text-anchor="middle">Spoofing DNS</text>
<text x="127" y="165" fill="#81c784" font-size="14" text-anchor="middle">Fix: TLS 1.3</text>
<rect x="252" y="55" width="195" height="120" rx="8" fill="#3e1e1e" stroke="#ef5350" stroke-width="1"/>
<text x="350" y="80" fill="#ef5350" font-size="15" font-weight="bold" text-anchor="middle">② Cloud → Sua App</text>
<text x="350" y="105" fill="#ccc" font-size="14" text-anchor="middle">Injeção de webhook falso</text>
<text x="350" y="125" fill="#ccc" font-size="14" text-anchor="middle">Ataques de replay</text>
<text x="350" y="145" fill="#ccc" font-size="14" text-anchor="middle">Sequestro de endpoint</text>
<text x="350" y="165" fill="#81c784" font-size="14" text-anchor="middle">Fix: HMAC-SHA256</text>
<rect x="475" y="55" width="195" height="120" rx="8" fill="#3e1e1e" stroke="#ef5350" stroke-width="1"/>
<text x="572" y="80" fill="#ef5350" font-size="15" font-weight="bold" text-anchor="middle">③ Dados em Repouso</text>
<text x="572" y="105" fill="#ccc" font-size="14" text-anchor="middle">Violação de banco</text>
<text x="572" y="125" fill="#ccc" font-size="14" text-anchor="middle">Roubo de backups</text>
<text x="572" y="145" fill="#ccc" font-size="14" text-anchor="middle">Acesso interno</text>
<text x="572" y="165" fill="#81c784" font-size="14" text-anchor="middle">Fix: AES-256</text>
<rect x="30" y="200" width="640" height="80" rx="8" fill="#1b3a2d" stroke="#81c784" stroke-width="1"/>
<text x="350" y="225" fill="#81c784" font-size="15" font-weight="bold" text-anchor="middle">Cadeia de Segurança PunchConnect</text>
<text x="350" y="250" fill="#ccc" font-size="14" text-anchor="middle">TLS 1.3 (em trânsito) → HMAC-SHA256 (integridade webhook) → AES-256 (em repouso)</text>
<text x="350" y="270" fill="#ccc" font-size="14" text-anchor="middle">Todas as camadas ativadas por padrão — nenhuma configuração necessária</text>
</svg>

Camada 1: Criptografia Dispositivo-Cloud (TLS 1.3)

Toda comunicação entre os dispositivos biométricos e o PunchConnect é criptografada com TLS 1.3:

- Nenhum dado em texto puro sai do dispositivo pela rede
- O certificate pinning previne ataques man-in-the-middle
- O forward secrecy garante que sessões passadas permanecem criptografadas

Você não precisa configurar nada. Ao registrar um dispositivo no painel do PunchConnect, a conexão criptografada se estabelece automaticamente.

Camada 2: Verificação de Assinatura Webhook (HMAC-SHA256)

Quando o PunchConnect entrega dados de ponto para sua aplicação via webhook, como você sabe que realmente veio do PunchConnect? Um atacante que descubra seu endpoint webhook poderia enviar eventos falsos.

Python: Verificar Assinatura do Webhook

python
import hmac
import hashlib
from flask import Flask, request, jsonify
app = Flask(__name__)
SEGREDO_WEBHOOK = "whsec_seu_segredo_de_assinatura"
def verificar_assinatura(payload: bytes, assinatura: str) -> bool:
"""Verificar assinatura webhook do PunchConnect."""
esperada = hmac.new(
SEGREDO_WEBHOOK.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(esperada, assinatura)
@app.route("/webhooks/ponto", methods=["POST"])
def tratar_ponto():
assinatura = request.headers.get("X-PunchConnect-Signature", "")
if not verificar_assinatura(request.data, assinatura):
app.logger.warning(
f"Assinatura webhook inválida de {request.remote_addr}"
)
return jsonify({"erro": "Assinatura inválida"}), 401
evento = request.json
funcionario_id = evento["data"]["employee_id"]
horario = evento["data"]["timestamp"]
print(f"Ponto verificado: {funcionario_id} às {horario}")
return jsonify({"recebido": True}), 200

Node.js: Verificar Assinatura do Webhook

javascript
const crypto = require('crypto');
const express = require('express');
const app = express();
app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf; } }));
const WEBHOOK_SECRET = process.env.PUNCHCONNECT_WEBHOOK_SECRET;
function verificarAssinatura(payload, assinatura) {
const esperada = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(esperada),
Buffer.from(assinatura)
);
}
app.post('/webhooks/ponto', (req, res) => {
const assinatura = req.headers['x-punchconnect-signature'];
if (!assinatura || !verificarAssinatura(req.rawBody, assinatura)) {
console.warn(`⚠️ Assinatura inválida de ${req.ip}`);
return res.status(401).json({ erro: 'Assinatura inválida' });
}
const { data } = req.body;
console.log(`✅ Verificado: ${data.employee_id} às ${data.timestamp}`);
res.status(200).json({ recebido: true });
});
app.listen(3000, () => console.log('Listener webhook seguro na porta :3000'));

Camada 3: Dados em Repouso (AES-256)

Todos os dados armazenados na infraestrutura do PunchConnect são criptografados com AES-256: registros de ponto, templates biométricos, configurações de dispositivos, logs de webhooks e backups.

Conformidade LGPD e Portaria 671

Para implantações no Brasil, o PunchConnect atende às exigências da LGPD e da Portaria 671 do Ministério do Trabalho:

| Requisito | LGPD | Portaria 671 | PunchConnect |
|-----------|------|--------------|--------------|
| Criptografia em trânsito | Art. 46 | Requerido | ✅ TLS 1.3 |
| Criptografia em repouso | Art. 46 | Requerido | ✅ AES-256 |
| Controles de acesso | Art. 46 | Requerido | ✅ API keys + RBAC |
| Trilha de auditoria | Art. 37 | Obrigatório | ✅ Logs webhook |
| Dados sensíveis | Art. 11-13 | — | ✅ Apenas templates |
| Eliminação de dados | Art. 18, VI | — | ✅ DELETE /employees/{id} |
| REP-P (registro eletrônico) | — | Requerido | ✅ Compatível |

O PunchConnect se enquadra como REP-P (Registrador Eletrônico de Ponto via Programa) conforme a Portaria 671, atendendo aos requisitos do Art. 74 §2º da CLT para empresas com mais de 20 funcionários. Os fusos horários brasileiros (BRT/AMT/ACT/FNT) são tratados automaticamente pela API.

Eliminar Dados de Funcionário

bash
# LGPD Art. 18, VI — Direito de eliminação
curl -X DELETE https://api.punchconnect.com/v1/employees/FUNC001 \
-H "Authorization: Bearer SUA_API_KEY"

Prevenção de Ataques de Replay

python
from datetime import datetime, timezone, timedelta
IDADE_MAXIMA_WEBHOOK = timedelta(minutes=5)
@app.route("/webhooks/ponto", methods=["POST"])
def tratar_ponto():
if not verificar_assinatura(request.data, request.headers.get("X-PunchConnect-Signature", "")):
return jsonify({"erro": "Assinatura inválida"}), 401
evento = request.json
# Verificar frescura do timestamp
hora_evento = datetime.fromisoformat(evento["timestamp"])
idade = datetime.now(timezone.utc) - hora_evento
if idade > IDADE_MAXIMA_WEBHOOK:
return jsonify({"erro": "Webhook muito antigo"}), 400
# Idempotência — rejeitar IDs de evento duplicados
event_id = evento["event_id"]
if redis_client.exists(f"webhook:{event_id}"):
return jsonify({"status": "ja_processado"}), 200
redis_client.setex(f"webhook:{event_id}", 86400, "1")
processar_ponto(evento["data"])
return jsonify({"recebido": True}), 200

FAQ

O PunchConnect armazena imagens de impressões digitais?

Não. O PunchConnect armazena apenas templates de impressão digital — representações matemáticas das características, não imagens reais. Os templates não podem ser revertidos em imagens. Distinção crucial para conformidade LGPD.

Qual versão de TLS o PunchConnect usa?

Todas as conexões usam TLS 1.3. TLS 1.0 e 1.1 não são suportados. TLS 1.2 é aceito como fallback para dispositivos mais antigos.

Posso restringir o acesso API a endereços IP específicos?

Sim. No painel do PunchConnect você pode configurar listas de IP permitidas para suas chaves API.

Como verifico se meu endpoint webhook está seguro?

O PunchConnect oferece uma ferramenta de teste webhook no painel. Envie um evento de teste e verifique: (1) seu servidor recebe via HTTPS, (2) a verificação de assinatura passa, e (3) você consegue rejeitar eventos com assinaturas adulteradas.

O que acontece com os dados se eu cancelar minha conta?

Todos os dados são excluídos em 30 dias após o cancelamento. Você pode exportar seus dados via API antes de cancelar. Conforme com a LGPD.

---

Segurança de dados biométricos não é opcional — é requisito legal. O PunchConnect cuida do mais difícil: TLS 1.3 para trânsito, AES-256 para armazenamento, HMAC-SHA256 para integridade webhook. Seu papel: verificar assinaturas webhook e armazenar chaves API com segurança.

Teste grátis por 7 dias — segurança de nível empresarial desde o primeiro dia, sem cartão de crédito.

Artigos relacionados

Segurança de Dados Biométricos em Trânsito: Criptografia, Assinaturas e Conformidade | PunchConnect