FPGA: Diseño de ingeniería inversa [cerrado]

-2

Estoy buscando determinar la plausibilidad de la ingeniería inversa de un diseño de un FPGA. Supongamos que una empresa fabrica su diseño revolucionario en FPGAs y he logrado adquirir uno. Mi objetivo es eliminar la configuración del chip y reconstruir el Netlist, preferiblemente en EDIF. Sé que la seguridad del diseño de FPGA es una preocupación importante, por lo que me hace creer que el diseño se eliminó con éxito de un FPGA en el pasado ... Supongo que no hay una forma "estándar" de lograr esto, pero ¿hay alguna forma conocida / documentada que no haya encontrado todavía?

Lo que sé hasta ahora es que hay tres tipos principales de FPGA: SRAM, Flash y anti-fusible .

  • Los chips Anti-fusible tienen su diseño grabado permanentemente con alto voltaje; la complejidad de la reingeniería del diseño parece demasiado grande, por lo que solo nos olvidaremos de ellos por ahora.
  • Los chips Flash tienen el diseño almacenado de forma no volátil dentro del FPGA. Aunque se considera 'en vivo durante el encendido', el diseño se carga desde la memoria flash interna al FPGA. Si se puede acceder a este flash, parece que podemos eliminar los datos de configuración y construir la lista de redes desde allí.
  • Los chips SRAM almacenan el diseño en alguna memoria externa (como una EEPROM o alguna RAM). Parece que esta memoria generalmente está configurada con una interfaz JTAG que me dice que no debería ser demasiado difícil eliminar la configuración.

Soy consciente de que en estos días la mayoría de los FPGA tienen sus datos de configuración cifrados en el dispositivo. Este es un problema aparte y, por el momento, ignorémoslo.

Una vez que se adquiere la configuración de texto plano, parece haber un problema de formato. Parece que la mayoría de las herramientas CAD tienen sus propios formatos de flujo de bits. Hasta ahora me he topado

  1. SVF - Formato vectorial serie
  2. XSVF - Formato de vector serial mejorado
  3. STAPL - Altera
  4. JAM
  5. JIC - Configuración indirecta de JTAG
  6. SOF - Archivo de objetos SRAM
  7. POF - Archivo de objeto de programa
  8. RBF - Archivo binario sin formato
  9. TTF - Archivo de texto tabular
  10. BIN
  11. BIT - Xilinx
  12. PDB - Actel

El objetivo es terminar con una lista de redes en formato EDIF. He escuchado que hay traductores en la mayoría de las herramientas comunes, pero no puedo encontrar cuál, si alguno de los formatos anteriores es lo que se usa para convertir a EDIF. . ¿Son estos archivos de configuración las herramientas de CAD que se utilizan para representar una lista de redes o primero deben convertirse en otra cosa? Si es así, ¿cada una de las herramientas respectivas proporciona medios para hacerlo?

    
pregunta nhoughto

2 respuestas

3

Estos archivos no son representaciones de listas de redes. Son instrucciones de configuración binaria para el FPGA, que contienen instrucciones para configurar los conmutadores de enrutamiento y los bancos IO y para cargar las RAM, LUT, flip-flops, pestillos, PLL, DCM y transceptores con configuraciones iniciales. Necesitará saber qué partes de las instrucciones de configuración corresponden a qué componentes internos y cómo se conectan estos componentes internos. Luego, podría juntar la lista de redes asignada, colocada y enrutada. Sin embargo, desentrañar la construcción del flujo de bits de configuración no es tan fácil como la estructura y los comandos específicos generalmente no están públicamente documentados. Esto hace que este tipo de ingeniería inversa sea más difícil, pero ciertamente no imposible. Realmente solo proporciona seguridad a través de la oscuridad. Existen varios proyectos para crear cadenas de herramientas de FPGA de código abierto que han diseñado por ingeniería inversa los formatos de flujo de bits para un par de FPGA diferentes, a saber, la serie iCE40 de Lattice.

Sin embargo, ha omitido totalmente la parte de obtener la información de configuración del FPGA en primer lugar. Esto no es trivial. La interfaz JTAG se puede deshabilitar internamente al FPGA cuando el diseño lo requiere, lo que hace que la lectura del diseño sea mucho más complicada. Con los FPGA con memoria flash interna, los bits de protección del código evitarán la lectura a través de cualquier interfaz de depuración. No estoy seguro de si hay alguna forma de evitar eso que no implique el destape del chip. Los FPGA basados en SRAM cargarán una configuración de una memoria externa de algún tipo. Snooping esto con un analizador lógico permitirá trivialmente recuperar un diseño. Sin embargo, si el diseño es sensible, entonces los FPGA de final superior generalmente admitirán algún tipo de cifrado de flujo de bits. Esto puede usar una clave que se graba en las celdas OTP en el FPGA, al mismo tiempo que deshabilita permanentemente la interfaz JTAG, o al menos la depuración a través de JTAG, o se almacena en una memoria SRAM respaldada por batería. En este caso, tampoco es posible acceder al flujo de bits sin cifrar sin modificar físicamente o sondear la matriz FPGA.

    
respondido por el alex.forencich
1

Cuando solía hacer FPGA, usaba VPR para enrutar mis gráficos. El formato EDIF es un intermediario en la cadena de herramientas, y luego presiono el EDIF al "objetivo". Luego tomo el flujo de bits y lo envío al formato EDIF a un programa que tiene mi matriz de conmutación completa para verificación. Luego compararía los archivos EDIF. Tuvimos la situación en la que 1/2 del equipo hizo el enrutamiento del gráfico y las herramientas, y 1/2 hizo los circuitos, por lo que el programa estaba principalmente allí para asegurarse de que nuestros mapas de fusibles coincidieran.

Sé que los chicos de Toronto tienen un enrutador VPR a Vertex II, por lo que los formatos de flujo de bits están disponibles en algún lugar. El equipo Song de Georgia Tech también tiene un enrutador Altera. Creo que solo necesitas profundizar en la documentación de VPR.

    
respondido por el b degnan

Lea otras preguntas en las etiquetas