<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>1815-5928</journal-id>
<journal-title><![CDATA[Ingeniería Electrónica, Automática y Comunicaciones]]></journal-title>
<abbrev-journal-title><![CDATA[EAC]]></abbrev-journal-title>
<issn>1815-5928</issn>
<publisher>
<publisher-name><![CDATA[Universidad Tecnológica de La Habana José Antonio Echeverría, Cujae]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S1815-59282013000300005</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Diseño e integración de algoritmos criptográficos en sistemas empotrados sobre FPGA]]></article-title>
<article-title xml:lang="en"><![CDATA[Design and Integration of Cryptographic Algorithms on FPGA-Based Embedded Systems]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cabrera Aldaya]]></surname>
<given-names><![CDATA[Alejandro]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cabrera Sarmiento]]></surname>
<given-names><![CDATA[Alejandro José]]></given-names>
</name>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Instituto Superior Politécnico José Antonio Echeverría, Cujae, Complejo de Investigaciones Tecnológicas Integradas ]]></institution>
<addr-line><![CDATA[La Habana ]]></addr-line>
<country>Cuba</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Instituto Superior Politécnico José Antonio Echeverría, Cujae, Facultad de Ingeniería Eléctrica ]]></institution>
<addr-line><![CDATA[La Habana ]]></addr-line>
<country>Cuba</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>12</month>
<year>2013</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>12</month>
<year>2013</year>
</pub-date>
<volume>34</volume>
<numero>3</numero>
<fpage>41</fpage>
<lpage>51</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S1815-59282013000300005&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S1815-59282013000300005&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S1815-59282013000300005&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[En este trabajo se integran implementaciones hardware de algoritmos criptográficos a la biblioteca OpenSSL la cual es utilizadapor aplicaciones sobre el sistema operativo Linux para asegurar redes TCP/IP. Los algoritmos implementados son el AES y las funciones resumen SHA-1 y SHA-256. Estos algoritmos son implementados como coprocesadores del procesador MicroBlaze utilizando interfaces FSL para el intercambio de datos entre ellos. Estos coprocesadores son integrados dentro de la biblioteca OpenSSL considerando la naturaleza multitarea del sistema operativo Linux, por lo que se selecciona un mecanismo de sincronización para controlar el acceso a estos dispositivos. Además son presentados los resultados de velocidad alcanzados por los coprocesadores integrados en la biblioteca utilizando la herramienta speed de la misma. Finalmente es presentado el impacto de estos coprocesadores en la velocidad de transmisión a través de una red privada virtual utilizando la herramienta OpenVPN.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[In this paper hardware implementations of cryptographic algorithms are integrated to the OpenSSL library which is used by the Linux operating system applications to protect TCP/IP networks. The selected algorithms are AES and the hash functions SHA-1 and SHA-256. These algorithms are implemented in hardware as coprocessors of Xilinx MicroBlaze soft processor core using the FSL interface for data exchange. These coprocessors are integrated inside the OpenSSL library considering Linux operating system multitasking, so a synchronization technique is selected to control the access to the hardware coprocessors. The speed gain achieved is measured using the OpenSSL's speed utility. Finally a virtual private network is configured using OpenVPN in order to compare the transmission rate using the coprocessors and without them.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[FPGA]]></kwd>
<kwd lng="es"><![CDATA[microblaze]]></kwd>
<kwd lng="es"><![CDATA[linux]]></kwd>
<kwd lng="es"><![CDATA[criptografía]]></kwd>
<kwd lng="es"><![CDATA[OpenSSl]]></kwd>
<kwd lng="en"><![CDATA[FPG]]></kwd>
<kwd lng="en"><![CDATA[microblaze]]></kwd>
<kwd lng="en"><![CDATA[linux]]></kwd>
<kwd lng="en"><![CDATA[cryptography]]></kwd>
<kwd lng="en"><![CDATA[OpenSSL]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <P align="right"><font size="2" face="Verdana"><strong>ARTICULO ORIGINAL</strong></font></P>     <P>&nbsp;</P>     <P><font size="4" face="Verdana"><b>Dise&ntilde;o e integraci&oacute;n de    algoritmos criptogr&aacute;ficos en sistemas    empotrados sobre FPGA </b></font></P>     <P>&nbsp;</P>     <P><font size="2"><font size="3" face="Verdana"><strong>Design and Integration of Cryptographic Algorithms on FPGA-Based Embedded Systems</strong></font></font></P>     <P>&nbsp;</P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana"><b>MSc. Alejandro Cabrera Aldaya<SUP>1</SUP>, Dr. Alejandro Jos&eacute; Cabrera    Sarmiento<SUP>2</SUP></b></font></P>     <P> <font size="2" face="Verdana">1. Complejo de Investigaciones Tecnol&oacute;gicas Integradas, Instituto Superior Polit&eacute;cnico &#171;Jos&eacute; Antonio Echeverr&iacute;a&#187;, Cujae, La Habana, Cuba. E:mail: <a href="mailto:acabrera@udio.cujae.edu.cu">acabrera@udio.cujae.edu.cu    <br> </a></font><font size="2" face="Verdana">2. Facultad de Ingenier&iacute;a El&eacute;ctrica, Instituto Superior Polit&eacute;cnico &#171;Jos&eacute; Antonio Echeverr&iacute;a&#187;, Cujae, La Habana, Cuba. E:mail <a href="mailto:alex@electrica.cujae.edu.cu">alex@electrica.cujae.edu.cu</a></font></P>     ]]></body>
<body><![CDATA[<P>&nbsp;</P>     <P>&nbsp;</P> <hr>     <P><font size="2" face="Verdana"><B>RESUMEN </B> </font></P>     <P><font size="2" face="Verdana">En este trabajo se integran implementaciones hardware de algoritmos criptogr&aacute;ficos a la biblioteca OpenSSL la cual  es utilizadapor aplicaciones sobre el sistema operativo Linux para asegurar redes TCP/IP. Los algoritmos  implementados son el AES y las funciones resumen SHA-1 y SHA-256. Estos algoritmos son implementados como coprocesadores  del procesador MicroBlaze utilizando interfaces FSL para el intercambio de datos entre ellos. Estos coprocesadores  son integrados dentro de la biblioteca OpenSSL considerando la naturaleza multitarea del sistema operativo Linux, por  lo que se selecciona un mecanismo de sincronizaci&oacute;n para controlar el acceso a estos dispositivos. Adem&aacute;s son  presentados los resultados de velocidad alcanzados por los coprocesadores integrados en la biblioteca utilizando la  herramienta <I>speed</I> de la misma. Finalmente es presentado el impacto de estos coprocesadores en la velocidad de transmisi&oacute;n  a trav&eacute;s de una red privada virtual utilizando la herramienta OpenVPN. </font></P>     <P><font size="2" face="Verdana"><strong>Palabras claves:</strong> FPGA, microblaze, linux, criptograf&iacute;a, OpenSSl.    <br> </font></P> <hr>     <P><font size="2" face="Verdana"><B>ABSTRACT</B></font></P>     <P><font size="2" face="Verdana">In this paper hardware implementations of cryptographic algorithms are integrated to the OpenSSL library  which is used by the Linux operating system applications to protect TCP/IP networks. The selected algorithms are AES  and the hash functions SHA-1 and SHA-256. These algorithms are implemented in hardware as coprocessors of  Xilinx MicroBlaze soft processor core using the FSL interface for data exchange. These coprocessors are integrated  inside the OpenSSL library considering Linux operating system multitasking, so a synchronization technique is selected  to control the access to the hardware coprocessors. The speed gain achieved is measured using the OpenSSL's  speed utility. Finally a virtual private network is configured using OpenVPN in order to compare the transmission  rate using the coprocessors and without them.  </font></P>     <P><font size="2"><font face="Verdana"><strong>Key words:</strong> FPG, microblaze, linux, cryptography, OpenSSL.   </font> </font>    <br> </P> <hr>     ]]></body>
<body><![CDATA[<P>&nbsp;</P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>INTRODUCCI&Oacute;N</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">Debido al creciente aumento de la complejidad de los sistemas empotrados y la posibilidad de comunicaci&oacute;n a    trav&eacute;s de redes de comunicaciones, la seguridad de las mismas se convierte en un aspecto a tener en cuenta y en    donde entran a jugar protocolos criptogr&aacute;ficos que solamente hab&iacute;an sido utilizados en sistemas basados en dispositivos    de computo tradicionales, como computadoras personales, servidores, etc. con capacidades de procesamiento    muy superiores a las que se pueden desarrollar en un sistema    empotrado<SUP>1</SUP>. Esto conlleva a la implementaci&oacute;n de    estos algoritmos en arquitecturas no convencionales y con diferentes potencialidades, por ejemplo, tanto    en microcontroladores de 8 bits basados en arquitectura 8051 de Intel, como en sistemas empotrados basados en    el procesador MicroBlaze de Xilinx, haciendo esta tarea no homog&eacute;nea y dependiente de la arquitectura y de los    recursos del sistema de    procesamiento<SUP>2</SUP>.  </font></P>     <P><font size="2" face="Verdana">Un aspecto muy importante a tener en cuenta en la implementaci&oacute;n de algoritmos criptogr&aacute;ficos es la cantidad  de recursos de c&oacute;mputo que puede ser necesario destinar a la ejecuci&oacute;n de los mismos, los cuales en algunos casos  no son despreciables, como se puede apreciar  en<SUP>1, 3, 4</SUP>. Esto da lugar a que sea necesario acelerar mediante  hardware dedicado la ejecuci&oacute;n de aquellos algoritmos cuyo tiempo de procesamiento es considerable en un  procesador empotrado, permitiendo as&iacute; reducir la carga del procesador y con ello destinar sus recursos a la ejecuci&oacute;n de  las aplicaciones principales del sistema. Por ejemplo, en sistemas empotrados donde sea necesario garantizar la  seguridad de la comunicaci&oacute;n entre diferentes dispositivos conectados a trav&eacute;s de una red TCP/IP, es necesario  implementar algoritmos  criptogr&aacute;ficos<SUP>5</SUP>. Esta tarea no es la principal que debe llevar a cabo este sistema, por lo que la cantidad  de tiempo de procesamiento utilizada por la misma debe ser reducida para asegurar que las aplicaciones principales  del sistema tengan a su disposici&oacute;n la mayor capacidad de c&oacute;mputo posible, situaci&oacute;n que conlleva a la necesidad de  la implementaci&oacute;n hardware de los algoritmos criptogr&aacute;ficos. </font></P>     <P><font size="2" face="Verdana">En este trabajo se implementan algoritmos criptogr&aacute;ficos utilizando la l&oacute;gica reconfigurable de los FPGA de Xilinx  para luego ser integrados en un sistema empotrado donde el procesador MicroBlaze es la unidad central de  procesamiento. El objetivo de esta integraci&oacute;n es evaluar el impacto de la aceleraci&oacute;n de estos algoritmos durante su utilizaci&oacute;n  en protocolos seguros de comunicaciones basados en TCP/IP. </font></P>     <P><font size="2" face="Verdana">La organizaci&oacute;n de este art&iacute;culo es la siguiente: en la primera secci&oacute;n se brinda una introducci&oacute;n al protocolo  SSL/TLS para establecer comunicaciones seguras con el objetivo de seleccionar los algoritmos a implementar en hardware.  En la segunda secci&oacute;n se introduce el sistema empotrado de estudio, comentando sus componentes y funciones  principales. En la tercera secci&oacute;n se aborda el dise&ntilde;o e implementaci&oacute;n de los algoritmos criptogr&aacute;ficos seleccionados, as&iacute; como  su integraci&oacute;n en el sistema empotrado descrito anteriormente. En la cuarta secci&oacute;n se expone el mecanismo de  integraci&oacute;n de estos algoritmos en la biblioteca OpenSSL la cual es utilizada por aplicaciones para establecer  comunicaciones seguras sobre el sistema operativo Linux. Finalmente se exponen los resultados de la aceleraci&oacute;n de los algoritmos  en el sistema yse resaltan las principales conclusiones de la investigaci&oacute;n. </font></P>     <P><font size="2" face="Verdana"><B>SELECCI&Oacute;N DE LOS ALGORIMOS CRIPTOGR&Aacute;FICOS</B> </font></P>     <P><font size="2" face="Verdana">El protocolo SSL (<I>Secure Socket Layer</I>) fue creado desde el principio de la d&eacute;cada de los noventa inicialmente por  la compa&ntilde;&iacute;a Netscape. Al finalizar esta d&eacute;cada fue estandarizado por la IETF  (<I>Internet EngineeringTaskForce</I>) como TLS  (<I>TransportLayer Security</I>). Este protocolo permite establecer comunicaciones seguras entre dos nodos a  trav&eacute;s de redes IP <SUP>5</SUP>.  </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">El mismo se divide en dos etapas fundamentales: inicio de sesi&oacute;n e intercambio de datos. El prop&oacute;sito del inicio  de sesi&oacute;n es lograr que los nodos que desean establecer una comunicaci&oacute;n segura acuerden las claves secretas  necesarias para enviar y recibir datos durante la segunda etapa del protocolo. Para llevar a cabo esta tarea se utilizan  algoritmos criptogr&aacute;ficos de intercambio de claves y de firma digital, ambos basados en criptograf&iacute;a asim&eacute;trica (clave de  cifrado difiere de la clave de descifrado). La segunda etapa utiliza las claves generadas durante el inicio de sesi&oacute;n para  proteger los datos intercambiados entre los dos nodos. Durante esta etapa se utilizan algoritmos de cifrado sim&eacute;trico y  de chequeo de integridad <SUP>6</SUP>. </font></P>     <P><font size="2" face="Verdana">En esta secci&oacute;n se seleccionar&aacute;n los algoritmos criptogr&aacute;ficos,utilizados en el protocolo TLS, a implementar en  hardware utilizando los recursos del FPGA. Para realizar esta selecci&oacute;n se tuvieron en cuenta los siguientes par&aacute;metros: </font></P>     <P><font size="2" face="Verdana">_     Cantidad de tiempo consumido por la ejecuci&oacute;n del algoritmo. </font></P>     <P><font size="2" face="Verdana">_     Frecuencia de utilizaci&oacute;n de los algoritmos. </font></P>     <P><font size="2" face="Verdana">_     Selecci&oacute;n realizada por otros fabricantes y desarrolladores. </font></P>     <P><font size="2" face="Verdana">La criptograf&iacute;a asim&eacute;trica consume m&aacute;s tiempo de procesamiento con respecto al resto de las primitivas    criptogr&aacute;ficas utilizadas por el protocolo TLS. Una comparaci&oacute;n de la misma con respecto a otros algoritmos se muestra en la  <a href="/img/revistas/eac/v34n3/t0105313.jpg">Tabla 1</a>.Como se puede </font><font size="2" face="Verdana">apreciar en la <a href="/img/revistas/eac/v34n3/t0105313.jpg">Tabla 1</a>, los algoritmos RSA (llamado as&iacute; por las iniciales de los creadores, <I>Rivest-Shamir-Adleman</I>) y ECDSA (<I>Elliptic Curve Digital  SignatureAlgorithm</I>), algoritmos de firmas digitales basados en RSA y curvas  el&iacute;pticas respectivamente, consumen mucho m&aacute;s tiempo de procesamiento que el AES-256-CBC (cifrado sim&eacute;trico) y la  funci&oacute;n hash SHA-512. Por otra parte, los algoritmos RSA y ECDSA (basados en criptograf&iacute;a asim&eacute;trica) solamente  son utilizados durante el inicio de una sesi&oacute;n TLS, por lo cual la ejecuci&oacute;n de estos algoritmos no es muy frecuente  en sistemas empotrados como el utilizado durante esta investigaci&oacute;n. </font></P>     
<P><font size="2" face="Verdana">Otro de los aspectos que se han tenido en cuenta durante la selecci&oacute;n de los algoritmos a implementar con los  recursos hardware del FPGA est&aacute; relacionado con decisiones que han tomado algunos fabricantes e investigadores en  relaci&oacute;n a este tema. Es muy com&uacute;n encontrar reportes de implementaciones muy r&aacute;pidas de los algoritmos que utilizan  criptograf&iacute;a asim&eacute;trica para aquellos sistemas de c&oacute;mputo que necesiten manejar varias conexiones TLS al mismo tiempo, como  es el caso de servidores de redes privadas virtuales, servidores de transferencias bancarias,  etc.<SUP>7</SUP>. Por otra parte, los algoritmos de cifrado sim&eacute;trico y las funciones hash (los utilizados durante la etapa de intercambio de datos en  TLS) se encuentran implementados en sistemas de c&oacute;mputo que tienden a manejar menor cantidad de conexiones  con relaci&oacute;n a la cantidad de informaci&oacute;n que intercambian con el otro extremo de la  conexi&oacute;n<SUP>8</SUP>.  </font></P>     <P><font size="2" face="Verdana">Por estas razones se ha seleccionado acelerar los algoritmos que intervienen en la etapa del intercambio de datos  del protocolo TLS, es decir un algoritmo de cifrado sim&eacute;trico y una funci&oacute;n resumen (hash), la cual es utilizada  para calcular un c&oacute;digo de autenticaci&oacute;n del mensaje utilizando el algoritmo HMAC  (<I>Keyed-HashedMessageAuthenticationCode</I>). </font></P>     <P><font size="2" face="Verdana">El algoritmo AES-256 y las funciones resumen (hash) SHA-1 y SHA-256 fueron las seleccionadas durante  esta investigaci&oacute;n. Estos algoritmos son ampliamente utilizados y est&aacute;n estandarizados por lo que poseen una  amplia utilizaci&oacute;n a nivel  mundial<SUP>9-11</SUP>. M&aacute;s detalles sobre el proceso de selecci&oacute;n de los algoritmos a implementar pueden  ser encontrados en<SUP>12</SUP>. </font></P>     <P><font size="2" face="Verdana"><B>IMPLEMENTACI&Oacute;N HARDWARE DE LOS  ALGORITMOSAES-256, SHA-1 Y SHA-256</B> </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">En la <a href="/img/revistas/eac/v34n3/f0105313.jpg">figura 1</a> se muestra un diagrama del sistema empotrado utilizado durante esta investigaci&oacute;n. En el mismo  se muestra el procesador MicroBlaze as&iacute; como un conjunto de m&oacute;dulos hardware que permiten la ejecuci&oacute;n del  sistema operativo Linux y el establecimiento de conexiones TCP/IP tal y como se describe  en<SUP>13</SUP>. </font></P>     
<P><font size="2" face="Verdana">El procesador MicroBlaze es capaz de comunicarse con sus perif&eacute;ricos a trav&eacute;s de los buses LMB  (<I>Local Memory Bus</I>) y PLB (<I>Peripheral Local  Bus</I>)<SUP>14</SUP>. Adem&aacute;s este procesador dispone de la interfaz FSL  (<I>Fast Simplex Link</I>) dedicada para la expansi&oacute;n de las funcionalidades del procesador a trav&eacute;s de coprocesadores  hardware<SUP>15</SUP>. Los coprocesadores de los algoritmos criptogr&aacute;ficos implementados utilizan esta interfaz para intercambiar datos con el microprocesador  debido a que esta interfaz es la m&aacute;s veloz que posee este  procesador<SUP>16</SUP>. </font></P>     <P><font size="2" face="Verdana">El n&uacute;cleo de la interfaz FSL es una FIFO compartida entre el procesador y el coprocesador, lo que permite el  intercambio de datos de una forma directa y r&aacute;pida utilizando instrucciones de escritura y lectura de la  interfaz<SUP>17</SUP>. </font></P>     <P><font size="2" face="Verdana"><B>Implementaci&oacute;n hardware del algoritmo AES-256</B> </font></P>     <P><font size="2" face="Verdana">El algoritmo AES (<I>AdvancedEncryption  Standard</I>) es un algoritmo de cifrado sim&eacute;trico de gran aceptaci&oacute;n a  nivel mundial debido a que no se han encontrado debilidades en el mismo que comprometan su  seguridad<SUP>9</SUP>. Este algoritmo cifra y descifra la informaci&oacute;n dividiendo los datos a procesar en bloques de 128 bits. El algoritmo AES es capaz  de cifrar informaci&oacute;n con claves de 128, 192 y 256 bits, lo cual lo convierte en un algoritmo f&aacute;cilmente adaptable a  las necesidades de seguridad del sistema donde vaya ser utilizado. </font></P>     <P><font size="2" face="Verdana">La estructura algor&iacute;tmica del AES es sencilla pues est&aacute; basado en cuatro transformaciones fundamentales:  ShiftRows, SubBytes, MixColumns, y AddRoundKey, las cuales se le aplican a un bloque de 128 bits llamado estado. El estado  se puede representar como una matriz de cuatro filas por cuatro columnas, donde cada celda corresponde a un byte  del estado. La transformaci&oacute;n ShiftRows, rota un byte de cada fila un determinado n&uacute;mero de localizaciones.  La transformaci&oacute;n SubBytes sustituye cada byte del estado por otro a trav&eacute;s de una tabla definida en la descripci&oacute;n  del algoritmo.La transformaci&oacute;n AddRoundKey es el resultado del OR-exclusivo entre el estado y la subclave de  ronda correspondiente. La transformaci&oacute;n MixColumn se obtiene al multiplicar cada columna del estado por una matriz  de coeficientes utilizando la aritm&eacute;tica de campos finitos utilizada por este algoritmo <SUP>9</SUP>. Estas transformaciones son aplicadas al bloque a procesar de forma repetitiva, donde el n&uacute;mero de iteraciones utilizadas depende del tama&ntilde;o  de clave seleccionado. Las transformaciones son simples de implementar en hardware lo que permite una  implementaci&oacute;n del mismo con pocos recursos del FPGA. En <SUP>12</SUP> y en <SUP>18</SUP> se encuentra una descripci&oacute;n detallada del dise&ntilde;o de  este coprocesador. </font></P>     <P><font size="2" face="Verdana">Se ha seleccionado el tama&ntilde;o de clave de 256 bits debido a que es el que presenta mayor seguridad y como se  expone en <SUP>18</SUP> la diferencia de la latencia de ejecuci&oacute;n del algoritmo no sobrepasa los 20 ciclos de reloj ocupando la  misma cantidad de recursos l&oacute;gicos del FPGA. </font></P>     <P><font size="2" face="Verdana">En la <a href="/img/revistas/eac/v34n3/f0205313.jpg">figura 2</a> se puede apreciar un diagrama de la estructura interna de la implementaci&oacute;n hardware del algoritmo  AES. A la izquierda de la misma se encuentran los bloques encargados de almacenar el bloque que est&aacute; siendo procesado. </font></P>     
<P><font size="2" face="Verdana">Este almacenamiento se lleva a cabo utilizando registros de desplazamiento direccionables (SRL_16x8_i), los  cuales permiten la implementaci&oacute;n de las transformaciones ShiftRows y su inversa solamente modificando la direcci&oacute;n  de salida de cada registro<SUP>19</SUP>. Los bloques de memoria RAM (BRAM1 y BRAM2) son utilizados para almacenar las  tablas propuestas en<SUP>20</SUP> para implementar las transformaciones SubBytes y MixColumns del algoritmo, permitiendo  ahorrar recursos l&oacute;gicos del FPGA a cambio de la utilizaci&oacute;n de dos bloques de memoria del dispositivo. La &uacute;ltima  transformaci&oacute;n es la operaci&oacute;n AddRoundKey, la cual es una operaci&oacute;n XOR entre el bloque que se est&aacute; procesando y una  subclave de iteraci&oacute;n generada previamente y almacenada en la memoria RAM3 de la <a href="/img/revistas/eac/v34n3/f0205313.jpg">figura  2</a><SUP>18</SUP>.  </font></P>     
<P><font size="2" face="Verdana">Las entradas que se pueden observar en la <a href="/img/revistas/eac/v34n3/f0205313.jpg">figura 2</a> son manejadas por una m&aacute;quina de estados finitos. Adem&aacute;s,  esta m&aacute;quina de estados permite la comunicaci&oacute;n con el procesador MicroBlaze a trav&eacute;s de las interfaces FSL. </font></P>     
]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">El dise&ntilde;o de este coprocesador ocupa 163 slices y tres bloques de memoria RAM de un FPGA de la familia  Spartan3, siendo este consumo equivalente a una interfaz UART simple, lo que destaca su bajo consumo de recursos  l&oacute;gicos<SUP>18</SUP>. </font></P>     <P><font size="2" face="Verdana"><B>Implementaci&oacute;n hardware de las funciones SHA-1 y SHA-256</B> </font></P>     <P><font size="2" face="Verdana">Las funciones resumen (hash) permiten obtener un &#171;resumen&#187; de longitud fija de una trama de bits, permitiendo  de esta forma comprobar la integridad de los datos. Si los datos a &#171;resumir&#187; son &#171;mezclados&#187; con alguna clave  secreta solamente conocida por entidades confiables, entonces es posible confiar en el origen de los datos. El  algoritmo encargado de &#171;mezclar&#187; el resumen de un mensaje con una clave secreta se conoce como HMAC. Este algoritmo  es gen&eacute;rico para cualquier funci&oacute;n resumen que se utilice, por lo que los detalles del mismo no son relevantes para  esta investigaci&oacute;n<SUP>21</SUP>. </font></P>     <P><font size="2" face="Verdana">Estas funciones son utilizadas por el algoritmo HMAC para generar un c&oacute;digo de autenticaci&oacute;n de mensaje y de  esta forma autenticar al remitente del  mismo<SUP>21</SUP>. </font></P>     <P><font size="2" face="Verdana">Durante esta investigaci&oacute;n se han implementado dos funciones hash (SHA-1 y SHA-256) con el objetivo de abarcar  la versi&oacute;n actual del protocolo TLS y las posteriores <SUP>6</SUP>. </font></P>     <P><font size="2" face="Verdana">En la <a href="/img/revistas/eac/v34n3/f0305313.jpg">figura 3</a> se muestra el modo de operaci&oacute;n de estas funciones. Primeramente se divide el mensaje a &#171;resumir&#187;  en bloques de 512 bits y luego cada bloque es procesado consecutivamente utiliz&aacute;ndose el resumen del bloque  anterior como entrada para el c&aacute;lculo del siguiente.De esta forma la salida del &uacute;ltimo bloque es el resumen del mensaje original. </font></P>     
<P><font size="2" face="Verdana">Debido a que solamente es necesario obtener el resumen del mensaje y no los res&uacute;menes intermedios de cada  bloque, es conveniente no emplear tiempo en la lectura de los resultados intermedios con el objetivo de alcanzar una  mayor velocidad de c&oacute;mputo. </font></P>     <P><font size="2" face="Verdana">En el caso del coprocesador del AES descrito anteriormente, el procesador MicroBlaze debe enviarle un bloque de  128 bits hacia el coprocesador, al terminar el procesamiento los resultados son enviados hacia el procesador a trav&eacute;s  de una interfaz FSL, procedimiento que debe repetirse tantas veces como bloques contenga el mensaje. </font></P>     <P><font size="2" face="Verdana">Debido al algoritmo de las funciones resumen explicado anteriormente y mostrado en la <a href="/img/revistas/eac/v34n3/f0305313.jpg">figura 3</a>, la lectura de  los resultados intermedios solamente implica una p&eacute;rdida de tiempo durante la ejecuci&oacute;n del algoritmo. Con el objetivo  de eliminar esta problem&aacute;tica se propone el circuito mostrado en la <a href="/img/revistas/eac/v34n3/f0405313.jpg">figura 4</a> el cual es capaz de vaciar la FIFO de la  interfaz FSL de salida del coprocesador (a trav&eacute;s de un reset) al recibir un nuevo bloque por parte del procesador.De esta  forma el procesador puede enviar todos los bloques de forma consecutiva y solamente leer el resultado del &uacute;ltimo bloque  que equivale al resumen del mensaje sin necesidad de leer los resultados intermedios, reduciendo de esta forma la  latencia inherente a estas lecturas. </font></P>     
<P><font size="2" face="Verdana">Las operaciones matem&aacute;ticas involucradas en las funciones SHA-1 y SHA-256 son: adici&oacute;n de n&uacute;meros de 32  bits, operaciones XOR, rotaciones y desplazamientos, las cuales son sencillas de implementar en hardware. Para  la implementaci&oacute;n de los coprocesadores de estas funciones se reutiliz&oacute; un dise&ntilde;o de las mismas disponible  gratuitamente en OpenCores.org <SUP>22</SUP>. Este dise&ntilde;o fue estudiado y modificado, con el objetivo de a&ntilde;adir la comunicaci&oacute;n a trav&eacute;s de  FSL y una m&aacute;quina de estados que controlase al coprocesador de la cual carec&iacute;a el m&oacute;dulo original.   </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">El consumo de recursos de los coprocesadores de las funciones SHA-1 y SHA-256 es de 581 y 1016  slices respectivamente<SUP>12</SUP>. Estos consumos representan aproximadamente el 4 y 7 % de los recursos l&oacute;gicos del FPGA  utilizado durante esta investigaci&oacute;n  (Spartan3E-1600K)<SUP>19</SUP>. </font></P>     <P><font size="2" face="Verdana"><B>INTEGRACI&Oacute;N DE LOS COPROCESADORES A LA  BIBLIOTECA OpenSSL</B> </font></P>     <P><font size="2" face="Verdana">La biblioteca OpenSSL posee un mecanismo  (denominado<I>engine</I>) mediante el cual es posible a&ntilde;adir  implementaciones alternativas de los algoritmos criptogr&aacute;ficos que esta posee. La concepci&oacute;n de este mecanismo es la de incorporar  el acceso a los coprocesadores hardware presentes en una arquitectura con el objetivo de remplazar la implementaci&oacute;n  de los algoritmos con el objetivo de lograr mayor velocidad de procesamiento. </font></P>     <P><font size="2" face="Verdana">Esta biblioteca es ampliamente utilizada por otras aplicaciones con el objetivo de utilizar los algoritmos  criptogr&aacute;ficos de la misma como es el caso de las herramientas OpenVPN y  OpenSSH<SUP>23</SUP>. </font></P>     <P><font size="2" face="Verdana">En <SUP>12</SUP> se encuentra disponible una descripci&oacute;n detallada de este mecanismo para integrar algoritmos de cifrado  sim&eacute;trico y funciones hash a esta biblioteca. De forma general un <I>engine</I> contiene la declaraci&oacute;n de un objeto cuyos  m&eacute;todos son espec&iacute;ficos del tipo de algoritmo (ej. cifrado sim&eacute;trico o funci&oacute;n resumen), siendo estos llamados por la  biblioteca cuando un usuario de la misma desea utilizarlo. </font></P>     <P><font size="2" face="Verdana">Un aspecto a tener en cuenta durante la integraci&oacute;n de los coprocesadores a la biblioteca OpenSSL es la  naturaleza multitarea del sistema operativo Linux donde esta biblioteca es ejecutada. Esto implica que varias aplicaciones  pueden desear utilizar el coprocesador concurrentemente, por lo cual el acceso a los coprocesadores debe ser sincronizado  de tal forma de evitar un acceso simultaneo descontrolado. En el sistema operativo Linux las aplicaciones cuando  desean intercambiar informaci&oacute;n con un dispositivo hardware lo hacen a trav&eacute;s de drivers de los mismos, resolvi&eacute;ndose  el problema de la sincronizaci&oacute;n planteado  anteriormente<SUP>24</SUP>. Sin embargo, la utilizaci&oacute;n de drivers para acceder a  los coprocesadores a trav&eacute;s de las interfaces FSL correspondientes presenta el problema que reduce  considerablemente el rendimiento alcanzado por la utilizaci&oacute;n del coprocesador. Esta raz&oacute;n (la cual fue verificada experimentalmente  como parte de la investigaci&oacute;n) ha provocado que actualmente el driver para dispositivos FSL est&eacute; descontinuado y que  la compa&ntilde;&iacute;a Xilinx (fabricante del sistema de procesamientoMicroBlaze) haya decidido permitir el acceso a los  dispositivos conectados a trav&eacute;s de interfaces FSL directamente desde las aplicaciones de usuario, sin necesidad de utilizar  un driver (en las versiones anteriores a la 8.10 de este procesador las instrucciones para acceder a las interfaces FSL  son privilegiadas)<SUP>15</SUP>. </font></P>     <P><font size="2" face="Verdana">Debido a que el acceso a los coprocesadores se realiza sin la utilizaci&oacute;n de un driver es necesario sincronizar desde  la propia biblioteca OpenSSL el acceso a estos coprocesadores. Luego de un estudio de diferentes mecanismos se  ha llegado a la conclusi&oacute;n de que los sem&aacute;foros con nombre del est&aacute;ndar SUSv3  (<I>Single Unix Specificationv3</I>) y las funciones para sincronizar el acceso a ficheros, son las m&aacute;s adecuadas para llevar a cabo esta  tarea<SUP>25</SUP>. La utilizaci&oacute;n de los sem&aacute;foros con nombre es preferida debido a que estos poseen una funci&oacute;n que permite esperar un  determinado tiempo por la captura de un sem&aacute;foro, opci&oacute;n que puede ser &uacute;til para detectar y evitar abrazos fatales.  Desafortunadamente la versi&oacute;n de la biblioteca est&aacute;ndar del lenguaje C utilizada durante esta investigaci&oacute;n no posee implementada  los sem&aacute;foros con nombre, por lo que se ha utilizado la  funci&oacute;n<I>flock</I> disponible en el sistema operativo Linux  para sincronizar el acceso a los coprocesadores. De esta forma se crea un fichero que represente a cada coprocesador  y solamente puede acceder al mismo aquella aplicaci&oacute;n que tenga el control del fichero. Cada aplicaci&oacute;n, antes de  utilizar un coprocesador, debe poseer el control del fichero que lo representa y al terminar de utilizar el coprocesador liberar  el control sobre el mismo. </font></P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>Resultados de la integraci&oacute;n de los coprocesadores </B> </font></P>     <P>&nbsp;</P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">A continuaci&oacute;n se presentan algunas comparaciones de la velocidad de procesamiento de los algoritmos    implementados en software en la propia biblioteca OpenSSLas&iacute; como utilizando los coprocesadores dise&ntilde;ados durante esta investigaci&oacute;n. </font></P>     <P><font size="2" face="Verdana">En la <a href="#t2">tabla 2</a> se muestran las velocidades de ejecuci&oacute;n de las descripciones software (SW) y hardware (HW) de  los algoritmos AES-256 y HMAC utilizando las funciones SHA-1 y SHA-256. Como se puede apreciar en esta <a href="#t2">tabla 2</a>,  la aceleraci&oacute;n obtenida con el coprocesador hardware del algoritmo AES-256-CBC var&iacute;a entre 4,7 y 25,8 veces,  siendo mayor a medida que se incrementa el tama&ntilde;o de bloque. </font></P>     <P align="center"><img src="/img/revistas/eac/v34n3/t0205313.jpg" width="482" height="378"><a name="t2"></a></P>     
<P><font size="2" face="Verdana">Como se puede apreciar, la aceleraci&oacute;n de la implementaci&oacute;n hardware del algoritmo HMAC utilizando la  funci&oacute;n resumen SHA-1 es de apenas 1,3 veces para bloques de 16 bytes, increment&aacute;ndose a medida que se incrementa  el tama&ntilde;o del bloque, hasta alcanzar una aceleraci&oacute;n de 9,3 veces para bloques de 8192 bytes. </font></P>     <P><font size="2" face="Verdana">En la <a href="#t2">Tabla 2</a> tambi&eacute;n se puede apreciar que la aceleraci&oacute;n de la implementaci&oacute;n hardware del algoritmo  HMAC utilizando la funci&oacute;n resumen SHA-256 es de 4,1 veces para bloques de 16 bytes, llegando a ser de 56,2 veces  para bloques de 8192 bytes. </font></P>     <P><font size="2" face="Verdana">Es importante destacar la diferencia significativade velocidad entre las implementaciones software del algoritmo  HMAC, por lo que la utilizaci&oacute;n de la funci&oacute;n software SHA-256 utilizando la implementaci&oacute;n propia de la biblioteca  OpenSSL resultar&iacute;a en una reducci&oacute;n de rendimiento con respecto a la utilizaci&oacute;n de la funci&oacute;n SHA-1. Sin embargo, debido a  que las velocidades alcanzadas utilizando los coprocesadores hardware de ambas funciones son similares, es  posible aumentar el nivel de seguridad utilizando el coprocesador de la funci&oacute;n SHA-256 sin comprometer el rendimiento  del sistema. </font></P>     <P><font size="2" face="Verdana">La <a href="#t3">Tabla 3</a> muestra la velocidad de ejecuci&oacute;n de las implementaciones hardware de los algoritmos utilizando o no  la funci&oacute;n <I>flock</I>, permitiendo apreciar el impacto (en la velocidad) de la utilizaci&oacute;n de esta funci&oacute;n para sincronizar  el acceso a los coprocesadores por parte de diferentes aplicaciones.</font></P>     <P align="center"><font size="2" face="Verdana"><img src="/img/revistas/eac/v34n3/t0305313.jpg" width="487" height="413"></font><a name="t3"></a></P>     
<P><font size="2" face="Verdana">Como se puede apreciar, el impacto de la utilizaci&oacute;n de la funci&oacute;n <I>flock</I>no es significativo, aunque en general  hace disminuir ligeramente la velocidad de ejecuci&oacute;n de los algoritmos. N&oacute;tese que, a&uacute;n con la utilizaci&oacute;n de la  funci&oacute;n <I>flock</I>, se obtienen incrementos de velocidad con respecto a la implementaci&oacute;n software de los algoritmos. </font></P>     <P><font size="2" face="Verdana">Por otra parte, la herramienta OpenVPN permite implementar redes privadas virtuales (VPN,      <I>Virtual Private Network</I>) a nivel de usuario utilizando los protocolos SSL/TLS. Esta herramienta utiliza la biblioteca OpenSSL para la  implementaci&oacute;n de estos protocolos y de los algoritmos criptogr&aacute;ficos involucrados. En la <a href="#t4">Tabla 4</a> se muestran las  velocidades alcanzadas con diferentes configuraciones de la herramienta OpenVPN. La primera l&iacute;nea muestra la velocidad  alcanzada sin la utilizaci&oacute;n de criptograf&iacute;a para proteger el t&uacute;nel de comunicaciones entre los dos extremos de la VPN,  mientras que en las restantes se puede apreciar la velocidad utilizando la implementaci&oacute;n software de los algoritmos y  los coprocesadores dise&ntilde;ados durante esta investigaci&oacute;n. </font></P>     ]]></body>
<body><![CDATA[<P align="center"><img src="/img/revistas/eac/v34n3/t0405313.jpg" width="463" height="321"><a name="t4"></a></P>     
<P><font size="2" face="Verdana">Como se puede apreciar en la <a href="#t4">Tabla 4</a> la utilizaci&oacute;n de los coprocesadores no implica un aumento en la velocidad de  la comunicaci&oacute;n de m&aacute;s del doble con respecto a la utilizaci&oacute;n de las implementaciones software. Esto se debe a que  la herramienta OpenVPN necesita realizar varias transferencias de datos entre el espacio de usuario y el kernel del  sistema operativo para poder encapsular las tramas de red, siendo estas operaciones costosas en tiempo y las  principales responsables de que no se observe un incremento notable en la velocidad. Sin embargo como se puede apreciar en  esta <a href="#t4">tabla 4</a>, la velocidad semultiplica 1,8 veces cuando se utilizan los algoritmos AES y SHA-256 con respecto a  la implementaci&oacute;n software, adem&aacute;s la velocidad alcanzada utilizando la funci&oacute;n SHA-1 y SHA-256 es pr&aacute;cticamente  la misma, por lo que es posible aumentar la seguridad del sistema sin comprometer el rendimiento del sistema si se  utilizan los coprocesadores criptogr&aacute;ficos.   </font></P>     <P>&nbsp;</P>     <P><font size="2"><b><font size="3" face="Verdana">CONCLUSIONES</font></b></font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">Despu&eacute;s de haber concluido el proceso de investigaci&oacute;n, los resultados m&aacute;s significativos obtenidos han sido    los siguientes: </font></P>     <P><font size="2" face="Verdana">_     Se han desarrollado coprocesadores hardware para el algoritmo de cifrado sim&eacute;trico AES y las  funciones resumen SHA-1 y SHA-256. </font></P>     <P><font size="2" face="Verdana">_     El coprocesador AES consume pocos recursos del FPGA, lo que permite su utilizaci&oacute;n en sistemas  empotrados basados en FPGA de bajo y mediano coste. </font></P>     <P><font size="2" face="Verdana">_     Los coprocesadores de las funciones resumen SHA-1 y SHA-256 poseen un consumo de recursos mayor  en comparaci&oacute;n con el del algoritmo AES, pero aun as&iacute; pueden ser considerados apropiados para ser incluidos  en sistemas empotrados en FPGA de bajo a mediano costo. </font></P>     <P><font size="2" face="Verdana">_     La utilizaci&oacute;n de los coprocesadores en entornos multitarea requiere la utilizaci&oacute;n de t&eacute;cnicas de  sincronizaci&oacute;n de tareas para garantizar un correcto funcionamiento de los mismos. </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">_     Es posible aprovechar al m&aacute;ximo la velocidad de ejecuci&oacute;n de los coprocesadores si se procesan tama&ntilde;os  de datos iguales o mayores a 8192 bytes. </font></P>     <P><font size="2" face="Verdana">_     La utilizaci&oacute;n de la funci&oacute;n <I>flock</I> no implica una p&eacute;rdida considerable en el rendimiento obtenido por  los coprocesadores. </font></P>     <P><font size="2" face="Verdana">_     No es necesario implementar el intercambio de datos entre MicroBlaze y los coprocesadores a trav&eacute;s  de unainterfaz m&aacute;s r&aacute;pida (como por ejemplo DMA) para acelerar la transmisi&oacute;n de datos a trav&eacute;s de redes  privadas virtuales utilizando la herramienta OpenVPN, pues la misma no es capaz de aprovechar completamente las  velocidades obtenidas a trav&eacute;s de la interfaz FSL. </font></P>     <P><font size="2" face="Verdana">_     Es posible aumentar la seguridad (utilizando algoritmos computacionalmente m&aacute;s costosos en software)  a trav&eacute;s de la utilizaci&oacute;n de los coprocesadores sin comprometer el rendimiento del sistema. </font></P>     <P>&nbsp;</P>     <P><strong><font size="3" face="Verdana">REFERENCIAS</font></strong></P>     <P>&nbsp;</P>     <!-- ref --><P><font size="2" face="Verdana">1.     Argyroudis, P. G.; Verma, R.; Tewari, H. and    O'Mahony, D.: &#171;Performance Analysis of Cryptographic Protocols    on Handheld Devices,&#187; in Proceedings of the Third IEEE International Symposium on Network Computing and    Applications, 2004, pp. 169174.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">2.     Torres L&oacute;pez, A. and Cuiman M&aacute;rquez,    R.: &#171;Implementaci&oacute;n de dos Esquemas de Firma Digital sobre    Hardware Reconfigurable,&#187; Tesis de Diploma, Instituto Superior Polit&eacute;cnico Jos&eacute; Antonio Echeverr&iacute;a (CUJAE), 2009.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">3.     Xenakis, C.; Laoutaris, N.; Merakos, L. and Stavrakakis,    I.: &#171;A generic characterization of the overheads imposed    by IPsec and associated cryptographic algorithms,&#187; Computer Networks, vol. 50, no. 17, pp.    32253241, 2005.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">4.     Liu, W.; Luo, R. and Yang, H.: &#171;Cryptography Overhead Evaluation and Analysis for Wireless Sensor Networks,&#187;    in Communications and Mobile Computing, 2009, pp.    496501.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">5.     Kayfman, C.; Perlman, R. and Speciner,    M.: Network Security: Private Communicacion in a Public World, 2nd    ed. Prentice Hall, 2002.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">6.     Dierks, T. and Allen, C.: &#171;The TLS Protocol Version 1.0.&#187; Internet Engineering Task Force, pp. 181, 1999.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">7.     Laue, R.; Molter, H. G.; Rieder, F.; Huss, S. A. and Saxena,    K.: &#171;A Novel Multiple Core Co-Processor Architecture    for Efficient Server-based Public Key Cryptographic Applications,&#187; in IEEE Computer Society Annual Symposium on    VLSI, 2008, pp. 8792.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">8.     Broadcom Inc.: &#171;BCM5365 Product Datasheet,    &#187; Datasheet BCM5365, 2003. </font></P>     <!-- ref --><P><font size="2" face="Verdana">9.     National Institute of Standard and Technology    (NIST): &#171;Advanced Encryption Standard.&#187; National Institute of    Standards and Technlogy (NIST), 2001.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">10.     National Institute of Standards and Technology    (NIST): &#171;Secure Hash Standard,&#187; vol. 2. National Institute of    Standards and Technlogy (NIST), 2008.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">11.     Intel Inc.: &#171;Intel's s Advanced Encryption Standard (AES) Instructions Set,    &#187; Israel, 2009. </font></P>     <!-- ref --><P><font size="2" face="Verdana">12.     Cabrera Aldaya, A.: &#171;Integraci&oacute;n de Algoritmos Criptogr&aacute;ficos en Sistemas Empotrados sobre FPGA,&#187; Tesis de    Maestr&iacute;a, Instituto Superior Polit&eacute;cnico Jos&eacute; Antonio Echeverr&iacute;a, 2012.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">13.     Rodr&iacute;guez Chong, J. D.: &#171;Evaluaci&oacute;n y Desarrollo de Aplicaciones para el Sistema Operativo Petalinux,&#187; Tesis de    Diploma, Instituto Superior Polit&eacute;cnico Jos&eacute; Antonio Echeverr&iacute;a (CUJAE), 2010.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">14.     Cabrera Aldaya, A.: &#171;Controlador Maestro basado en FPGA para un Sistema Inteligente de Transporte,&#187; Tesis de    Diploma, Instituto Superior Polit&eacute;cnico Jos&eacute; Antonio Echeverr&iacute;a (CUJAE), 2009.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">15.     Xilinx Inc.: &#171;UG081 - MicroBlaze Processor Reference Guide (v12.0).    &#187; 2011. </font></P>     <!-- ref --><P><font size="2" face="Verdana">16.     Williams, J.; Bergmann, N. and Xie,    X.: &#171;FIFO Communication Models in Operating Systems for    Reconfigurable Computing,&#187; in 13th Annual IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM'05),    2005, pp. 01.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">17.     Xilinx Inc.: &#171;DS499 - Fast Simplex Link v2.0 Bus Datasheet.    &#187; pp. 19, 2010. </font></P>     <!-- ref --><P><font size="2" face="Verdana">18.     Cabrera Aldaya, A. and Cabrera Sarmiento, A.    J.: &#171;Implementaci&oacute;n H&iacute;brida Hardware/Software del Algoritmo    Rijndael,&#187; in IV Simposio Internacional de Electr&oacute;nica: dise&ntilde;o, aplicaciones, t&eacute;cnicas avanzadas y retos actuales, 2011.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">19.     Xilinx Inc.: &#171;DS312-2 - Spartan3E FPGA Family: Functional Description.    &#187; pp. 196, 2005. </font></P>     <!-- ref --><P><font size="2" face="Verdana">20.     Daernen, J. and Rijmen, V.: The Design of Rijndael. Springer, 2002.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">21.     National Institute of Standards and Technlogy    (NIST): &#171;The Keyed-Hash Message Authentication Code.&#187;    National Institute of Standards and Technlogy (NIST), 2002.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">22.     Nugroho, A. E.: &#171;Nugroho Free Hash Cores,&#187;    <I>OpenCores.org</I>, 2010. [Online]. Available: http://opencores.org/project,nfhc.       </font></P>     <!-- ref --><P><font size="2" face="Verdana">23.     Feilner, M.: OpenVPN - Building and Integrating Virtual Private Networks. Packt Publishing Ltd, 2006.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">24.     Corbet, J.; Rubini, A. and Kroah-Hartman,    G.: Linux Device Drivers, 3rd ed. O'Reilly Media Inc., 2005.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">25.     Kerrisk, M.: The Linux Programming Interface. No Starch Press, Inc., 2010.    </font></P>     <P>&nbsp;</P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">Recibido: Julio 2013    ]]></body>
<body><![CDATA[<br> Aprobado: Septiembre 2013</font></P>     <P></P>     <P></P>     <P>&nbsp;</P>     <P></P>     <P></P>     <P></P>     <P>&nbsp;</P>      ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Argyroudis]]></surname>
<given-names><![CDATA[P. G.]]></given-names>
</name>
<name>
<surname><![CDATA[Verma]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Tewari,]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
<name>
<surname><![CDATA[O'Mahony]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Performance Analysis of Cryptographic Protocols on Handheld Devices]]></article-title>
<source><![CDATA[Proceedings of the Third IEEE International Symposium on Network Computing and Applications]]></source>
<year>2004</year>
<page-range>169174</page-range></nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Torres López]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Cuiman Márquez]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<source><![CDATA[Implementación de dos Esquemas de Firma Digital sobre Hardware Reconfigurable]]></source>
<year>2009</year>
<publisher-name><![CDATA[Instituto Superior Politécnico José Antonio Echeverría (CUJAE)]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Xenakis]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
<name>
<surname><![CDATA[Laoutaris]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
<name>
<surname><![CDATA[Merakos]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
<name>
<surname><![CDATA[Stavrakakis]]></surname>
<given-names><![CDATA[I.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A generic characterization of the overheads imposed by IPsec and associated cryptographic algorithms]]></article-title>
<source><![CDATA[Computer Networks]]></source>
<year>2005</year>
<volume>50</volume>
<numero>17</numero>
<issue>17</issue>
<page-range>32253241</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Liu]]></surname>
<given-names><![CDATA[W.]]></given-names>
</name>
<name>
<surname><![CDATA[Luo]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Yang]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Cryptography Overhead Evaluation and Analysis for Wireless Sensor Networks]]></article-title>
<source><![CDATA[Communications and Mobile Computing]]></source>
<year>2009</year>
<page-range>496501</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kayfman]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
<name>
<surname><![CDATA[Perlman]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Speciner]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[Network Security: Private Communicacion in a Public World]]></source>
<year>2002</year>
<edition>2</edition>
<publisher-name><![CDATA[Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Dierks]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
<name>
<surname><![CDATA[Allen]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[The TLS Protocol Version 1.0.]]></article-title>
<source><![CDATA[Internet Engineering Task Force]]></source>
<year>1999</year>
<page-range>181</page-range></nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Laue]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Molter]]></surname>
<given-names><![CDATA[H. G.]]></given-names>
</name>
<name>
<surname><![CDATA[Rieder]]></surname>
<given-names><![CDATA[F.]]></given-names>
</name>
<name>
<surname><![CDATA[Huss]]></surname>
<given-names><![CDATA[S. A.]]></given-names>
</name>
<name>
<surname><![CDATA[Saxena]]></surname>
<given-names><![CDATA[K.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Novel Multiple Core Co-Processor Architecture for Efficient Server-based Public Key Cryptographic Applications]]></article-title>
<source><![CDATA[IEEE Computer Society Annual Symposium on VLSI]]></source>
<year>2008</year>
<page-range>8792</page-range></nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Laue]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[BCM5365 Product Datasheet]]></source>
<year></year>
<publisher-name><![CDATA[Broadcom Inc.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="book">
<source><![CDATA[Advanced Encryption Standard]]></source>
<year>2001</year>
<publisher-name><![CDATA[National Institute of Standards and Technlogy (NIST)]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="book">
<source><![CDATA[Secure Hash Standard]]></source>
<year>2008</year>
<volume>2</volume>
<publisher-name><![CDATA[National Institute of Standards and Technlogy (NIST)]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
</name>
</person-group>
<source><![CDATA[Intel's s Advanced Encryption Standard (AES) Instructions Set]]></source>
<year></year>
<publisher-name><![CDATA[Intel Inc.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cabrera Aldaya]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<source><![CDATA[Integración de Algoritmos Criptográficos en Sistemas Empotrados sobre FPGA]]></source>
<year>2012</year>
<publisher-name><![CDATA[o Superior Politécnico José Antonio Echeverría]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Rodríguez Chong]]></surname>
<given-names><![CDATA[J. D.]]></given-names>
</name>
</person-group>
<source><![CDATA[Evaluación y Desarrollo de Aplicaciones para el Sistema Operativo Petalinux,]]></source>
<year>2010</year>
<publisher-name><![CDATA[Instituto Superior Politécnico José Antonio Echeverría (CUJAE)]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cabrera Aldaya]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<source><![CDATA[Controlador Maestro basado en FPGA para un Sistema Inteligente de Transporte]]></source>
<year>2009</year>
<publisher-name><![CDATA[Instituto Superior Politécnico José Antonio Echeverría (CUJAE)]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cabrera Aldaya]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[UG081 - MicroBlaze Processor Reference Guide (v12.0).]]></source>
<year></year>
<publisher-name><![CDATA[Xilinx Inc.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Williams]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Bergmann]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
<name>
<surname><![CDATA[Xie]]></surname>
<given-names><![CDATA[X.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[FIFO Communication Models in Operating Systems for Reconfigurable Computing]]></article-title>
<source><![CDATA[13th Annual IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM'05)]]></source>
<year>2005</year>
<page-range>01</page-range></nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="book">
<source><![CDATA[DS499 - Fast Simplex Link v2.0 Bus Datasheet]]></source>
<year></year>
<publisher-name><![CDATA[Xilinx Inc.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cabrera Aldaya]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Cabrera Sarmiento]]></surname>
<given-names><![CDATA[A. J.]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Implementación Híbrida Hardware/Software del Algoritmo Rijndael,]]></article-title>
<source><![CDATA[IV Simposio Internacional de Electrónica: diseño, aplicaciones, técnicas avanzadas y retos actuales]]></source>
<year>2011</year>
</nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="book">
<source><![CDATA[DS312-2 - Spartan3E FPGA Family: Functional Description]]></source>
<year></year>
<publisher-name><![CDATA[Xilinx Inc.]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B20">
<label>20</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Daernen]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Rijmen]]></surname>
<given-names><![CDATA[V.]]></given-names>
</name>
</person-group>
<source><![CDATA[The Design of Rijndael]]></source>
<year>2002</year>
<publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B21">
<label>21</label><nlm-citation citation-type="book">
<source><![CDATA[The Keyed-Hash Message Authentication Code]]></source>
<year>2002</year>
<publisher-name><![CDATA[National Institute of Standards and Technlogy (NIST)]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B22">
<label>22</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Nugroho]]></surname>
<given-names><![CDATA[A. E.]]></given-names>
</name>
</person-group>
<source><![CDATA[Nugroho Free Hash Cores]]></source>
<year>2010</year>
</nlm-citation>
</ref>
<ref id="B23">
<label>23</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Feilner,]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[OpenVPN - Building and Integrating Virtual Private Networks]]></source>
<year>2006</year>
<publisher-name><![CDATA[Packt Publishing Ltd]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B24">
<label>24</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Corbet]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Rubini]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Kroah-Hartman]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
</person-group>
<source><![CDATA[Linux Device Drivers]]></source>
<year>2005</year>
<edition>3</edition>
<publisher-name><![CDATA[O'Reilly Media Inc]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B25">
<label>25</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kerrisk]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[The Linux Programming Interface]]></source>
<year>2010</year>
<publisher-name><![CDATA[No Starch Press, Inc.]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
