web-dev-qa-db-fra.com

Cryptage avec pgcrypto

Je travaille sur crypter une colonne dans une table postgre à l'aide de pgcrypto. La version postgre est de 9.5.1. J'ai compris comment chiffrer à l'aide de pgp_sym_encrypt() et déchiffrer à l'aide de pgp_sym_decrypt(). Mon problème est de savoir comment garder la clé cachée.

J'essaie d'éviter que l'application décrypte les données renvoyées. Les données de ce tableau sont seulement sensibles si une personne peut afficher la table entière (450 000 lignes) et placer les données ensemble, de sorte que c'est OK pour que les données reviennent à l'application décrypte.

À Pgadmin, j'ai cela dans ma requête

 SELECT pgp_sym_decrypt(column1,'password')

Obvisrouly, je ne veux pas que le modèle de requête Notre application utilise pour avoir le mot de passe stocké dedans, puis le transmettre à chaque fois qu'une requête est couru. Toute idée serait appréciée?

4
Jason

Il n'y a aucun moyen d'éviter les inconvénients du cryptage symétrique sur le serveur.

PostgreSQL doit avoir accès à la clé et aux données cryptées pour la déchiffrer si vous souhaitez "éviter d'avoir l'application décrypte". Il n'y a que deux sources qui peuvent le faire.

  1. le consommateur
  2. la base de données (auquel cas il est également sujet à être écrit dans un fichier journal)

Bien sûr, si vous avez un seul point d'accès aux données comme un serveur Web comme un serveur Web ou similaire, vous pouvez potentiellement enchérir là aussi et conserver les touches du serveur.

2
Evan Carroll

Alors, je suis curieux, qu'avez-vous fini par faire?

Conversion de commentaire à répondre, pour satisfaire ladite curiosité ... :)


Sauf si II mal compris:

En supposant que l'application a des privilèges de niveau de ligne sur cette table, vous pouvez utiliser

SELECT pgp_sym_decrypt( column1, get_pswd(pkey) ) 

get_pswd(pkey) sélectionnerait le mot de passe pour cette rangée de pkkey particulière.

Et vous pouvez stocker le pkuquet et le mot de passe de chaque ligne dans une table séparée que l'application n'a pas de privilèges sélectionnées.

0
amacvar