Sei sulla pagina 1di 4

Omar Balbuena

ESTNDAR DE CIFRADO AVANZADO (AES)


1. Introduccin
El Estndar de Cifrado Avanzado conocido tambin como AES es uno de los algoritmos ms seguros y utilizados hoy en da. En 1998 el NIST (Instituto Nacional de Estndares y Tecnologa) de los Estados Unidos selecciono 15 algoritmos candidatos para AES los cuales fueron previamente sometidos a un anlisis por la Comunidad Internacional Criptogrfica y por la Agencia Nacional de Seguridad (NSA) de los estados unidos, en dnde se eligieron 5 algoritmos los cuales fueron sometidos a un anlisis ms exhaustivo. En el ao 2000 algoritmo seleccionado para AES fue el algoritmo desarrollado por Joan Daemen y Vincent Rijmen llamado Rijndael el cual se basa en varias sustituciones, permutaciones y transformaciones lineales, ejecutadas en bloques de datos de 128bits. Estas operaciones se repiten varias veces, llamadas "rondas". En cada ronda, un nico roundkey se calcula del key de encriptacin, y es incorporado en los clculos. Basado en esta estructura de bloque de AES, el cambio de un solo bit, ya sea en el key, o en los bloques de texto simple y claro, resulta en un bloque de texto encriptado completamente diferente. El algoritmo implementado por AES es simtrico ya que utiliza el mismo key para encriptar y desencriptar a diferencia de los algoritmos asimtricos que utilizan un key distinto para encriptar y desencriptar. Adems encripta bloques de datos de 128bits, soportando key de 128, 192 y 256 bits.

Omar Balbuena

2. Implementacin
La clase AES es una clase en Java la cual funciona de igual forma para Android, se dise utilizando las clases de Cipher, SecretKeySpec.
AES -SEED: String +encrypt (byte []): byte [] +decrypt (byte []): byte []

La clase Cipher provee funcionalidades para encriptar y desencriptar, la cual tiene soporte de algoritmos tales como AES, DES y RSA. Esta clase no puede ser instanciada directamente por lo cual se debe hacer una llamada al mtodo de la misma llamado getInstance pasando como parmetro una cadena con la siguiente estructura: "algoritmo/modo/filtro" o solo algoritmo algoritmo (Obligatorio): es el nombre del algoritmo de cifrado a utilizar. Modo (Opcional): modo de funcionamiento del algoritmo. Filtro (Opcional): filtro utilizado al encriptar informacin.

Otra clase importante en el proceso tanto de encriptar y desencriptar datos es la clase SecretKeySpec la cual sirve para generar el key que se utilizar en las tareas de cifrado de datos.

2.1 Mtodo encrypt()


Para encriptar datos primero se crea una instancia del key, para esto se pasa como parmetro el algoritmo a utilizar y los bytes del key que se utilizar:
SecretKeySpec keySpec = new SecretKeySpec(SEED.getBytes(), "AES");

Posteriormente se una instancia del Cipher el cual nos permitir encriptar datos y posteriormente se inicializa en modo de encriptado de datos pasando como parmetro tambin el key generado anteriormente.
Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, keySpec);

Omar Balbuena

Por ltimo el mtodo doFinal de la clase Cipher encripta los datos segn el algoritmo especificado (en este caso se utiliz AES). Dicho mtodo recibe como parmetro un array de bytes de los datos a encriptar devolviendo de igual forma un array de bytes con los datos ya encriptados.
byte[] encrypted = cipher.doFinal(encrypt.getBytes());

2.2 Mtodo decrypt()


Para desencriptar datos todo el proceso es similar al del mtodo encrypt() ya que de igual forma como primer paso se crea una instancia del key y posteriormente se crea una instancia del Cipher con la nica diferencia que ahora se inicializa especificando que va desencriptar datos:
SecretKeySpec keySpec = new SecretKeySpec(SEED.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, keySpec);

Por ltimo se utiliza el mtodo doFinal el cual recibe un array de bytes con los datos encriptados y est devuelve un array de bytes con los datos originales.
byte[] decrypted = cipher.doFinal(encrypted);

Omar Balbuena

3. Referencias
Cdigo Fuente:
http://www.developer.com/ws/android/encrypting-with-android-cryptography-api.html http://www.code2learn.com/2011/06/encryption-and-decryption-of-data-using.html http://www.simplecodestuffs.com/encryption-and-decryption-of-data-using-aes-algorithm-in-java-2/

Teora
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf http://searchsecurity.techtarget.com/definition/Advanced-Encryption-Standard http://www.giac.org/cissp-papers/42.pdf

Potrebbero piacerti anche