SOLUCIÓN: Algoritmo Personalizado

MENSAJE CIFRADO

MbzKNclubnQRtOrgmQPnDwtspUfSNCFeqEMiyiVtFmIfGRbsGUzUimiaGvnzpBLfrvzWZimhylZZesgDaH QteTgbQokOheEoorrpaDoZgLhzmN bfwsFtokyCELaBogwfLAcXoNQKrhCVQJeMVqVMvPvjXEaRXHb QUNLzsvNZRUkGxoibzsTbVucNWdqsypsgjsg sUQykViZUrNuSAXRlZcvZoaxhnRhwJRuAcnHWpRTkkoletByjABhxowKdPVICknvFmDqKc yKhehypGnSniuttNWoWCpNEJxPNixzbDuDucRhsGtkWkdeaxYNDrRoubtRxeJAWFrpcQcIpYFQqWdkwpdEgVKANmIUObWyuAE davlhvBARQyiOptGCEJwVmfeaaJlCHTPazUylFSS

ALGORITMO DE CIFRADO

import random

def encrypt(plaintext, key):
    alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
    ciphertext = ""
    for i in range(0, len(plaintext)):
        character = plaintext[i]
        ciphertext = ciphertext + alphabet[(alphabet.index(character) + key) % len(alphabet)]
        for j in range(0, key):
            ciphertext = ciphertext + random.choice(alphabet)
    return ciphertext

SOLUCIÓN SUGERIDA

1. El algoritmo de cifrado añade key caracteres aleatorios después de cada carácter cifrado

2. Para descifrar, debemos saltar estos caracteres aleatorios y procesar solo cada (key + 1)-ésimo carácter

3. La clave correcta es 11, determinada mediante análisis del algoritmo

4. El proceso de descifrado invierte la operación de cifrado: resta la clave en lugar de sumarla

5. El algoritmo de descifrado debe procesar solo los caracteres relevantes, ignorando los aleatorios

ALGORITMO DE DESCIFRADO

def decrypt(ciphertext, key):
    alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
    plaintext = ""
    i = 0
    while i < len(ciphertext):
        character = ciphertext[i]
        index = (alphabet.index(character) - key) % len(alphabet)
        plaintext += alphabet[index]
        i += key + 1
    return plaintext

# Texto cifrado
ciphertext = "MbzKNclubnQRtOrgmQPnDwtspUfSNCFeqEMiyiVtFmIfGRbsGUzUimiaGvnzpBLfrvzWZimhylZZesgDaH QteTgbQokOheEoorrpaDoZgLhzmN  bfwsFtokyCELaBogwfLAcXoNQKrhCVQJeMVqVMvPvjXEaRXHb QUNLzsvNZRUkGxoibzsTbVucNWdqsypsgjsg sUQykViZUrNuSAXRlZcvZoaxhnRhwJRuAcnHWpRTkkoletByjABhxowKdPVICknvFmDqKc yKhehypGnSniuttNWoWCpNEJxPNixzbDuDucRhsGtkWkdeaxYNDrRoubtRxeJAWFrpcQcIpYFQqWdkwpdEgVKANmIUObWyuAE davlhvBARQyiOptGCEJwVmfeaaJlCHTPazUylFS"

# Descifrar con clave 11
resultado = decrypt(ciphertext, 11)
print("Texto descifrado:")
print(resultado)

EXPLICACIÓN DEL ALGORITMO

  • Caracteres aleatorios: Por cada carácter del texto original, se añaden key caracteres aleatorios
  • Patrón de lectura: Para descifrar, leemos un carácter cada key + 1 posiciones
  • Operación inversa: Donde el cifrado suma la clave, el descifrado resta la clave
  • Módulo del alfabeto: Se usa módulo para mantener los índices dentro del rango del alfabeto
  • Clave correcta: El valor 11 se determinó mediante análisis del algoritmo y pruebas

LECCIONES DE SEGURIDAD

  • Los algoritmos de cifrado personalizados suelen ser menos seguros que los estándares
  • Añadir ruido (caracteres aleatorios) no necesariamente mejora la seguridad
  • Es preferible usar algoritmos criptográficos estándar y bien probados
  • La seguridad por oscuridad (ocultar el algoritmo) no es una práctica recomendada
  • Los algoritmos criptográficos deben ser resistentes incluso cuando el atacante conoce el algoritmo