Retour aux projets
Termine

Keyne

Keyne est un gestionnaire de mots de passe moderne et securise. Concu avec une approche security-first, il utilise le chiffrement de bout en bout pour garantir que seul l'utilisateur peut acceder a ses donnees. L'interface intuitive permet une gestion simple des identifiants avec synchronisation multi-appareils.

Annee2024
RoleLead Developer
TypeProjet personnel

Technologies utilisees

React

Frontend framework

TypeScript

Type safety

Node.js

Backend API

AES-256

Chiffrement

PostgreSQL

Base de donnees

JWT

Authentification

Points cles

Chiffrement E2E

AES-256-GCM pour tous les mots de passe

Generateur de mots de passe

Parametrable: longueur, caracteres speciaux

Synchronisation multi-appareils

Acces depuis n'importe quel appareil

Auto-fill intelligent

Remplissage auto des formulaires

Audit de securite

Verification de la robustesse des mots de passe

Mode hors-ligne

Acces aux mots de passe sans connexion

Processus de developpement

01

Research & Security Architecture

Analyse des standards de chiffrement, choix AES-256-GCM, architecture zero-knowledge

02

API Development

API REST securisee avec Node.js, authentification JWT, rate limiting

03

Frontend & UX

Interface React avec TypeScript, design system, animations

04

Testing & Security Audit

Tests unitaires, pentest de l'API, verification du chiffrement

Apercu technique

encryption.ts
1import crypto from 'crypto';
2
3const ALGORITHM = 'aes-256-gcm';
4const IV_LENGTH = 16;
5const TAG_LENGTH = 16;
6
7interface EncryptedData {
8 iv: string;
9 content: string;
10 tag: string;
11}
12
13export async function encrypt(
14 plaintext: string,
15 masterKey: Buffer
16): Promise<EncryptedData> {
17 // Generate a random initialization vector
18 const iv = crypto.randomBytes(IV_LENGTH);
19
20 // Create cipher with AES-256-GCM
21 const cipher = crypto.createCipheriv(
22 ALGORITHM, masterKey, iv
23 );
24
25 // Encrypt the plaintext
26 let encrypted = cipher.update(plaintext, 'utf8', 'hex');
27 encrypted += cipher.final('hex');
28
29 // Get authentication tag
30 const tag = cipher.getAuthTag();
31
32 return {
33 iv: iv.toString('hex'),
34 content: encrypted,
35 tag: tag.toString('hex'),
36 };
37}