Skip to content

🚀 A secure, self-hosted Password Manager API built with FastAPI, PostgreSQL (Async), and Docker. Features AES-GCM encryption and JWT authentication.

License

Notifications You must be signed in to change notification settings

ptitmorceaux/pm-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Infos frontend :

Cette API est consommée par l'extension navigateur officielle, dont le code se trouve ici : ➡️ pm-extension

Première connexion

1. Interaction serveur

  • L’utilisateur crĂ©e son compte ou se logue avec username + password.

  • Le serveur renvoie :

    • Un JWT pour l’authentification des requĂŞtes futures.
    • Son coffre chiffrĂ© existant (vide la première fois, sinon un tableau de credentials chiffrĂ©s).

2. En local

  • L’utilisateur saisit pour la première fois son masterPassword.

  • On dĂ©rive une clĂ© (deriveKey) depuis le masterPassword et un salt alĂ©atoire.

  • On crĂ©e un credential de vĂ©rification :

    • domain = "password-manager"
    • ciphertext = encrypt(deriveKey, "valid") (ou un payload simple type "PMv1:<username>")
    • iv et salt gĂ©nĂ©rĂ©s.
  • Ce credential permet de tester la validitĂ© future du masterPassword.

  • On dĂ©chiffre tout le coffre reçu du serveur (s’il y en a) avec deriveKey.

  • Les credentials sont stockĂ©s en local (ex: chrome.storage.local), chiffrĂ©s avec deriveKey.

  • Si l’utilisateur sauvegarde de nouveaux passwords, ils sont chiffrĂ©s avec deriveKey et envoyĂ©s Ă  l’API pour stockage.


Connexion suivante

1. Interaction serveur

  • L’utilisateur se logue avec username + password.

  • Le serveur renvoie :

    • Un JWT valide.
    • Le coffre chiffrĂ©.

2. En local

  • L’utilisateur saisit son masterPassword.

  • On dĂ©rive la clĂ© (deriveKey) Ă  nouveau depuis ce masterPassword.

  • On tente de dĂ©chiffrer le credential spĂ©cial domain = "password-manager" :

    • Si le dĂ©chiffrement est correct et que le payload correspond ("PM:<username>"), le masterPassword est valide.
    • Sinon, on affiche une alerte "Mauvais master password".
  • Si masterPassword correct :

    • On peut dĂ©chiffrer l’ensemble du coffre.
    • L’utilisateur peut autofill, crĂ©er, modifier ou supprimer des credentials.
    • Les nouvelles entrĂ©es sont chiffrĂ©es localement avec deriveKey et envoyĂ©es au serveur.

Points importants

  • JWT : utilisĂ© uniquement pour authentifier les requĂŞtes cĂ´tĂ© serveur. Il change rĂ©gulièrement et n’est pas utilisĂ© pour le chiffrement.
  • MasterPassword / deriveKey : jamais envoyĂ© au serveur. Sert uniquement Ă  chiffrer/dĂ©chiffrer le coffre.
  • Credential de vĂ©rification (password-manager) : permet de tester que le masterPassword est correct sans stocker de donnĂ©es sensibles en clair.

About

🚀 A secure, self-hosted Password Manager API built with FastAPI, PostgreSQL (Async), and Docker. Features AES-GCM encryption and JWT authentication.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published