Cifrado afín por bloques
# Cifrado afín por bloques

El cifrado afín por bloques es un cifrado de clave simétrica por bloques en el que se utilizan transformaciones afines de aritmética modular. Este tipo de cifrado es similar al cifrado afín en el que, en lugar de sustituir o cifrar unos símbolos por otros, se cifran bloques.

## Descripción

El mecanismo para cifrar se basa en sustituir bloques de n caracteres de texto en claro por bloques de n caracteres de texto cifrado utilizando una función afín de aritmética modular de la forma

    $(ax+b)\mod \ n$.

Para describir este tipo de cifradores veamos un ejemplo:

* Supongamos que tenemos la secuencia 00,01,..,99 y supongamos que los número 00,...,25 representan las letras de la A a la Z respectivamente.
* Supongamos que queremos enviar el mensaje "HOWDY DOO"
* Primero agrupamos y dividimos el texto en claro en bloques de por ejemplo 4 caracteres quedando: HOWD YDOO
* A continuación sustituimos cada letra por su equivalente numérico obteniendo: 07142203 24031414
* Podemos decir que el entero más grande que puede aparecer en un bloque de tamaño 4 es ZZZZ=25252525, así que nosotros escogemos 25252525 como nuestro módulo n=25252525.
* A continuación elegimos un valor de b entre 1 y n. Por ejemplo b=23210025.
* Finalmente elegimos un valor de a de forma que mcd(a,n)=1. Por ejemplo nos vale a=21035433
* Aplicando la función afín en aritmética modular $(21035433*x+23210025)\mod \ 25252525$

    a los números obtenidos al cifrar los bloques obtenemos
    $(21035433*7142203+23210025)\mod \ 25252526=8007496$
    $(21035433*24031414+23210025)\mod \ 25252526=20470469$
    lo que nos da en mensaje cifrado
    08007496 20470469
    y este es el mensaje cifrado.
* Para descifrar aplicamos el proceso inverso. Calculamos el inverso multiplicativo de a=21035433 (por ejemplo usando el algoritmo de Euclides extendido) obteniendo $a^{-1}=5174971.$. Despejando x en la ecuación afín en aritmética modular obtenemos $P_{i}=(a^{-1}(C_{i}-b))\mod \ n$ y aplicando a los dos bloques cifrado tenemos:

    $P=(5174971(8007496-23210025))\mod \ 25252526=7142203$
    $P=(5174971(20470469-23210025))\mod \ 25252526=24031414$
    lo que equivale a "HOWD YDOO"

## Criptoanálisis

Este tipo de cifrados no es vulnerable a análisis de frecuencias, sin embargo es susceptible a ataque en los que se conoce el texto cifrado de un texto claro también conocido (es lo que se llama ataque de texto en claro conocido)

### Ataque de texto en claro conocido

Supongamos que conocemos el texto cifrado conocido (0800749620470469) de un texto en claro también conocido (HOWD YDOO). Al conocer el texto en claro podemos intuir aproximadamente cual es el valor del módulo con el que vamos a trabajar. Por ejemplo vamos a suponer que trabajamos con el alfabeto de del inglés con 25 caracteres. Por tanto n=25252525. A partir de ahí podemos establecer las siguiente ecuaciones:

    $8007496=(7142203m+b)\mod \ 25252526$
    $20470469=(24031414m+b)\mod \ 25252526$

Restado de la segunda ecuación la primera obtenemos:

    $12462973=(16889211*m)\mod \ 25252526$

Despejando

    $m=21035433$

y reemplazando en la primera ecuación obtenemos:

    $b=23210025\mod \ 25252526.$
