E2EE Actividad3

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 14

1ENCRIPTACION DE EXTREMO A EXTREMO.

Julián David Del Rio Rivera.

Alexander de Jesús Narváez.


Marzo 2020.

Universidad Católica del Norte.


Medellín-Antioquia.
Criptografía.
Contenido
¿QUÉ ES LA ENCRIPTACION EXTREMO A EXTREMO?.............................................3
ACTIVIDAD PRACTICA........................................................................................................3
EVIDENCIAS..........................................................................................................................11
CONCLUSIONES...................................................................................................................13
LISTA DE REFERENCIAS.......................................................................................................14

Ilustración 1 E2EE...........................................................................................................................3
Ilustración 2.....................................................................................................................................4
Ilustración 3.....................................................................................................................................5
Ilustración 4.....................................................................................................................................8
Ilustración 5...................................................................................................................................11
Ilustración 6...................................................................................................................................12
Ilustración 7...................................................................................................................................12
¿QUÉ ES LA ENCRIPTACION EXTREMO A EXTREMO?

La encriptación extremo a extremo también conocida en ingles por su siglas E2EE End to End
Encription, es un concepto de comunicación segura donde la información digital (mensaje,
archivo) se codifica desde el momento en que se transmite del punto A hasta llegar al punto B,
haciéndolo ilegible y desencriptable si importar el número de saltos que realice durante su
proceso de transmisión.

Ilustración 1 E2EE

Lo interesante de este mecanismo radica en que si el usuario A requiere comunicarse con el


usuario B se hace una negociación de llaves públicas que es única entre A y B y en caso de que
hubiese un tercer integrante, usuario C, la negociación de llaves es diferente también entre A y C
y B y C haciendo de este mecanismo único y completamente seguro garantizando que el mensaje
solo pueda ser entregado y leído a su destinatario.

ACTIVIDAD PRACTICA.

Para la siguiente actividad se pretende configurar un socket server con comunicación TLS
usando Linux Centos como Sistema Operativo virtualizado mediante VirtualBox y PHP como
lenguaje de programación.
Una vez descargado el VirtualBox e instalado el Sistema Operativo, se procede con la instalación
del lenguaje de programación PHP, pero para es necesario contar con unos prerequisitos los
cuales se describen a continuación:

Paso 1

Instalación de repositorio EPEL:


# yum install epel-release yum-utils

Ilustración 2
Paso 2

Instalación de repositorio REMI:


# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Ilustración 3

Ya con los prerequisitos cumplidos, se procede con la instalacion del leguaje de programación
PHP

Paso 3

# yum install php php-common php-opcache php-mcrypt php-cli php-gd php-curl


Ilustración 4

Actualmente contamos con un entorno base, por lo cual procedemos a apagar la maquina virtual
para clonarla y de esta forma simular la comunicación entre usuario A y usuario B donde a
usuario A se le asigna la dirección IP 192.168.1.31 y al usuario B se le asigna la dirección IP
192.168.1.32

Ahora continuamos con la configuración de los certificados SSL/TLS en la maquina que


representa al usuario A, pero para este escenario los vamos a autofirmar nosotros mismos para lo
cual crearemos una llave RSA con una longitud e 2048.

# openssl genrsa -des3 -passout pass:x -out keypair.key 2048


Generating RSA private key, 2048 bit long modulus
..............................................................................
.................+++
..............................................................................
.....................+++
e is 65537 (0x10001)
# openssl rsa -passin pass:x -in keypair.key -out /home/ssl/private1.key
writing RSA key

# openssl req -new -key /home/ssl/private1.key -out /home/ssl/192.168.1.31.csr


You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CO
State or Province Name (full name) []:Caldas
Locality Name (eg, city) [Default City]:Manizales
Organization Name (eg, company) [Default Company Ltd]:Criptografia
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:criptografia.com
Email Address []:[email protected]

Please enter the following 'extra' attributes


to be sent with your certificate request
A challenge password []:
An optional company name []:}

Una vez contamos con la llave pública y la llave privada, procedemos a compartir la llave
pública con el usuario B:192.168.1.32

Ahora procedemos a configurar el servidor socket en la maquina que representa al usuario


A::192.168.1.31 que se encargara de estar abierto en espera de cualquier mensaje que llegue.

<?php

// Se define la dirección IP y el Puerto por el que va a escuchar las


peticiones.

$address = '192.168.1.31';
$port = 443;

//Se carga la llave privada y publica del certificado previamente creado y se


definen opciones de flujo/envoltura/contexto

$cert = '/home/ssl/192.168.1.31.cer';
$key = '/home/ssl/private.key';

$context = stream_context_create();

stream_context_set_option($context, 'ssl', 'local_cert', $cert);


stream_context_set_option($context, 'ssl', 'local_pk', $key);
stream_context_set_option($context, 'ssl', 'crypto_method',
STREAM_CRYPTO_METHOD_TLS_SERVER);

stream_context_set_option($context, 'ssl', 'allow_self_signed', true);


stream_context_set_option($context, 'ssl', 'verify_peer', false);
stream_context_set_option($context, 'ssl', 'verify_peer_name', false);

$server = stream_socket_server('tls://'.$address.':'.$port, $errno, $errstr,


STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context);

// Se muestra la hora del sistema

echo "PHP Socket Server started at " . $address . " " . $port . ", at ". date(
'Y-m-d H:i:s' ) ."\n";
// Se crea ciclo para mantener abierto y disponible el socket

while (true) {
/* Accept incoming requests and handle them as child processes */
$client = stream_socket_accept($server);

$ip = stream_socket_get_name( $client, true );

echo "New connection from " . $ip;

stream_set_blocking($client, true); // Se bloquea la conexion hasta que se


garantice la conexion SSL/TLS

// Se configura la encriptación en el flujo Los métodos válidos son:


//STREAM_CRYPTO_METHOD_SSLv2_CLIENT
//STREAM_CRYPTO_METHOD_SSLv3_CLIENT
//STREAM_CRYPTO_METHOD_SSLv23_CLIENT
//STREAM_CRYPTO_METHOD_TLS_CLIENT
//STREAM_CRYPTO_METHOD_SSLv2_SERVER
//STREAM_CRYPTO_METHOD_SSLv3_SERVER
//STREAM_CRYPTO_METHOD_SSLv23_SERVER
//STREAM_CRYPTO_METHOD_TLS_SERVER

stream_socket_enable_crypto($client, true,
STREAM_CRYPTO_METHOD_TLS_SERVER);

// Se realize la lectura y desencripción del mensaje


$input = fread($client, 1024);

// Se desbloquea la conexion
stream_set_blocking($client, false);

// Se hace tratamiento de los espacios en blanco


$output = preg_replace("[ \t\n\r]", "", $input) . "\0";

$new = $input;

// Se muestra la fecha, la IP y mensaje recibido


date_default_timezone_set('America/Bogota');
echo date( 'Y-m-d H:i:s' ) . " | " . $ip . ": \033[0;32m" . $input .
"\033[0m" . PHP_EOL;

fclose($client);
}

En la maquina que representa al usuario B::192.168.1.32 configuramos el cliente socket que se


encargara de enviar el mensaje al usuario A:192.168.1.31

<?php
//Definimos la IP, puerto y llave publica del usuario A a quien vamos a enviar
el mensaje

$host = '192.168.1.31';
$port = 443;
$timeout = 30;
$cert = '/home/socket/192.168.1.31.cer';

$context = stream_context_create(
[ 'ssl'=> [ 'local_cert'=> $cert, "crypto_method" =>
STREAM_CRYPTO_METHOD_TLS_CLIENT ] ]
);

//Se definen opciones de flujo/envoltura/context

stream_context_set_option($context, 'ssl', 'allow_self_signed', true);


stream_context_set_option($context, 'ssl', 'verify_peer', false);
stream_context_set_option($context, 'ssl', 'verify_peer_name', false);

//Se define conexion con el destino

if ($socket = stream_socket_client( 'tls://'.$host.':'.$port, $errno, $errstr,


30, STREAM_CLIENT_CONNECT, $context) ) {
$meta = stream_get_meta_data($socket);

//Se define elmensaje a enviar

$mensaje="Hola usuario A este es un saludo del usuario B";

//Se envía el mensaje

fwrite($socket, $mensaje."\n");

echo stream_socket_recvfrom($socket,8192);
fclose($socket);
} else {
echo "ERROR: $errno - $errstr\n";
}

EVIDENCIAS.

Se abre el socket en la maquina que representa al usuario A::192.168.1.31

Ilustración 5
Se envía el mensaje encriptado "Hola usuario A este es un saludo del usuario B" desde la
maquina que presenta al usuario B::192.168.1.32

Ilustración 6

El usuario usuario A puede leer el mensaje "Hola usuario A este es un saludo del usuario B"
enviado por el usuario B

Ilustración 7
CONCLUSIONES.

Como bien sabemos, la información es el activo mas importante en esta nueva era
llamada la era digital ya sea para una organización sin importar su tamaño o para una
persona natural y cada día son mas las personas que se suman a transaccionar a través de
canales virtuales, y estas transacciones viajan por un medio inseguro que es la Internet; es
por esta razón que cada vez son mas necesarios los controles que ayuden a proteger esta
información haciéndola ilegible durante su proceso de transmisión pero haciéndola
legible hasta el momento en que se garantice llegar a su destinatario.

De esta forma se protege la información ante personas inescrupulosas que buscan


mediante técnicas informáticas obtener acceso a información no autorizada.

Es así que se ratifica la importancia de los mecanismos de encriptación a la hora de hablar


de ciberseguridad.
LISTA DE REFERENCIAS.

[ CITATION www202 \l 9226 ]


[ CITATION www203 \l 9226 ]
[ CITATION htt20 \l 9226 ]
[ CITATION esw202 \l 9226 ]
[ CITATION lin20 \l 9226 ]
[ CITATION www204 \l 9226 ]

También podría gustarte