Creo que debes contemplar todo lo que te ha dicho Álvaro Herrera. Si solo es un campo, creo que puedes usar un hash (sha) o cifrado simetrico (AES), pero si es toda la tabla o la BD, entonces debes tener en cuenta lo que dijo Álvaro Herrera
>________________________________ > De: Alvaro Herrera <alvhe...@2ndquadrant.com> >Para: Conrado Blasetti <conr...@mapfre.com.ar> >CC: "pgsql-es-ayuda@postgresql.org" <pgsql-es-ayuda@postgresql.org> >Enviado: Jueves 28 de febrero de 2013 15:16 >Asunto: Re: [pgsql-es-ayuda] Encriptar campo > >Conrado Blasetti escribió: >> Gente, buenos días. >> >> Estoy trabajando sobre Win7 con una app desktop con c# (.net) y PostgreSQL >> 9.0. >> Tengo una tabla con un campo del tipo character varying(20), el cual >> representa un Nro de Documento (Argentina). >> Necesito encriptar este campo de manera tal que, desde la base de datos, no >> pueda ser legible y que solo pueda ser consumida desde la misma app desktop. >> >> El campo será indexado y de busquedas constantes. >> Qué tipo de encryptado o técnica me sugieren? > >Este es un problema bastante complejo que requiere pensar muy bien antes >de hacer nada. Lo que estás diciendo básicamente es que quieres que en >la BD la info esté cifrada, y que no se pueda obtener el valor sin >cifrar mirando sólo la BD. Es decir, la llave de cifrado debe estar en >la aplicación. Entonces la aplicación debe extraer el valor cifrado >desde la BD, y descifrarlo a posteriori *sin involucrar a la BD para esto*. > >Una de las primeras cosas que tienes que preguntarte cuando tratas con >temas de cifrado es cómo manejarás las llaves. ¿Qué pasa si la llave se >filtra y necesitas cambiarla? En la BD tendrás que cambiar todos los >valores almacenados, pero necesitas saber cuáles valores están cifrados >con la llave antigua y cuáles con la llave nueva ... de lo contrario una >caída en medio del cambio resultará catastrófica (recuerda que no puedes >pasarle la llave a la BD para hacer un UPDATE masivo, por lo tanto >tienes que cambiar una por una). En conclusión, de alguna forma debes >almacenar una "versión de llave" junto con los valores. La aplicación >debe almacenar todas las llaves con su versión. > >(Observa que lo anterior no aplica sólo a llaves que se filtran; >deberías tener una política de crear llaves nuevas en forma periódica) > >El tema de las búsquedas usando los valores cifrados es simple: la >aplicación debe pasar el valor cifrado a buscar. Obviamente no puedes >darle un prefijo del valor, es decir búsquedas con LIKE o similares son >imposibles; todo eso deberás implementarlo en la aplicación, de ser >necesario. > >¿Cómo harás respaldos? De la BD es fácil, porque no hay nada que >esconder dado que los datos están todos cifrados; pero el almacén de >llaves de la aplicación es muy delicado. > >El tema de si usarás un algoritmo de cifrado simétrico o asimétrico no >es súper relevante. Procura usar un algoritmo moderno, quizás alguno de >NESSIE (posiblemente AES/Rijndael). > >-- >Álvaro Herrera http://www.2ndQuadrant.com/ >PostgreSQL Development, 24x7 Support, Training & Services > >- >Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) >Para cambiar tu suscripción: >http://www.postgresql.org/mailpref/pgsql-es-ayuda > > >