Menú
gratis
Registro
Hogar  /  Internet/ Almacenamiento seguro de contraseñas en KeePass Professional. Almacenamiento seguro de contraseñas en KeePass Professional Cómo protegerse del hackeo de KeePass

Almacenamiento seguro de contraseñas en KeePass Professional. Almacenamiento seguro de contraseñas en KeePass Professional Cómo protegerse del hackeo de KeePass

Al utilizar Internet y las computadoras, cada vez tenemos más contraseñas. Estas son contraseñas e inicios de sesión para el buzón, para Skype, para los sitios en los que nos registramos (VKontakte, Odnoklassniki, etc.), y los usuarios más avanzados también usan contraseñas para varios programas, contraseñas para FTP, claves de licencia, y esta es la lista. puede continuar por mucho tiempo. Cuantas más contraseñas tengamos (por supuesto, también inicios de sesión para ellas), más obvio será que necesitamos algún tipo de almacenamiento confiable para ellas. Por supuesto, podemos crear un documento .txt y registrar y almacenar todo allí. Quizás al leer estas líneas pienses: “Estoy haciendo precisamente eso, ¿por qué es malo?” Puede que no sea malo, pero no es conveniente y existe una manera mejor de almacenar contraseñas. Estoy seguro de que te gustará. Este método es usando un administrador de contraseñas llamado KeePass. ¿Cuáles son sus ventajas?

1) Todas sus contraseñas están en un programa que está protegido de manera confiable contra la piratería de contraseñas y están cifradas con el algoritmo AES (cifrado de bloque de 128 bits usando una clave de 256 bits). Al ingresar al programa, deberá ingresar una contraseña, de lo contrario no podrá acceder. Se recomienda que la contraseña tenga al menos 20 caracteres; si un atacante quiere adivinarla, le llevará décadas; Es poco probable que alguien esté interesado en adivinar una contraseña tan larga;
2) Interfaz del programa fácil de usar. Puede combinar grupos en contraseñas (por ejemplo, el grupo "Redes sociales", el grupo "Correo");
3) Función de marcación automática: el programa puede ingresar automáticamente su nombre de usuario y contraseña;
4) La versión portátil de KeePass le permite llevar cómodamente todas sus contraseñas en una unidad flash;
5) KeePass incluye un generador de contraseñas, por lo que ahora no tienes que crearlas tú mismo. El generador de contraseñas también contiene configuraciones adicionales que le permiten especificar qué caracteres usar o no y cuántas veces deben aparecer en una contraseña.

Estas son las principales ventajas. Ahora veamos cómo trabajar con el programa KeePass. Comencemos con la instalación y rusificación de KeePass. (Descarga el programa KeePass al final de este artículo). La instalación es intuitiva, por lo que no nos detendremos en ello. Después de la instalación, es necesario rusificar el programa. Para hacer esto, en el archivo que descargó, busque el archivo "ruso" y cópielo en la carpeta con el programa instalado. Normalmente, la ruta es: “C /Archivos de programa/KeePass Password Safe”. Pero puede haber otra forma, dependiendo de su configuración.

Luego lanzamos el programa. Cuando lo inicie por primera vez, verá la siguiente ventana:

Se nos pregunta si deseamos habilitar las actualizaciones automáticas. Por supuesto, esto es necesario hacerlo, por lo que seleccionamos la primera opción: “Activar (recomendar)”. Veremos la ventana principal del programa:

KeePass todavía está en inglés y es necesario completar la rusificación. Para completarlo, vaya a: Ver/Cambiar idioma. Captura de pantalla:

Aquí seleccionamos el idioma ruso.

Así se produce la rusificación de KeePass.

Ahora comencemos a crear nuestra base de datos de contraseñas. Para hacer esto, presione: Archivo/Nuevo, o simplemente Ctrl+N.

Se nos ocurre un nombre para nuestra base de datos y hacemos clic en "Guardar". Presta atención a dónde guardas la base de datos de contraseñas, ya que a partir de ahora todas tus contraseñas se almacenarán aquí. Por ejemplo, si desea transferir su base de datos de contraseñas a otra computadora, deberá copiar este archivo. Puede haber otras situaciones en las que necesite un archivo de base de datos de contraseñas. Por lo tanto, guárdelo donde pueda encontrarlo fácilmente. Por favor, tome este importante punto con mucha atención.

Aquí debemos crear una contraseña principal que se utilizará al iniciar sesión en el programa. Debe tener al menos 20 caracteres, como se menciona al principio del artículo. No se debe utilizar una contraseña de menos de 20 caracteres; No escatime en la cantidad de caracteres de su contraseña. Ahora esta será la única contraseña que necesitarás recordar; las demás se almacenarán en el programa. También marque la casilla junto a "Archivo de clave" sin él, incluso si conoce la contraseña, no podrá ingresar al programa. Este paso hará que sea más difícil piratear su base de datos de contraseñas si alguien intenta hacerlo. Este es el tipo de protección que se utiliza en KeePass. Haga clic en "Nuevo".

Aquí configuramos el nombre del archivo clave y lo guardamos. Recuerda dónde lo guardas. El archivo de la base de datos de contraseñas y el archivo de claves son los dos archivos principales necesarios para iniciar sesión en la base de datos de contraseñas. No debes perderlas, de lo contrario no podrás recuperar el acceso a las contraseñas guardadas en KeePass.

En esta ventana necesitas generar números aleatorios. Aunque parezca complicado, es muy sencillo de hacer. Mueva el cursor del mouse sobre el área gris y se generarán números aleatorios. "¿Cuánto tiempo llevará mover el mouse sobre el área gris?" - preguntas. Tenga en cuenta que hay un área vacía en la parte inferior (la segunda flecha apunta hacia ella). Mueva el mouse aleatoriamente hasta llenar esta área.

¿Cuál debería ser el resultado? Veamos la captura de pantalla:

Vemos que la cantidad de bits es 256, esto significa que hicimos todo correctamente y ahora hacemos clic en “Aceptar”. ¡Nuestra llave está lista!

Ahora aquí también todo está listo. Haga clic en "Aceptar".

En la ventana "Crear una nueva base de datos de contraseñas", haga clic en "Aceptar".

Todo está listo y en la captura de pantalla podemos ver cómo luce KeePass.

Como se mencionó al principio del artículo, en este programa las contraseñas se pueden ordenar en grupos. De forma predeterminada, ya contiene grupos para almacenar contraseñas y registros de contraseñas de prueba. Los grupos están a la izquierda y las contraseñas a la derecha. Por supuesto, no necesitamos registros de pruebas. Los borramos.

También eliminamos grupos. Si los grupos que ya existen le convienen, no es necesario que los elimine. Eliminaremos grupos existentes y crearemos otros nuevos. Para eliminar un grupo, haga clic derecho sobre él y seleccione "Eliminar grupo".

Entonces, los grupos han sido eliminados y ahora estamos creando otros nuevos. Para hacer esto, vaya a Editar/Agregar grupo

Introduzca el nombre del grupo. Guardemos las contraseñas de nuestros buzones de correo en este grupo. Llamemos a este grupo de contraseñas "Correo". Captura de pantalla:

Como puede ver, tenemos un grupo de contraseñas que creamos llamado "Correos". Un nombre correctamente elegido facilita entender a qué se refieren las contraseñas que allí se almacenan. Conclusión: da nombres claros y encontrarás la entrada deseada de forma más fácil y rápida.

La siguiente tarea es hacer una publicación en el grupo. Como habrás adivinado, el registro almacenará tu nombre de usuario y contraseña de correo electrónico, así como algunas otras cosas útiles. Hablemos de ellos un poco más. Ahora veamos cómo agregar una entrada a un grupo. Para hacer esto, vaya a "Editar/Agregar entrada..."

Se ha abierto la ventana "Agregar entrada".

Completamos el formulario, 1) creamos un nombre para la entrada, 2) el nombre es el inicio de sesión, 3) borramos la contraseña que ya tenemos e ingresamos la que usamos para el correo, también puedes configurar un enlace a la página en la que deberá ingresar el nombre de usuario y la contraseña y también escribir comentarios. En los comentarios podemos indicar la respuesta a la pregunta de seguridad o algún otro dato que indicamos durante el registro, en general, todo lo que necesitemos. He aquí un ejemplo:

Así es como se ve la entrada creada.

Por cierto, el inicio de sesión (en KeePass se llama Nombre) se puede ocultar con asteriscos, de forma similar a como se oculta una contraseña. Para hacer esto, vaya a la pestaña Ver y seleccione el elemento apropiado.

Resumamos el trabajo realizado. Hemos agregado una entrada y esto es suficiente para comprender cómo funciona este proceso. Ahora puedes transferir de manera similar todas tus contraseñas a este programa. De esta manera, crearás tu propia base de datos y podrás encontrar cómoda y rápidamente las combinaciones de nombres de usuario y contraseñas que necesitas.

¿Cómo ahora “extraer” el nombre de usuario y la contraseña del registro? Haga clic derecho en las entradas. Veamos la captura de pantalla:

Apareció un menú. Después de mirarlo detenidamente, puede ver que puede copiar el nombre, copiar la contraseña, cambiar y eliminar la entrada. Estas son las funciones más básicas. Pero aquí hay otra característica muy útil, que se llama "Iniciar marcación automática". ¿Cómo usarlo? Primero, coloque el cursor en el campo de inicio de sesión en el formulario del sitio web, luego vaya a la entrada y seleccione "Iniciar marcación automática". El programa ingresará automáticamente su nombre de usuario y contraseña.

Otra cosa útil que tiene KeePass es un generador de contraseñas. Espero que todos entiendan qué es y por qué es necesario. Se encuentra en la pestaña de herramientas. Allí todo es intuitivo, creo que no será difícil entenderlo.

Aquí es donde podemos terminar. Todo lo mejor para ti.

En uno de los vídeos anteriores ya hablé de un programa para almacenar contraseñas de forma segura. Pero, como resultado de ciertos experimentos, resultó que almacenar contraseñas en él no es tan seguro, pero esto se aplica a la versión clásica del programa. Por eso, en este vídeo veremos la versión profesional de KeePass. Además, es tan gratuita como la versión clásica. Si es la primera vez que escuchas sobre este programa, te aconsejo que primero mires mi reseña de la versión clásica para que no surjan preguntas innecesarias.

Entonces, qué haremos en esta lección:

Hackeemos la versión clásica de KeePass Password Safe usando el registrador de claves;

Importamos la base de datos de la versión clásica a la profesional;

Veamos las principales diferencias e innovaciones;

E intentemos piratear la versión profesional con Key logger.

Y antes que nada, vayamos al sitio web de los desarrolladores del programa www.keepass.info\download. Descarguemos ambas versiones en formato portátil, ya que llevo una base de datos con contraseñas en una unidad flash, el programa para visualizarlas también debe iniciarse desde una unidad flash, sin instalación en el sistema operativo.

Ya hice esto y también creé una base de datos de prueba para la versión clásica. En este momento tengo el programa espía LanAgent ejecutándose en mi sistema. Este programa pertenece a los registradores de claves, es decir. programas que registran todas las acciones del usuario en la computadora. Entonces, ¡ahora descubriremos cuán confiablemente este programa protege nuestras contraseñas!

Lanzamos la versión clásica y abrimos la base de datos creada en ella, ingresamos la contraseña de la base de datos e iniciamos sesión en el sitio web Rutracker.org.

Ahora veamos qué pudo interceptar LanAgent, actualice los registros y veamos que el programa interceptó tanto la clave maestra como el nombre de usuario y la contraseña del sitio web de Rutracker. Incluso si intentamos ingresar datos a través del portapapeles, el programa también interceptará el contenido del búfer. Por otro lado, la contraseña de la base de datos es inútil si el atacante no tiene nada con qué usarla, es decir. La base de datos se encuentra en nuestra unidad flash. Pero en esta situación, los programas pueden copiar el contenido de una unidad flash o archivos a los que se ha accedido en segundo plano y, por lo tanto, sin que nos demos cuenta, la base de datos se puede copiar y todas las contraseñas se pueden abrir usando la clave maestra.

En general, podemos sacar la siguiente conclusión: la versión clásica es adecuada para no almacenar contraseñas en texto sin cifrar, pero cuando se utiliza software espía, no ayudará. ¡Y la versión profesional nos ayudará a eliminar esta brecha!

1) Rusifiquemos el programa para un trabajo más conveniente ( www. mantener. información \ Traducciones \ ruso\2.28\descomprimir en la carpeta con el programa\Vista \ Cambiar Idioma \ ruso)

2) Crear una nueva base de datos ( Archivo \ Nuevo \ Especificar la ruta y el nombre \ Establecer la contraseña principal)

3) Transfiramos datos de la base de datos anterior para no ingresar todo manualmente ( Archivo\Importar\MantenerPass 1. incógnita\ Especifique la ruta a la base de datos anterior \ Aceptar \ Ingrese la contraseña para la base de datos \ Nuevos identificadores)

Ahora veamos las novedades e interesantes de esta versión. No consideraré todas las novedades, llevará mucho tiempo, pero me centraré en las más interesantes, en mi opinión:

1) Ingresar la contraseña principal en modo protegido, lo que le permite bloquear el funcionamiento del Key logger al ingresar la contraseña principal ( Herramientas\Configuración\Seguridad\Ingresar la contraseña principal en modo protegido)

2) El generador de contraseñas crea 30 contraseñas a la vez, según la complejidad seleccionada. Entre los que podrás elegir, en tu opinión, el más difícil.

3) El idioma de marcación automática es más fácil de usar que en la versión clásica. No hablé de eso en la revisión de la versión clásica, ¡así que veamos cómo puede ayudar!

De forma predeterminada, la siguiente secuencia de comandos se activa durante la entrada automática. Ingrese inicio de sesión, TAB, contraseña y ENTER en el campo activo. Esta secuencia se puede ver si abrir entrada\Marcación automática\Usar la siguiente secuencia. Y esta opción es adecuada en la mayoría de los casos, ya que se acerca a la entrada de rutracker.

Sin embargo, no es adecuado para iniciar sesión en el correo a través del sitio web www.mail.ru. Dado que mi cuadro de prueba no está en mail.ru, sino en bk.ru, puedo ingresar un algoritmo de entrada individual para este sitio (NOMBRE DE USUARIO) (TAB) (CONTRASEÑA) (TAB) (ABAJO) (ABAJO) (ABAJO) (TAB) (ENTRAR).

La lista de comandos se da aquí, también hay ayuda, aunque está en inglés, puedes descifrarla si lo deseas. Por mi propia experiencia, recomendaría a veces usar el comando (RETRASO 1000), este es el comando de retraso entre comandos. Simplemente sucede que con Internet lento, el navegador no tiene tiempo para aceptar la secuencia de comandos, por lo que necesita tiempo para pensar, en esta situación este comando ayudará (5000 - 5 segundos de retraso).

4) Doble complejidad al escribir: con este método, el programa no ingresa datos explícitamente, toma parte del nombre de usuario y la contraseña del portapapeles y parte en símbolos.

¡Ahora comprobemos si LanAgent puede revelar nuestras contraseñas! Como puede ver, no se extrajo nada y, por lo tanto, el programa funcionó perfectamente y ahora sus contraseñas están protegidas al máximo.

¿Es posible hackear KeePass de alguna manera y filtrar contraseñas?

Si alguien no sabe qué es KeePass, en resumen, es un programa de administración de contraseñas que le permite almacenar una contraseña maestra recordándola. Puede leer más sobre los administradores de contraseñas en nuestro sitio web.

Hasta hace poco, piratear KeePass era imposible, pero recientemente un tal Denis Andzakovic publicó en línea una utilidad gratuita KeeFarce, que permite a un atacante robar contraseñas de un popular administrador de contraseñas.

Puede descargar KeeFarce de forma gratuita utilizando este enlace directo.

Hackear KeePass usando KeeFarce

Para piratear el administrador de contraseñas KeePass y filtrar contraseñas, debe estar abierto, es decir. para que el usuario que inicia sesión con la contraseña maestra no cierre el programa durante un tiempo.

Usar KeeFarce es muy simple. Simplemente copie los siguientes archivos a la carpeta KeePass:

  • BootstrapDLL.dll
  • KeeFarceDLL.dll
  • Microsoft.Diagnostic.Runtime.dll

Y ejecute el ejecutable KeeFarce.exe


Después del lanzamiento, el programa inyecta KeePass en el proceso en ejecución. Luego, la utilidad exporta todas las contraseñas a un archivo csv en la carpeta appdata.

Cómo protegerse del hackeo de KeePass

En primer lugar, revise su computadora en busca de troyanos (), ya que este esquema se puede implementar si un atacante tiene acceso remoto a su computadora o tiene acceso físico mientras deja abierto el administrador de contraseñas y deja la computadora por un tiempo.

En segundo lugar y lo más importante, no dejes abierto tu administrador de contraseñas durante mucho tiempo. Entramos en el programa, sacamos el nombre de usuario y la contraseña requeridos, iniciamos sesión en el sitio e inmediatamente cerramos el administrador. Puede leer más sobre cómo configurar KeePass correctamente en el artículo ““. Por cierto, allí hablé sobre esta amenaza y aconsejé reducir el tiempo que el programa se cierra automáticamente cuando está inactivo, incluso antes de que apareciera esta utilidad.

¿Qué pasa con otros administradores de contraseñas?

Esta vulnerabilidad (no esta utilidad en particular) también puede usarse para robar contraseñas de otros programas de almacenamiento de contraseñas. Creo que pronto habrá bastantes herramientas similares, tanto individuales como integradas en varios programas maliciosos.

¿Deberíamos dejar de utilizar administradores de contraseñas?

Depende de usted decidir. Personalmente creo que si usas KeePass correctamente y tienes una buena higiene informática no debería haber ningún problema.

  • Tutorial

El otro día necesitaba implementar el descifrado de la base de datos KeePass. Me sorprendió que no existiera un solo documento o artículo con información completa sobre el algoritmo para descifrar archivos .kdb y .kdbx, teniendo en cuenta todos los matices. Esto me impulsó a escribir este artículo.


Actualmente existen 2 versiones de KeePass:

  • KeePass 1.x (genera archivos .kdb);
  • KeePass 2.x (genera archivos .kdbx).

La estructura del archivo de base de datos KeePass (.kdb, .kdbx) consta de 3 partes:

  • Firma (no cifrada);
  • Encabezado (no cifrado);
  • Datos (cifrados).

Descifrando la base de datos KeePass

Secuencia de acciones:
  1. Lectura de la firma de la base de datos.
  2. Leyendo el encabezado de la base de datos.
  3. Generamos una clave maestra.
  4. Descifrando la base de datos.
  5. Comprobamos la integridad de los datos.
  6. Si el archivo ha sido comprimido, descomprímalo.
  7. Descifrando contraseñas.

Los puntos 5, 6 y 7 se aplican únicamente a archivos .kdbx!

Firma
Firma base (4 bytes)

La primera firma es la misma para los archivos .kdb y .kdbx. Dice que este archivo es una base de datos KeePass:

  • 0x9AA2D903
VersiónFirma (4 bytes)

La segunda firma indica la versión de KeePass y, por lo tanto, es diferente para los archivos .kdb y .kdbx:

  • 0xB54BFB65 - KeePass 1.x (archivo .kdb).
  • 0xB54BFB66 - Versión preliminar de KeePass 2.x (archivo .kdbx).
  • 0xB54BFB67 - KeePass 2.x posterior al lanzamiento (archivo.kdbx).
Versión de archivo (4 bytes)

La tercera firma sólo está disponible para archivos .kdbx y contiene la versión del archivo. Para archivos .kdb, esta información está contenida en el encabezado de la base de datos.


Así, en KeePass 1.x la longitud de la firma es de 8 bytes, y en KeePass 2.x es de 12 bytes..

Título

Después de la firma de la base de datos, comienza el encabezado.

Encabezado KeePass 1.x

El encabezado del archivo .kdb consta de los siguientes campos:

  1. Banderas (4 bytes): este campo indica qué tipos de cifrado se utilizaron al crear el archivo:
    • 0x01-SHA256;
    • 0x02-AES256;
    • 0x04-ARC4;
    • 0x08 - Dos peces.
  2. Versión (4 bytes): versión del archivo.
  3. Master Seed (16 bytes): se utiliza para crear una clave maestra.
  4. Cifrado IV (16 bytes): utilizado para descifrar datos.
  5. Número de grupos (4 bytes): el número total de grupos en la base de datos.
  6. Número de entradas (4 bytes): el número total de entradas en la base de datos.
  7. Content Hash (32 bytes): hash de los datos descifrados.
  8. Transform Seed (32 bytes): se utiliza para crear una clave maestra.
  9. Transformar rondas (4 bytes): se utiliza para crear una clave maestra.
Encabezado KeePass 2.x

En los archivos .kdbx, cada campo de encabezado consta de 3 partes:

  1. ID de campo (1 byte): valores posibles de 0 a 10.
  2. Longitud de los datos (2 bytes).
  3. Datos ([longitud de datos] bytes)

El encabezado del archivo .kdbx consta de los siguientes campos:

  • ID=0x01 Comentario: Este campo puede estar presente en el encabezado, pero no estaba presente en mi base de datos.
  • ID=0x02 Cipher ID: UUID que indica el método de cifrado utilizado (por ejemplo, para AES 256 UUID = ).
  • ID=0x03 Banderas de compresión: ID del algoritmo utilizado para comprimir la base de datos:
    • 0x00: Ninguno;
    • 0x01: GZip.
  • ID=0x04 Master Seed: se utiliza para crear una clave maestra.
  • ID=0x05 Transform Seed: se utiliza para crear una clave maestra.
  • ID=0x06 Transformar rondas: se utiliza para crear una clave maestra.
  • ID=0x07 Cifrado IV: utilizado para descifrar datos.
  • ID=0x08 Clave de transmisión protegida: se utiliza para descifrar contraseñas.
  • ID=0x09 Bytes de inicio de secuencia: primeros 32 bytes de la base de datos descifrada. Se utilizan para verificar la integridad de los datos descifrados y la exactitud de la clave maestra. Estos 32 bytes se generan aleatoriamente cada vez que se realizan cambios en el archivo.
  • ID=0x0A ID de flujo aleatorio interno: ID del algoritmo utilizado para descifrar contraseñas:
    • 0x00: Ninguno;
    • 0x01:ARC4;
    • 0x02: Salsa20.
  • ID=0x00 Fin del encabezado: el último campo del encabezado de la base de datos, después del cual comienza la base de datos.
Generación de clave maestra

La generación de la clave maestra se produce en 2 etapas:

  1. Generación de claves compuestas;
  2. Generación de una clave maestra basada en una clave compuesta.
1. Generación de claves compuestas

El algoritmo hash SHA256 se utiliza para generar una clave compuesta. Las siguientes tablas proporcionan un pseudocódigo para generar una clave compuesta según la versión de KeePass que se utiliza y qué entrada se requiere para descifrar la base de datos (solo contraseña, solo archivo de clave o ambos):


KeepPass 1.x



KeepPass 2.x



Tenga en cuenta que si se necesitan varias entidades para descifrar una base de datos (por ejemplo, una contraseña y un archivo de clave), primero debe obtener un hash de cada entidad y luego conectarlas (concat) y tomar el hash de la base de datos. secuencia combinada.

2. Generar una clave maestra basada en una clave compuesta
  1. Necesito cifrar la clave compuesta obtenida anteriormente utilizando el algoritmo AES-256-ECB.
    • Debes usar la semilla de transformación del encabezado como clave.
    • Este cifrado debe realizarse varias veces en Transform Rounds (desde el encabezado).
  2. Usando SHA256 obtenemos el hash de la clave compuesta cifrada.
  3. Conectamos la Master Seed del encabezado con el hash resultante.
  4. Usando SHA256 obtenemos el hash de la secuencia concatenada - ¡Ésta es nuestra llave maestra!

Pseudocódigo

void GenerateMasterKey() ( //cifrar la clave compuesta TransformRounds veces for(int i = 0; i< TransformRounds; i++) { result = encrypt_AES_ECB(TransformSeed, composite_key); composite_key = result; }

//obtiene el hash de la clave compuesta cifrada hash = sha256(composite_key); // fusiona el hash resultante con el campo MasterSeed del encabezado key = concat(MasterSeed, hash); //obtiene el hash de la secuencia combinada arriba master_key = sha256(key);

KeePass 1.x descifrado de datos

Inmediatamente después del encabezado, comienza la base de datos cifrada. El algoritmo de descifrado es el siguiente:

  1. El resto del archivo descifrar
  2. Usando SHA256 obtenemos un hash de los datos descifrados ( no tenemos en cuenta los bytes del párrafo anterior).
  3. Comprobamos que el hash resultante coincida con el campo Content Hash del encabezado:
    • Si el hash coincide, ¡hemos descifrado exitosamente nuestra base de datos! Puede guardar los datos descifrados como un archivo .xml y asegurarse de que todos los inicios de sesión y contraseñas estén descifrados correctamente.
    • Si el hash no coincide, significa que la contraseña o el archivo de clave se proporcionaron incorrectamente o que los datos estaban dañados.

Pseudocódigo

bool DecryptKeePass1x() ( //determina la longitud de la base de datos cifrada //(tamaño del archivo - tamaño de la firma - tamaño del encabezado) db_len = tamaño_archivo - tamaño_firma - tamaño_encabezado;

//descifrar los datos decrypted_data = decrypt_AES_256_CBC(master_key, EncryptionIV, encrypted_data); //averigüe el número de bytes “extra” extra = decrypted_data; //obtiene el hash de los datos (¡excluyendo bytes adicionales!) content_hash = sha256(decrypted_data[:(db_len - extra)]); //comprueba que el hash recibido coincida con el campo ContentHash del encabezado si (ContentHash == content_hash) devuelve verdadero; de lo contrario devolverá falso;

Descifrado de datos KeePass 2.x

Inmediatamente después del campo Fin del encabezado del encabezado, comienza la base de datos cifrada. El algoritmo de descifrado es el siguiente:

  1. El resto del archivo descifrar utilizando el algoritmo AES-256-CBC.
    • Usamos la clave maestra generada anteriormente como clave.
    • Usamos Encryption IV del encabezado como vector de inicialización.
  2. Los últimos bytes de la base de datos descifrada son redundantes: son varios bytes idénticos al final del archivo (relleno). Para eliminar su influencia, debe leer el último byte de la base de datos descifrada; esta es la cantidad de bytes "extra" que no es necesario tener en cuenta en el futuro.
  3. Comprobamos que los primeros 32 bytes de la base de datos descifrada coincidan con el campo Stream Start Bytes del encabezado:
    • si los datos coinciden, entonces hemos generado la clave maestra correcta,
    • Si los datos no coinciden, significa que se proporcionó una contraseña, un archivo de clave o un WUA incorrectos, o que los datos estaban dañados.
  4. Si el paso anterior se completó con éxito, descarte los primeros 32 bytes. Verifique el campo Banderas de compresión del encabezado. Si se utilizó la compresión de archivos GZip, descomprima los datos.
  5. Comencemos a verificar la integridad de los datos. Los datos se dividen en bloques, el tamaño máximo de bloque es 1024*1024. Cada bloque de datos comienza con un encabezado. La estructura del encabezado es la siguiente:
    • ID de bloque (4 bytes): número de bloque a partir de 0;
    • Hash de datos de bloque (32 bytes);
    • Tamaño de bloque (4 bytes).
  6. Por tanto, el procedimiento es el siguiente:
    • Lea el encabezado del bloque.
    • Leemos los datos del bloque.
    • Usando SHA256 obtenemos un hash de los datos del bloque.
    • Comprobamos que el hash coincida con el hash del encabezado.
  7. Realizamos la secuencia de acciones del párrafo anterior para cada bloque de datos. Si los datos de todos los bloques son seguros, cortamos todos los encabezados de los bloques y la secuencia resultante es la base de datos descifrada.
  8. ATENCIÓN: Incluso en un archivo .kdbx descifrado, las contraseñas pueden estar cifradas.
  9. Guardamos los datos descifrados y sin cabeza como un archivo .xml.
  10. Encontramos en él todos los nodos con el nombre “Valor”, el atributo “Protegido”, el valor de este atributo “Verdadero” y tomamos los valores de estos nodos. Estas siguen siendo contraseñas cifradas.
  11. Decodificamos todas las contraseñas cifradas utilizando el algoritmo de codificación base64.
  12. En el campo del encabezado Inner Random Stream ID, observamos qué algoritmo se utilizó para cifrar las contraseñas. En mi caso fue Salsa20.
  13. Generamos una secuencia pseudoaleatoria de 64 bytes usando el algoritmo Salsa20:
    • Como clave, utilizamos el hash del campo Clave de transmisión protegida del encabezado, obtenido mediante SHA256.
    • Usamos la secuencia constante de 8 bytes 0xE830094B97205D2A como vector de inicialización.
  14. IMPORTANTE: Usando esta secuencia de 64 bytes puedes descifrar exactamente 64 caracteres en orden de contraseñas decodificadas concatenadas juntas. Si esto no es suficiente para descifrar todas las contraseñas, deberá generar la siguiente secuencia pseudoaleatoria y continuar descifrando contraseñas, etc. hasta el final.
  15. Para obtener la contraseña final, necesita XOR la ​​contraseña decodificada usando base64decode con la secuencia pseudoaleatoria obtenida en el párrafo anterior (la secuencia de acciones se presenta más claramente en el pseudocódigo a continuación).
  16. MUY IMPORTANTE: ¡Las contraseñas deben descifrarse en orden! Exactamente en la secuencia en la que se presentan en el archivo xml.
  17. Encontramos en el archivo xml todos los nodos con el nombre “Valor”, el atributo “Protegido”, el valor de este atributo “Verdadero”:
    • Reemplace el valor del atributo con "Falso".
    • Reemplazamos el valor del nodo con la contraseña descifrada.
  18. ¡Y recién ahora tenemos una base de datos KeePass 2.x completamente descifrada! ¡Hurra! =)

Pseudocódigo

bool DecryptKeePass2x() ( //determina la longitud de la base de datos cifrada //(tamaño del archivo - tamaño de la firma - tamaño del encabezado) db_len = tamaño_archivo - tamaño_firma - tamaño_encabezado;

//descifrar los datos decrypted_data = decrypt_AES_256_CBC(master_key, EncryptionIV, encrypted_data); //averigüe el número de bytes “extra” extra = decrypted_data; db_len -= extra; //comprobar que los primeros 32 bytes de la base de datos descifrada //coincidan con el campo de encabezado StreamStartBytes if (StreamStartBytes != decrypted_data) return false; //descarta estos 32 bytes db_len -= 32;< len(decoded_pass); i++) { decoded_pass[i] = decoded_pass[i] ^ key_stream; stream_pointer++; //если 64 байтной псевдослучайной последовательности не хватило, //генерируем еще одну последовательность if (stream_pointer >datos_descifrados += 32; //verifique el campo CompressionFlag del encabezado //si el archivo fue comprimido, descomprímalo if (CompressionFlag == 1) unzip(decrypted_data);"; //заменяем зашифрованный пароль дешифрованным node.value = decoded_pass; } return true; !}


//comprobar la integridad de los datos while (db_len > (BlockHeaderSize)) ( //leer el encabezado de la base de datos block_data = decrypted_data; decrypted_data += BlockHeaderSize; db_len -= BlockHeaderSize; if (block_data.blockDataSize == 0) ( break; ) //obtener hash de datos del bloque hash = sha256(decrypted_data); //comprobar que el hash recibido coincida con el hash del encabezado if(block_data.blockDataHash == hash) ( pure_data += decrypted_data; decrypted_data += block_data.blockDataSize; db_len - = block_data.blockDataSize ; ) else ( return false; ) ) //guarda los datos descifrados y sin cabeza como un archivo xml xml = pure_data.ToXml(); //obtiene el hash del campo ProtectedStreamKey del encabezado key = sha256(ProtectedStreamKey); //inicializa el algoritmo Salsa20 IV_SALSA = 0xE830094B97205D2A; salsa.setKey(clave); salsa.setIv(IV_SALSA); puntero_corriente = 0; key_stream = salsa.generateKeyStream(); //descifrar contraseñas while(true) ( ​​//busca el siguiente nodo en orden con el nombre "Valor", //atributo "Protegido", valor del atributo "Verdadero" nodo = xml.FindNextElement("Valor", "Protegido ", "True" ); if (node ​​​​== NULL) ( break; ) //tomar el valor del nodo y decodificarlo usando el algoritmo base64decode decoded_pass = base64decode(node.value); //descifrar la contraseña usando un pseudo -secuencia aleatoria key_stream para (int i = 0; i);

= 64) ( key_stream = salsa.generateKeyStream(); stream_pointer = 0; ) ) //reemplaza el valor del atributo "Protegido" con "Falso" node.attribute.value = "False

  • Eso es básicamente todo lo que quería decirte. Espero que esta guía le salve a alguien de dolores de cabeza innecesarios y sea educativa e informativa =)
  • Etiquetas:
  • criptografía
  • mantener
aes-256