BlockTrust MVP
Plateforme de certification et vérification d'authenticité pour les entreprises
Stack: Next.js 16, Prisma, PostgreSQL, JWT (ES256), QR Codes
Déploiement & Neon (bold-frost / vercel-dev) : voir DEPLOYMENT.md.
đŻ Vue d'ensemble
BlockTrust est une plateforme permettant aux entreprises de :
- Créer et gérer des certificats de confiance
- Générer des signatures JWT pour authentifier leurs emails
- Vérifier l'authenticité des communications via des badges et QR codes
- Suivre les vérifications et détecter les tentatives de falsification
đ Technologies
- Framework: Next.js 16.1.1 (App Router)
- Base de données: PostgreSQL avec Prisma ORM
- Authentification: JWT avec ES256 (clés ECDSA)
- UI: React 19, Tailwind CSS 4
- QR Codes: BibliothĂšque
qrcode
đ Structure du projet
blocktrust-mvp/
âââ app/
â âââ api/
â â âââ entities/
â â â âââ route.ts # CRUD des entitĂ©s
â â âââ v2/
â â âââ issue/
â â â âââ route.ts # GĂ©nĂ©ration de signatures JWT
â â âââ verify/
â â âââ route.ts # VĂ©rification de signatures
â âââ badge/
â â âââ [id]/
â â âââ page.tsx # Page badge avec QR code
â âââ components/
â â âââ QRCode.tsx # Composant QR code
â âââ dashboard/
â â âââ create/
â â â âââ page.tsx # Formulaire crĂ©ation entitĂ©
â â âââ page.tsx # Dashboard principal
â âââ verify/
â â âââ [id]/
â â â âââ page.tsx # VĂ©rification par ID/SIRET
â â âââ page.tsx # VĂ©rification par token JWT
â âââ lib/
â â âââ db.ts # Client Prisma
â âââ page.tsx # Page d'accueil
âââ lib/
â âââ v2/
â âââ context.ts # Canonicalisation et hash des contextes
â âââ jwt.ts # Signatures et vĂ©rification JWT
âââ prisma/
â âââ schema.prisma # SchĂ©ma de base de donnĂ©es
â âââ migrations/ # Migrations Prisma
â âââ seed.js # Script de seed
âââ README.md
đïž ModĂšle de donnĂ©es
User
- Informations utilisateur (email, nom, plan)
Entity
- Entité certifiée (nom légal, SIRET, email, site web)
- Statuts:
kycStatus (PENDING/APPROVED/REJECTED)
- Niveaux:
validationLevel (BRONZE/SILVER/GOLD)
Certificate
- Certificat lié à une entité
- Statuts: PENDING/APPROVED/REJECTED
- Niveaux: BRONZE/SILVER/GOLD
Signature (V2)
- Métadonnées de signature JWT
jti: Identifiant unique du token
ctxHash: Hash du contexte signé
expiresAt: Date d'expiration
revoked: Statut de révocation
VerificationEvent
- Historique des vérifications
- IP, User-Agent, verdict (VALID/TAMPERED/REVOKED/etc.)
đ API V2 - Signatures JWT
POST /api/v2/issue
GénÚre une signature JWT pour un contexte email.
Request:
{
"entityId": "string",
"certificateId": "string",
"context": {
"from": "contact@example.com",
"to": "client@example.com",
"subject": "Sujet de l'email",
"date": "2024-01-15T10:00:00Z",
"body": "Corps de l'email (optionnel)"
},
"expiresInSeconds": 3600
}
Response:
{
"token": "eyJ...",
"verifyUrl": "http://localhost:3000/verify?token=...",
"signatureId": "uuid"
}
POST /api/v2/verify
Vérifie une signature JWT.
Request:
{
"token": "eyJ...",
"context": {
"from": "contact@example.com",
"to": "client@example.com",
"subject": "Sujet de l'email",
"date": "2024-01-15T10:00:00Z",
"body": "Corps de l'email (optionnel)"
}
}
Response:
{
"verdict": "VALID" | "VALID_WITH_WARNING" | "TAMPERED" | "REVOKED" | "EXPIRED" | "INVALID",
"reason": "string (optionnel)",
"entityId": "string",
"certificateId": "string",
"jti": "string"
}
đ ïž Installation et configuration
Prérequis
- Node.js 20+
- PostgreSQL
- macOS (ou Linux/Windows)
1. Installation des dépendances
2. Configuration de la base de données
Créer un fichier .env à la racine :
# Base de données
DATABASE_URL="postgresql://user:password@localhost:5432/blocktrust"
DIRECT_URL="postgresql://user:password@localhost:5432/blocktrust"
# JWT (clés ECDSA ES256)
BLOCKTRUST_JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
BLOCKTRUST_JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
# Application
NEXT_PUBLIC_APP_URL="http://localhost:3000"
3. Génération des clés JWT (ES256)
# Générer une paire de clés ECDSA
openssl ecparam -genkey -name prime256v1 -noout -out private-key.pem
openssl ec -in private-key.pem -pubout -out public-key.pem
# Convertir en format PKCS8 pour la clé privée
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private-key.pem -out private-key-pkcs8.pem
Copier le contenu de private-key-pkcs8.pem dans BLOCKTRUST_JWT_PRIVATE_KEY et public-key.pem dans BLOCKTRUST_JWT_PUBLIC_KEY (avec \n pour les retours Ă la ligne).
4. Initialisation de la base de données
# Générer le client Prisma
npx prisma generate
# Appliquer les migrations
npx prisma migrate deploy
# (Optionnel) Seed la base de données
npm run seed
5. Lancement du serveur de développement
L'application sera accessible sur http://localhost:3000
đ Scripts disponibles
npm run dev - Lance le serveur de développement
npm run build - Build de production
npm run start - Lance le serveur de production
npm run lint - Vérifie le code avec ESLint
npm run seed - Seed la base de données avec des données de démo
đš FonctionnalitĂ©s implĂ©mentĂ©es
â
Dashboard
- Affichage des entités et certificats
- Statistiques (certificats actifs, vérifications)
- Navigation vers création, vérification, badges
â
Création d'entités
- Formulaire de création avec validation
- Création automatique d'un certificat associé
- Gestion des erreurs (SIRET unique)
â
Badges et QR codes
- Génération de badges visuels
- QR codes pour vérification rapide
- Affichage des informations de certification
â
Vérification
- Vérification par ID/SIRET (page publique)
- Vérification par token JWT (API V2)
- Détection de falsification (hash mismatch)
- Détection de replay (changement IP/UA)
- Gestion de l'expiration et révocation
â
API V2 - Signatures JWT
- Génération de tokens signés avec ES256
- Canonicalisation des contextes email
- Vérification cryptographique
- Historique des vérifications
đ SĂ©curitĂ©
- JWT ES256: Signatures cryptographiques avec clés ECDSA
- Hash de contexte: Protection contre la falsification
- Anti-replay: Détection des vérifications suspectes
- Expiration: Tokens avec durée de vie limitée
- Révocation: Support de la révocation de signatures
đ§ Prochaines Ă©tapes
đ Licence
Propriétaire - Tous droits réservés
DĂ©veloppĂ© avec â€ïž pour BlockTrust
force rebuild