Caesar Cipher decryption using a dictionary

Check out my code to decrypt a message encrypted with Caesar Cipher algorithm without knowing the key, just using a dictionary o words in English.


package security;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class CaesarCipher {

	/*
	 * Encrypt messages using Caesar Cipher algorithm and decrypt
	 * the message without the key, only using a dictionary of words
	 */

	public static String encryptMessage(String str, int k){
		String encrypted = "";
		char letter;
			for(int i = 0; i < str.length(); i++){
				letter = (char)((str.charAt(i)-'a' + k)%26 + 'a');
				encrypted= encrypted + letter;
			}
		return encrypted;
	}

	public static String decryptMessage(String str, ArrayList<String> words){
		String decryptLine = "", message = "";
		char letter;
		int k = 0, currentTimes = 0, max = 0;
		for(int j=0; j<26; j++){
			for(int i = 0; i < str.length(); i++){
				if(str.charAt(i)-'a' - j<0){
					letter = (char)(26 - Math.abs((str.charAt(i) - 'a' - j)) +'a');
				}else{
					letter = (char)((str.charAt(i)-'a' - j)%26 + 'a');
				}
				decryptLine= decryptLine + letter;
			}
			for(int i = 0; i < words.size(); i++){ 				if(decryptLine.contains(words.get(i))){ 					currentTimes++; 				}	 			} 			if(currentTimes > max){
				max = currentTimes;
				message = decryptLine;
				k = j;
			}
			currentTimes = 0;
			decryptLine = "";
		}
		System.out.println("Decrypted text  : " + message + "\nK is : " + k );
		return message;
	}

	private static void buildDictinary(ArrayList<String> words){
		try{
            BufferedReader buf = new BufferedReader(new FileReader("words.txt"));
            String lineJustFetched = null;
            while(true){
                lineJustFetched = buf.readLine();
                if(lineJustFetched == null){
                    break;
                }else{
                    words.add(lineJustFetched);
                }
            }
            buf.close();
        }catch(Exception e){
            e.printStackTrace();
        }
	}

	public static void main(String[] args) {
		ArrayList<String> words = new ArrayList<>();
		buildDictinary(words);
		String plainText = "amoderndaywarriormeanmeanstridetodaystomsawyermeanmeanpridethoughhismindisnotforrentdon7tputhimdownasarroganthisreserveaquietdefenseridingoutthedayseventstheriver";
		System.out.println("Text to encrypt : " + plainText);
		String encrypteText = encryptMessage(plainText, 10);
		System.out.println("Encrypted text  : " + encrypteText);
		decryptMessage(encrypteText, words);
	 }
}

GitHub repository: Caesar Cipher Decryption

Hazle un favor al mundo utilizando verificación en dos pasos

La importancia de mantener un password seguro es más importante que nunca. Los hackers están hambrientos por passwords, ya que a ellos les genera grandes sumas de dinero. En internet encontramos historias acerca del hackeo de cuentas. Lo cual ocasión que miles de cuentas sean vulnerables en ser accedidas por criminales informáticos. Con una autenticación de dos pasos (2FA), obtenemos una capa extra de seguridad que los hackers no pueden fácilmente romper, puesto que se necesita más información además del username y el password. Todos lo usamos constantemente pero no damos cuenta. Para sacar dinero del cajero se necesita una verificación de dos que son tu tarjeta física y tu numero pin.

Image result for 2fa meme

¿En que es usado 2FA?

2FA es un método de verificación de identidad que añade un segundo factor de autenticación además del password de tu cuenta, por ejemplo:

  • Algo que conoces – un numero pin, password o patrón.
  • Algo que tienes – una tarjeta de crédito, celular o un token de seguridad.
  • Algo que tú eres – huellas biométricas, ojos u ojos.

¿Qué tan seguro es 2FA?

Nada es 100% seguro, tu cuenta todavía puede ser vulnerable en ser hackeada por métodos de recuperar password u otros métodos. Para resetear el password usualmente funciona por vía email y puede completamente saltarse el 2FA. Esto te puede dejar vulnerable si el hacker ha ganado acceso a tu cuenta de email. Estate seguro de monitorear tu cuenta de email por correos electrónicos pidiendo cambios de password.

Otras medidas de seguridad extras de 2FA

  • No utilices el mismo password en varias cuentas.
  • Asegúrate de que tus password sean mínimo de 8 caracteres, utilicen minúsculas y mayúscula, así como caracteres especiales y números.
  • No utilices palabras, fechas de cumpleaños, direcciones o números de teléfono en tus passwords. Estos pueden ser fácilmente crackeables por hackers.

Referencias adicionales

https://www.google.com/landing/2step/

https://twofactorauth.org/

 

 

¿Qué tan seguro es AES-256?

AES-256 es un algoritmo de encriptación utilizado para prevenir acceso no deseado a tu información. ¿Pero la pregunta es qué tan segura es la encriptación de AES 256bit?

Cuando nos referimos a encriptación AES-256bit, nos referimos a la llave que es generado cuando encriptamos nuestros archivos. La información es encriptada por el software que genera la llave que usas 256bit; si encuentras la llave puedes desencriptar la información. La parte matemática detrás de todo esto de AES-256 es bastante sencilla, pero es muy importante entenderla ya que se relaciona bastante con el mundo real.

La parte matemática aburrida

Una encriptación de 256 es lo equivalente a 2^256 posibilidades de la llave. Es decir 2^32 es cerca de 4.3 billones, y sigue incrementando exponencialmente después del 32. ¿Qué significa esto? Simplemente digamos hipotéticamente que todas las super computadoras del mundo haciendo un brute force attack se deciden a unirse y hacer la tarea de desencriptar tu llave de AES-256 para que puedan obtener tu información. Este conjunto de computadoras puede buscar 2^50 llaves por segundo, el año tiene aproximadamente 31,557,600 segundos. Esto significa que usando un billón de supercomputadoras pueden buscar en 2^75 llaves por año, a este paso nos tomaría 2^34 años (la edad del universo) en buscar menos del .01% de las posibles combinaciones de la llave. Esto significa que nadie se molestará en desencriptar tu información.

¿Entonces 448bit es mejor?

¿Por qué utilizamos AES 256 bit en lugar 448? La respuesta es que más no significa que sea mejor. 256 bit ha sido probada que es imposible romperla en esta era, entonces si nos movemos 448 bit no cambiaría las probabilidades realísticamente de que alguien pudiera hackear nuestra información. Y más importante 256 bit ha sido probada en software testing mucho más que las demás configuraciones de encriptación de AES. Lo cual significa que muchos han intentado romperla y esta sigue prevaleciendo como la mejor solución en cuanto encriptación de datos. Aunque 448bit suena mejor ya que es número más grande, en realidad no ha sido probada lo suficiente como 256, y yo me arriesgaría a moverme 448 simplemente porque suena mejor.

¿Entonces qué significa todo esto?

Significa que eligiendo AES-256 bit para encriptar tu información, puedes estar seguro de que eres el único que tendrá acceso.

Fuentes adicionales:

Generador de llaves AES: https://asecuritysite.com/encryption/keygen

Información adicional: http://searchsecurity.techtarget.com/definition/Advanced-Encryption-Standard

 

4084d7e2c0afcf393f8b22a436c706a5e619ad46… también conocido como criptografía

Uno de los principales elementos de la seguridad computacional es la criptografía, la cual precede a la computación por unos cuantos milenios.

Esencialmente, la criptografía se usa para asegurar comunicaciones para evitar que terceros no autorizados sean capaces de entender la información encriptada.

La criptografía moderna consta de varios elementos: funciones hash seguras, sal, llaves.

¿Qué es una función hash segura?

Una función hash toma elementos de un conjunto a otro. Es decir, tomamos un valor h y obtenemos su valor hash f(h). Para ser considerada segura, debe de ser difícil (en el sentido de costo computacional) encontrar h si tenemos f(h). Esto hace que la información “hasheada” sea muy difícil de descifrar por alguien no autorizado.

Aunque hay muchas funciones que antes se usaban, debilidades se han encontrado en muchas de ellas (ejemplo).

Incluso con una función de hash fuerte, esto todavía no protege contra ataques de diccionarios o tablas arcoíris. Esto nos lleva al siguiente aspecto.

Sal

Sal es un valor aleatorio que se agrega al hash para fortalecer la seguridad de esta misma. Esto ayuda contra los ataques previamente mencionados, asumiendo por supuesto que el valor es lo suficientemente aleatorio.

Con todo, surge la pregunta obvia ¿Cómo recuperamos la información una vez que está encriptada?

Llaves

Las llaves son lo que permite a los usuarios recuperar la información que esta encriptada. Existen varios modelos usados para lograr esto: llaves simétricas y asimétricas.

Llaves simétricas consisten en que aquellos que están autorizados para leer un mensaje encriptado tienen la misma llave para recuperar el mensaje. Esto tiene como principales complicaciones que la llave representa un riesgo en caso de pérdida o robo, ya que esto compromete todo el sistema de encriptación.

Con llaves asimétricas, cada usuario tiene 2 llaves, una llave pública distribuida y una llave privada que es secreta. Con la llave pública se encripta un mensaje y sólo con la llave privada correspondiente se puede recuperar el mensaje.

Hola WIFI me llamo SSID

La mayoría de los usuarios eligen el nombre de su red wifi sin pensarlo demasiado, únicamente lo eligen de forma que sea fácil para ellos recordarlo.

Mucha gente no sabe que el nombre de la red también conocido como Service Set Identifier o SSID expone un potencial riesgo de seguridad. Así que puede ser un riesgo el nombre de la red, pero algunos SSIDs son más seguros que otros, les daré a conocer los dos y don’ts cuando de seleccionas el SSID de tu red.

wifi security

Que es lo que hace el SSID tan importante te estarás preguntando. Los hackers necesitan obtener piezas de información incluyendo el SSID para romper el password de las redes WPA/WPA2. Ellos tienen tablas pre configuradas con esta información incluyendo nombres SSID comunes y los que están por default en los routers, por lo tanto, si estas utilizando algunos de estos nombres felicidades ya que has hecho el trabajo del hacker mucho más sencillo y tu red es un objetivo para ellos.

  • Do cambia el SSID de fábrica por otro nombre.
  • Don’t elijas un nombre del los más comunes SSIDs. Esta lista es bastante amplia y te darás cuenta de muchos nombres por default de dlink, Linksys, 2wire, netwear, etc. Así que asegúrate de cambiarlo.
  • Don’t utilices tu primer nombre o apellido, dirección, numero de teléfono o cualquier cosa personal. Difundir el nombre de la red identifica al dueño de la red y esto puede ayudar al hacker en crackear el su password.
  • Do se único al momento de seleccionar un SSID, pero demasiada creatividad puede generar mucha atención a los hackers. Con un máximo de 32 carácteres puedes tener amplia creatividad, pero también piensa en un nombre que sirva de camuflaje, para que el nombre de tu red no sobresalga de las redes cercanas.
  • Do sigue estas recomendaciones, aunque el nombre de tu red este oculto. Redes ocultas pueden ser fácilmente descubiertas y no son inmunes.

Lo más importante de todo esto es siempre cambiar el SSID del que esta por default. Teniendo un SSID único no sólo hace el trabajo del hacker mucho más difícil, sino que puede alertar al hacker si el SSID fue cambiado muy probablemente otras configuraciones lo fueron también, incluyendo el password. Con esto persuades al hacker en buscar una red más fácil de romper.

Referencias adicionales

Información sobre redes de tu localidad: https://www.wigle.net/

SSIDs comunes: https://www.wigle.net/stats#ssidstats