<?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>0012-7353</journal-id>
<journal-title><![CDATA[DYNA]]></journal-title>
<abbrev-journal-title><![CDATA[Dyna rev.fac.nac.minas]]></abbrev-journal-title>
<issn>0012-7353</issn>
<publisher>
<publisher-name><![CDATA[Universidad Nacional de Colombia]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0012-73532008000300005</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[UNA IMPLEMENTACIÓN HARDWARE OPTIMIZADA PARA EL OPERADOR EXPONENCIACIÓN MODULAR]]></article-title>
<article-title xml:lang="en"><![CDATA[A HARDWARE OPTIMIZED IMPLEMENTATION FOR THE MODULAR EXPONENTIATION OPERATOR]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[BOLAÑOS]]></surname>
<given-names><![CDATA[FREDDY]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[BERNAL]]></surname>
<given-names><![CDATA[ÁLVARO]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Nacional de Colombia, Sede  ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidad del Valle  ]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>11</month>
<year>2008</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>11</month>
<year>2008</year>
</pub-date>
<volume>75</volume>
<numero>156</numero>
<fpage>55</fpage>
<lpage>63</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0012-73532008000300005&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0012-73532008000300005&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0012-73532008000300005&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[Este documento muestra la optimización del operador Exponenciación Modular, aprovechando la gran flexibilidad de diseño que ofrecen el lenguaje VHDL y los dispositivos tipo FPGA. Debido a que el diseño se hace en un entorno limitado en hardware, la función de costo usada para la optimización considera tanto el tiempo de ejecución (desempeño) del operador, como el área ocupada por el mismo. La optimización se hace teniendo en cuenta tres alternativas distintas para la implementación del operador. Finalmente se comparan estas alternativas en términos de las funciones de costo asociadas a cada una y se discute la viabilidad de su implementación en entornos específicos.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[This paper shows the optimization of the Modular Exponentiation operator, taking advantage of design tools such as the VHDL language and FPGA devices. Since the implementation occurs in a hardware-limited environment, the cost function used regarding optimization purposes includes both the execution time of the operator and the area occupied by the design. Three alternatives for the Modular Exponentiation operator have been considered. These alternatives are then compared in terms of their associated cost functions. Finally, the feasibility of the implementation of such alternatives in specific environments is discussed.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[Criptografía]]></kwd>
<kwd lng="es"><![CDATA[Aritmética Modular]]></kwd>
<kwd lng="es"><![CDATA[Lenguaje VHDL]]></kwd>
<kwd lng="es"><![CDATA[FPGA]]></kwd>
<kwd lng="en"><![CDATA[Cryptography]]></kwd>
<kwd lng="en"><![CDATA[Modular Arithmetic]]></kwd>
<kwd lng="en"><![CDATA[VHDL]]></kwd>
<kwd lng="en"><![CDATA[FPGA]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align="center"><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><b>UNA IMPLEMENTACIÓN  HARDWARE OPTIMIZADA PARA EL OPERADOR EXPONENCIACIÓN MODULAR </b></font></p>     <p align="center"><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>A  HARDWARE OPTIMIZED IMPLEMENTATION FOR THE MODULAR EXPONENTIATION OPERATOR</b></font></p>     <p align="center">&nbsp;</p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>FREDDY BOLAÑOS</b>    <br>   <i>Profesor Auxiliar, Universidad Nacional de Colombia, Sede Medellín,<a href="mailto:fbolanosm@unal.edu.co">fbolanosm@unal.edu.co</a></i></font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>ÁLVARO BERNAL</b>    <br>   <i>Profesor Titular, Universidad del Valle, <a href="mailto:alvaro@univalle.edu.co">alvaro@univalle.edu.co</a></i></font></p>     <p align="center">&nbsp;</p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Recibido Noviembre 21 de 2007, aceptado Abril 04 de  2008, versión final Abril 10 de 2008 </b></font></p>     <p>&nbsp;</p> <hr>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>RESUMEN: </b>Este documento muestra la  optimización del operador Exponenciación Modular, aprovechando la gran  flexibilidad de diseño que ofrecen el lenguaje VHDL y los dispositivos tipo  FPGA. Debido a que el diseño se hace en un entorno limitado en hardware, la  función de costo usada para la optimización considera tanto el tiempo de  ejecución (desempeño) del operador, como el área ocupada por el mismo. La  optimización se hace teniendo en cuenta tres alternativas distintas para la  implementación del operador. Finalmente se comparan estas alternativas en  términos de las funciones de costo asociadas a cada una y se discute la  viabilidad de su implementación en entornos específicos.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>PALABRAS CLAVE: </b>Criptografía, Aritmética Modular,  Lenguaje VHDL, FPGA.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>ABSTRACT: </b>This  paper shows the optimization of the Modular Exponentiation operator, taking  advantage of design tools such as the VHDL language and FPGA devices. Since the  implementation occurs in a hardware–limited environment, the cost function used  regarding optimization purposes includes both  the execution time of the operator and the area occupied by the design. Three  alternatives for the Modular Exponentiation operator have been considered.  These alternatives are then compared in terms of their  associated cost functions. Finally, the feasibility of the implementation of  such alternatives in specific environments is discussed.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>KEYWORDS: </b>Cryptography,  Modular Arithmetic, VHDL, FPGA.</font></p> <hr>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>1. INTRODUCCIÓN</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La Exponenciación Modular es un operador de amplio uso en  técnicas criptográficas tales como RSA [1], Rabin [2], Elgamal [3], McEliece [4] y otras. Básicamente el operador es  el equivalente aritmético a calcular una exponenciación natural y luego  calcular el modulo o residuo del resultado respecto a cierto número (M).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La Exponenciación Modular recibe tres operandos de  entrada y se define de acuerdo con la ecuación (1). </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la ecuación, el operando X es llamado comúnmente la  base de la exponenciación, el número Y es referido como el exponente y M es referido  como el módulo de la representación. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Sean X, Y y M n&uacute;meros enteros tal    que: M&gt;0. Se define la  Exponenciaci&oacute;n Modular P como:</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><img src="/img/revistas/dyna/v75n156/a05eq01.gif"></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Si y solo si existe un n&uacute;mero entero   k tal que:</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><img src="/img/revistas/dyna/v75n156/a05eq011.gif"></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El requerimiento por niveles de seguridad cada vez más  exigentes en los sistemas criptográficos modernos, obliga a un aumento  paulatino en el tamaño en bits de las claves, de modo que los operadores que  componen el sistema deben manejar operandos de mayor tamaño. Esta situación  tiende a hacer lenta la ejecución de algunos de estos operadores, especialmente  en aquellos de gran complejidad. Tal es el caso de   la Exponenciación  Modular, que debe operar sobre números enteros de gran tamaño  representados normalmente en binario.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Existe entonces un interés por la optimización de tales  operaciones, de modo que se puedan conseguir tiempos de ejecución aceptables.  Las implementaciones en hardware aparecen como alternativa de diseño, ya que el  hardware dedicado y optimizado para una operación es potencialmente más rápido  que la ejecución de una aplicación software sobre hardware genérico.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El algoritmo binario es la primera aproximación práctica  al problema del cálculo de la exponenciación modular [5]. Se trata de un  algoritmo que tiene dos versiones, dependiendo del sentido en el que se recorre  la representación binaria del exponente y está basado en la regla de Horner  [6]. Esta regla básicamente expresa una manera alternativa y recursiva de  representar un número binario en cierta base b, tal y como lo muestra la  ecuación (2).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><img src="/img/revistas/dyna/v75n156/a05eq02.gif"></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A partir de la representación alternativa propuesta en  (2), es posible calcular el valor del número X usando menos productos que los  necesarios para la forma de cálculo tradicional. El algoritmo binario aprovecha  esta representación alternativa para el exponente (Y), de modo que en el  cálculo de   la  Exponenciación Modular se requieran a lo sumo N productos  modulares y N cuadrados. La ecuación (3) muestra cómo se logra esa  representación alternativa del exponente para el algoritmo binario, donde b=2.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><img src="/img/revistas/dyna/v75n156/a05eq03.gif"></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La <a href="#fig01">figura 1</a> muestra el algoritmo binario en su versión  derecha–izquierda, lo que significa que se recorre el exponente empezando por  el menos significativo. Esta es la razón por la cual este algoritmo se conoce  como LSB primero [7]. En la figura, N representa el tamaño en bits de los  operandos involucrados en   la Exponenciación.</font></p>     ]]></body>
<body><![CDATA[<p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig01"></a><img src="/img/revistas/dyna/v75n156/a05fig01.gif">    <br>   Figura 1.</b> Algoritmo binario, versi&oacute;n  derecha&ndash;izquierda    <br>  <b>Figure 1.</b> Left to right binary algorithm</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La versión derecha–izquierda del algoritmo binario tiene  una característica que la hace atractiva para una implementación en hardware.  Obsérvese de la figura que se deben calcular un producto y un cuadrado por cada  iteración. La ejecución del producto es condicional y dependerá de si el  i–ésimo del exponente es uno o cero. Sin embargo, las dos operaciones son  independientes entre si, de modo que podrían calcularse en paralelo. Una  implementación hardware que aproveche está característica podría reducir el  tiempo de ejecución a N productos equivalentes, en vez de los 2•N que tardaría  el algoritmo secuencial en el peor caso.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A partir de la forma básica del algoritmo binario se  proponen una serie de optimizaciones, tendientes ya sea a reducir la cantidad  de operaciones que es necesario calcular o la complejidad de tales operaciones,  de modo que la  Exponenciación Modular se pueda calcular en el menor tiempo  posible. Tal es el caso del algoritmo m–ario [8], que parte de una  representación diferente a la binaria (b&gt;2) para reducir la cantidad de  símbolos o dígitos que componen el exponente y consecuentemente, la cantidad de productos (iteraciones) que se  deben calcular. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Este trabajo explora tres alternativas para el cálculo de  la  Exponenciación Modular y las compara en términos de una  función de costo que considera tanto tiempos de ejecución como el área ocupada  por la implementación. Este último parámetro es de gran importancia en entornos  de desarrollo hardware sobre dispositivos FPGA. Todos los diseños hardware que  se presentan han sido sintetizados usando dispositivos XC3S200 de Xilinx. Es  común que en estos dispositivos la información de área ocupada se represente  como la cantidad de celdas lógicas (CLB por sus siglas en inglés) necesarias  para la implementación o como una fracción del total de celdas lógicas  disponibles en el elemento que se requieren para la síntesis.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Retomando las ideas de [9], la función de costo queda  definida como el producto entre el área ocupada y el tiempo de ejecución, tal y  como lo muestra la ecuación (4).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><img src="/img/revistas/dyna/v75n156/a05eq04.gif"></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La metodología de optimización tendiente a minimizar el  valor de <i>f</i> también es tratada en la referencia y propone  la descomposición del operador Exponenciación Modular en una jerarquía  organizada por niveles de complejidad. Se empieza con la optimización de los  operadores de menor complejidad, para lo cual se implementan diversas  alternativas y se les compara en términos de la función de costo escogida.  Aquella implementación que exhiba un mejor comportamiento respecto a la función  de costo, será la escogida para la implementación de operadores de mayor  complejidad. El proceso se repite sucesivamente para cada nivel de la jerarquía  hasta implementar el diseño completo.</font></p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>2. ALTERNATIVAS PARA LA EXPONENCIACIÓN   MODULAR</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>2.1 Exponenciación de Montgomery    <br> </b>El algoritmo de Montgomery se basa en una representación  en la cual no es necesario hacer el ajuste de módulo (residuo) a los resultados  de operaciones intermedias [10]. La representación es llamada <i>imagen de Montgomery</i> [11], y hace que  los productos modulares del algoritmo de la <a href="#fig01">figura 1</a> se conviertan en <i>multiplicaciones de Montgomery</i>,  referidas en la <a href="#fig02">figura 2</a> como el operador <i>Mont</i>.  La <a href="#fig02">figura 2</a> muestra la versión derecha–izquierda de   la Exponenciación  de Montgomery, que al igual que su contraparte binaria, permite una implementación paralela de los dos multiplicadores.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig02"></a><img src="/img/revistas/dyna/v75n156/a05fig02.gif">    <br>   Figura 2.</b> Algoritmo de Exponenciación de Montgomery,  versión derecha–izquierda    <br>  <b>Figure  2</b>.  Montgomery’s  Exponentiation Algorithm, left to right version</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La <a href="#tab01">tabla 1</a> muestra una comparación de desempeño entre los  algoritmos binario y de Montgomery, partiendo del supuesto que la operación de  cuadrado es equivalente en complejidad a un producto modular. </font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="tab01"></a>Tabla 1</b>. Comparaci&oacute;n de desempe&ntilde;o entre los  algoritmos Binario y de Montgomery para la exponenciaci&oacute;n modular    <br>  <b>Table  1.</b> Performance comparison between binary and   Montgomery exponentiation algorithms </font>    <br> <img src="/img/revistas/dyna/v75n156/a05tab01.gif"></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Dicha tabla muestra que en términos de la cantidad de  productos que se deben calcular, el algoritmo de Exponenciación de Montgomery  (en su versión concurrente) puede mejorar el desempeño del algoritmo binario  (completamente secuencial) hasta en tres veces. Además debe considerarse que el  producto o multiplicación de Montgomery es inherentemente más simple que el  producto modular tradicional [12], lo que puede significar un aumento en la  velocidad superior a 3.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La <a href="#fig03">figura 3</a> muestra la ruta de datos (<i>datapath</i>) propuesta para el  Exponenciador de Montgomery para operandos de N bits de longitud. Nótese la  existencia de dos multiplicadores de Montgomery independientes, etiquetados  como &#928;<sub>m</sub> en la figura. El registro de desplazamiento es el  encargado de recorrer los bits del exponente y generar la señal Load_P, que  representa la decisión que se debe tomar en cada iteración del algoritmo de la  <a href="#fig03">figura 2</a>. El resto de elementos corresponde a multiplexores, registros y  hardware de uso común.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig03"></a><img src="/img/revistas/dyna/v75n156/a05fig03.gif">    <br>   Figura 3.</b> Estructura del Exponenciador de Montgomery    <br>   <b>Figure  3.</b> Montgomery exponentiation hardware structure</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>2.2 Recodificación del Exponente    <br> </b>El algoritmo binario de la <a href="#fig01">figura 1</a> muestra cómo la  cantidad de productos que se deben calcular es dependiente de la cantidad de  ceros binarios que tiene el exponente. En el caso trivial en el que todos los  bits del exponente son cero, se requiere de N productos modulares, mientras que  si todos los bits del exponente son iguales a uno, se requerirá un total de 2×N productos modulares. La técnica por recodificación de  exponente busca maximizar la cantidad de ceros que tiene la representación del  exponente, con el propósito de hacer  mínima la cantidad de operaciones  necesaria. Se parte del supuesto que los productos se calcularán de manera secuencial, de lo contrario la estrategia no tiene mucho interés práctico. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Una representación binaria del exponente no aparece muy  atractiva para la técnica propuesta. Debido a que la notación binaria es única,  no hay oportunidad de maximizar la cantidad de ceros presente en la  representación del exponente. La técnica de recodificación de exponente usa <i>notación de dígito signado</i> [13] para la  representación del exponente, porque a partir de dicha representación, es  posible maximizar la cantidad de dígitos iguales a cero. Esta notación es  llamada también <i>notación</i> <i>redundante</i>, debido a que para cierto  número entero, existen múltiples representaciones equivalentes.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Sea E un número entero cualquiera. Al conjunto de valores  {d<sub>t</sub>, d<sub>t-1</sub>, …, d<sub>1</sub>, d<sub>0</sub>}se le llama r<i>epresentación de dígitos con signo </i>en  base 2 de E, si y solo si:</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><img src="/img/revistas/dyna/v75n156/a05eq05.gif"></font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La <a href="#fig04">figura 4</a> muestra el algoritmo para lograr la  recodificación de un exponente en notación de dígito signado, de modo que la  cantidad de ceros en la nueva representación sea máxima.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig04"></a><img src="/img/revistas/dyna/v75n156/a05fig04.gif">    <br>   Figura 4.</b> Algoritmo de recodificación del exponente    <br>   <b>Figure 4.</b> Exponent reconding algorithm</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Es de anotar que el operador de recodificación de la     <a href="#fig04">figura 4</a> incrementa en un bit la longitud del número, respecto a la notación  binaria tradicional. Como consecuencia de lo anterior, el algoritmo de  Exponenciación Modular tomará una iteración adicional en su recorrido por la  representación en dígito signado del exponente, desmejorando así el desempeño  de la implementación. Más importante es el efecto que tiene la notación de  dígito signado en la estructura del algoritmo binario de la <a href="#fig01">figura 1</a>. En el  algoritmo original, se recorre el exponente un dígito binario a la vez, en caso  que el dígito evaluado sea 1, se deberá calcular un producto modular adicional.  Para el algoritmo modificado y de acuerdo con (5), un dígito de la  representación del exponente puede tener tres valores: -1, 0 y 1. La aparición  del dígito negativo plantea la necesidad de calcular condicionalmente una nueva  operación llamada <i>división modular</i>,  que básicamente equivale a calcular una división seguida de un módulo o  residuo. La <a href="#fig05">figura 5</a> muestra el algoritmo de Exponenciación modificado para  manejar una notación de dígito signado para el exponente. La división modular  está representada en la figura como P = P / X mod M.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig05"></a><img src="/img/revistas/dyna/v75n156/a05fig05.gif">    <br>   Figura 5.</b> Algoritmo de Exponenciación  Modular para exponente recodificado    <br>  <b>Figure  5.</b> Modular exponentiation algorithm with recoded exponent</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la versión original del algoritmo binario la única  operación de complejidad importante que aparece es el producto modular. Un  diseñador que desee calcular exponenciaciones de manera óptima debería  preocuparse únicamente por optimizar el cálculo de productos modulares. Esta  estrategia es la que más se encuentra reportada en implementaciones hardware de  la exponenciación modular y de hecho existen varios algoritmos tendientes a mejorar  el desempeño en el cálculo de un producto modular. Con la versión transformada  del algoritmo aparece una nueva operación que debe ser optimizada. En entornos  limitados en hardware como lo pueden ser las implementaciones en dispositivos  reconfigurables, la optimización simultánea de los dos operadores es más  compleja.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La ley de Amdahl sugiere que es inútil incurrir en  esfuerzos de optimización excesivos tendientes a mejorar cierto aspecto de una  solución hardware, si la fracción que ocupa este aspecto dentro de la totalidad  del problema es mínima [14]. La <a href="#fig05">figura 5</a> muestra que la ejecución de divisiones  modulares es eventual y está condicionada a la aparición de dígitos negativos  en la representación del exponente. En la <a href="#fig06">figura 6</a> se muestran los resultados  de una simulación expresando el porcentaje de operaciones que serían divisiones  modulares en el cálculo de una exponenciación, usando el algoritmo  transformado, para diferentes longitudes de bit. Como puede verse, la  frecuencia de aparición de divisiones modulares en la ejecución del algoritmo  se encuentra alrededor del 5% y tiende a saturarse para longitudes de bit  considerables. Combinando esta información con la formulación aritmética de la  ley de Amdahl, se llega a la conclusión de que en el mejor caso (es decir, si  los esfuerzos de optimización lograrán reducir el tiempo de ejecución de una  división modular a cero segundos exactos) el desempeño global de   la Exponenciación  Modular solo mejora en un 5.26 %. Es decir, se incurriría en  un esfuerzo de diseño colosal que no se ve reflejado en la Mejora global de desempeño  de manera significativa.</font></p>     ]]></body>
<body><![CDATA[<p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig06"></a><img src="/img/revistas/dyna/v75n156/a05fig06.gif">    <br>   Figura 6.</b> Frecuencia de aparición de divisiones  modulares en una Exponenciación Modular con exponente recodificado    <br>  <b>Figure  6.</b> Modular division frecuency in a modular exponentation with recoded exponent</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>2.3 RNS    <br> </b>Los Sistemas de Numeración por Residuos o RNS (por las  siglas en inglés de <i>Residue Number  Systems</i>),  permiten la distribución de cálculos entre números de gran tamaño sobre anillos  modulares (o grupos finitos Zm), lo que permite una mejora en el desempeño de  las soluciones. Esta característica es bien conocida y usada sobre todo en entornos de Procesamiento Digital de Señales y Criptografía.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La idea con los sistemas RNS es pasar de una  representación modular que requiere una cantidad de bits considerable a otra en  donde se tienen múltiples valores en distintos módulos para representar un solo  número [15]. Cada uno de estos valores ocupa menos bits que la representación  original y el hecho que sea independiente de los demás permite la  implementación de operaciones de manera concurrente. La recombinación final de  los resultados parciales puede llegar a ser bastante compleja y es función  directa de cuántas bases o residuos se usen para representar los números. Las  implementaciones software de sistemas RNS usan representaciones de hasta tres  elementos para reducir la complejidad de las recombinaciones finales. Debido a  esta misma razón, Se conocen muy pocas implementaciones hardware [16] que hagan  uso de RNS, si bien se han hecho muchos estudios teóricos acerca del tema.</font></p>     <p><img src="/img/revistas/dyna/v75n156/a05eq06.gif"></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La ecuación (6) plantea la formulación matemática de los  sistemas RNS a partir del teorema del residuo chino. Como puede verse, la idea  es poder representar un número entero cualquiera X por medio de un conjunto de  valores de menor longitud {x<sub>1</sub>,  x<sub>2</sub>, …, x<sub>k</sub>}. Este conjunto es referido como representación  RNS o de raíz mixta del número X para los módulos {m<sub>1</sub>, m<sub>2</sub>,…,  m<sub>k</sub>}. Dado que las representaciones son ortogonales o independientes  entre si, es posible aplicar las operaciones de manera independiente a cada uno  de los elementos de la representación y luego recombinar los resultados  parciales. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En resumen, con RNS se puede dividir el cálculo de cierta  operación aritmética sobre números grandes (gran longitud en bits), en una  serie de operaciones independientes entre sí, sobre las representaciones en  raíz mixta de los operandos en cuestión. Como tales representaciones son de  menor tamaño, las operaciones sobre ellas serán menos complejas y se podrán  calcular en menor tiempo. Además, la naturaleza independiente de todos los  números que componen una representación RNS permite inferir implementaciones  concurrentes en hardware de las operaciones mencionadas. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Obsérvese también que (6) garantiza que la representación  RNS de cierto número es única, de modo que existe una manera unívoca por medio  de la cual se puede obtener cierto número X a partir de su representación en  raíz mixta. La forma de recombinar los elementos de raíz mixta de una  representación para obtener el valor del entero que representan es referida  como algoritmo de Garner [8]. </font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En entornos criptográficos, no siempre es posible tener  disponibles todos los factores (m<sub>1</sub>,  m<sub>2</sub>, …, m<sub>k</sub>) que componen el módulo del sistema (M), de modo que no  siempre se puede usar RNS en el cálculo de una exponenciación modular. En  sistemas como RSA y ElGamal, por ejemplo, el conocimiento de los factores que  componen el módulo provee a un criptoanalista con las herramientas para  descifrar mensajes ajenos, suplantar entidades, etc. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Normalmente en estos sistemas, el conocimiento de los  factores del módulo es exclusivo del usuario poseedor de la clave privada. De  modo que una aproximación que use RNS en entornos criptográficos deberá usar un  exponenciador para las operaciones de cifrado y otro muy distinto y  potencialmente más lento para las operaciones de descifrado. Tal es el caso de  la referencia [17], donde se hacen reportes de desempeño independientes para  cifrado y descifrado en un entorno de firmas digitales RSA. Esta asimetría en las  operaciones de cifrado y descifrado pudiera considerarse como la primera  desventaja del uso de RNS en entornos criptográficos.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La implementación RNS a la que hace referencia este  documento usa como bloques constitutivos Exponenciadores optimizados de 32 bits,  usados de manera concurrente para el cálculo de exponenciaciones modulares con operadores de mayor tamaño.  Esta aproximación es referida como máquina SIMD dentro de una taxonomía  propuesta por Flynn y corresponde al nivel más elemental de paralelismo en un  esquema de procesamiento [18].</font></p>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>3. RESULTADOS OBTENIDOS</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La <a href="#fig07">figura 7</a> muestra los resultados de la síntesis del  operador Exponenciación Modular luego de haber sido sometidos al proceso de  optimización referido anteriormente. Es un gráfico que muestra en un eje  logarítmico los valores de la función de costo (f) para diferentes tamaños de  los operandos (N).</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig07"></a><img src="/img/revistas/dyna/v75n156/a05fig07.gif">    <br>   Figura 7.</b> Comparación entre las tres  alternativas para el Exponenciador Modular    <br>  <b>Figure 7.</b> Cost function comparison between tree choices for modular exponentiation</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los resultados parecen concluyentes: La implementación  RNS de   la  Exponenciación Modular llega a ser superior a cualquiera de  las otras dos alternativas hasta en dos órdenes de magnitud para la función de  costo escogida. Adicionalmente, la diferencia en las funciones de costo se hace  más contundente para valores de N, lo que constituye una situación deseable en  entornos criptográficos. </font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Sin embargo, la implementación de Exponenciadores RNS en  aplicaciones prácticas tiene algunas limitantes. En primer lugar, existe la  asimetría entre las operaciones de cifrado y descifrado mencionada antes cuando  se pretende llevar el Exponenciador RNS a entornos criptográficos.  Adicionalmente, se deben considerar los detalles asociados a la recombinación de  los resultados parciales, una vez se han calculado las Exponenciaciones  Modulares sobre los L componentes de la representación en raíz mixta. El  algoritmo propone la forma de llevar una serie de valores correspondientes a la  representación en raíz mixta de cierto número a su representación binaria  natural. Se requiere del cálculo de un total de L! <i>inversos multiplicativos modulares</i> para su implementación, si bien  existen optimizaciones tendientes a reducir este valor [19]. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Lamentablemente, el operador inverso multiplicativo  modular es de naturaleza no determinística y las estimaciones de peor caso son  demasiado pesimistas [20], además de ser poco probables en un entorno  criptográfico.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para poder hacer comparaciones de desempeño más justas,  en donde se tenga en cuenta el tiempo que toma la recombinación de resultados  parciales para la implementación RNS, se optó por hacer descripciones software  de los algoritmos de Montgomery y RNS para cuando L=2 y L=4. La <a href="#fig08">figura 8</a> muestra los resultados de tales descripciones, en donde se grafica el  comportamiento del tiempo de ejecución para diferentes valores de N.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig08"></a><img src="/img/revistas/dyna/v75n156/a05fig08.gif">    <br>   Figura 8.</b> Resultados de una simulación  software para   la  Exponenciación de Montgmoery y RNS    <br>  <b>Figure  8.</b> Software simulation results for Montgomery’s and RNS exponentiations</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La figura evidencia que cuando se introduce la  recombinación de resultados al exponenciador RNS, las diferencias de desempeño  no son tan acentuadas, si bien RNS sigue siendo la opción de mejor  comportamiento. La discusión anterior sugiere que no es apropiado usar  demasiados factores para la representación en raíz mixta de los operandos de   la Exponenciación  Modular. Dado que se requiere del cálculo de L! inversos  multiplicativos modulares, existirá un valor de L para el cual la sobrecarga de  la recombinación de los resultados sea tal que contrarreste los buenos  resultados obtenidos al distribuir las operaciones sobre la representación en  raíz mixta.</font></p>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>4. CONCLUSIONES</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">De todas las opciones disponibles para la implementación  de   la  Exponenciación Modular se ha mostrado que la que usa  recodificación del exponente es la que exhibe un comportamiento más pobre. De  hecho, no se encuentran trabajos reportados sobre una implementación hardware  que haga uso de representaciones de dígito signado para el exponente. De  acuerdo con la discusión anterior, esto puede deberse a la necesidad de una  serie de operadores de cierta complejidad, cuya optimización simultánea en un  entorno hardware puede ser difícil. Se concluye que esta estrategia es más  adecuada para entornos software, donde la implementación de tales operadores no  representa grandes esfuerzos de diseño.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Se propone que la implementación RNS debe hacerse  adoptando una estrategia de codiseño, donde las Exponenciaciones Modulares de  la representación en raíz mixta se hagan concurrentemente en hardware, mientras  que la recombinación posterior de los resultados sea desarrollada en software y  ejecutada por un microprocesador de propósito general. En entornos en donde la  disponibilidad de un microprocesador no sea posible, se plantea el uso del  exponenciador de Montgomery, como un compromiso aceptable entre complejidad y  desempeño.</font></p>     <p>&nbsp;</p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>REFERENCIAS</b></font></p>     <!-- ref --><p>   <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b> [1]</b> RIVEST R. L, SHAMIR A, ADLEMAN L. A method for obtaining Digital Signatures and Public-key Cryptosystems. Communications of the ACM. 1978.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000106&pid=S0012-7353200800030000500001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[2]</b> RABIN M. O. Digitalized Signatures and Public Key Functions as Intractable as Factorization. Massachusetts Institute of Technology. Laboratory for Computer Science. 1979.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000107&pid=S0012-7353200800030000500002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[3]</b> ELGAMAL T. A public key cryptosystem and a signature scheme based on discrete logarithms. Lecture Notes in Comput. Sci., 196, Springer, Berlin, pages 10-18, 1985.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000108&pid=S0012-7353200800030000500003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[4]</b> SENDRIER N. MCEliece Public key Cryptosystems. Project CODES. INRIA RocQuencourt. 1996.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000109&pid=S0012-7353200800030000500004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[5]</b> LEVITIN A. Introduction to the Design and Analysis of Algorithms. Addison Wesley. 2002. ISBN: 0-201-74395-7.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000110&pid=S0012-7353200800030000500005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[6]</b> HORNER W. G. A new method of solving numerical equations of all orders, by continuous approximation. In Philosophical Transactions of the Royal Society of London, pp. 308-335, July 1819.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000111&pid=S0012-7353200800030000500006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[7]</b> CHIANG J, CHIEN C, CHEN J, CHOU H. An Efficient VLSI Architecture for Rivest-Shamir-Adleman Public-key Cryptosystem. Tamkang Journal of Science and Engineering, Vol. 7, No 4, pp. 241–250, 2004     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000112&pid=S0012-7353200800030000500007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[8]</b> MENEZES A, OORSCHOT P. V, VANSTONE S. Handbook of applied Cryptography. CRC Press. 1996.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000113&pid=S0012-7353200800030000500008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[9]</b> BOLAÑOS F, BERNAL A. Diseño y Optimización de un Multiplicador Modular usando Hardware Reconfigurable. VII Encuentro de Investigación sobre Tecnologías de la Información aplicadas a la solución de problemas EITI–2006. Agosto 2006.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000114&pid=S0012-7353200800030000500009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[10]</b> MONTGOMERY P. L. Modular Multiplication without trial division. Math. Of Computation. 44(70):519 – 521, April 1985.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000115&pid=S0012-7353200800030000500010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[11]</b> KOÇ Ç. K, ACAR T. Fast Software Exponentiation in GF(2k). IEEE Computer Society Press. Proceedings, 13th Symposium on Computer Arithmetic. pp. 225 – 231, 1997.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000116&pid=S0012-7353200800030000500011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[12]</b> HACHEZ G, QUISQUATER J. J. Montgomery Exponentiation with no Final Substractions: Improved Results. Lecture Notes in Computer Science. Vol. 1965. pp. 293 – 301. 2000.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000117&pid=S0012-7353200800030000500012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[13]</b> JOYE M, YEN S–M. Optimal Left–to–Right Binary Signed–Digit Recoding. IEEE Transactions on Computers. 49(7):740–748, 2000.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000118&pid=S0012-7353200800030000500013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[14]</b> HENNESSY J. PATTERSON D. Computer architecture: A quantitative approach. Morgan Kauffman Publishers. 2004. ISBN 1-55860-596-7.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000119&pid=S0012-7353200800030000500014&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[15]</b> BAJARD J. C, PLANTARD T. RNS Bases and Conversions. LIRMM UMR 5506. University of Montpelier 2, France.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000120&pid=S0012-7353200800030000500015&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[16]</b> CIET M, NEVE M, PEETERS E, QUISQUATER J. Parallel FPGA Implementation of RSA with Residue Number Systems. UCL Crypto Group. Belgium . 2003.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000121&pid=S0012-7353200800030000500016&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[17]</b> BLUM T, PAAR C. Montgomery Modular Exponentiation on Reconfigurable Hardware. 14th IEEE Symposium on Computer Artihmetic. Apr. 14 – 16, 1999.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000122&pid=S0012-7353200800030000500017&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[18]</b> STALLINGS W. Computer Organization and Architecture: Designing for Performance. Prentice Hall Computer Science. 2006. ISBN 0-13-185644-8.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000123&pid=S0012-7353200800030000500018&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[19]</b> CIET M, NEVE M, PEETERS E, QUISQUATER J. Parallel FPGA Implementation of RSA with Residue Number Systems. UCL Crypto Group. Belgium . 2003.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000124&pid=S0012-7353200800030000500019&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><br>   <b>[20]</b> STEHLÉ D, ZIMMERMAN P. A Binary Recursive GCD Algorithm. LORIA/INRIA 2003. </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000125&pid=S0012-7353200800030000500020&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[RIVEST]]></surname>
<given-names><![CDATA[R. L]]></given-names>
</name>
<name>
<surname><![CDATA[SHAMIR]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[ADLEMAN]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
</person-group>
<source><![CDATA[A method for obtaining Digital Signatures and Public-key Cryptosystems]]></source>
<year>1978</year>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[RABIN]]></surname>
<given-names><![CDATA[M. O.]]></given-names>
</name>
</person-group>
<collab>Massachusetts Institute of Technology^dLaboratory for Computer Science</collab>
<source><![CDATA[Digitalized Signatures and Public Key Functions as Intractable as Factorization]]></source>
<year>1979</year>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ELGAMAL]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A public key cryptosystem and a signature scheme based on discrete logarithms]]></article-title>
<source><![CDATA[Comput. Sci.]]></source>
<year>1985</year>
<numero>196</numero>
<issue>196</issue>
<page-range>10-18</page-range><publisher-loc><![CDATA[Berlin ]]></publisher-loc>
<publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[SENDRIER]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
</person-group>
<source><![CDATA[MCEliece Public key Cryptosystems]]></source>
<year>1996</year>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[LEVITIN]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<source><![CDATA[Introduction to the Design and Analysis of Algorithms]]></source>
<year>2002</year>
<publisher-name><![CDATA[Addison Wesley]]></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[HORNER]]></surname>
<given-names><![CDATA[W. G.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A new method of solving numerical equations of all orders, by continuous approximation]]></article-title>
<source><![CDATA[Philosophical Transactions of the Royal Society of London]]></source>
<year>July</year>
<month> 1</month>
<day>81</day>
<page-range>308-335</page-range></nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CHIANG]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[CHIEN]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[CHEN]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[CHOU]]></surname>
<given-names><![CDATA[H]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An Efficient VLSI Architecture for Rivest-Shamir-Adleman Public-key Cryptosystem]]></article-title>
<source><![CDATA[Journal of Science and Engineering]]></source>
<year>2004</year>
<volume>7</volume>
<numero>4</numero>
<issue>4</issue>
<page-range>241-250</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[MENEZES]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[OORSCHOT]]></surname>
<given-names><![CDATA[P. V]]></given-names>
</name>
<name>
<surname><![CDATA[VANSTONE]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<source><![CDATA[Handbook of applied Cryptography]]></source>
<year>1996</year>
<publisher-name><![CDATA[CRC Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BOLAÑOS]]></surname>
<given-names><![CDATA[F]]></given-names>
</name>
<name>
<surname><![CDATA[BERNAL]]></surname>
<given-names><![CDATA[A.]]></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[]]></source>
<year></year>
<conf-name><![CDATA[VII Encuentro de Investigación sobre Tecnologías de la Información aplicadas a la solución de problemas EITI-2006]]></conf-name>
<conf-date>Agosto 2006</conf-date>
<conf-loc> </conf-loc>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</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[Math. Of Computation]]></source>
<year>Apri</year>
<month>l </month>
<day>19</day>
<volume>44</volume>
<numero>70</numero>
<issue>70</issue>
<page-range>519 - 521</page-range></nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[KOÇ]]></surname>
<given-names><![CDATA[Ç. K]]></given-names>
</name>
<name>
<surname><![CDATA[ACAR]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Fast Software Exponentiation in GF(2k)]]></article-title>
<source><![CDATA[]]></source>
<year>1997</year>
<conf-name><![CDATA[13 Symposium on Computer Arithmetic]]></conf-name>
<conf-loc> </conf-loc>
<page-range>225 - 231</page-range><publisher-name><![CDATA[IEEE Computer Society Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="journal">
<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>
<article-title xml:lang="en"><![CDATA[Montgomery Exponentiation with no Final Substractions: Improved Results]]></article-title>
<source><![CDATA[Computer Science]]></source>
<year>2000</year>
<volume>1965</volume>
<page-range>293 - 301</page-range></nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[JOYE]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[YEN]]></surname>
<given-names><![CDATA[S-M]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Optimal Left-to-Right Binary Signed-Digit Recoding]]></article-title>
<source><![CDATA[IEEE Transactions on Computers]]></source>
<year>2000</year>
<volume>49</volume>
<numero>7</numero>
<issue>7</issue>
<page-range>740-748</page-range></nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[HENNESSY]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[PATTERSON]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
</person-group>
<source><![CDATA[Computer architecture: A quantitative approach]]></source>
<year>2004</year>
<publisher-name><![CDATA[Morgan Kauffman Publishers]]></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[BAJARD]]></surname>
<given-names><![CDATA[J. C]]></given-names>
</name>
<name>
<surname><![CDATA[PLANTARD]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<source><![CDATA[RNS Bases and Conversions: LIRMM UMR 5506]]></source>
<year></year>
<publisher-name><![CDATA[University of Montpelier 2]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CIET]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[NEVE]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[PEETERS]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[QUISQUATER]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<collab>UCL Crypto Group</collab>
<source><![CDATA[Parallel FPGA Implementation of RSA with Residue Number Systems]]></source>
<year>2003</year>
</nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="confpro">
<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[Montgomery Modular Exponentiation on Reconfigurable Hardware]]></article-title>
<source><![CDATA[]]></source>
<year></year>
<conf-name><![CDATA[14 IEEE Symposium on Computer Artihmetic]]></conf-name>
<conf-date>Apr. 14 - 16, 1999</conf-date>
<conf-loc> </conf-loc>
</nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[STALLINGS]]></surname>
<given-names><![CDATA[W.]]></given-names>
</name>
</person-group>
<source><![CDATA[Computer Organization and Architecture: Designing for Performance]]></source>
<year>2006</year>
<page-range>0-13-185644-8</page-range><publisher-name><![CDATA[Prentice Hall Computer Science]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CIET]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[NEVE]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[PEETERS]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[QUISQUATER]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<collab>UCL Crypto Group</collab>
<source><![CDATA[Parallel FPGA Implementation of RSA with Residue Number Systems]]></source>
<year>2003</year>
</nlm-citation>
</ref>
<ref id="B20">
<label>20</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[STEHLÉ]]></surname>
<given-names><![CDATA[D]]></given-names>
</name>
<name>
<surname><![CDATA[ZIMMERMAN]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
</person-group>
<source><![CDATA[A Binary Recursive GCD Algorithm]]></source>
<year>2003</year>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
