<?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-59282013000300004</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Implementación eficiente de la multiplicación modular de Montgomery sobre hardware reconfigurable]]></article-title>
<article-title xml:lang="en"><![CDATA[High-performance implementation of Montgomery's modular multiplication on reconfigurable hardware]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Torres López]]></surname>
<given-names><![CDATA[Ander]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Martínez García]]></surname>
<given-names><![CDATA[Yosbel]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cuiman Márquez]]></surname>
<given-names><![CDATA[Raudel]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Díaz Pando]]></surname>
<given-names><![CDATA[Humberto]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cabrera Sarmiento]]></surname>
<given-names><![CDATA[Alejandro J.]]></given-names>
</name>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Instituto Superior Politécnico José Antonio Echeverría,Cujae Facultad de Ingeniería Eléctrica Departamento de Automática y Computación]]></institution>
<addr-line><![CDATA[La Habana ]]></addr-line>
<country>Cuba</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Complejo de Investigaciones Tecnológicas Integradas  ]]></institution>
<addr-line><![CDATA[La Habana ]]></addr-line>
<country>Cuba</country>
</aff>
<aff id="A03">
<institution><![CDATA[,Instituto Superior Politécnico José Antonio Echeverría Centro de Estudios de Ingeniería y Sistemas ]]></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>32</fpage>
<lpage>40</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S1815-59282013000300004&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S1815-59282013000300004&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S1815-59282013000300004&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[Este documento propone implementaciones tanto, software como hardware, sobre un FPGA de Xilinx, del algoritmo de multiplicación de Montgomery utilizando el método de Escaneo de Operandos por Separado (SOS, de sus siglas en inglés), que es una forma eficiente para calcular multiplicaciones modulares. La solución software ha sido desarrollada sobre la plataforma de procesamiento MicroBlaze y la de hardware se realizó utilizando directamente los recursos lógicos y dedicados de la FPGA. Los resultados se presentan con una comparación entre ambos casos en función de su rendimiento y el empleo de recursos.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[This paper proposes implementations for both, software and hardware on Xilinx FPGAs of the Montgomery multiplication algorithm using the Separated Operand Scanning (SOS) method, which is an efficient way to compute modular multiplications. The software solution has been developed on the MicroBlaze processing platform and the hardware was carried out directly in logic and dedicated resources of the FPGA. The results are presented with a comparison between the two cases based on their performance and use of resources.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[multiplicación modular de montgomery]]></kwd>
<kwd lng="es"><![CDATA[SOS]]></kwd>
<kwd lng="es"><![CDATA[hardware reconfigurable]]></kwd>
<kwd lng="es"><![CDATA[FPGA]]></kwd>
<kwd lng="en"><![CDATA[montgomery's modular multiplication]]></kwd>
<kwd lng="en"><![CDATA[SOS]]></kwd>
<kwd lng="en"><![CDATA[reconfigurable hardware]]></kwd>
<kwd lng="en"><![CDATA[FPGA]]></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>Implementaci&oacute;n eficiente de la multiplicaci&oacute;n modular de    Montgomery sobre hardware reconfigurable </b></font></P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>High-performance implementation of Montgomery's modular multiplication on reconfigurable hardware</B></font></P>     <P>&nbsp;</P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana"><b>Ing. Ander Torres L&oacute;pez<SUP>1</SUP>, Ing. Yosbel Mart&iacute;nez    Garc&iacute;a<SUP>2</SUP>, Ing.  Raudel Cuiman    M&aacute;rquez<SUP>1</SUP>, Ing.  Humberto D&iacute;az    Pando<SUP>3</SUP>, Ing. Alejandro J. Cabrera  Sarmiento<SUP>1</SUP></b></font></P>     <P>   <font size="2" face="Verdana">1.Departamento de Autom&aacute;tica y Computaci&oacute;n, 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:ander@electrica.cujae.edu.cu">ander@electrica.cujae.edu.cu</a> , <a href="mailto:raudel@electrica.cujae.edu.cu">raudel@electrica.cujae.edu.cu</a>, <a href="mailto:alex@electrica.cujae.edu.cu">alex@electrica.cujae.edu.cu</a>    <br> 2.Complejo de Investigaciones Tecnol&oacute;gicas Integradas, La Habana, Cuba. E-mail: <a href="mailto:ymartinez@udio.cujae.edu.cu">ymartinez@udio.cujae.edu.cu</a>    ]]></body>
<body><![CDATA[<br> 3.Centro de Estudios de Ingenier&iacute;a y Sistemas, Instituto Superior Polit&eacute;cnico &#171;Jos&eacute; Antonio Echeverr&iacute;a&#187;, La Habana, Cuba</font><font face="Verdana"><font size="2"><i>.</i></font></font> <font size="2" face="Verdana">E-mail:<a href="mailto:hdiazp@ceis.cujae.edu.cu">hdiazp@ceis.cujae.edu.cu</a></font></P>     <P>&nbsp;</P>     <P>&nbsp;</P> <hr>     <P><font size="2" face="Verdana"><B>RESUMEN </B> </font></P>     <P><font size="2" face="Verdana">Este documento propone implementaciones tanto, software como hardware, sobre un FPGA de Xilinx, del algoritmo  de multiplicaci&oacute;n de Montgomery utilizando el m&eacute;todo de Escaneo de Operandos por Separado (SOS, de sus siglas  en ingl&eacute;s), que es una forma eficiente para calcular multiplicaciones modulares. La soluci&oacute;n software ha sido  desarrollada sobre la plataforma de procesamiento MicroBlaze y la de hardware se realiz&oacute; utilizando directamente los  recursos l&oacute;gicos y dedicados de la FPGA. Los resultados se presentan con una comparaci&oacute;n entre ambos casos en funci&oacute;n  de su rendimiento y el empleo de recursos. </font></P>     <P><font size="2" face="Verdana"><strong>Palabras claves:</strong> multiplicaci&oacute;n modular de montgomery, SOS, hardware reconfigurable, FPGA.     <br> </font></P> <hr>     <P><font size="2" face="Verdana"><B>ABSTRACT</B></font></P>     <P><font size="2" face="Verdana">This paper proposes implementations for both, software and hardware on Xilinx FPGAs of the  Montgomery multiplication algorithm using the Separated Operand Scanning (SOS) method, which is an efficient way to  compute modular multiplications. The software solution has been developed on the MicroBlaze processing platform and  the hardware was carried out directly in logic and dedicated resources of the FPGA. The results are presented with  a comparison between the two cases based on their performance and use of resources. </font></P>     <P><font size="2" face="Verdana"><strong>Key words:</strong> montgomery's modular multiplication, SOS, reconfigurable hardware, FPGA.</font>    ]]></body>
<body><![CDATA[<br> </P> <hr>     <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">Los algoritmos criptogr&aacute;ficos asim&eacute;tricos generalmente utilizan operaciones modulares de suma, multiplicaci&oacute;n    y exponenciaci&oacute;n con operandos t&iacute;picamente en el orden de las centenas o millares de bits. Tales son los casos    de criptosistemas altamente difundidos como RSA, Rabin, ELGamal, e incluso algunos basados en la Criptograf&iacute;a    de Curvas El&iacute;pticas (ECC, de sus siglas en    ingl&eacute;s).<SUP>1</SUP> La exponenciaci&oacute;n modular, expresada como <B><I>c = a<SUP>b</SUP> mod n</I></B>, donde    <B><I>a</I></B> y <B><I>b</I></B> son la base y el exponente respectivamente y    <B><I>n</I></B> el m&oacute;dulo, constituye una de las operaciones principales y de    mayor complejidad; lo cual determina el rendimiento de los mecanismos de cifrado-descifrado de dichos criptosistemas.    El c&aacute;lculo de la exponenciaci&oacute;n suele realizarse mediante el empleo de sucesivas operaciones de multiplicaci&oacute;n    modular. Seleccionando entonces algoritmos adecuados para la implementaci&oacute;n de esta &uacute;ltima, es posible    mejorar significativamente la eficiencia total del sistema. </font></P>     <P><font size="2" face="Verdana">Uno de los m&eacute;todos dise&ntilde;ado para tales fines es el propuesto por Peter L.  Montgomery.<SUP>2-3</SUP> El m&eacute;todo de  Montgomery es especialmente &uacute;til en escenarios que requieran grandes vol&uacute;menes de operaciones de multiplicaci&oacute;n modular  como sucede en el caso de la exponenciaci&oacute;n  modular.<SUP>4</SUP> Montgomery propuso representar los operandos en el Sistema  de N&uacute;meros Residuales (RNS, de sus siglas en ingl&eacute;s) lo que permite simplificar la reducci&oacute;n del producto en el m&oacute;dulo <B><I>n</I></B> a una simple divisi&oacute;n por una potencia de <B><I>2</I></B>.<SUP>5</SUP> La divisi&oacute;n por potencias de <B><I>2</I></B> es una operaci&oacute;n f&aacute;cilmente  implementada en entornos que utilicen los n&uacute;meros expresados en forma binaria pues se traduce a desplazamientos de bits.  Por esta raz&oacute;n la multiplicaci&oacute;n modular de Montgomery constituye una alternativa atractiva en implementaciones basadas  en microprocesadores de prop&oacute;sito general y particularmente en implementaciones basadas en hardware; siendo  motivo, por sus buenos resultados, de numerosos estudios que proponen, en muchos casos, mejoras en busca de  su optimizaci&oacute;n. </font></P>     <P><font size="2" face="Verdana">Si bien las soluciones software ofrecen un conjunto de ventajas deseables en la implementaci&oacute;n de  algoritmos criptogr&aacute;ficos, los resultados de rendimiento en cuanto a tiempo de respuesta son discretos con respecto  a implementaciones hardware.<SUP>6</SUP> La causa radica en que la arquitectura de los microprocesadores de prop&oacute;sito general  no se encuentra optimizada para realizar operaciones y manejar datos con tama&ntilde;os en el orden de los utilizados en  los algoritmos criptogr&aacute;ficos, adem&aacute;s de que la ejecuci&oacute;n de las instrucciones es eminentemente secuencial. A&ntilde;&aacute;dasele  a lo anterior el hecho de que las implementaciones hardware proporcionan un mayor nivel de seguridad f&iacute;sica en  cuanto al almacenamiento de la claves ya que los ataques a dispositivos hardware son m&aacute;s complejos y costosos de  realizar.<SUP>6</SUP> De ah&iacute; que una alternativa de gran aceptaci&oacute;n para elevar el rendimiento y los niveles de seguridad es utilizar  dispositivos externos a la computadora para almacenar las claves y ejecutar los algoritmos criptogr&aacute;ficos. </font></P>     <P><font size="2" face="Verdana">Considerando adem&aacute;s que la tendencia actual se dirige al empleo de dispositivos port&aacute;tiles con posibilidad de  ser acoplados a diferentes tipos de redes, mediante las que intercambian informaci&oacute;n en muchas ocasiones  confidencial, existen nuevos retos abiertos a la investigaci&oacute;n sobre la seguridad, orientados a la  incorporaci&oacute;n de  aplicaciones criptogr&aacute;ficas en dichos dispositivos para garantizar niveles de seguridad  adecuados.<SUP>7</SUP> Una de las principales  limitantes radica en la capacidad de procesamiento y cantidad de recursos hardware limitados de estos dispositivos, que  conducen a la necesidad de encontrar m&eacute;todos eficientes que permitan realizar implementaciones software ajustadas a  los recursos disponibles, o bien dise&ntilde;ar arquitecturas que puedan ser implementadas mediante hardware y  proporcionen una relaci&oacute;n adecuada entre rendimiento y consumo de recursos. </font></P>     <P><font size="2" face="Verdana">Uno de los criterios a considerar en el dise&ntilde;o e implementaci&oacute;n de algoritmos criptogr&aacute;ficos sobre hardware es  la selecci&oacute;n de la tecnolog&iacute;a que mejor se ajuste a los requisitos de la aplicaci&oacute;n. En este sentido los dispositivos  de hardware reconfigurable cuentan con la capacidad de proporcionar una flexibilidad similar a las  implementaciones software adem&aacute;s de las ventajas con respecto al rendimiento y a la seguridad que se derivan de las soluciones  basadas en hardware. Otro aspecto importante a tener en cuenta radica en la selecci&oacute;n de una arquitectura eficiente  que proporcione una relaci&oacute;n adecuada entre rendimiento y recursos de hardware utilizados. </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">En este art&iacute;culo se propone una implementaci&oacute;n software y una implementaci&oacute;n hardware del algoritmo de  multiplicaci&oacute;n modular de Montgomery utilizando el m&eacute;todo SOS, ambas realizadas sobre la FPGA XC3S700A de la familia  Spartan-3A de Xilinx. En el caso de la implementaci&oacute;n software fue empleado el procesador empotrado MicroBlaze. En las  siguientes secciones del art&iacute;culo se realiza una breve descripci&oacute;n del estado del arte, se exponen las caracter&iacute;sticas principales  de la tecnolog&iacute;a empleada, se abordan los detalles del m&eacute;todo SOS y de las implementaciones realizadas, se muestran  los resultados obtenidos y finalmente se enumeran las conclusiones. </font></P>     <P><font size="2" face="Verdana"><B>TRABAJOS RELACIONADOS</B> </font></P>     <P><font size="2" face="Verdana">Varios autores aceptan, de manera general, que el m&eacute;todo de Montgomery es altamente  eficiente.<SUP>8-15</SUP> Montgomery<SUP>4</SUP> propone el siguiente algoritmo para efectuar la multiplicaci&oacute;n modular: </font></P>     <P><font size="2" face="Verdana"><B><I>function </I></B><I>MonPro(a,b) </I></font></P>     <P><font size="2"><i><font face="Verdana">Step 1. t := a * b   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">Step 2. u:= (t+(t*n' mod r)*n)/r   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">Step 3. <B>if</B> u e&#187; n <B>then</B>        <B>return</B> u-n <B>else</B> <B>return</B> u</font></i></font></P>     <P><font size="2" face="Verdana">Adem&aacute;s de la eficiencia que logra por s&iacute; solo el algoritmo de Montgomery, es posible encontrar trabajos dirigidos  a mejorarlo a&uacute;n m&aacute;s. As&iacute;, existen estudios que demuestran la posibilidad de eliminar el paso de la sustracci&oacute;n  (tercer paso).<SUP>11, 16-17</SUP>  Rivas<SUP>18</SUP> propone el desarrollo de un multiplicador hardware en un PLD de Altera, para n&uacute;meros de 64 y  128 bits. El n&uacute;cleo est&aacute; basado en el m&eacute;todo de Montgomery para base <B><I>2</I></B>, donde en cada iteraci&oacute;n se lee un bit y  en dependencia del resultado se realizan determinadas operaciones. Este m&eacute;todo se basa en operaciones aritm&eacute;ticas  muy simples (sumas y desplazamientos) con tama&ntilde;os de variables grandes lo que permite que puedan realizarse en un  solo ciclo de reloj influyendo positivamente en la velocidad del algoritmo. Una de las desventajas de este m&eacute;todo  consiste  en que son necesarias demasiadas iteraciones por cada multiplicaci&oacute;n; adem&aacute;s de que al aumentar el tama&ntilde;o de  las variables aumenta el consumo de recursos y el retardo entre las interconexiones del dispositivo programable, por  lo que disminuye la frecuencia m&aacute;xima de trabajo. Esta caracter&iacute;stica hace dif&iacute;cil desarrollar un multiplicador modular  que cumpla con los tama&ntilde;os de clave de los est&aacute;ndares actuales de seguridad. </font></P>     <P><font size="2" face="Verdana">Koc<SUP>12, 19</SUP> propone varios m&eacute;todos para implementar la multiplicaci&oacute;n de Montgomery dando soluci&oacute;n a tales  problemas. A diferencia del m&eacute;todo para base <B><I>2</I></B>, en el cual se escanean las variables bit a bit, en estos se trabaja con los  operandos fragmentados en palabras de mayor tama&ntilde;o, lo cual reduce notablemente el n&uacute;mero de iteraciones de la  multiplicaci&oacute;n modular a expensas de aumentar la complejidad de las operaciones b&aacute;sicas que conforman el algoritmo. El ancho  de estas palabras generalmente est&aacute; relacionado con los tama&ntilde;os de palabras de la computadora o del entorno donde  ser&aacute; ejecutada la multiplicaci&oacute;n.  &#138;imka<SUP>20</SUP> realiza una implementaci&oacute;n software del m&eacute;todo SOS sobre el procesador  empotrado NIOS II de Altera, plante&aacute;ndose que es el algoritmo m&aacute;s apropiado para arquitecturas RISC. Adem&aacute;s se hace  referencia a la implementaci&oacute;n de un coprocesador hardware que utiliza el m&eacute;todo MWR2MM (de sus siglas en ingl&eacute;s, <I>Multiple Word Radix-2 Montgomery  Multiplication</I>). Este m&eacute;todo resulta altamente eficiente pero su implementaci&oacute;n  presenta la desventaja de que hay que resintetizar el dise&ntilde;o si se desea cambiar alguno de los par&aacute;metros. Adem&aacute;s no  quedan claros algunos elementos referentes a componentes hardware utilizados, la conexi&oacute;n del coprocesador al  procesador, etc., lo cual implica que resulte dif&iacute;cil la asimilaci&oacute;n de dicha implementaci&oacute;n en el contexto de este trabajo y bajo  otra plataforma. Por otra parte en los experimentos realizados se utiliza como exponente p&uacute;blico el cuarto n&uacute;mero de  Fermat y para el descifrado el Teorema del Resto Chino  (<I>CRT, de sus siglas en ingl&eacute;s</I>), cuestiones que disminuyen el tiempo  de ejecuci&oacute;n del algoritmo RSA. </font></P>     <P><font size="2" face="Verdana">A partir del an&aacute;lisis de las propuestas anteriores se decide realizar un dise&ntilde;o basado en el m&eacute;todo SOS puesto que  el procesador Microblaze, sobre el que se implementa la soluci&oacute;n software, tambi&eacute;n presenta arquitectura RISC. </font></P>     ]]></body>
<body><![CDATA[<P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>M&Eacute;TODO DE ESCANEO DE OPERANDOS POR SEPARADO (SOS)</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">En las implementaciones t&iacute;picas se separan los n&uacute;meros en palabras. Si <B><I>w</I></B> es el ancho de una palabra entonces    los n&uacute;meros pueden ser vistos como una secuencia de enteros cada uno en base <B><I>W=2w</I></B>. Si estos n&uacute;meros de    m&uacute;ltiple precisi&oacute;n requieren <B><I>s</I></B> palabras para su representaci&oacute;n, entonces se toma <B><I>r=2s*w</I></B>.<SUP>19</SUP> En el m&eacute;todo SOS primero se    calcula el producto <B><I>t=a*b</I></B> seg&uacute;n muestra el siguiente    pseudoc&oacute;digo:<SUP>19</SUP> </font></P>     <P><font size="2" face="Verdana"><B><I>for </I></B><I>i=0 <B>to</B> s-1 </I></font></P>     <P><font size="2"><i><font face="Verdana">     C:=0   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana"><B>for</B> j=0 <B>to</B> s-1   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">          (C,S) := t[i+j] + a[j]* b[i] + C   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">          t[i+j] := S   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">     t[i+s]:=C</font></i></font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">Para esto, inicialmente se debe inicializar      <B><I>t=0</I></B>. El resultado final ser&aacute; el valor <B><I>t</I></B>, el cual debe ser almacenado en un  n&uacute;mero de <B><I>2*s</I></B> palabras:  <B><I>t[0]</I></B>, <B><I>t[1]</I></B>,  <B><I>&#133;</I></B>, <B><I>t[2*s-1]</I></B>. Luego se calcula el valor de  <B><I>u</I></B> mediante la forma <B><I>u= (t+m*n)  /r</I></B> donde <B><I>m= t*n' mod r</I></B>. Para ello primero se debe asignar  <B><I>u=t</I></B> y luego actualizar este valor adicion&aacute;ndole <B><I>m*n</I></B>. Para la divisi&oacute;n por <B><I>r</I></B> basta con ignorar las  <B><I>s</I></B> palabras menos significativas de  <B><I>u</I></B>. Como el proceso de reducci&oacute;n se realiza palabra por palabra,  se puede sustituir el par&aacute;metro <B><I>n'</I></B> por un par&aacute;metro <B><I>n'0</I></B>, el cual se calcula de la forma  <B><I>n<SUB>0</SUB>'=-n<SUB>0</SUB><SUP>-1</SUP> (mod  W)</I></B>.<SUP>21</SUP> La actualizaci&oacute;n de <B><I>t=m*n</I></B> puede realizarse seg&uacute;n el siguiente  c&oacute;digo:<SUP>19</SUP> </font></P>     <P><font size="2" face="Verdana"><B><I>for </I></B><I>i=0 <B>to</B> s-1 </I></font></P>     <P><font size="2"><i><font face="Verdana">     C:=0   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">     M:= t[i]* n'[0] mod W   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana"><B>for</B> j=0 <B>to</B> s-1   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">          (C,S) := t[i+j] + m*n[j] + C   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">          T[i+j] := S   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">     ADD ( t[i+s], C )</font></i></font></P>     <P><font size="2" face="Verdana">La funci&oacute;n ADD es necesaria para la propagaci&oacute;n del acarreo hasta la &uacute;ltima palabra de <B><I>t</I></B>, lo cual incrementa el  tama&ntilde;o de <B><I>t</I></B> a  <B><I>2*s</I></B> palabras y un bit. Como el acarreo es salvado en una palabra, entonces el tama&ntilde;o de <B><I>t</I></B> debe ser de <B><I>2*s+1</I></B> palabras. Para realizar la divisi&oacute;n, seg&uacute;n se coment&oacute; anteriormente, se puede utilizar el siguiente  c&oacute;digo:<SUP>19</SUP> </font></P>     <P><font size="2" face="Verdana"><B><I>for </I></B><i>j=0 <B>to</B> s   </i></font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana"><i>     u[j] := t[j+s]</i></font></P>     <P><font size="2" face="Verdana">La resta de m&uacute;ltiple precisi&oacute;n es implementada para restar <B><I>n</I></B> en caso de que sea necesario. Para esto puede  ejecutarse la siguiente subrutina:<SUP>19</SUP>  </font></P>     <P> <font size="2" face="Verdana"><I>B:=0 </I></font></P>     <P><font size="2"><i><font face="Verdana"><B>for</B> i=0 <B>to</B> s-1   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">(B,D) := u[i]  n[i]  B   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">t[i] := D   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">(B,D) := u[s]  B   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">t[s] := D   </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana">if B=0 <B>then return </B>t[0],t[1],&#133;.,t[s-1] </font>   </i> </font></P>     <P><font size="2"><i><font face="Verdana"><B>else return</B> u[0],u[1],&#133;..,u[s-1]</font></i></font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">Este m&eacute;todo disminuye considerablemente la cantidad de ciclos de ejecuci&oacute;n del algoritmo de Montgomery.  Debe notarse que para su implementaci&oacute;n son necesarias <B><I>2*s+2</I></B> palabras para almacenar resultados intermedios:  <B><I>2*s+1</I></B> para almacenar <B><I>t</I></B> y una palabra para almacenar el valor de  <B><I>m</I></B>. </font></P>     <P><font size="2" face="Verdana"><B>IMPLEMENTACI&Oacute;N DE SOS EN SOFTWARE</B> </font></P>     <P><font size="2" face="Verdana">La implementaci&oacute;n software de la soluci&oacute;n se desarroll&oacute; sobre la plataforma de procesamiento Microblaze, m&oacute;dulo  IP desarrollado por Xilinx. MicroBlaze es un microprocesador RISC de 32 bits con arquitectura Harvard, donde los  buses de datos e instrucciones han sido a su vez divididos en buses locales y de expansi&oacute;n. La configuraci&oacute;n de  Microblaze permite ajustar determinados par&aacute;metros en pos de obtener los mejores resultados en dependencia de la naturaleza  y la demanda de las aplicaciones. Existe la posibilidad de incluirle controladores de memoria CACHE, modificarle  el n&uacute;mero de etapas del pipeline, ser optimizado en &aacute;rea o velocidad e implementar mediante hardware las  siguientes operaciones:<SUP>22</SUP> </font></P>     <P><font size="2" face="Verdana">&#183;     Multiplicadores de 32 o 64 bits. </font></P>     <P><font size="2" face="Verdana">&#183;     Divisores de 32 bits. </font></P>     <P><font size="2" face="Verdana">&#183;     Barrel Shifters, &uacute;tiles para lograr desplazamientos de bits en un solo ciclo de reloj. </font></P>     <P><font size="2" face="Verdana">&#183;     Instrucciones de comparaci&oacute;n de patrones. </font></P>     <P><font size="2" face="Verdana">&#183;     Unidad de aritm&eacute;tica flotante de simple precisi&oacute;n (FPU, de sus siglas en ingl&eacute;s). </font></P>     <P><font size="2" face="Verdana">&#183;     Unidad de manejo de memoria (MMU, de sus siglas en ingl&eacute;s). </font></P>     <P><font size="2" face="Verdana">Las primeras tres caracter&iacute;sticas  son particularmente interesantes en la implementaci&oacute;n de algoritmos  criptogr&aacute;ficos para acelerar las operaciones aritm&eacute;ticas b&aacute;sicas con el objetivo final de incrementar el rendimiento. </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">En este caso se ha configurado Microblaze con cinco etapas de pipeline, se le han habilitado adem&aacute;s el barrel  shifter y la operaci&oacute;n de multiplicaci&oacute;n capaz de generar productos de 64 bits. Las funciones para la aritm&eacute;tica de  m&uacute;ltiple precisi&oacute;n, que son invocadas constantemente en el algoritmo, son descritas en ensamblador, lo cual  contribuye notablemente al incremento de la velocidad de ejecuci&oacute;n, puesto que se hace un uso m&aacute;s eficiente de los recursos  del procesador. La implementaci&oacute;n se desarrolla a una frecuencia de 90 MHz, la cual est&aacute; condicionada por limitaciones  de la propia FPGA Spartan-3A XC3S700A; utilizando un ancho de palabra de 32 bits debido a que este es el ancho  m&aacute;ximo que permiten los registros de Microblaze y, por ende, la mejor manera de aprovechar su arquitectura. </font></P>     <P><font size="2" face="Verdana"><B>IMPLEMENTACI&Oacute;N DE SOS EN HARDWARE</B> </font></P>     <P><font size="2" face="Verdana">La operaci&oacute;n de multiplicaci&oacute;n modular por s&iacute; sola no cumple ning&uacute;n objetivo, sino que generalmente se  encuentra inmersa en sistemas criptogr&aacute;ficos m&aacute;s complejos. Una aceleraci&oacute;n de esta operaci&oacute;n condiciona un incremento en  la velocidad de ejecuci&oacute;n. Por tal raz&oacute;n se decide implementar un coprocesador hardware que se conecte a Microblaze  de manera tal que el procesador se encargar&iacute;a de ejecutar otras tareas del criptosistema, aprovechando la  funcionalidad del m&oacute;dulo para aumentar el rendimiento. Como se muestra en la <a href="#f1">figura 1</a>, la comunicaci&oacute;n se realiza a trav&eacute;s de un  bus FSL (Fast Simple Link), pues esta conexi&oacute;n punto a punto permite el flujo de una gran cantidad de datos a  velocidades superiores a las del bus PLB (Processor Local Bus).  </font></P>     <P align="center"><img src="/img/revistas/eac/v34n3/f0104313.jpg" width="565" height="341"><a name="f1"></a></P>     
<P><font size="2" face="Verdana">El coprocesador dise&ntilde;ado tiene un ancho de palabra de 32 bits. Esta soluci&oacute;n utiliza 4 multiplicadores dedicados de  la FPGA. Para implementar el m&oacute;dulo IP con un ancho de palabra de 64 bits se requieren 16 multiplicadores, y dado  que la configuraci&oacute;n seleccionada para Microblaze consume 5, ser&iacute;a necesario contar con un total de 21. La  Spartan-3A utilizada cuenta con s&oacute;lo 20 multiplicadores por lo que no es posible implementar el dise&ntilde;o con este ancho de  palabra. Por otra parte, no es recomendable utilizar una base que no sea m&uacute;ltiplo de  2<SUP>32</SUP> pues se complejiza la l&oacute;gica de  recepci&oacute;n de datos por FSL. </font></P>     <P><font size="2" face="Verdana">Debido a la naturaleza secuencial del algoritmo, el m&oacute;dulo IP fue descrito en Handel-C, lenguaje de descripci&oacute;n  de hardware muy parecido al ANSI C. Este lenguaje implementa una m&aacute;quina de estados, transparente al programador,  que brinda una buena abstracci&oacute;n y posibilita ejecutar tareas secuencialmente. Cada instrucci&oacute;n del lenguaje  representa un estado y se ejecuta en un ciclo de reloj. Estas caracter&iacute;sticas disminuyen considerablemente el tiempo de  dise&ntilde;o pues facilitan la programaci&oacute;n del algoritmo y el trabajo con el almacenamiento temporal de variables en bloques  de memoria.  </font></P>     <P><font size="2" face="Verdana">La <a href="/img/revistas/eac/v34n3/f0204313.jpg">figura 2</a> muestra un esquema b&aacute;sico del componente desarrollado, donde se implementan los pasos del m&eacute;todo  SOS descritos anteriormente. Los factores A y B son obtenidos a trav&eacute;s de la interfaz FSL esclava y almacenados cada  uno en un bloque de memoria RAM independiente (elemento <B><I>A</I></B> y <B><I>B</I></B>). Luego se multiplican utilizando el algoritmo cl&aacute;sico  de multiplicaci&oacute;n de n&uacute;meros de m&uacute;ltiple precisi&oacute;n. Este algoritmo se comunica con el m&oacute;dulo de multiplicaci&oacute;n,  desarrollado en VHDL y vali&eacute;ndose de la herramienta CORE Generator de Xilinx, a trav&eacute;s de una interfaz personalizada que le  permite obtener productos de 64 bits de ancho a partir de factores de 32 bits. El resultado del producto es almacenado en  otra memoria (elemento <B><I>t</I></B>). Posteriormente se ejecuta el algoritmo correspondiente al segundo paso del m&eacute;todo SOS.  Para ello se utilizan el producto almacenado en <B><I>t</I></B>, el par&aacute;metro <B><I>n`(0)</I></B> mencionado en secciones anteriores y el m&oacute;dulo <B><I>n</I></B>; estos dos &uacute;ltimos recibidos por FSL. Por cuestiones de aprovechamiento de los recursos, el m&oacute;dulo es almacenado en  la memoria que antes ocupaba el factor <B><I>A</I></B>. El resultado de la operaci&oacute;n se almacena nuevamente en <B><I>t</I></B>. Por &uacute;ltimo se resta de <B><I>t</I></B> el m&oacute;dulo <B><I>n</I></B> tantas veces como sea necesario hasta que el resultado quede en los l&iacute;mites que define dicho  m&oacute;dulo. Este resultado se env&iacute;a a trav&eacute;s de la interfaz FSL maestra hacia el microprocesador. </font></P>     
<P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>RESULTADOS</B> </font></P>     <P>&nbsp;</P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">En la <a href="/img/revistas/eac/v34n3/t0104313.jpg">tabla 1</a> se presentan los resultados  obtenidos por la implementaci&oacute;n del m&eacute;todo SOS sobre Microblaze.    Los slices<SUP>1</SUP>, multiplicadores y bloques de RAM son referidos al costo en &aacute;rea del procesador. El consumo de recursos    que se reporta es el que se obtiene por la utilizaci&oacute;n de Microblaze con las caracter&iacute;sticas que se discutieron en la    secci&oacute;n anterior. Como puede apreciarse el dise&ntilde;o que se concibi&oacute; explota la flexibilidad de la implementaci&oacute;n en software,    ya que es posible aumentar los tama&ntilde;os de clave sin necesidad de incurrir en un gasto extra de recursos de hardware;    lo cual representa una opci&oacute;n eficiente cuando se trata de ahorrar espacio en la FPGA. El primer apartado muestra    los tiempos de ejecuci&oacute;n para una multiplicaci&oacute;n modular simple, mientras que el segundo expone los de una operaci&oacute;n    de cifrado RSA (exponenciaci&oacute;n modular) para diferentes tama&ntilde;os de clave. </font></P>     
<P><font size="2" face="Verdana">En la <a href="/img/revistas/eac/v34n3/t0204313.jpg">tabla 2</a> se muestran los resultados de velocidad y &aacute;rea consumida por el m&oacute;dulo IP hardware cuando se  realiza una multiplicaci&oacute;n modular simple. Se puede observar una disminuci&oacute;n notable en cuanto al tiempo de ejecuci&oacute;n,  lo cual se traduce en una mejora de la velocidad de ejecuci&oacute;n del algoritmo, con respecto a la soluci&oacute;n software.  Por otra parte, el consumo de recursos no experimenta cambios considerables cuando aumenta el tama&ntilde;o de los  datos,  lo que permite utilizar dicho componente con operandos grandes para cumplir con los est&aacute;ndares de  seguridad actuales. </font></P>     
<P><font size="2" face="Verdana">En la <a href="/img/revistas/eac/v34n3/t0304313.jpg">tabla 3</a> se muestran los resultados de velocidad y &aacute;rea consumida por el  m&oacute;dulo IP hardware de multiplicaci&oacute;n  modular y el procesador Microblaze, cuando se ejecuta una operaci&oacute;n de cifrado RSA (exponenciaci&oacute;n modular)  para diferentes tama&ntilde;os de clave. Se puede observar un aumento notable de la velocidad de ejecuci&oacute;n  en esta soluci&oacute;n h&iacute;brida con respecto a la realizada en software (<a href="/img/revistas/eac/v34n3/t0104313.jpg">tabla 1</a>). </font></P>     
<P><font size="2" face="Verdana">En aras de analizar la validez de la implementaci&oacute;n realizada y de trazar estrategias de mejora en el futuro, se  han utilizado los resultados obtenidos por  &#138;imka<SUP>20</SUP> como referente de tiempo. Es importante aclarar que la intenci&oacute;n no  es hacer una comparaci&oacute;n fiel, pues los m&eacute;todos y tecnolog&iacute;as utilizadas por  &#138;imka<SUP>20</SUP> difieren de los empleados en  este trabajo.  </font></P>     <P><font size="2" face="Verdana">La variante software del m&eacute;todo SOS, implementada sobre Microblaze y trabajando con operandos de 2048  bits, invierte 11.6 s a una frecuencia de reloj de 90 MHz para una operaci&oacute;n de cifrado RSA. Por su parte, la  implementaci&oacute;n de SOS propuesta por  &#138;imka<SUP>20</SUP> y desarrollada sobre Nios a 50MHz consume 6.4 s para una operaci&oacute;n de cifrado  con RSA con datos de igual tama&ntilde;o. En el caso de la implementaci&oacute;n del coprocesador hardware para la  multiplicaci&oacute;n modular,  &#138;imka<SUP>20</SUP> utiliza el m&eacute;todo MWR2MM que, con un pipeline de 8 etapas, datos de 2048 bits y una frecuencia  de 100 MHz, invierte 354 ms para una operaci&oacute;n de descifrado RSA; mientras que el coprocesador desarrollado en  este trabajo mediante m&eacute;todo SOS consume, para igual tama&ntilde;o de datos, 1.23 s a una frecuencia de 90 MHz. Algunas  de estas diferencias se deben a que en el contexto en el cual se validan los algoritmos en el trabajo de  &#138;imka<SUP>20 </SUP>(Criptosistema RSA) se realizan algunas mejoras, que no constituyen optimizaciones de la multiplicaci&oacute;n modular, como el uso de  la clave p&uacute;blica E=F<SUB>4</SUB> (cuarto n&uacute;mero de Fermat) y del Teorema del Resto Chino (CRT); cuestiones que influyen  notablemente en las velocidades de cifrado y descifrado respectivamente. </font></P>     <P><font size="2" face="Verdana">Los resultados alcanzados con la implementaci&oacute;n h&iacute;brida descrita ofrecen tiempos acordes con las expectativas de  los autores. El hecho de que algunos par&aacute;metros del m&oacute;dulo puedan ser modificados sin que esto implique resintetizar  el dise&ntilde;o, resulta una caracter&iacute;stica muy ventajosa, con la cual no cuenta la soluci&oacute;n de  Simka<SUP>20</SUP> y que dota al mismo de una gran flexibilidad. El modulo est&aacute; concebido de manera tal que no es necesario almacenar los factores p y q,  dado que no se utiliza el CRT para descifrar. Considerando que se cuenta con poca memoria,  es de vital importancia que se almacenen los datos m&iacute;nimos  necesarios. La soluci&oacute;n que se presenta en este trabajo est&aacute; orientada a ser utilizada  en un criptosistema real capaz de manejar varias  llaves. </font></P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>CONCLUSIONES Y TRABAJO FUTURO</B> </font></P>     <P>&nbsp;</P>     <P><font size="2" face="Verdana">En este art&iacute;culo se realiza la implementaci&oacute;n del algoritmo de multiplicaci&oacute;n modular de Montgomery, variante SOS.    La implementaci&oacute;n llevada a cabo permite contar con un coprocesador que realiza esta operaci&oacute;n con un costo en    &aacute;rea relativamente bajo, 14.06% con respecto a la cantidad total de la FPGA utilizada. El dise&ntilde;o de este    componente posibilita que el consumo de recursos no aumente significativamente, aunque se incremente el tama&ntilde;o de los    operandos. Los resultados obtenidos con la implementaci&oacute;n del multiplicador modular en hardware permiten disminuir en 11    veces los ciclos de reloj con respecto a la implementaci&oacute;n software. Por &uacute;ltimo, se logra la realizaci&oacute;n h&iacute;brida del algoritmo    de cifrado RSA, la cual utiliza el 51.37% de los recursos de la FPGA, incluyendo el procesador principal y el    coprocesador SOS. Esto brinda la posibilidad de utilizar dicha implementaci&oacute;n en otras aplicaciones y sistemas embebidos donde    se necesite un nivel elevado de seguridad. </font></P>     ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">A partir de los resultados obtenidos, el trabajo futuro estar&aacute; dirigido a la  aceleraci&oacute;n de algoritmos de  criptograf&iacute;a asim&eacute;trica incluidos la multiplicaci&oacute;n modular de Montgomery, en conjunto con la aceleraci&oacute;n de los algoritmos  de generaci&oacute;n de llaves criptogr&aacute;ficas. Por otra parte se har&aacute; &eacute;nfasis en buscar algoritmos y modelos para el  particionado de algoritmos criptogr&aacute;ficos con el objetivo de lograr implementaciones h&iacute;bridas que logren un equilibrio  adecuado entre las m&eacute;tricas de dise&ntilde;o (principalmente coste y rendimiento).  </font></P>     <P>&nbsp;</P>     <P><font size="3" face="Verdana"><B>REFERENCIAS</B> </font></P>     <P>&nbsp;</P>     <!-- ref --><P><font size="2" face="Verdana">1.     A. J. Menezes, P. C. V. Oorschot, and S. A. Vanstone,        Handbook of applied cryptography. New York: CRC  Press, 1997.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">2.     E. Celebi, M. Gozutok, and L. Ertaul, &#171;Implementations of Montgomery Multiplication Algorithms in  Machine Languages,&#187; in International Conference on Security &amp;  Management, SAM 2008, pp. 491-497.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">3.     F. B. Mart&iacute;nez and A. B. Nore&ntilde;a, &#171;Dise&ntilde;o y Optimizaci&oacute;n de un Multiplicador Modular usando  Hardware Reconfigurable,&#187; Avances en Sistemas e Inform&aacute;tica, vol. 3, No. 2, pp. 77-82, Diciembre 2006.     </font></P>     ]]></body>
<body><![CDATA[<!-- ref --><P><font size="2" face="Verdana">4.     P. L. Montgomery, &#171;Modular Multiplication Without Trial Division,&#187;    Mathematics of Computation, vol. 4, No. 170, pp. 519-521, April 1985.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">5.     Y. Mart&iacute;nez, &#171;Dise&ntilde;o de un esquema de firma digital RSA usando co-dise&ntilde;o hardware-software,&#187; Autom&aacute;tica  y Computaci&oacute;n, ISPJAE, La Habana, 2011.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">6.     T. Wollinger and C. Paar, &#171;How Secure Are FPGAs in Cryptographic Applications?,&#187; in Field Programmable Logic and Application. vol. 2778, P. Y. K. Cheung and G. Constantinides, Eds., ed: Springer Berlin /  Heidelberg, 2003, pp. 91-100.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">7.     P. Kocher, R. Lee, G. McGraw, and A. Raghunathan, &#171;Security as a new dimension in embedded system  design,&#187; presented at the Proceedings of the 41st annual Design Automation Conference, San Diego, CA, USA, 2004.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">8.     D. Alan and M. William, &#171;Efficient architectures for implementing montgomery modular multiplication and  RSA modular exponentiation on reconfigurable logic,&#187; in ACM/SIGDA tenth international symposium on  Field-programmable gate arrays Monterrey, California, USA, 2002.     </font></P>     ]]></body>
<body><![CDATA[<!-- ref --><P><font size="2" face="Verdana">9.     T. Blum and C. Paar, &#171;High-Radix Montgomery Modular Exponentiation on Reconfigurable Hardware,&#187;    IEEE Transactions on Computers, vol. 50, No. pp. 759-764, 2001.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">10.     R. Garg and V. Renu, &#171;An Efficient Montgomery Multiplication Algorithm and RSA Cryptographic  Processor,&#187; in Conference on Computational Intelligence and Multimedia  Applications, 2007, pp. 188-195.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">11.     G. Hachez and J.-J. Quisquater, &#171;Montgomery Exponentiation with no Final Subtractions: Improved  Results,&#187; 2000, pp. 293-301.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">12.     C. K. Koc, &#171;High-Speed RSA Implementation,&#187; ed: RSA Laboratories, Redwood City, CA, 1994.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">13.     N. Nedjah and L. d. M. Mourelle, &#171;Two Hardware Implementations for the Montgomery Modular  Multiplication: Sequential versus Parallel,&#187; presented at the Proceedings of the 15th symposium on Integrated circuits  and systems design, 2002.     </font></P>     ]]></body>
<body><![CDATA[<!-- ref --><P><font size="2" face="Verdana">14.     N. Nedjah and L. d. M. Mourelle, &#171;Three hardware architectures for the binary modular exponentiation:  sequential, parallel, and systolic,&#187; Circuits and Systems I: Regular Papers, IEEE Transactions on,vol. 53, No. pp. 627-633, 2006.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">15.     A. F. Tenca and C. K. Koc, &#171;A Scalable Architecture for Montgomery Multiplication,&#187; in Cryptographic Hardware and Embedded Systems, 1999, pp. 94-108.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">16.     C. D. Walter, &#171;Montgomery exponentiation needs no final subtractions,&#187;    Electronics Letters, vol. 35, No. pp. 1831-1832, 1999.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">17.     C. D. Walter, &#171;Montgomery's Multiplication Technique: How to Make It Smaller and Faster &#171; in Cryptographic Hardware and Embedded Systems, 1999, pp.  8093.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">18.     R. D. P. Rivas, R. N. Londo&ntilde;o, and A. B. Nore&ntilde;a, &#171;Implementaci&oacute;n de la multiplicaci&oacute;n modular de  Montgomery en hardware reprogramable. ,&#187; Ingenier&iacute;a Electr&oacute;nica, Autom&aacute;tica y Comunicaciones, vol. 25, No. 1, pp. 18-24, 2004.     </font></P>     ]]></body>
<body><![CDATA[<!-- ref --><P><font size="2" face="Verdana">19.     C. K. Koc, T. Acar, and B. S. K. Jr, &#171;Analyzing and Comparing Montgomery Multiplication Algorithms,&#187;  No. 1996.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">20.     M. &#138;imka, &#171;RSA implementation on reconfigurable hardware,&#187; in Proceedings of the III. PhD student  conference, Technical University of Ko&#154;ice, Slovakia, April 2003, pp. 8182.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">21.     T. Acar, &#171;High-Speed Algorithms &amp; Architectures For Number-Theoretic Cryptosystems,&#187; Oregon  State University, 1997.     </font></P>     <!-- ref --><P><font size="2" face="Verdana">22.     &#171;MicroBlaze Processor Reference Guide v11.4,&#187; ed: Xilinx, Inc., 2010 </font><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>&nbsp;</P>     <P>&nbsp;</P>     <P>&nbsp;</P>     <P></P>     <P> <font size="2" face="Verdana"><B></font></P>     <P>&nbsp;</P>     <P>&nbsp;</P>     <P></P>     <P>&nbsp;</P>     ]]></body>
<body><![CDATA[ ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Menezes]]></surname>
<given-names><![CDATA[A. J.]]></given-names>
</name>
<name>
<surname><![CDATA[Oorschot]]></surname>
<given-names><![CDATA[P. C. V.]]></given-names>
</name>
<name>
<surname><![CDATA[Vanstone]]></surname>
<given-names><![CDATA[S. A.]]></given-names>
</name>
</person-group>
<source><![CDATA[Handbook of applied cryptography]]></source>
<year>1997</year>
<publisher-loc><![CDATA[New York ]]></publisher-loc>
<publisher-name><![CDATA[CRC Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Celebi]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
<name>
<surname><![CDATA[Gozutok]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Ertaul]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Implementations of Montgomery Multiplication Algorithms in Machine Languages]]></article-title>
<source><![CDATA[International Conference on Security & Management]]></source>
<year>2008</year>
<page-range>491-497</page-range><publisher-name><![CDATA[SAM]]></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[Martínez]]></surname>
<given-names><![CDATA[F. B.]]></given-names>
</name>
<name>
<surname><![CDATA[Noreña]]></surname>
<given-names><![CDATA[A. B.]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Diseño y Optimización de un Multiplicador Modular usando Hardware Reconfigurable]]></article-title>
<source><![CDATA[Avances en Sistemas e Informática]]></source>
<year>Dici</year>
<month>em</month>
<day>br</day>
<volume>3</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>77-82</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Montgomery]]></surname>
<given-names><![CDATA[P. L.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Modular Multiplication Without Trial Division]]></article-title>
<source><![CDATA[Mathematics of Computation]]></source>
<year>Apri</year>
<month>l </month>
<day>19</day>
<volume>4</volume>
<numero>170</numero>
<issue>170</issue>
<page-range>519-521</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[Martínez]]></surname>
<given-names><![CDATA[Y.]]></given-names>
</name>
</person-group>
<source><![CDATA[Diseño de un esquema de firma digital RSA usando co-diseño hardware-software]]></source>
<year>2011</year>
<publisher-loc><![CDATA[La Habana ]]></publisher-loc>
<publisher-name><![CDATA[Automática y Computación, ISPJAE]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Wollinger]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
<name>
<surname><![CDATA[Paar]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[How Secure Are FPGAs in Cryptographic Applications?]]></article-title>
<source><![CDATA[Field Programmable Logic and Application]]></source>
<year>2003</year>
<volume>2778</volume>
<page-range>pp. 91-100</page-range><publisher-name><![CDATA[P. Y. K. Cheung and G. Constantinides, Eds., ed: Springer Berlin / Heidelberg,]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kocher]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
<name>
<surname><![CDATA[Lee]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[McGraw]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
<name>
<surname><![CDATA[Raghunathan]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<source><![CDATA[Security as a new dimension in embedded system design]]></source>
<year>2004</year>
<publisher-loc><![CDATA[CA^eSan Diego San Diego]]></publisher-loc>
<publisher-name><![CDATA[Proceedings of the 41st annual Design Automation Conference]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Alan]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
<name>
<surname><![CDATA[William]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Efficient architectures for implementing montgomery modular multiplication and RSA modular exponentiation on reconfigurable logic]]></article-title>
<source><![CDATA[ACM/SIGDA tenth international symposium on Field-programmable gate arrays]]></source>
<year>2002</year>
<publisher-loc><![CDATA[California^eMonterrey Monterrey]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Blum]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
<name>
<surname><![CDATA[Paar]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[High-Radix Montgomery Modular Exponentiation on Reconfigurable Hardware]]></article-title>
<source><![CDATA[IEEE Transactions on Computers]]></source>
<year>2001</year>
<volume>50</volume>
<page-range>759-764</page-range></nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Garg]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Renu]]></surname>
<given-names><![CDATA[V.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An Efficient Montgomery Multiplication Algorithm and RSA Cryptographic Processor]]></article-title>
<source><![CDATA[Conference on Computational Intelligence and Multimedia Applications]]></source>
<year>2007</year>
<page-range>188-195</page-range></nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hachez]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
<name>
<surname><![CDATA[Quisquater]]></surname>
<given-names><![CDATA[J.-J.]]></given-names>
</name>
</person-group>
<source><![CDATA[Montgomery Exponentiation with no Final Subtractions: Improved Results]]></source>
<year>2000</year>
<page-range>293-301</page-range></nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Koc]]></surname>
<given-names><![CDATA[C. K.]]></given-names>
</name>
</person-group>
<source><![CDATA[High-Speed RSA Implementation]]></source>
<year>1994</year>
<publisher-loc><![CDATA[Redwood^eCA CA]]></publisher-loc>
<publisher-name><![CDATA[ed: RSA Laboratories]]></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[Nedjah]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
<name>
<surname><![CDATA[Mourelle]]></surname>
<given-names><![CDATA[L. d. M.]]></given-names>
</name>
</person-group>
<source><![CDATA[Two Hardware Implementations for the Montgomery Modular Multiplication: Sequential versus Parallel]]></source>
<year>2002</year>
<publisher-name><![CDATA[Proceedings of the 15th symposium on Integrated circuits and systems design]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Nedjah]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
<name>
<surname><![CDATA[Mourelle]]></surname>
<given-names><![CDATA[L. d. M.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Three hardware architectures for the binary modular exponentiation: sequential, parallel, and systolic]]></article-title>
<source><![CDATA[Circuits and Systems I: Regular Papers, IEEE Transactions on]]></source>
<year>2006</year>
<volume>53</volume>
<page-range>627-633</page-range></nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Tenca]]></surname>
<given-names><![CDATA[A. F.]]></given-names>
</name>
<name>
<surname><![CDATA[Koc]]></surname>
<given-names><![CDATA[C. K.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Scalable Architecture for Montgomery Multiplication]]></article-title>
<source><![CDATA[Cryptographic Hardware and Embedded Systems]]></source>
<year>1999</year>
<page-range>94-108</page-range></nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Walter]]></surname>
<given-names><![CDATA[C. D.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Montgomery exponentiation needs no final subtractions]]></article-title>
<source><![CDATA[Electronics Letters]]></source>
<year>1999</year>
<volume>35</volume>
<page-range>1831-1832</page-range></nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Walter]]></surname>
<given-names><![CDATA[C. D.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Montgomery's Multiplication Technique: How to Make It Smaller and Faster]]></article-title>
<source><![CDATA[Cryptographic Hardware and Embedded Systems]]></source>
<year>1999</year>
<page-range>8093</page-range></nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Rivas]]></surname>
<given-names><![CDATA[R. D. P.]]></given-names>
</name>
<name>
<surname><![CDATA[Londoño]]></surname>
<given-names><![CDATA[R. N.]]></given-names>
</name>
<name>
<surname><![CDATA[Noreña]]></surname>
<given-names><![CDATA[A. B.]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Implementación de la multiplicación modular de Montgomery en hardware reprogramable.]]></article-title>
<source><![CDATA[Ingeniería Electrónica, Automática y Comunicaciones]]></source>
<year>2004</year>
<volume>25</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>18-24</page-range></nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Koc]]></surname>
<given-names><![CDATA[C. K.]]></given-names>
</name>
<name>
<surname><![CDATA[Acar]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
<name>
<surname><![CDATA[K. Jr]]></surname>
<given-names><![CDATA[B. S.]]></given-names>
</name>
</person-group>
<source><![CDATA[Analyzing and Comparing Montgomery Multiplication Algorithms]]></source>
<year>1996</year>
</nlm-citation>
</ref>
<ref id="B20">
<label>20</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[&#352;imka]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[RSA implementation on reconfigurable hardware]]></article-title>
<source><![CDATA[Proceedings of the III. PhD student conference]]></source>
<year>Apri</year>
<month>l </month>
<day>20</day>
<page-range>8182</page-range><publisher-loc><![CDATA[Slovakia ]]></publisher-loc>
<publisher-name><![CDATA[Technical University of Ko&#353;ice]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B21">
<label>21</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Acar]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<source><![CDATA[High-Speed Algorithms & Architectures For Number-Theoretic Cryptosystems]]></source>
<year>1997</year>
<publisher-name><![CDATA[Oregon State University]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B22">
<label>22</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Acar]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[MicroBlaze Processor Reference Guide v11.4]]></source>
<year>2010</year>
<publisher-name><![CDATA[ed: Xilinx, Inc.]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
