lunes, 22 de junio de 2015

Criptografía XII: la máquina Enigma (XI)

En este antepenúltimo post sobre los métodos de criptoanálisis empleados para "romper" el código de la máquina Enigma le toca el turno a la etapa de Bletchley Park, una vez iniciada la II Guerra Mundial.

Decía en el post anterior que eprimer método con el que comenzaron a trabajar los británicos fue el de las hojas Zygalskipero que duró poco tiempo, ya que a mediados de 1940 los alemanes dejaron de transmitir dos veces de forma consecutiva los tres caracteres cifrados de la "clave de sesión", con lo que se invalidaron todos los métodos de criptoanálisis basados en ese doble cifrado.

Una vez más, las comunicaciones del ejército alemán eran opacas por completo. Me imagino a los británicos apilando hojas perforadas de forma convulsiva sin obtener ningún resultado, acordándose de las madres de Hitler y de todos sus secuaces, y preguntándose qué es lo que habían cambiado esta vez.



Pero, ya antes de que se produjera este cambio en la operativa de la máquina, Alan Turing estaba trabajando en un método de criptoanálisis alternativo que no dependiera del doble cifrado de la "clave de sesión", sino que atacara a otras debilidades del cifrado de la máquina y de su utilización: el cifrado recíproco (por su diseño, una letra nunca se cifra como esa misma letra) y la previsión (suposición) de parte de los contenidos de los mensajes transmitidos por los alemanes, tanto debido a su excesivo formalismo y a su mente "cuadriculada" - ambas cosas muy propias del carácter germano -, como a la tipología de los mismos, por ejemplo: partes metereológicos.

De esta forma, Turing se basó en la conjetura de que ciertos textos sin cifrar (ellos acuñaron el término "crib" para referirse a ellosse encontraban en el texto cifrado.

Si no lo he entendido mal y para comprender mejor en que se basaba este método, veamos un ejemplo utilizando como "crib" la siguiente: "WETTER VORHER SAGE" (texto en claro que posiblemente se encontraba en los partes metereológicos y que creo que en alemán quiere decir algo así como: "PRONÓSTICO DEL TIEMPO").

1º) Supongamos que en el texto cifrado aparece la siguiente secuencia de caracteres (primera línea) y situamos justo debajo la "crib":
Se trata de ir buscando el encaje de la "crib" (texto en claro conocido) con el texto cifrado para hallar las posibles correspondencias entre los caracteres de la primera con los del segundo, descartando aquellas que no es posible obtener con una máquina Enigma.

Es decir, en primer lugar, si los caracteres en una determinada posición coinciden en ambos casos (texto cifrado y "crib") descartaríamos esas posibles correspondencias, ya que por el diseño de la máquina una letra nunca se puede cifrar como esa misma letra, y desplazaríamos la "crib" una posición a la derecha hasta encontrar alguna posición relativa en la que esto no ocurra.

2º) Examinamos ahora las posibles correspondencias (en nuestro ejemplo ninguno de los caracteres de la "crib" coincide en la misma posición con el mismo carácter en el texto cifrado, aunque que esto ocurra es mucho más probable de lo que puede parecer):

Esto lo que nos dice es que, si el texto cifrado se corresponde con la "crib", con un determinado orden de los rotores y posición de los mismos (a la que llamaremos posición relativa 1) la máquina cifra el carácter "W" como "R" (y, debido a la reciprocidad del cifrado de la máquina, "R" como "W"), en la posición relativa 2 la letra "E" como "J" (y a la inversa, la "J" como "E"), y así sucesivamente.

Esto se puede expresar mediante el siguiente grafo:
A los gráficos de este tipo se les conocía como "menú" (en inglés, "menu"), y servían para configurar la bomba, la máquina que inventó Turing para automatizar el proceso de búsqueda de las configuraciones de la máquina Enigma en las que era posible que el texto en claro conocido pudiera cifrarse como parte del texto cifrado (y, a la inversa, esa parte del texto cifrado pudiera descifrarse como el texto en claro) o, mejor dicho, para descartar aquellas configuraciones que no permitían esto. A mayor número de bucles - en inglés, "loops" - más configuraciones de la máquina era posible desechar, ya que son muy pocas las que pueden satisfacer todas las restricciones de conectividad impuestas por el "menú".

En nuestro ejemplo se pueden observar los siguientes tres bucles:

1.- "T" ---> "K" ---> "S" ---> "T";
2.- "T" ---> "S" ---> "E" ---> "T";
3.- "T" ---> "E" ---> "W" ---> "R" ---> "T".

Se trata ahora de descartar órdenes de los rotores y posiciones de éstos que no satisfagan las citadas restricciones de conectividad, pero antes de contar esto con más detalle veamos en qué consistía la famosa máquina electromecánica conocida como bomba de Turing, y posteriormente, tras la aportación (simple conceptualmente, pero sin duda genial) de su colega Gordon Welchman, como la bomba Turing-Welchman.

Nada fácil lo que me propongo explicar, ya que ni su diseño ni su implementación (tampoco hay que olvidar a quienes la llevaron a cabo a partir de la lógica de estos genios) son ni mucho menos sencillos.

Por lo que he investigado, la primera versión de la bomba de Turing, a la que llamaron "Victory", entró en funcionamiento en marzo de 1940, y en la siguiente figura represento sus componentes principales conforme a lo que he entendido:
Cada tambor reproducía el cableado de uno de lo rotores de la máquina Enigma (I, II, III, ...), es decir, realizaba las mismas transformaciones de caracteres que éste, y su color identificaba al rotor al que replicaba (tambor rojo ---> rotor I, etc.).

Cada una de las tres baterías de 12 codificadores de doble extremo simulaba hasta 12 máquinas enigma conectadas en serie. Estas tres baterías no estaban conectadas eléctricamente entre sí  y, por tanto, cada una de ellas podía ser configurada para un orden de los tambores y un menú concretos; aunque sí estaban conectadas mecánicamente a un motor que hacía girar de forma sincronizada los tambores de las tres baterías.

La idea del conector de doble extremo surgió por la necesidad de simular el funcionamiento de varias máquinas Enigma trabajando en serie, para lo que se necesitaba separar la entrada ("camino" de ida hacia el reflector) de la salida ("camino" de vuelta desde el reflector) de cada uno de lo rotores. Para ello, cada tambor disponía de dos conjuntos de cableado, que en ambos casos se correspondían al del rotor al que replicaba.

Al  colocarse uno de los tambores sobre la placa en la que se montaba, el cableado interno de cada uno de sus dos conjuntos cerraba el circuito con los correspondientes contactos del par exterior y del par interior de los cuatro círculos concéntricos, respectivamente.

Gráficamente podríamos representarlo de la siguiente manera:
Cuando la bomba encontraba una configuración de la máquina Enigma que no podía desechar se paraba, es decir, ese orden de los rotores y posición de los mismos era compatible con las restricciones impuestas por el menú, por lo que se trataba de una posible solución que debía probarse para comprobar si era la correcta o no.

Sin embargo, en su diseño inicial la bomba no era muy eficaz. En el siguiente post contaré cuál fue la aportación de Gordon Welchman al diseño de la bomba para aumentar su eficacia y retomaré el ejemplo puesto en éste para explicar cómo se configuraba la bomba y su funcionamiento una vez puesta en marcha.

domingo, 7 de junio de 2015

"The Imitation Game" - Descifrando Enigma (II)

Ya he visto la película "The imitation Game" ("Descifrando Enigma") y, como decía en un post anterior, voy a permitirme dar mi modesta opinión como espectador.

Antes que nada decir que he leído muchas críticas y comentarios sobre esta producción británica, antes y después de verla, en los que se hace especial hincapié en su rigor histórico, tanto en lo que se refiere a si es fiel a la biografía de sus personajes, y en particular respecto a Alan Turing, como a los hechos con relación a la máquina de cifrado más famosa del siglo XX; el éxito a la hora de "romper" su código proporcionó una clara ventaja a los aliados de cara a vencer a los nazis en la II Guerra Mundial y, además, resultó decisivo para acortar su duración y salvar muchos cientos de miles de vidas.

La historia de la máquina Enigma, creo que muy poco o nada conocida por el público en general hasta que se ha estrenado esta película - aunque ha habido otras -, ha sido un tema que me ha interesado desde hace mucho tiempo por diversos motivos, pero sobre todo por dos razones en concreto: la criptografia y la historia, dos de mis pasiones confesables. Y, por tanto y aún a riesgo de parecer un tanto insensible, reconozco que no me interesaba tanto por la biografía de aquellos que la protagonizaron en la vida real.

Y de esto último es de lo que yo creo que trata la película: de la historia vital de un genio avanzado a su tiempo que, junto con otras personas anteriormente a él y otros muchos colaboradores, contribuyó en gran medida a la victoria aliada y a poner fin al mayor conflicto bélico en el que se ha visto envuelta la humanidad, que no tuvo ningún reconocimiento por ello en ese momento - fueron obligados a guardar el más estricto secreto sobre su trabajo - y que, además y poco después, fue tratado de forma absolutamente injusta por su condición de homosexual.

Por tanto, entiendo que lo menos importante en la película es el rigor en cuanto al funcionamiento de la propia máquina Enigma, a las labores desarrolladas para su criptoanálisis y sobre otras personas que intervinieron en esta tarea; e incluso sobre otros trabajos desarrollados por Alan Turing, no menos importantes y que también se mencionan en ella, y que sentaron las bases de la inteligencia artificial, entre otros campos.

Lógicamente, no se trata de un documental sobre la máquina de cifrado utilizada por el ejército alemán en la II Guerra Mundial y su criptoanálisis, ni falta que hace, sino que entiendo que lo que se pretende es contar el drama que suponía ser homosexual en aquella época, no hace tanto tiempo, en una sociedad como la inglesa, supuestamente avanzada y que, paradojas de la vida, luchaba contra los nazis (como todos sabemos, racistas y homófobos por excelencia) por la libertad de los ciudadanos europeos. Todo ello personalizado en la figura de Alan Turing ("El verdadero enigma fue el hombre que descifró el código"), por su relevancia, que sufrió una persecución absolutamente injusta, pese a ser un héroe de guerra y sus aportaciones a la ciencia, y que fue la causa más que probable de su trágico final.

Como en toda película basada en hechos reales y, además, adaptación al cine de una biografía novelada ("The Enigma", escrita por Andrew Hodges), son inevitables, debería decir imprescindibles, ciertas imprecisiones e incluso pequeñas modificaciones de la realidad de los hechos, aunque sin alterar lo fundamental, para dotarla del ritmo e interés necesarios para que la trama sea lo más entretenida y amena posible para el público en general.

En definitiva y en mi opinión, una película muy recomendable, con una interpretación excelente de Benedict Cumberbatch como Alan Turing, que nos cuenta la historia de una injusticia flagrante, que además de a Turing afectó a más de cuarenta mil personas que también fueron acusadas de indecencia grave y perversión por su mera orientación sexual, y que, por otra parte y aunque con algunas licencias, nos acerca a lo esencial de la labor realizada por un genio.

Como digo no se le puede pedir a una película que sea un documental absolutamente riguroso con los hechos en los que se basa. Para aquellos que deseen profundizar en la historia, funcionamiento y criptoanálisis de la máquina Enigma existen multitud de entradas muy interesantes en Internet (modestamente y como ya he dicho que es un tema que me interesa, en este mismo blog he intentado divulgar todo ello de la forma más comprensible de la que he sido capaz mediante una pequeña serie de posts).

jueves, 4 de junio de 2015

Criptografía XI: la máquina Enigma (X)

En los anteriores posts de esta serie describí el método de criptoanálisis de las hojas Zygalski y puse un ejemplo de su operativa (cómo se iban apilando en la práctica las hojas perforadas hasta dar con el orden de los rotores y el ajuste de los anillos empleados en un día por los alemanes para cifrar los mensajes), respectivamente.

En este post le toca el turno a la bomba criptológica ("bomba kryptologiczna") inventada por Marian Rejewski.

Antes de explicar el funcionamiento de esta máquina electromecánica veamos brevemente en qué se basó Rejewski para diseñarla. No hay que olvidar que el objetivo, al igual que en el método de las hojas Zygalski, era obtener el orden de los rotores y el ajuste de los anillos o posición relativa de los mismos con respecto a su núcleo con el cableado para poder descifrar los mensajes de un día.

Pues bien, supongamos que entre los mensajes interceptados en un día nos encontramos con los siguientes:

1.- BSU AQY AFK; 2.- UXS SAN IAQ; 3.- FGS VYA MSA.
Nota: los tres primeros caracteres se corresponden con el indicador (los tres caracteres que se transmitían en claro y que el operador había elegido para cifrar la "clave de sesión") y los seis siguientes con los caracteres correspondientes al doble cifrado de ésta.

Como se observa, en los tres casos hay "hembras" del mismo carácter ("A") en las diferentes posiciones de las letras correspondientes al doble cifrado de la "clave de sesión" (en el primer caso en 1-4, en el segundo en 2-5 y en el tercero en 3-6).

A continuación y como siempre a lo largo de los posts de esta serie, comparto lo que he ido aprendiendo sobre este método de criptoanálisis del cifrado de la máquina Enigma, aunque también y como siempre puedo estar equivocado (por favor, si es así y también como siempre, agradecería comentarios que me saquen del error).

¿Cómo lo haría yo manualmente?: con una réplica de la máquina Enigma iría probando, para cada uno de los posibles órdenes de los rotores, todas las posiciones de los mismos para comprobar en cuáles se producen "hembras" del carácter "A" en las posiciones 1-4, 2-5 y 3-6. Para ello actuaría de la siguiente manera:

1º) Realizaría el ajuste de los anillos a una posición dada, por ejemplo: "Z-Z-Z".

2º) Colocaría los rotores en las posiciones iniciales "B-S-U" (primer indicador) y teclearía la letra correspondiente al carácter de las "hembras" de los mensajes interceptados (en nuestro ejemplo "A").

Es decir, estableciendo la siguiente notación: PL = Posición rotor izquierdo; PM = Posición rotor central; PN= Posición rotor derecho.

Entonces: PL = "B"; PM = "S" y PN = "U".

Y el resultado sería:

Tecla "A" en 1ª posición ---> Cifrado con rotores en posición PL, PM, PN ---> Carácter Cifrado C1.

Después situaría los rotores en las posiciones "B-S-X" (PL, PM, PN+3) teclearía otra vez "A".

Y el resultado sería:

Tecla "A" en 4ª posición ---> Cifrado con rotores en posición PL, PM, PN+3 ---> Carácter Cifrado C4.

Si C1 es distinto de C4 la posición de los rotores utilizada no es la correcta y probaría con la siguiente (PL, PM, PN+1 con respecto al primer indicador), mientras que si C1 = C4 tendría una posición de los rotores que produce una "hembra" del carácter "A" en las posiciones 1-4.

Para entenderlo correctamente creo que es importante recordar que el cifrado de la máquina Enigma es recíproco, es decir, si se teclea "A" y esto nos da C1 como carácter cifrado, entonces si tecleo C1 esto nos da "A" como carácter cifrado. Por tanto, si C1 = C4 quiere decir que el operador alemán pulsó en primer lugar la tecla C1 y obtuvo "A" como carácter cifrado y después pulsó esa misma tecla en cuarto lugar (C4 =  C1) obteniendo también "A" como carácter cifrado. Lo que implica que se produce una "hembra" del carácter "A" en las posiciones 1-4.

Un vez detectada esa "hembra" en las posiciones 1-4, comprobaría si también se da una "hembra" del carácter "A" en las posiciones 2-5. Para ello: colocaría los rotores en las posiciones iniciales "U-X-T" (segundo indicador con la posición del rotor rápido desplazada una posición) y teclearía otra vez la letra correspondiente al carácter de las "hembras" de los mensajes interceptados (en nuestro ejemplo "A").

Es decir, PL = "U"; PM = "X" y PN = "T".

Y el resultado sería:

Tecla "A" en 2ª posición ---> Cifrado con rotores en posición PL, PM, PN ---> Carácter Cifrado C2.

Después situaría los rotores en las posiciones "U-X-W" (PL, PM, PN+3teclearía otra vez "A".

Y el resultado sería:

Tecla "A" en 5ª posición ---> Cifrado con rotores en posición PL, PM, PN+3 ---> Carácter Cifrado C5.

Si C2 es distinto de C5 la posición de los rotores utilizada no es la correcta y probaría con la siguiente (PL, PM, PN+1 con respecto al primer indicador) mientras que si C2 = C5 tendría una posición de los rotores que produce una "hembra" del carácter "A" tanto en las posiciones 1-4 como en 2-5.

Un vez detectada esas "hembra" en las posiciones 1-4 y 2-5, comprobaría si también se da una "hembra" del carácter "A" en las posiciones 3-6. Para ello: colocaría los rotores en las posiciones iniciales "F-G-U" (tercer indicador con la posición del rotor rápido desplazada dos posiciones) y teclearía otra vez la letra correspondiente al carácter de las "hembras" de los mensajes interceptados (en nuestro ejemplo "A").

Es decir, PL = "F"; PM = "G" y PN= "U".

Y el resultado sería:

Tecla "A" en 3ª posición ---> Cifrado con rotores en posición PL, PM, PN ---> Carácter Cifrado C3.

Después situaría los rotores en las posiciones "F-G-X" (PL, PM, PN+3teclearía otra vez "A".

Y el resultado sería:

Tecla "A" en 6ª posición ---> Cifrado con rotores en posición PL, PM, PN+3 ---> Carácter Cifrado C6.

Si C3 es distinto de C6 la posición de los rotores utilizada no es la correcta y probaría con la siguiente (PL, PM, PN+1 con respecto al primer indicador), mientras que si C3 = C6 tendríamos una posición de los rotores que produce una "hembra" del carácter "A" en las posiciones 1-4, 2-5 y 3-6 y, por tanto, una posible solución, que se calcularía como indico más adelante y la probaría para ver si es la correcta.

Es decir, considerando que "A" = 0; "B" = 1; "C" = 2; ... y "Z" = 25, en nuestro ejemplo las pruebas que yo realizaría manualmente con una máquina Enigma pueden expresarse como:


Lo que significa que en el peor de los casos habría que probar, al menos, todas las posibles posiciones de los rotores con respecto al primer indicador (26 x 26 x 26 = 17.576), y para aquellas en las que se produzcan "hembras" 1-4 probar con otra posición de los rotores, más otra adicional en el caso de que también se produzcan "hembras" 2-5. Y todo ello para cada una de las ubicaciones posibles de los rotores en las ranuras que los alojan (3! = 3 x 2 x 1 = 6), es decir, habría que hacer esto un total de 17.576 x 6 = 105.456 veces.

Por tanto, en el ejemplo:
Evidentemente es una locura probar esto manualmente (máxime cuando se trata de conocer el orden de los rotores y el ajuste de los anillos de la clave del día), por lo que Rejewski inventó la bomba criptológica para automatizar este proceso de búsqueda de "hembras" en las posiciones 1-4, 2-5 y 3-6.

Básicamente, la bomba constaba de: 6 juegos de rotores (3 pares de juegos), un motor que permitía que estos giraran de forma sincronizada y un conjunto de interruptores. Es decir, se basaba en 6 máquinas Enigma o 3 ciclómetros.

Si no lo he entendido mal:

- En todos los juegos el orden de los rotores era el mismo.

- En cada par de juegos el rotor rápido (N) del segundo juego estaba ajustado tres posiciones con respecto al rotor rápido del primero, el rotor central (M) estaba en la misma posición en ambos y el rotor lento (L) también estaba en la misma posición en los dos.

El operador ajustaba la bomba de acuerdo a los tres indicadores, de tal forma que al ponerse en funcionamiento el primer par de juegos de rotores se encargaba de probar todas las posiciones posibles a partir del primer indicador (PL1, PM1, PN1 y PL1, PM1, PN1+3), el segundo par hacía lo mismo a partir del segundo indicador (PL2, PM2, PN2+1 y PL2, PM2, PN2+4) y el tercero a partir del tercer indicador (PL3, PM3, PN3+2 y PL3, PM3, PN3+5).

La bomba recorría así las 17.576 posibles situaciones de los rotores (PL1, PM1, PN1) y cuando los tres pares de rotores encontraban simultáneamente una hembra para un carácter dado la bomba se paraba y se tenía ya una posible solución que era probada en una réplica de la máquina Enigma.

Si no eran correctas ningunas de las posibles soluciones encontradas o no se hallaba ninguna, la bomba debía ser reconfigurada para otro orden de los rotores y volver a ponerla en funcionamiento.

La bomba tardaba unas doce horas en recorrer las 105.456 posibles posiciones de los rotores correspondientes a todos los órdenes de los mismos en las ranuras que los alojaban, por lo que los polacos construyeron 6 bombas (cada una de ellas se configuraba con uno de los posibles órdenes de los rotores) para bajar el tiempo aproximadamente a dos horas.

Pero, veamos lo que ocurriría en nuestro ejemplo:

1º) Supongamos que la bomba con la configuración del orden de los rotores I-III-II se para en la prueba número 6.521, mostrándonos la posición de los rotores del primer juego del primer par de ellos en "K-I-O", lo que significaría, tal y como se muestra en la tabla anterior, que se ha encontrado una "hembra" 1-4 en dichas posiciones, otra "hembra" 2-5 en "D-N-N" y otra "hembra" 3-6 en "O-W-O".

2º) En este caso se trataría de una posible solución, por lo que habría que calcular el ajuste de los anillos; cosa trivial llegado a este punto.

Considerando que las pruebas se han hecho con el ajuste de los anillos en "Z-Z-Z", que la posición del primer juego del primer par de ellos se ha parado en "K-I-O" y que el primer indicador de los mensajes interceptados es "B-S-U":

- Como "B" está 9 posiciones por delante de "K", el ajuste del anillo del rotor lento es "Q" (ya que "Q" está 9 posiciones delante de "Z").

- Como "S" está 16 posiciones por delante de "I", el ajuste del anillo del rotor medio es "J" (ya que "J" está 16 posiciones delante de "Z").

- Como "U" está 20 posiciones por delante de "O", el ajuste del anillo del rotor rápido es "F" (ya que "F" está 20 posiciones delante de "Z").

Gráficamente:

3º) Con lo que la posible clave del día contendría los siguientes valores:

Orden de los rotores: "I-III-II".
Ajuste de los anillos: "Q-J-F".

4º) Probar la posible solución en una réplica de la máquina Enigma para ver si se obtiene algo más o menos coherente, ya que, al igual que en el método de las hojas Zygalski, todavía faltaría averiguar las conexiones realizadas en el tablero para obtener la clave del día completa. Los alemanes, por aquella época, utilizaban sólo 6 cables para intercambiar pares de letras, por lo que esta última tarea era relativamente sencilla.

Sin embargo, poco tiempo después, en diciembre de 1938, los alemanes proporcionaron dos nuevos rotores a los operadores (ahora disponían de 5 rotores utilizables de 3 en 3); con lo que, además de que era necesario deducir el cableado de los dos rotores adicionales, el número de órdenes posibles de los rotores se multiplicó por 10, es decir, las posibles disposiciones de los rotores en las ranuras que los alojaban eran ahora 60. Esto significaba que los polacos tenían que elaborar 1.404 nuevas hojas Zigalsky, hasta un total de 1.560, y construir 54 nuevas bombas Rejewski, hasta un total de 60. Lo que no era posible con los escasos recursos con los que contaban, ni por el tiempo necesario para ello; los polacos eran conscientes de la inminente invasión de Polonia. De nuevo, las comunicaciones del ejército alemán recuperaron casi por completo su opacidad.

Para complicar aún más la situación, en enero de 1939, los alemanes aumentaron de 6 a 10 los cables para intercambiar letras en el panel de conexiones, ahora 20 teclas podían verse alteradas por éste, lo que hacía todavía más difícil el criptoanálisis.

Por todo ello, en julio de 1939 (a menos de 2 meses del inicio del conflicto armado), a los polacos no les quedó más remedio que compartir su trabajo de criptoanálisis con los franceses y británicos.

Como ya sabemos, el 1 de septiembre de 1939, Alemania invade Polonia y comienza la II Guerra Mundial.

Los secretos del criptoanálisis polaco hasta la fecha acabaron en Bletchley Park, donde los británicos habían establecido la sede de la Escuela Gubernamental de Códigos y Cifras ("Government Code and Cypher School, GC&CS") y en la que contando con medios muy superiores a los de los polacos se pusieron inmediatamente a trabajar en base a la información y al material que estos últimos les habían facilitado.

El primer método de los polacos con el que comenzaron a trabajar los británicos fue el de las hojas Zygalski, pero duró poco tiempo, ya que a mediados de 1940 los alemanes dejaron de transmitir dos veces de forma consecutiva los tres caracteres cifrados de la "clave de sesión", con lo que se invalidaron todos los métodos de criptoanálisis basados en ese doble cifrado.

Y es aquí donde entra en juego en esta historia el genio de Alan Turing, pero esto lo contaré en un post posterior.