Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de Firma Digital MLDSS Mejorado

Module-Lattice-Based Digital Signature Scheme

📋 Descripción General

Este proyecto implementa un esquema de firma digital postcuántico basado en MLDSS (Module-Lattice-Based Digital Signature Scheme). Es una versión educativa mejorada que demuestra la fortaleza criptográfica de los esquemas basados en retículas.


🔐 Mejoras Implementadas

1. Parámetros Criptográficamente Realistas

Antes:

  • Módulo q = 23 (inseguro)
  • Dimensión dim = 2 (trivial)
  • Hash simplista basado en suma de caracteres

Después:

  • Módulo q = 8,380,417 (primo grande)
  • Dimensión dim = 4 (realista)
  • Parámetros MLDSS formales:
    • tau = 39 (peso del reto)
    • gamma1 = 2^17 (rango para vector aleatorio)
    • gamma2 = (q-1)/32 (límite de rechazo)

2. Hash Criptográfico Seguro

def cryp_hash(message, salt=b"", output_len=32):
    """Hash criptográfico SHA-256 con salt para mayor seguridad"""
  • Reemplaza el hash trivial por SHA-256
  • Incluye salt para resistencia contra rainbow tables
  • Adecuado para aplicaciones criptográficas

3. Generación de Números Aleatorios Seguros

def secure_random_vector(dim, low, high):
    """Genera vector aleatorio de forma segura usando secrets"""
    return [secrets.randbelow(high - low + 1) + low for _ in range(dim)]
  • Usa el módulo secrets en lugar de random
  • Criptográficamente seguro para generación de claves

4. Algoritmo de Firma MLDSS Formal

def sign(m, A, s, q, dim, gamma1):
    """
    Algoritmo de firma MLDSS (versión simplificada educativa)
    """
    y = [secrets.randbelow(2 * gamma1) - gamma1 for _ in range(dim)]
    w = mat_vec_mult(A, y, q)
    c = generar_reto_con_peso_tau(...)
    z = [(y[i] + c[i] * s[i]) % q for i in range(dim)]
    # Control de aceptación
    if infinity_norm(z) > gamma1 - tau:
        return sign(...)  # Reintentar
    return z, c

Características:

  • Vector aleatorio y con rango limitado
  • Cálculo de reto c con peso exacto τ (número de unos)
  • Control de aceptación para asegurar límites
  • Resistencia contra ataques de reutilización de firma

5. Algoritmo de Verificación Mejorado

def verify(m, sigma, c, A, pk, q, dim, gamma2):
    """Algoritmo de verificación MLDSS"""
    # Verificar que ||sigma|| < gamma1 - tau
    if not check_bound(sigma, gamma1 - tau):
        return False, [], []
    
    # Calcular w' = A * sigma - c * pk mod q
    w_prime = [((A_sigma[i] - c_pk[i]) % q) for i in range(dim)]
    
    # Recalcular reto c' y verificar
    c_prime = recalcular_reto_con_peso_tau(...)
    return (c == c_prime), w_prime, c_prime

💪 Fortaleza Criptográfica Demostrada

Complejidad del Ataque de Fuerza Bruta

Con parámetros mejorados:

Métrica Valor
Espacio de búsqueda q^d = 8,380,417^4 ≈ 4.9 × 10^28
Operaciones totales ~5 × 10^29
Tiempo en PC moderna ~1.6 × 10^13 segundos
En años ~5 × 10^5 años
Edad del Universo ~1.4 × 10^10 años

Conclusión: El ataque de fuerza bruta es computacionalmente imposible.

Resistencia Post-Cuántica

MLDSS proporciona seguridad contra:

  • ✅ Computadoras clásicas (NP-hard)
  • ✅ Computadoras cuánticas (SVP es difícil incluso cuánticamente)
  • ✅ Algoritmo de Grover (mejora solo de 2^(d/2))

Fundamento Matemático:

  • Basado en el problema SVP (Shortest Vector Problem)
  • Supuesto LWE (Learning With Errors) - problema NP-hard
  • Sin algoritmo subcuadrático conocido

🎨 Interfaz Mejorada

Pestaña de Registro y Login

  • Parámetros MLDSS visibles
  • Información sobre clave pública
  • Autenticación mediante firma digital

Ventana Protegida

Acceso a tres análisis detallados:

1. Diagrama del Proceso MLDSS

  • Visualización clara de las 3 fases:
    • 🔵 Generación de claves
    • 🟠 Proceso de firma
    • 🟢 Proceso de verificación
  • Flujo de datos con colores código

2. Análisis de Complejidad Computacional

  • Gráfico comparativo de ataques
  • Cálculos de coste computacional
  • Demostración visual de la resistencia

3. Análisis de Factibilidad del Ataque

  • Espacio de búsqueda astronómico
  • Tiempos de ejecución imposibles
  • Explicación matemática de la seguridad

🔬 Diferencias Principales: Antes vs. Después

Arquitectura del Hash

# ANTES (inseguro)
def simple_hash(m, mod):
    return sum(ord(c) for c in m) % mod

# DESPUÉS (seguro)
def cryp_hash(message, salt=b"", output_len=32):
    h = hashlib.sha256()
    h.update(message.encode('utf-8'))
    h.update(salt)
    return h.digest()[:output_len]

Generación de Vectores

# ANTES (vulnerable)
r = random_vector(dim, -2, 2)  # random.randint()

# DESPUÉS (criptográficamente seguro)
y = [secrets.randbelow(2 * gamma1) - gamma1 for _ in range(dim)]

Control de Aceptación

# NUEVO: Verificación de límites
if not check_bound(sigma, gamma1 - tau):
    return False, [], []

📊 Parámetros Técnicos MLDSS

q = 8,380,417          Módulo primo grande
d = 13                 Número de rondas SHA3
τ = 39                 Peso del reto (número de unos en c)
γ₁ = 2^17 = 131,072    Rango para vector aleatorio y
γ₂ = (q-1)/32         Límite de rechazo
dim = 4                Dimensión (versión educativa)

Seguridad esperada: ≈ 128 bits contra ataques clásicos y cuánticos


🚀 Uso del Programa

  1. Ejecutar:

    python main.py
  2. Registrarse:

    • Crear usuario y contraseña
    • Sistema genera clave privada s y clave pública pk
  3. Iniciar sesión:

    • Autenticación mediante firma MLDSS
    • Verificación de reto criptográfico
  4. Explorar análisis:

    • Ver diagrama del proceso
    • Analizar complejidad de ataques
    • Entender por qué es seguro

📚 Referencias Matemáticas

Algoritmo de Firma

σ ← y + c·s mod q
donde:
  - y: vector aleatorio con ||y|| < γ₁
  - c: vector de reto con exactamente τ unos
  - s: clave privada (vector corto)

Ecuación de Verificación

w' = A·σ - c·pk mod q
   = A·(y + c·s) - c·A·s mod q
   = A·y mod q

Si c' = H(m || w') == c, la firma es válida.


🔒 Garantías de Seguridad

  1. Autenticidad: Solo el poseedor de s puede firmar
  2. No repudiación: Imposible negar una firma válida
  3. Integridad: Cambios en el mensaje invalidan la firma
  4. Resistencia post-cuántica: Seguro contra computadoras cuánticas
  5. Resistencia a ataques conocidos: No hay vulnerabilidades matemáticas conocidas

💾 Estructura del Código

main.py
├── Importaciones y parámetros MLDSS
├── Funciones criptográficas
│   ├── secure_random_vector()
│   ├── cryp_hash()
│   ├── sign()
│   └── verify()
├── Interfaz PyQt5
│   ├── RegistrationTab
│   ├── LoginTab
│   ├── ProtectedWindow
│   ├── ProcessGraphWindow
│   ├── ComplexityAnalysisWindow
│   └── BruteForceAnalysisWindow
└── MainWindow (aplicación principal)

⚠️ Nota Educativa

Esta es una versión simplificada educativa de MLDSS. La implementación real (FIPS 204) tiene:

  • Dimensiones más altas (k=2, l=4)
  • Parámetros más conservadores
  • Optimizaciones adicionales
  • Recomendaciones de seguridad formales

👨‍💻 Autor

Implementación mejorada del sistema de firma digital postcuántico MLDSS.

Fecha: Diciembre 2025


📝 Licencia

Uso educativo. Para propósitos de criptografía real, utilizar estándares certificados (FIPS 204).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages