Uploaded by Diego

Proyecto de Criptografía

advertisement
UNIVERSIDAD DE TENANCINGO
UdeT
MATERIA:
Criptografía
DOCENTE:
Carlos Alejandro Guadarrama Romero
ALUMNO:
Diego Flores González
CUARTO SEMESTRE
Introducción
La seguridad en línea es un tema de creciente importancia en la era digital actual.
A medida que más servicios y aplicaciones migran a la web, la protección de los
datos personales y sensibles se ha convertido en una prioridad esencial para
desarrolladores y usuarios por igual. Una de las principales preocupaciones es la
seguridad de las contraseñas, que son la primera línea de defensa con el acceso
no autorizado a cuentas y sistemas.
En este contexto, la encriptación de contraseñas juega un papel crucial. La
encriptación es el proceso de transformar datos legibles en un formato codificado
que solo puede ser descifrado por aquellos que posen la clave adecuada. Entre los
diversos métodos de encriptación disponibles, el algoritmo SHA-512 se destaca por
su robustez y seguridad. SHA-512, que forma parte de la familia de algoritmos de
hash seguro (SHA, por sus siglas en inglés), genera un valor hash de 512 bits a
partir de una entrada de datos, ofreciendo una alta resistencia a los ataques de
fuerza bruta y colisiones
El proyecto que se presenta a continuación aborda la implementación de la
encriptación de contraseñas utilizando el método SHA-512 en una página web. El
objetivo principal es garantizar que las contraseñas de los usuarios se almacenan
de manera segura, minimizando el riesgo de comprometer información sensible.
Además, se exploran diversas estrategias de seguridad web para proteger la
integridad y confidencialidad de los datos en tránsito y en reposo.
A lo largo de este proyecto, se detallará el proceso de integración de SHA-512 en el
sistema de autenticación de la página, destacando las mejores practicas y
consideraciones técnicas necesarias para asegurar una implementación efectiva.
Se analizarán también otras medidas complementarias de seguridad, tales como el
uso de certificados SS/TLS para el cifrado de la comunicación, la implementación
de políticas de gestión de contraseñas robustas, y la protección contra ataques
comunes con el Cross-Site Scripting (XSS) y la inyección SQL
Planteamiento del problema
En el entorno digital actual, la seguridad de la información se ha convertido en un
desafío crítico para las organizaciones y los individuos. Con la creciente
dependencia de las aplicaciones web para realizar transacciones financieras,
manejar datos personales, y acceder a servicios esenciales, la protección de la
información sensible ha adquirido una importancia sin precedentes. Entre los
aspectos más críticos de la seguridad web se encuentra la protección de
contraseñas, que son la primera línea de defensa contra accesos no autorizados y
brechas de seguridad.
A pesar de los avances en tecnología, las contraseñas siguen siendo una de las
vulnerabilidades más explotadas por los atacantes cibernéticos. Las técnicas
comunes de ataque, como el phishing, la fuerza bruta, y los ataques de diccionario,
ponen en riesgo la integridad y confidencialidad de los sistemas. Además, la
reutilización de contraseñas y la creación de contraseñas débiles por parte de los
usuarios aumentan significativamente las posibilidades de una brecha de seguridad.
El problema principal que este proyecto busca abordar es la vulnerabilidad de las
contraseñas almacenadas y manejadas en una página web. Muchas aplicaciones
web no implementan medidas de seguridad adecuadas para encriptar y proteger las
contraseñas, lo que puede llevar a la exposición de información sensible en caso de
una violación de seguridad. La falta de encriptación robusta y prácticas de gestión
de contraseñas deficientes son factores clave que contribuyen a este problema.
El objetivo de este proyecto es desarrollar e implementar un sistema de encriptación
de contraseñas utilizando el algoritmo SHA-512, un método de hash seguro que
ofrece una alta resistencia a los ataques. SHA-512 transforma las contraseñas en
valores hash de 512 bits, haciendo que sea extremadamente difícil para los
atacantes revertir el proceso y obtener las contraseñas originales. Este enfoque,
combinado con otras medidas de seguridad, busca reducir significativamente el
riesgo de accesos no autorizados y proteger la información de los usuarios.
Además de la encriptación de contraseñas, este proyecto también explorará la
implementación de otras prácticas de seguridad esenciales, como el uso de
certificados SSL/TLS para proteger la comunicación entre el cliente y el servidor, y
la implementación de políticas de gestión de contraseñas que promuevan la
creación y almacenamiento de contraseñas seguras. Se evaluarán y aplicarán
medidas para proteger contra ataques comunes como Cross-Site Scripting (XSS) y
la inyección SQL, asegurando un enfoque integral hacia la seguridad web.
En resumen, el planteamiento del problema se centra en la necesidad urgente de
mejorar la seguridad de las contraseñas en las páginas web mediante la
implementación de encriptación robusta y prácticas de gestión de contraseñas
eficaces. Este proyecto tiene como objetivo proporcionar una solución técnica que
no solo proteja las contraseñas de los usuarios, sino que también establezca un
marco de seguridad más amplio para proteger contra diversas amenazas
cibernéticas, contribuyendo así a un entorno digital más seguro y confiable.
Objetivos
Objetivo General
Implementar un sistema de encriptación robusto utilizando el algoritmo SHA-512
para proteger las contraseñas de los usuarios en una página web, asegurando la
confidencialidad y la integridad de los datos personales.
Objetivos Específicos
Desarrollar un Módulo de Encriptación:
Implementar el algoritmo SHA-512 para encriptar las contraseñas de los usuarios
antes de almacenarlas en la base de datos.
Asegurar que las contraseñas encriptadas no puedan ser revertidas a su forma
original mediante técnicas de ataque comunes.
Implementar Certificados SSL/TLS:
Configurar certificados SSL/TLS para asegurar la comunicación entre el cliente y el
servidor.
Garantizar que los datos transmitidos estén cifrados y protegidos contra
interceptaciones.
Establecer Políticas de Gestión de Contraseñas:
Crear y aplicar políticas que fomenten la creación de contraseñas seguras y únicas
por parte de los usuarios.
Implementar técnicas adicionales como 'salting' y 'peppering' para fortalecer la
seguridad de las contraseñas almacenadas.
Proteger contra Ataques Comunes:
Implementar medidas de seguridad para proteger la página web contra ataques de
Cross-Site Scripting (XSS) y inyección SQL.
Realizar pruebas de penetración y auditorías de seguridad para identificar y mitigar
posibles vulnerabilidades.
Desarrollar Documentación y Capacitación:
Crear documentación técnica detallada sobre la implementación del sistema de
encriptación y otras medidas de seguridad.
Proveer guías de usuario y capacitación para administradores y desarrolladores
sobre las mejores prácticas en seguridad web.
Desarrollo
En nuestra página utilizamos la minería de datos, especialmente en el caso de las
bases de datos. Usamos una base de datos en XAMPP, la cual está conectada a
nuestra página web. En la primera página, tenemos una conexión establecida con
esta base de datos que nos permite registrar a todos nuestros nuevos usuarios que
desean ingresar a nuestro sitio. También usamos PHP para conectar correctamente
la base de datos con la página. Además, contamos con una sección de inicio de
sesión.
Este es un apartado donde podrás ver, como se ve la base de datos en formato de
tablas
Esta imagen muestra un script PHP embebido en una página HTML que maneja la
autenticación de usuarios para una aplicación web. A continuación se presenta una
descripción de cada parte del script:
1. Configuración de la conexión a la base de datos:
• Se definen las variables $servername, $database, $username, y $password con
los datos necesarios para conectarse a la base de datos acceso en un servidor local
(localhost).
2. Recepción de datos del formulario:
•
Se reciben las variables $usuario y $pas a través del método POST, que
contienen el nombre de usuario y la contraseña ingresados por el usuario en el
formulario de inicio de sesión.
3. Hashing de la contraseña:
•
La contraseña se convierte en un hash utilizando el algoritmo sha512 para
asegurar la integridad y seguridad de las contraseñas almacenadas.
4. Establecimiento de la conexión con la base de datos:
• Se usa la función mysqli_connect para conectar al servidor de base de datos con
las credenciales especificadas. Si la conexión falla, se muestra un mensaje de error
y se detiene la ejecución del script.
5. Consulta y verificación del usuario:
•
Se realiza una consulta SQL para buscar en la tabla usuario un registro que
coincida con el nombre de usuario y la contraseña hash proporcionados.
• Si se encuentra una coincidencia (mysqli_num_rows($resultado) > 0), se redirige
al usuario a la página index.html.
• Si no se encuentra coincidencia, se muestra un mensaje de error indicando que
el nombre de usuario o la contraseña son incorrectos.
6. Liberación de recursos y cierre de la conexión:
• Se libera el resultado de la consulta y se cierra la conexión a la base de datos.
En este apartado, también implementamos la encriptación de las contraseñas para
garantizar la seguridad de nuestros usuarios. De esta manera, las contraseñas no
estarán vulnerables y permanecerán seguras. Incluso si alguien lograra acceder a
la base de datos y visualizar las contraseñas, estas aparecerán encriptadas y no
podrán ser leídas.
Código
LOGIN
Este código implementa un formulario de autenticación en una página web, donde
se verifican las credenciales del usuario (nombre de usuario y contraseña) contra
una base de datos. A continuación, se presenta una documentación detallada de
cada sección del código.
Estructura del Documento HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initialscale=1.0">
<title>Document</title>
</head>
<body>

<!DOCTYPE html>: Define el documento como un archivo HTML5.

<html lang="en">: Comienza el documento HTML, especificando que el
idioma del contenido es inglés.

<head>: Contiene metadatos sobre el documento.
o
<meta charset="UTF-8">: Especifica que la codificación de caracteres
es UTF-8.
o
<meta
name="viewport"
content="width=device-width,
initial-
scale=1.0">: Ajusta el ancho del viewport para que coincida con el
ancho del dispositivo.
o
<title>Document</title>: Establece el título del documento en el
navegador.

<body>: Comienza el cuerpo del documento, que contendrá el contenido
visible de la página.
Código PHP para Autenticación de Usuario
<?php
$servername="localhost";
$database="acceso";
$username="root";
$password="";
$usuario=$_POST["usernamei"];
$pas=$_POST["passwordi"];
$pas = hash('sha512', $pas);
$conexion=mysqli_connect($servername,
$username, $password, $database);
if(!$conexion)
{
echo "Error en la conexión: " .
mysqli_connect_error();
die();
}
else
{
$consulta = "SELECT * FROM usuario
WHERE usuario='$usuario' AND
contraseña='$pas'";
$resultado = mysqli_query($conexion,
$consulta);
if (mysqli_num_rows($resultado) > 0){
header("Location: index.html");
exit; // Detiene la ejecución del
script después de la redirección
} else {
header("Location: index.html");
exit;
}
mysqli_free_result($resultado);
mysqli_close($conexion);
}
?>

<?php: Inicia un bloque de código PHP.
Variables de Conexión:




$servername = "localhost";: Define el nombre del servidor de la base de
datos.
$database = "acceso";: Define el nombre de la base de datos.
$username = "root";: Define el nombre de usuario para la conexión a la base
de datos.
$password = "";: Define la contraseña para la conexión a la base de datos.
Captura de Datos del Formulario:



$usuario = $_POST["usernamei"];: Captura el nombre de usuario ingresado
en el formulario.
$pas = $_POST["passwordi"];: Captura la contraseña ingresada en el
formulario.
$pas = hash('sha512', $pas);: Encripta la contraseña usando el algoritmo
SHA-512.
Conexión a la Base de Datos:


$conexion = mysqli_connect($servername, $username, $password,
$database);: Intenta establecer una conexión con la base de datos.
if (!$conexion) { ... }: Verifica si la conexión fue exitosa. Si no, muestra un
mensaje de error y detiene la ejecución.
Consulta a la Base de Datos:


$consulta = "SELECT * FROM usuario WHERE usuario='$usuario' AND
contraseña='$pas'";: Prepara una consulta SQL para verificar si las
credenciales existen en la base de datos.
$resultado = mysqli_query($conexion, $consulta);: Ejecuta la consulta SQL.
Verificación de Resultados:

if (mysqli_num_rows($resultado) > 0) { ... } else { ... }: Verifica si la consulta
devolvió algún resultado.
o Si las credenciales son correctas, redirige a index.html.
o Si las credenciales son incorrectas, también redirige a index.html.
Liberación de Recursos y Cierre de Conexión:


mysqli_free_result($resultado);: Libera la memoria asociada con el resultado.
mysqli_close($conexion);: Cierra la conexión a la base de datos.

</body>
</html>

Cierra el cuerpo del documento HTML y la estructura HTML.
REGISTRO
Este código implementa un formulario de registro de usuario en una página web,
donde se capturan datos como nombre de usuario, correo electrónico y contraseña.
A continuación, se proporciona una documentación detallada de cada sección del
código.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initialscale=1.0">
<title>Document</title>
</head>
<body>







<!DOCTYPE html>: Define el documento como un archivo HTML5.
<html lang="en">: Comienza el documento HTML, especificando que el
idioma del contenido es inglés.
<head>: Contiene metadatos sobre el documento.
<meta charset="UTF-8">: Especifica que la codificación de caracteres es
UTF-8.
<meta name="viewport" content="width=device-width, initial-scale=1.0">:
Ajusta el ancho del viewport para que coincida con el ancho del dispositivo.
<title>Document</title>: Establece el título del documento en el navegador.
<body>: Comienza el cuerpo del documento, que contendrá el contenido
visible de la página.
Código PHP para Registro de Usuario
<?php
$servername = "localhost";
$database = "acceso";
$username = "root";
$password = "";
$usuario = $_POST["usuariou"];
$email = $_POST["emailu"];
$contra = $_POST["passwordu"];
$contra = hash('sha512', $contra); //
Corregido: se debe hashear la variable
$contra
$conexion = mysqli_connect($servername,
$username, $password, $database);
if (!$conexion) {
echo "Error en la conexión: ";
die("Conexión fallida" .
mysqli_connect_errno());
} else {
$insertar = "INSERT INTO usuario
(usuario, email, contraseña) VALUES
('$usuario', '$email', '$contra')";
$query = mysqli_query($conexion,
$insertar);
if ($query) {
header("Location: index.html");
} else {
echo "Error al registrar el
usuario: " . mysqli_error($conexion);
}
mysqli_close($conexion);
}
?>

<?php: Inicia un bloque de código PHP.
Variables de Conexión:
$servername = "localhost";: Define el nombre del servidor de la base de datos.
$database = "acceso";: Define el nombre de la base de datos.
$username = "root";: Define el nombre de usuario para la conexión a la base de
datos.
$password = "";: Define la contraseña para la conexión a la base de datos.
Captura de Datos del Formulario:
$usuario = $_POST["usuariou"];: Captura el nombre de usuario ingresado en el
formulario.
$email = $_POST["emailu"];: Captura el correo electrónico ingresado en el
formulario.
$contra = $_POST["passwordu"];: Captura la contraseña ingresada en el formulario.
$contra = hash('sha512', $contra);: Encripta la contraseña usando el algoritmo SHA512 antes de almacenarla en la base de datos.
Conexión a la Base de Datos:
$conexion = mysqli_connect($servername, $username, $password, $database);:
Intenta establecer una conexión con la base de datos.
if (!$conexion) { ... }: Verifica si la conexión fue exitosa. Si no, muestra un mensaje
de error y detiene la ejecución.
Inserción de Datos en la Base de Datos:
$insertar = "INSERT INTO usuario (usuario, email, contraseña) VALUES ('$usuario',
'$email', '$contra')";: Prepara una consulta SQL para insertar los datos del usuario
en la tabla usuario.
$query = mysqli_query($conexion, $insertar);: Ejecuta la consulta SQL.
Verificación de la Operación:
if ($query) { ... } else { ... }: Verifica si la consulta de inserción fue exitosa.
Si es exitosa, redirige al usuario a index.html.
Si falla, muestra un mensaje de error indicando la razón del fallo.
Cierre de Conexión:
mysqli_close($conexion);: Cierra la conexión a la base de datos después de
completar la operación.
Cierra el cuerpo del documento HTML y la estructura HTML.
Notas Adicionales
Seguridad: Al igual que en el primer código, este también tiene una vulnerabilidad
de inyección SQL debido a la interpolación directa de variables en la consulta SQL.
Se recomienda usar consultas preparadas para prevenir este tipo de ataques.
Manejo de Errores: Es útil proporcionar retroalimentación específica al usuario
sobre el estado del registro (por ejemplo, usuario ya existente) en lugar de redirigir
simplemente a la misma página.
Validación del Lado del Cliente: Considerar la validación de las entradas del
formulario en el lado del cliente antes de enviarlas al servidor.
Planificación
Cronograma

Mes 1: Investigación y recolección de datos.

Mes 2: Diseño de la solución y selección de algoritmos.

Mes 3-4: Implementación técnica de SHA-512, SSL/TLS, y defensas contra
ataques.

Mes 5: Pruebas de penetración y auditorías de seguridad.

Mes 6: Documentación, capacitación, y lanzamiento del sistema mejorado.
Recursos Necesarios

Herramientas de Desarrollo: Lenguajes de programación, entornos de
desarrollo integrados (IDEs), y bibliotecas para encriptación.

Infraestructura de Red: Servidores web seguros con soporte para SSL/TLS.

Equipo de Seguridad: Profesionales en seguridad informática y auditores
de seguridad.

Materiales de Capacitación: Guías, tutoriales, y recursos educativos sobre
seguridad web y encriptación.
Conclusiones
La protección de las contraseñas y la información sensible en las páginas web es
una necesidad imperiosa en el contexto actual de ciberseguridad. Este proyecto
tiene como objetivo abordar esta necesidad mediante la implementación de un
sistema de encriptación de contraseñas utilizando el algoritmo SHA-512, reconocido
por su robustez y alta resistencia a ataques.
A través de una metodología estructurada en fases, se garantizará una
implementación efectiva que incluye desde la investigación inicial y el diseño de la
solución hasta la implementación técnica, pruebas, y documentación. La
planificación detallada asegura que se consideren todos los aspectos necesarios
para el éxito del proyecto, incluyendo los recursos técnicos y humanos, así como un
cronograma realista.
Al finalizar este proyecto, se espera no solo haber implementado un sistema seguro
para la encriptación de contraseñas, sino también haber establecido un marco de
seguridad integral que proteja contra una variedad de amenazas cibernéticas. Esto
no solo incrementará la confianza de los usuarios en la plataforma, sino que también
contribuirá a un entorno digital más seguro y confiable.
La implementación de estas medidas de seguridad es crucial para proteger los datos
personales y sensibles de los usuarios, minimizar los riesgos de accesos no
autorizados y brechas de seguridad, y cumplir con las normativas y estándares de
seguridad vigentes. Este proyecto, por lo tanto, representa un paso significativo
hacia la mejora de la seguridad en las aplicaciones web y la protección de la
información en el mundo digital.
Related documents
Download