elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Cifrar un archivo añadiendo clave envuelta en un único archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cifrar un archivo añadiendo clave envuelta en un único archivo  (Leído 5,733 veces)
lagranladilla

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Cifrar un archivo añadiendo clave envuelta en un único archivo
« en: 25 Marzo 2015, 13:16 pm »

Hola! (Link StackOverflow https://stackoverflow.com/questions/29239854/encrypt-a-file-appending-wrapped-key-in-unique-file)
La idea de lo que estoy intentando hacer es lo siguiente:
Tenemos:
 - Archivo de N bytes
- Clave AES de 256 bytes
- Pareja de claves RSA.

La idea es:
 1 - cifrar el archivo en bloques de 1024 Bytes con la clave AES
 2 - cifrar la clave AES con la clave publica RSA
 3 - Añadir lla clave cifrada (wrapped key) al principio del archivo

Ahora tenemos un archivo cifrado en que los primeros 256 Bytes son la llave cifrada y el resto del archivo esta cifrado en bloques de 1024 bhytes.

Para descifrar:
 1 - Recuperar los primeros 256 bytes.
 2 - Desencriptarlos usando la llave privada. De este modo hemos recuperado la llave AES que tenemos que usar para descifrar el resto del archivo

Y ahora la pregunta!!!

Como puedo descifrar el resto del archivo, en bloques de 1024, sin tener en cuenta los primeros 256 bytes?????



El codigo de como lo hago esta en el stackOverflow... Estoy muy confuso y no lo consigooooo!!!! :'(
https://stackoverflow.com/questions/29239854/encrypt-a-file-appending-wrapped-key-in-unique-file

LA pregunta no es una cuestion de cifrado, la cuestion es una cuestion de como acceder a un archivo binario en bloques i a con un offset de n bytes...

Gracias de antemano!


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Cifrar un archivo añadiendo clave envuelta en un único archivo
« Respuesta #1 en: 25 Marzo 2015, 13:30 pm »

espera XD vas a cifrar el archivo y luego a cifrar la llave para meterlo todo junto?

es como agarrar una caja y meter un documento, luego agarrar una caja más grande y meter la caja con el documento mas la llave XD

para eso se supone que tienes RSA desde un principio la cosa es que si quieres hacer más seguridad no la tendrás porque si te rompen la llave rsa tienen la llave aes...

solo cifra con rsa y una clave lo suficientemente larga y listo, en ese aspecto rsa es más pesado que aes


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
lagranladilla

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Re: Cifrar un archivo añadiendo clave envuelta en un único archivo
« Respuesta #2 en: 25 Marzo 2015, 14:31 pm »

Tengo entendido que las claves RSA tienen una limitacion en cuanto a cantidad de bytes que la clave publica puede cifrar.

Y tengo entendido que la solucion a este problema era usar una wrapped key, en que se utiliza una llave AES para cifrar el archivo y que se envia el archivo cifrado mas la llave AES cifrada con la clave publica.

Entonces el receptor descifra la clave AES con su privada y asi descifrar el archivo...

Queria hacer eso pero en un unico archivo.

Cree que podria hacerlo unicamente con RSA??? Tengo problemas para cifrar con RSA archivos de gran tamaño :S

Gracias!
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Cifrar un archivo añadiendo clave envuelta en un único archivo
« Respuesta #3 en: 25 Marzo 2015, 15:14 pm »

sorry, se me lo que dije XD

tienes razón estaba hablando locuras... entendí lo que no era...


si, cifras aes, cifras el pass coon rsa y una clave lo suficientemente larga (las (claves rsa normalmente son 2048 bytes, pero son flexibles al largo deseado)

lo que quieres...

lees el archivo... no se de java pero según la documentación oficial
http://docs.oracle.com/javase/tutorial/essential/io/rafs.html

lees 256 bytes y luego vas de 1024 en 1024 (yo me imagino que el puntero queda en el byte siguiente al ultimo leído)
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Cifrar un archivo añadiendo clave envuelta en un único archivo
« Respuesta #4 en: 25 Marzo 2015, 17:03 pm »

Creo que ya solucionó su problema, viendo su comentario a la respuesta aceptada hace 1 hora:

Citar
Ok it works! Using the same FileInputStream of the first 256... A newbie error! thx! Maybe there are a better thing for do that?
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
lagranladilla

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Re: Cifrar un archivo añadiendo clave envuelta en un único archivo
« Respuesta #5 en: 26 Marzo 2015, 10:38 am »

En efecto.

El problema era que instanciava un nuevo fileinputstream en vez de usar el que ya havia leido los primeros 256 bytes >.<!!

Solved!
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Cifrar un archivo añadiendo clave envuelta en un único archivo
« Respuesta #6 en: 26 Marzo 2015, 12:29 pm »

Jaja suele pasar no te preocupes. No sé si podrías poner el código completo por si le sirve a alguien más en el futuro.

Un saludo.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
lagranladilla

Desconectado Desconectado

Mensajes: 39



Ver Perfil
Re: Cifrar un archivo añadiendo clave envuelta en un único archivo
« Respuesta #7 en: 26 Marzo 2015, 12:49 pm »

El codigo es el del stack Overflow, pero en el proyecto finalmente a quedado del siguiente modo:

Código
  1.  
  2.    public static void fileEncripWrapped(File in, File out, PublicKey pub, byte [] key) {
  3.  
  4.        try {
  5.            SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
  6.  
  7.            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  8.            cipher.init(Cipher.WRAP_MODE, pub);
  9.            byte[] encKey = cipher.wrap(keySpec);
  10.  
  11.            FileOutputStream osAppend  = new FileOutputStream(out);
  12.  
  13.            osAppend.write(encKey);
  14.            osAppend.close();
  15.  
  16.             cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
  17.            cipher.init(Cipher.ENCRYPT_MODE, keySpec);
  18.  
  19.            FileInputStream is = new FileInputStream(in);
  20.            CipherOutputStream os = new CipherOutputStream(new FileOutputStream(out, true), cipher);
  21.  
  22.            copy(is, os);
  23.  
  24.            is.close();
  25.            os.close();
  26.  
  27.        } catch (Exception ex) {
  28.            System.err.println("Ha succeït un error xifrant: " + ex);
  29.        }
  30.    }
  31.  
  32.    public static void fileUncryptWrapped(File in, File out, PrivateKey priv) {
  33.        try {
  34.  
  35.            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  36.            cipher.init(Cipher.UNWRAP_MODE, priv);
  37.  
  38.            InputStream is = new FileInputStream(in);
  39.            byte[] bufferKey = getFirstBytes(is, 256);
  40.  
  41.            Key ky = cipher.unwrap(bufferKey, "AES", Cipher.SECRET_KEY);
  42.  
  43.            cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
  44.            cipher.init(Cipher.DECRYPT_MODE, ky);
  45.  
  46.           CipherInputStream cIs = new CipherInputStream(is, cipher);
  47.           FileOutputStream os = new FileOutputStream(out);
  48.  
  49.           copy (cIs  , os);
  50.  
  51.           is.close();
  52.           cIs.close();
  53.           os.close();
  54.  
  55.        } catch (Exception ex) {
  56.            System.err.println("Ha succeït un error xifrant: " + ex);
  57.        }
  58.    }
  59.  

Y por otro lado :

Código
  1. /**
  2.      * Copy the bytes of input string to bytes in output string in blocks of 1024 bytes
  3.      * @param is - InputStream
  4.      * @param os - OutputStream
  5.      * @throws IOException
  6.      */
  7.    private static void copy(InputStream is, OutputStream os) throws IOException { //http://www.macs.hw.ac.uk/~ml355/lore/pkencryption.htm
  8.        int i;
  9.        byte[] b = new byte[1024];
  10.        while((i=is.read(b))!=-1) {
  11.          os.write(b, 0, i);
  12.        }
  13.    }
  14.  
  15.    /**
  16.      * Get the first n bytes of a binary file
  17.      * @param is - InoutStream
  18.      * @param size - Size do you want to take.
  19.      * @return
  20.      */
  21.    private static byte [] getFirstBytes (InputStream is, int size) {
  22.        byte [] bytes = new byte [size];
  23.        try {
  24.            if (is.read(bytes) != bytes.length) {
  25.                is.close();
  26.                throw new IllegalStateException("Too short file");
  27.            }
  28.        } catch (IOException ex) {
  29.            Logger.getLogger(Asimetric.class.getName()).log(Level.SEVERE, null, ex);
  30.        }
  31.        return bytes;
  32.    }
  33.  

Ojala sirva!
La idea no se si es buena. Incorporar en el mismo archivo la llave para descifrar... La verdad es que me gustaría profundizar en el tema, con el tiempo!   ;-)

Alomejor posteo en algún tiempo alguna mejora del codigo que tengo pensar de hacer para optimizar y reducir algoritmos.

Salut!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AES ¿Se puede hacer algo teniendo el archivo cifrado y el original sin cifrar?
Criptografía
joe9 6 9,093 Último mensaje 26 Junio 2012, 14:50 pm
por m0rf
¿Como asociar un único archivo? (No un tipo de archivo)
Windows
Eleкtro 0 1,932 Último mensaje 15 Septiembre 2012, 21:56 pm
por Eleкtro
cifrar campo numérico en un archivo de texto
Scripting
eolh652 4 3,281 Último mensaje 3 Septiembre 2013, 17:39 pm
por Almapa
Se puede cifrar una fotografia como archivo adjunto en e-mail?
Seguridad
GPL-16330650 1 2,544 Último mensaje 18 Noviembre 2014, 12:09 pm
por el-brujo
cifrar archivo y descifrar con clave
.NET (C#, VB.NET, ASP)
CAEL20 1 2,544 Último mensaje 27 Marzo 2018, 07:19 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines