<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Limited Entropy Dot Com &#187; smart cards</title>
	<atom:link href="http://www.limited-entropy.com/category/seguridad/smart-cards/feed" rel="self" type="application/rss+xml" />
	<link>http://www.limited-entropy.com</link>
	<description>Not so random thoughts on security featured by Eloi Sanfèlix</description>
	<lastBuildDate>Wed, 06 Apr 2011 17:36:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Fault injection: Ataque a RSA-CRT</title>
		<link>http://www.limited-entropy.com/fault-injection-ataque-a-rsa-crt</link>
		<comments>http://www.limited-entropy.com/fault-injection-ataque-a-rsa-crt#comments</comments>
		<pubDate>Sat, 10 May 2008 17:06:06 +0000</pubDate>
		<dc:creator>Eloi Sanfèlix</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[smart cards]]></category>
		<category><![CDATA[Fault injection]]></category>
		<category><![CDATA[RSA-CRT]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.limited-entropy.com/?p=75</guid>
		<description><![CDATA[Después de mucho tiempo en el letargo, volvemos a la carga con un ejemplo de inyección de fallos en el algoritmo RSA empleando el Teorema Chino del Resto ( Chinese Remainder Theorem ). Este teorema permite que si tenemos un par de ecuaciones tal que Con p y q primos, se pueda calcular x ( [...]]]></description>
			<content:encoded><![CDATA[<p>Después de mucho tiempo en el letargo, volvemos a la carga con un ejemplo de <em>inyección de fallos</em> en el algoritmo RSA empleando el Teorema Chino del Resto ( Chinese Remainder Theorem ). Este teorema permite que si tenemos un par de ecuaciones tal que</p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=x%20%5Cequiv%20x_p%20%5Cpmod%7Bp%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='x \equiv x_p \pmod{p}' title='x \equiv x_p \pmod{p}' class='latex' /></p>
<p style="text-align: center;"><img src='http://s.wordpress.com/latex.php?latex=x%20%5Cequiv%20x_q%20%5Cpmod%7Bq%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='x \equiv x_q \pmod{q}' title='x \equiv x_q \pmod{q}' class='latex' /></p>
<p>Con p y q primos, se pueda calcular x ( mod p·q ) a partir de ellos y dos resultados auxiliares.</p>
<p>Por ello, el algoritmo RSA se puede dividir de una potencia modular con un módulo enorme a dos operaciones modulares de módulos de tamaño aproximadamente la mitad del primero.  Con esto se consigue una mejora de rendimiento, lo cual es fundamental en aplicaciones con recursos limitados como <a href="http://www.limited-entropy.com/cat/seguridad/smart-cards">smart cards</a>. Además, los resultados auxuliares pueden ser precalculados, con lo cual se pueden cargar en la tarjeta al mismo tiempo que la clave y reducir la carga.</p>
<p>Sin embargo, en estos entornos es posible inyectar fallos tal y como expliqué en <a href="http://www.limited-entropy.com/smart-cards-ataques-de-inyeccion-de-fallos">esta entrada</a>. ¿Y qué tiene esto que ver con las implementaciones de RSA usando el CRT?  Como vamos a ver, mucho <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-75"></span></p>
<p>En primer lugar, supongamos que realizamos una firma mediante RSA-CRT en un dispositivo embebido.  Entonces, el dispositivo calcula <img src='http://s.wordpress.com/latex.php?latex=m%5Ed%20%5Cpmod%7Bn%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='m^d \pmod{n}' title='m^d \pmod{n}' class='latex' /> mediante el cálculo de <img src='http://s.wordpress.com/latex.php?latex=c_1%3Dm%5E%7Bd_q%7D%20%5Cpmod%7Bq%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c_1=m^{d_q} \pmod{q}' title='c_1=m^{d_q} \pmod{q}' class='latex' /> y <img src='http://s.wordpress.com/latex.php?latex=c_2%3Dm%5E%7Bd_p%7D%20%5Cpmod%7Bp%7D%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c_2=m^{d_p} \pmod{p} ' title='c_2=m^{d_p} \pmod{p} ' class='latex' /> , y realiza la combinación apropiada para obtener <img src='http://s.wordpress.com/latex.php?latex=m%5Ed%20%5Cpmod%7Bn%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='m^d \pmod{n}' title='m^d \pmod{n}' class='latex' />. Esto se hace mediante la fórmula <img src='http://s.wordpress.com/latex.php?latex=c%20%3D%20m%5Ed%20%3D%20a%20%5Ccdot%20c_1%20%2B%20b%20%5Ccdot%20c_2%20%5Cpmod%7Bn%7D%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c = m^d = a \cdot c_1 + b \cdot c_2 \pmod{n} ' title='c = m^d = a \cdot c_1 + b \cdot c_2 \pmod{n} ' class='latex' /> , donde a y b son los resultados antes mencionados que se calculan mediante las siguientes fórmulas:</p>
<p>a= 0 (mod p), a=1 (mod q)</p>
<p>b=1 (mod p), b=0 (mod q)</p>
<p>Así pues, supongamos que ahora realizamos un ataque mediante <em>glitching</em> e introducimos un fallo en el cálculo de <img src='http://s.wordpress.com/latex.php?latex=c_2&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c_2' title='c_2' class='latex' />, de forma que ya no cumple <img src='http://s.wordpress.com/latex.php?latex=c2%5E%7B%5Cprime%7D%20%3Dm%5Ed_p%20%5Cpmod%7Bp%7D&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c2^{\prime} =m^d_p \pmod{p}' title='c2^{\prime} =m^d_p \pmod{p}' class='latex' />. Entonces, obviamente el resultado es incorrecto, pero... ¿podemos aprovecharlo?</p>
<p>Poniendo todas las ecuaciones que tenemos juntas, vemos que la diferencia entre el valor correcto c, y el valor en el que hemos inducido nuestro fallo, c', cumple lo siguiente:</p>
<img src='http://s.wordpress.com/latex.php?latex=c-c%5E%7B%5Cprime%7D%20%3D%20a%20%5Ccdot%20c_1%20-%20a%20%5Ccdot%20c_1%5E%7B%5Cprime%7D%20%20%3D%200%20%5Cpmod%7Bq%7D%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c-c^{\prime} = a \cdot c_1 - a \cdot c_1^{\prime}  = 0 \pmod{q} ' title='c-c^{\prime} = a \cdot c_1 - a \cdot c_1^{\prime}  = 0 \pmod{q} ' class='latex' />
<img src='http://s.wordpress.com/latex.php?latex=c-c%5E%7B%5Cprime%7D%20%3D%20b%5Ccdot%20c_2%20-%20b%5Ccdot%20c_2%5E%7B%5Cprime%7D%20%3D%20b%5Ccdot%20%28c2-c2%5E%7B%5Cprime%7D%29%20%5Cneq%200%20%5Cpmod%7Bp%7D%20&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt='c-c^{\prime} = b\cdot c_2 - b\cdot c_2^{\prime} = b\cdot (c2-c2^{\prime}) \neq 0 \pmod{p} ' title='c-c^{\prime} = b\cdot c_2 - b\cdot c_2^{\prime} = b\cdot (c2-c2^{\prime}) \neq 0 \pmod{p} ' class='latex' />
<p>Por tanto, si calculamos el máximo común divisor de c-c' y n=p·q, este caso nos daría el valor de q ya que es el único factor común entre ambos, pues c-c' es múltiplo de q pero no de p. Este cálculo se puede hacer de forma eficiente mediante el <a href="http://es.wikipedia.org/wiki/Algoritmo_de_Euclides">algoritmo de Euclides</a>.</p>
<p>Así pues, mediante un poco de matemáticas y una inyección de un fallo en un resultado resulta muy sencillo obtener la clave RSA. Esto deja clara la necesidad de proteger los dispositivos embebidos ante este tipo de ataques.</p>
<p>Este ejemplo ha sido sacado de las notas de<a href="http://www.win.tue.nl/~henkvt/"> Henk Van Tilburg</a> para <em>Cryptography 1</em> .</p>
<div id="flaresmith" class="feedflare"><script src="http://feeds.feedburner.com/~s/LimitedEntropyDotCom?i=http://www.limited-entropy.com/fault-injection-ataque-a-rsa-crt" type="text/javascript" charset="utf-8"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.limited-entropy.com/fault-injection-ataque-a-rsa-crt/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Smart cards: Ataques de inyección de fallos</title>
		<link>http://www.limited-entropy.com/smart-cards-ataques-de-inyeccion-de-fallos</link>
		<comments>http://www.limited-entropy.com/smart-cards-ataques-de-inyeccion-de-fallos#comments</comments>
		<pubDate>Sun, 30 Mar 2008 19:24:44 +0000</pubDate>
		<dc:creator>Eloi Sanfèlix</dc:creator>
				<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[smart cards]]></category>

		<guid isPermaLink="false">http://www.limited-entropy.com/smart-cards-ataques-de-inyeccion-de-fallos</guid>
		<description><![CDATA[Volvemos una vez más a las smart cards, analizando esta vez los ataques de tipo fault injection, que se basan en introducir fallos intencionadamente para hacer fallar la tarjeta de forma que se pueda aprovechar. Puesto que las tarjetas reciben TODO lo que necesitan para funcionar desde el exterior ( alimentación y reloj básicamente ), [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: bold"></span>Volvemos una vez más a las smart cards, analizando esta vez los ataques de tipo <em>fault injection</em>, que se basan en introducir <em>fallos</em> intencionadamente para hacer fallar la tarjeta de forma que se pueda aprovechar.  Puesto que las tarjetas reciben TODO lo que necesitan para funcionar desde el exterior ( alimentación y reloj básicamente ), un atacante puede modificar cualquiera de esas entradas modificando un lector de tarjetas (o su driver ) para ello.</p>
<p>Por una parte, <strong>variaciones en la tensión de alimentación </strong>(aka <em>power glitching</em> ) pueden hacer que el procesador malinterprete instrucciones o datos, o incluso se las salte.  Por ejemplo, si bajamos repentinamente la tensión puede darse el caso que un bit con valor '1' llegue con un valor por debajo del umbral de decisión, de forma que se lea como un '0'. Así se consigue producir un valor incorrecto o conseguir que se ejecute un salto condicional cuando no debería.</p>
<p>Además, podemos conseguir resultados similares  <span style="font-weight: bold">variando el reloj externo</span>, haciendo que el micro lea valores de memoria incorrectamente o ejecute instrucciones de forma instantánea.</p>
<p>Por otra parte, existen otros métodos como variar la temperatura del chip de forma que quede fuera de los umbrales de funcionamiento definidos por el fabricante, mediante radiación electromagnética o utilizando fuentes de luz ya sea Laser, rayos X o incluso <span style="font-style: italic">luz blanca</span>, aunque estos últimos ataques son invasivos pues hay que abrir el chip para llegar a introducir la luz en el punto exacto.</p>
<p>Del tema de inyección mediante laser nos hablaron un poco en una visita a Brightsight, donde nos enseñaron los aparatos que usan (tenían varios laseres de distintas potencias y calidades) para atacar las smart cards una vez han eliminado el <span style="font-style: italic">epoxy</span> que protege el chip.</p>
<p>Para protegerse de este tipo de ataques lo habitual es realizar los cálculos de forma redundante y comprobar que el resultado es lo mismo, y de la misma manera cada vez que se escribe en EEPROM tratar de leer el valor escrito como comprobación. Además podemos usar valores true=0xAA y false=0xFF en lugar de 0x00 para false y cualquier otra cosa para true como es habitual; así si nos cambian un solo bit no pasa de true a false, sino a un estado indefinido en el que podemos tomar protecciones como borrar directamente datos sensibles de la tarjeta (claves criptográficas, información de autenticación, etc...).</p>
<p>Por otra parte, muchos fabricantes incluyen sensores de luz, de frecuencia, temperatura y demás en sus chips como medida de protección. De esta forma, si la frecuencia o temperatura se sale de determinados márgenes pueden suponer que es un ataque y tomar medidas al respecto. Eso sí, el atacante siempre tiene el control del reloj y la alimentación, así que puede monitorizar el consumo de potencia y si ve un patrón que puede corresponder al inicio de un ciclo de borrado de la memoria puede desactivar el chip.</p>
<p>En la próxima entrega, intentaré explicar un ataque sencillo a RSA implementado con el teorema del residuo chino ( RSA-CRT ) mediante <span style="font-style: italic">fault injection</span>, explicando primero qué es eso de RSA-CRT claro.</p>
<div id="flaresmith" class="feedflare"><script src="http://feeds.feedburner.com/~s/LimitedEntropyDotCom?i=http://www.limited-entropy.com/smart-cards-ataques-de-inyeccion-de-fallos" type="text/javascript" charset="utf-8"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.limited-entropy.com/smart-cards-ataques-de-inyeccion-de-fallos/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Protecciones contra Side Channel Analysis</title>
		<link>http://www.limited-entropy.com/protecciones-contra-side-channel-analysis</link>
		<comments>http://www.limited-entropy.com/protecciones-contra-side-channel-analysis#comments</comments>
		<pubDate>Mon, 25 Feb 2008 20:58:11 +0000</pubDate>
		<dc:creator>Eloi Sanfèlix</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[smart cards]]></category>

		<guid isPermaLink="false">http://www.limited-entropy.com/protecciones-contra-side-channel-analysis</guid>
		<description><![CDATA[Volvemos a la carga con el tema de SCA. Después de ver qué es eso del Side channel analysis y analizar los análisis de consumo de potencia en los dos posts anteriores, esta vez vamos a comentar un poco las medidas más usuales para hacer frente a este tipo de análisis, y más concretamente contra [...]]]></description>
			<content:encoded><![CDATA[<p>Volvemos a la carga con el tema de SCA. Después de ver qué es eso del Side channel analysis y analizar los análisis de consumo de potencia en los dos posts anteriores, esta vez vamos a comentar un poco las medidas más usuales para hacer frente a este tipo de análisis, y más concretamente contra <em>power analysis</em>.</p>
<p>El análisis simple, en el que tomamos una o unas pocas tramas y mediante algún tipo de inspección (normalmente visual y poco más) de ésta intentamos obtener la clave es fácil de resolver mediante la eliminación de dependencias con la clave en el algoritmo. Por ejemplo, como vimos en el caso del ataque a RSA, haciendo que se calculen todos las posibilidades y haciendo la elección después.</p>
<p>En el caso de análisis de potencia diferencial, lo que debemos hacer es intentar reducir CUALQUIER relación del consumo de potencia con los datos o la clave, debido a que tras adquirir muchas trazas se realiza una medida de la relación de éstas con las trazas para decidir qué clave es la buena (usualmente esta medida es un cálculo de la correlación entre las trazas medidas y los consumos hipotéticos).  Así pues, para tratar de reducir dicha correlación tenemos dos estrategias principales:</p>
<ul>
<li><em><strong>Hiding</strong></em> : Como su nombre indica, se trata de ocultar de alguna forma estas relaciones.</li>
<li><strong><em>Masking</em></strong> : en este tipo de protecciones lo que se hace es <em>enmascarar</em> el cálculo de las operaciones <em>conflictivas</em> utilizando valores aleatorios, para luego obtener a partir de este cálculo con distribución uniforme el valor real.</li>
</ul>
<p>Dentro de los métodos de <strong>ocultación </strong>podemos encontrar diversas técnicas.  Una de ellas es introducir <strong>retardos aleatorios </strong>en ciertos puntos del algoritmo, con lo que se consigue que las trazas de consumo de potencia no estén perfectamente alineadas y se reduce la correlación con los valores hipotéticos de consumo.</p>
<p>Otra técnica comentada con frecuencia consiste en <strong>añadir ruido en amplitud</strong> al consumo de potencia.  Puesto que estamos buscando cierta señal útil dentro de la medida (aquella parte relacionada con los datos y/o la clave), siempre podemos añadir más potencia de forma aleatoria, por ejemplo activando subsistemas inactivos en el chip, como conversores AD/DA, interrupciones, etcétera.</p>
<p>También se suele usar el hecho de que muchos de los procesos llevados a cabo en un algoritmo de cifrado se pueden realizar de forma paralela, con lo cual en software podríamos reordenarlos sin problemas o incluso si tenemos multithreading realizarlos <em>en paralelo</em> (y si tuviesemos varios <em>cores </em>o un sistema multiprocesador... pero hablamos de smart cards y dispositivos embebidos). Por ejemplo, hablando de DES podríamos hacer las búsquedas en las S-box de forma aleatoria empezando con un número aleatorio e incrementar el número cada vez, empezando por la primera cuando lleguemos a la última.</p>
<p>Para acabar con las medidas de ocultación (que conozco) , podríamos realizar varias implementaciones alternativas de ciertas partes del algoritmo e ir alternando entre ellas en cada cifrado eligiendo cuál usar de forma aleatoria.</p>
<p>En cuanto a medidas de <strong><em>masking</em></strong>, hay que ver cada algoritmo por su parte. Los algoritmos como DES o AES que realizan búsquedas en tablas (las famosas sbox se suelen implementar como tablas en software), se suelen tomar valores aleatorios y realizar una nueva tabla <em>equivalente</em> que tenga en cuenta dicho valor aleatorio, y luego hacer el acceso a memoria tomando el valor aleatorio.  Por ejemplo, tomamos m aleatorio, y hacemos una tabla S' tal que S'[i+m]=S'[i]+m. Ahora, cuando tenemos que hacer el acceso, lo hacemos a la posición i+m de la tabla y posteriormente hacemos la resta del valor m al resultado tras la búsqueda en la tabla.</p>
<p>Para algoritmos como RSA, se suele hacer con un exponente aleatorio que tras el descifrado o la firma del documento se <em>invierte</em>, volviendo al valor inicial. Creo que ya lo comenté en el primer post sobre SCA.</p>
<p>Evidentemente, cuantas más medidas añadamos más difícil será romper la implementación con este tipo de técnicas, pero hay que buscar un compromiso entre la mejora en seguridad y el empeoramiento de las prestaciones.  El objetivo será pues desarrollar un sistema con una seguridad y prestaciones aceptables combinando varias de estas medidas.</p>
<div id="flaresmith" class="feedflare"><script src="http://feeds.feedburner.com/~s/LimitedEntropyDotCom?i=http://www.limited-entropy.com/protecciones-contra-side-channel-analysis" type="text/javascript" charset="utf-8"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.limited-entropy.com/protecciones-contra-side-channel-analysis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ataques a smart cards: Side channel analysis (II)</title>
		<link>http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-ii</link>
		<comments>http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-ii#comments</comments>
		<pubDate>Sat, 02 Feb 2008 16:38:53 +0000</pubDate>
		<dc:creator>Eloi Sanfèlix</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[smart cards]]></category>

		<guid isPermaLink="false">http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-ii</guid>
		<description><![CDATA[En este post volvemos al tema de las smart cards, continuando con los ataques de tipo side channel analysis. En el post anterior vimos qué es eso del side channel y qué tipos había, así como analizamos un ataque a RSA basado en el tiempo de ejecución de una potencia realizada con el método de [...]]]></description>
			<content:encoded><![CDATA[<p>En este post volvemos al tema de las smart cards, continuando con los ataques de tipo side channel analysis.  En el <a href="http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-i">post anterior</a> vimos qué es eso del <em>side channel</em> y qué tipos había, así como analizamos un ataque a RSA basado en el tiempo de ejecución de una potencia realizada con el método de cuadrados repetidos ( <em>repeat squaring </em>).</p>
<p>En este post vamos a hablar un poco del análisis de potencia ( <em>power analysis </em>), en qué se basa y cómo funciona. No voy a poner ningún ejemplo concreto aquí, aunque al final enlazo a una página con ejemplos para matlab/octave.</p>
<p><strong>Bases del análisis de potencia</strong></p>
<p>Los ataques mediante análisis de la potencia consumida se basan en que, en un microcontrolador o microprocesado, la potencia consumida por el dispositivo depende de:</p>
<ul>
<li>La instrucción ejecutada</li>
<li>Los datos tratados en dicha instrucción</li>
</ul>
<p>Así pues, si la potencia consumida depende de los operandos de la instrucción, es lógico pensar que analizando dicha potencia consumida en un proceso <em>conocido</em> pero con unos datos desconocidos ( <em>clave?</em> ) podríamos llegar a obtener estos datos desconocidos.</p>
<p><strong>Medida de la potencia consumida en smart cards</strong></p>
<p>Como ya conocemos, la alimentación y el reloj de una smart card es proporcionada por el lector mediante sus pines externos.  Por tanto, es sencillo introducir elementos en esa red de alimentación para poder calcular el consumo de potencia del dispositivo durante su operación.</p>
<p>El circuito más sencillo que se nos puede ocurrir es introducir una pequeña resistencia en serie con la línea de Vcc o de GND del dispositivo, por ejemplo de 1 ó 50 Ohmios.  De esta forma, la corriente que fluye por la resistencia es la misma que la que fluye por el dispositivo, y realizando una medida de la tensión caída en dicha resistencia tenemos un valor proporcional al consumo de potencia del dispositivo.</p>
<p>Otra opciones más avanzadas incluyen el uso de circuitos estabilizados con la intención de que el circuito de medida afecte en la menor manera posible al dispositivo que se está analizando.</p>
<p><strong>Análisis de potencia simple (SPA)</strong></p>
<p>El análisis de potencia simple, o SPA de sus siglas en inglés, se basa en la inspección de una o unas pocas trazas de la potencia consumida por el dispositivo bajo estudio. De esta forma resulta sencillo obtener información sobre qué operación está realizando el dispositivo mediante la observación de patrones conocidos en las trazas.</p>
<p>Por ejemplo, la observación comentada en el post anterior sobre RSA se podría realizar con una de estas trazas directamente, mientras que con DES o AES probablemente no seríamos capaces de deducir ninguna clave.  Lo que sí seríamos capaces es de determinar que se está realizando un cifrado DES debido a la aparición de 16 patrones similares que denotan las 16 rondas de cifrado/descifrado de DES.</p>
<p><strong>Análisis de potencia diferencial (DPA)</strong></p>
<p>Esta modalidad del análisis de potencia requiere la adquisición de muchas trazas de la potencia consumida por el dispositivo. Básicamente el procedimiento es el siguiente:</p>
<ol>
<li>Adquirir trazas de potencia del dispositivo</li>
<li> Escoger un resultado intermedio del cifrado para atacarlo</li>
<li>Calcular todos los posibles valores del resultado intermedio</li>
<li>Obtener una estimación del consumo de potencia en base a dichos valores</li>
<li>Calcular mediante alguna función de medida la clave más probable</li>
</ol>
<p>Como ejemplo, en el punto 2 podríamos escoger los valores de salida de la primera S-box de <a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES</a> ( o el componente <a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard#The_SubBytes_step">SubBytes</a> que es lo mismo) en la primera ronda de ejecución, y para cada valor del primer byte de la clave, k,  combinado con el primer byte de datos,d,  obtener el valor S[ k XOR d].</p>
<p>A partir de aquí se aplica el modelo de consumo elegido, que puede ser tan simple como LSB del valor o un poco más elaborado como el peso hamming del mismo, HW(S[ k XOR d]).</p>
<p>Finalmente se realiza la comparación mediante algún operador estadístico como puede ser la correlación de las trazas con el consumo estimado, o la diferencia de las medias como se explicaba en el <a href="http://www.cryptography.com/resources/whitepapers/DPA.pdf">paper original de Paul Kocher y otros</a>.  Todas estas funciones de medida tienen la propiedad de que a mayor resultado, más probable es la clave. Por tanto, buscando el máximo de la comparación encontraremos el valor del resultado intermedio, y de ahí el de la clave.</p>
<p>También tienen la propiedad de que a mayor número de trazas, más fácil encontrar el valor correcto de la clave; así pues, el número de trazas necesario para romper una implementación puede ser usado como indicativo de la seguridad de las protecciones implementadas en la misma, de las cuales hablaré un poco más adelante.</p>
<p>No voy a decir más sobre esto, pero existen libros completos sobre el tema de análisis de potencia, así que voy a dejar simplemente la referencia a un libro y a su web. El libro se llama <em>Power Analysis Attacks</em>, de la editorial Springer, y en <a href="http://www.dpabook.org">su web</a> se pueden obtener trazas en un <em>workspace</em> para matlab y/o octave, además de un ejemplo guiado de ataque.</p>
<div id="flaresmith" class="feedflare"><script src="http://feeds.feedburner.com/~s/LimitedEntropyDotCom?i=http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-ii" type="text/javascript" charset="utf-8"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-ii/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ataques a smart cards: side channel analysis (I)</title>
		<link>http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-i</link>
		<comments>http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-i#comments</comments>
		<pubDate>Tue, 15 Jan 2008 22:37:39 +0000</pubDate>
		<dc:creator>Eloi Sanfèlix</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[smart cards]]></category>

		<guid isPermaLink="false">http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-i</guid>
		<description><![CDATA[Volvemos a darle un poquito al tema de las smart cards . Antes de continuar, sería recomendable que quien no conozca prácticamente nada sobre smart cards lea los posts anteriores al respecto: - Introducción - Normas y comunicación - Clasificación de ataques Pese a que hay mucha información al respecto en Internet y en libros, [...]]]></description>
			<content:encoded><![CDATA[<p> Volvemos a darle un poquito al tema de las smart cards <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . Antes de continuar, sería recomendable que quien no conozca prácticamente nada sobre smart cards lea los posts anteriores al respecto:</p>
<p>- <a href="http://www.limited-entropy.com/smart-cards-introduccion">Introducción</a><br />
- <a href="http://www.limited-entropy.com/smart-cards-normas-y-comunicacion-con-el-terminal">Normas y comunicación</a><br />
- <a href="http://www.limited-entropy.com/smart-cards-clasificacion-de-ataques">Clasificación de ataques</a></p>
<p>Pese a que hay mucha información al respecto en Internet y en libros, no sé si la hay en español así que espero que siga resultando útil/interesante a la gente <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>En este post vamos a ahondar un poco más en uno de los ataques más famosos sobre smart cards. Se trata del llamado Side Channel Analysis o SCA ( en español supongo que se traduciría como análisis de canales adyacentes o algo similar) que consiste en analizar datos procedentes de la smart card por canales alternativos.</p>
<p>Como ya vimos, una smart card se comunica con el exterior únicamente mediante una interfaz serie a través de uno de sus contactos. En cambio, como cualquier dispositivo electrónico, estas tarjetas 'sufren' algunos fenómenos físicos que permiten obtener información.  Veamos los principales canales utilizados:</p>
<p>- Información temporal: realizando mediciones de lo que tardan distintas operaciones.</p>
<p>- Consumo: midiendo el consumo de potencia del dispositivo también es posible determinar qué está haciendo.</p>
<p>- Radiaciones electromagnéticas: como todos sabemos, cualquier movimiento de electrones genera un campo electromagnético, y nuestras tarjetitas no iban a ser menos.</p>
<p>En este primer post sobre side channel analysis vamos a ver un ejemplo de información temporal que nos puede ayudar a romper un algoritmo considerado seguro como RSA debido a una 'mala' implementación. Para ello primero (en la página extendida para no alargar mucho la portada)  explicaré brevemente cómo funciona RSA, la implementación base que usaremos y luego el problema que tiene y cómo podríamos solucionarlo.</p>
<p><span id="more-55"></span><br />
<strong>El algoritmo RSA </strong></p>
<p>RSA es un algoritmo de cifrado de clave pública que basa su fortaleza en la dificultad computacional de factorizar grandes números comparada con la sencillez de realizar un producto entre esos factores.</p>
<p>La generación de claves RSA es como sigue:</p>
<ul>
<li>Elección de dos números primos de tamaño similar, p y q (y no es conveniente que estén demasiado cerca).</li>
<li>Cálculo de n=p·q.</li>
<li>Elección de un valor e arbitrario. Se usa mucho 65536, también conocido como F4.</li>
<li>Cálculo de d tal que e·d=1 (mod phi(n) ). Aquí phi(n) es el totient de Euler, que indica la cantidad de números coprimos (es decir, sin factores comunes) con n entre 1 y n-1. En este caso, es conocido que phi(n)=(p-1)(q-1) (si alguien está interesado seguro que puede encontrar una demostración <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</li>
</ul>
<p>A partir de aquí, la clave pública consta del módulo n y del valor del exponente público e, y la clave privada del módulo n y del exponente privado d.  Ni que decir tiene que d no debe ser conocido más que por el propietario de la clave y que p y q deberían eliminarse o mantenerse en lugar seguro <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>El cifrado de un mensaje m en RSA se realiza como c= m^e ( mod n ), y el descifrado como m'=c^d = m^(d·e) = m (mod n) debido al teorema de Euler.</p>
<p>No me voy a extender más con RSA, quien esté interesado en más detalles no le resultará excesivamente complicados encontrarlos.</p>
<p><strong>Implementación de la exponenciación modular con productos y cuadrados</strong></p>
<p>Para explicar esto voy a hacer uso de un pequeño ejemplo ya que seguro que resulta más sencillo. Vamos a ver cómo realizaríamos el cálculo 2^17 (mod 19) de forma sencilla sin tener que recurrir a números enormes (como 2^17 <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ).</p>
<p>En primer lugar, reescribimos la potencia tal que: 2^17= 2^16·2 = (2^8)^2 · 2 = ... = ((((2^2)^2)^2)^2)·2.  En segundo lugar, realizamos cada cálculo intermedio módulo 19:<br />
<code><br />
2^2 = 4<br />
2^4 = (2^2)^2 = 4^2 = 16<br />
2^8 = (((2^2)^2)^2 = 16^2 = 256 = 9<br />
2^16 = 9^2 = 81 = 5<br />
2^17 = 2·5 = 10<br />
</code><br />
Si alguien no se fía y tiene Mathematica que ponga PowerMod[2,17,19], o en Matlab mod(2^17,19) <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>Viendo lo de arriba quizás no os diga nada, pero resulta que si pasas 17 a binario tienes 10001, y si se compara con lo anterior se ve que cuando el exponente tiene un 1 en binario, se hace un cuadrado y una multiplicación, y cuando tiene un 0 se hace un cuadrado solamente.</p>
<p>Así pues, el algoritmo sería algo como:<br />
<code><br />
s=x<br />
for i in 1 to n<br />
s=s^2 (mod N)<br />
if(  di == 1 )<br />
s= s*x;<br />
end for<br />
return(s)<br />
</code><br />
Donde d=(d0,d1,d2,...,dn) es la representación binaria de d, con d0 el bit de mayor peso y siempre igual a 1.</p>
<p><strong>Problema de esta implementación</strong></p>
<p>Claramente, esta implementación tiene el problema de que dependiendo de si el bit de la clave es 1 o 0 se va a realizar un cuadrado o un cuadrado más una multiplicación, con lo cual habilita un análisis de tiempos.  Así pues, si medimos el consumo de potencia o la radiación electromagnética y comparamos el tiempo de los distintos <em>picos</em> que aparecen correspondientes al cifrado RSA es posible determinar qué bits de la clave son 0 y qué bits son 1.</p>
<p>He estado mirando por ahí a ver si encontraba imágenes al respecto y no he encontrado nada (o no estoy en muy buenas condiciones para buscar), así que os remito a las <a href="http://cs.ru.nl/~erikpoll/hw/slides/smartcards_attacks.pdf">transparencias de Erik Poll</a> sobre el tema en la página 32 si estáis interesados.</p>
<p><strong>Posibles contra medidas</strong></p>
<p>Es obvio que para evitar este ataque habría que intentar que la clave no estuviera tan relacionada con el tiempo de ejecución. Una posible idea sería realizar el cálculo completo siempre y elegir el resultado en función del bit de la clave, de forma que siempre se realizaran las mismas operaciones.</p>
<p>Otra opción es realizar la multiplicación exponencial con grupos de bits en lugar de bit a bit, precalculando los factores de ponderación necesarios para cada resultado. De esta forma se dificulta la recuperación de la clave, aunque no sé hasta qué punto... lo que si sé es que si miras una traza de consumo realizada con esta técnica es difícil determinar cuando los dos bits eran 00, 01, 10 o 11 al menos a simple vista como en el caso expuesto.</p>
<p>Otra opción ante el timing analysis es lo que llaman <em>RSA Blinding</em>, aunque no ante este ataque en concreto. Se basa en calcular un valor aleatorio r para cada texto cifrado recibido, calcular su inversa, y realizar el descifrado como (r^e·c)^d (mod n). De esta forma se tiene r·m (mod n), y multiplicando por la inversa de r obtenemos m.</p>
<p>Como he dicho, esto no sirve de nada si se realiza la potencia de la forma expuesta, pero sirve como protección ante otros tipos de análisis de tiempos que funcionan incluso sin usar esta implementación.</p>
<p>PD: Si has llegado aquí mereces un permio <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' />  Otro día más sobre SCA, concretamente <em>Power Analysis</em> <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="flaresmith" class="feedflare"><script src="http://feeds.feedburner.com/~s/LimitedEntropyDotCom?i=http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-i" type="text/javascript" charset="utf-8"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.limited-entropy.com/ataques-a-smart-cards-side-channel-analysis-i/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Smart cards: clasificación de ataques</title>
		<link>http://www.limited-entropy.com/smart-cards-clasificacion-de-ataques</link>
		<comments>http://www.limited-entropy.com/smart-cards-clasificacion-de-ataques#comments</comments>
		<pubDate>Wed, 19 Dec 2007 23:50:13 +0000</pubDate>
		<dc:creator>Eloi Sanfèlix</dc:creator>
				<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[smart cards]]></category>

		<guid isPermaLink="false">http://www.limited-entropy.com/smart-cards-clasificacion-de-ataques</guid>
		<description><![CDATA[Seguimos con la serie de smart cards. Tras introducir el tema y hablar de los estándares al respecto, la idea inicial era seguir explicando la evolución de los SOs para estas tarjetitas (que es muy similar a lo que pasó con computadoras y ordenadores personales ) e introducir JavaCard, pero creo que resultará más interesante [...]]]></description>
			<content:encoded><![CDATA[<p>Seguimos con la serie de smart cards. Tras <a href="http://www.limited-entropy.com/smart-cards-introduccion">introducir el tema</a> y hablar de los <a href="http://www.limited-entropy.com/smart-cards-normas-y-comunicacion-con-el-terminal">estándares</a> al respecto, la idea inicial era seguir explicando la evolución de los SOs para estas tarjetitas (que es muy similar a lo que pasó con computadoras y ordenadores personales <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) e introducir JavaCard, pero creo que resultará más interesante meternos en posibles ataques a este tipo de dispositivos <em>seguros</em>.</p>
<p>En este primer post sobre ataques vamos a definir una clasificación de los ataques y nombrar los más comunes, y en unos días dedicaré algún post a varios de estos ataques.</p>
<p>Antes de la clasificación, definiremos un par de conceptos que como no sé cómo traducir al español (no encuentro una traducción que me guste) nombraré en inglés:</p>
<ul>
<li>Se dice que un dispositivo es <em>tamper-resistant</em> cuando no se pueden realizar modificaciones del dispositvo ( <em>to tamper with the device</em> ) de manera no autorizada.</li>
<li>Se dice que un dispositivo es <em>tamper-evident</em> cuando deja señales de que ha sido modificado de manera no autorizada.</li>
</ul>
<p>En base a estos conceptos, vamos a definir los ataques como invasivos y no invasivos. Un <strong>ataque no invasivo</strong> no modifica el dispositivo, y por tanto es capaz de <strong>violar</strong> las propiedades de <strong><em>tamper-resistance</em> y <em>tamper-evidence</em></strong>.  En cambio, un <strong>ataque invasivo</strong> deja evidencias del mismo, por tanto únicamente <strong>viola</strong> la propiedad de <em><strong>tamper-resistance</strong>.</em></p>
<p>Dentro de ataques de tipo <strong>no invasivo</strong> podemos encontrar:</p>
<ul>
<li>Ataques lógicos, explotando fallos en el software o los protocolos empleados</li>
<li>Ataques de tipo <em>Side channel analysis</em> (¿análisis del canal adyacente?) que se basan en analizar <em>fugas</em> de información por canales diferentes al bus serie de comunicación de las tarjetas ( consumo de potencia, radiación EM, tiempos...).</li>
<li>Ataques con <em>fault injection</em>, que introducen fallos en la tarjeta ( modificando la alimentación, el reloj...).</li>
</ul>
<p>En cuanto a ataques <strong>invasivos</strong> nombramos los siguientes:</p>
<ul>
<li><em>probing</em>, consistente en conectar <em>agujas de medida</em> sobre algunas líneas de la tarjeta, por ejemplo el bus de datos.</li>
<li><em>fibbing</em>, realizado con un <em>focus ion beam (FIB)</em>, de ahí el nombre. Permite observar y realizar cambios en la tarjeta, añadiendo puntos de conexión, cables, etc.</li>
<li>Ingeniería inversa óptica, para reconocer las partes del circuito  e incluso con algunas técnicas obtener el contenido de la memoria.</li>
<li>Algunos tipos de <em>fault injection</em> son invasivos.</li>
</ul>
<p>Obviamente, los ataques dependen mucho del tipo de atacante.   Cualquiera con pocos medios (un lector de tarjetas y poco más) puede intentar estudiar el protocolo e inducir fallos lógicos, mientras que para realizar <em>side channel analysis</em> se necesita equipamiento algo más caro, y para los ataques invasivos generalmente se necesita equipamiento muy especializado.</p>
<p>Existen laboratorios que realizan este tipo de ataques para sus clientes, por ejemplo aquí en Holanda <a href="http://www.riscure.com/">Riscure</a> (donde voy a hacer el PFC finalmente) y <a href="http://www.brightsight.com/">Brighsight</a> (que visitaremos el 29 de enero) realizan este tipo de análisis de seguridad, ambos en Delft.</p>
<p>Además, Riscure (que es el que conozco un poco) realiza análisis de <em>Set Top Boxes </em>para <em>PayTV, </em>analizó el sistema IPTV de Microsoft y está acreditado por Mastercard para realizar auditorías mediante el programa de certificación CAST.</p>
<p>Esto es todo de la descripción, próximamente algún ejemplo de <em>Side Channel Analysis</em> y enlaces a documentos interesantes al respecto <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div id="flaresmith" class="feedflare"><script src="http://feeds.feedburner.com/~s/LimitedEntropyDotCom?i=http://www.limited-entropy.com/smart-cards-clasificacion-de-ataques" type="text/javascript" charset="utf-8"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.limited-entropy.com/smart-cards-clasificacion-de-ataques/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Smart cards: normas y comunicación con el terminal</title>
		<link>http://www.limited-entropy.com/smart-cards-normas-y-comunicacion-con-el-terminal</link>
		<comments>http://www.limited-entropy.com/smart-cards-normas-y-comunicacion-con-el-terminal#comments</comments>
		<pubDate>Tue, 11 Dec 2007 19:36:22 +0000</pubDate>
		<dc:creator>Eloi Sanfèlix</dc:creator>
				<category><![CDATA[smart cards]]></category>

		<guid isPermaLink="false">http://www.limited-entropy.com/smart-cards-normas-y-comunicacion-con-el-terminal</guid>
		<description><![CDATA[Vamos a seguir comentando un poquito más acerca de las smart cards, las tarjetas inteligentes de las que empecé a hablar hace casi un mes. En este post voy a comentar algo que en principio no tiene mucho que ver con la seguridad de los sistemas con estas tarjetas, pero que conviene conocer: los estándares [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a seguir comentando un poquito más acerca de las <a href="http://www.limited-entropy.com/smart-cards-introduccion">smart cards</a>, las tarjetas inteligentes de las que empecé a hablar hace casi un mes.  En este post voy a comentar algo que en principio no tiene mucho que ver con la seguridad de los sistemas con estas tarjetas, pero que conviene conocer: los estándares que definen las características de estas tarjetas y la forma de comunicarse con el exterior.</p>
<p>El estándar actual de smart cards (de contacto, para RFID hay otros estándar) es la familia ISO 7816, que define básicamente todo lo que se pueda imaginar relacionado con las tarjetas:</p>
<ul>
<li>7816-1: Carcaterísticas físicas</li>
<li>7816-2: Dimensiones y contactos de las tarjetas</li>
<li>7816-3: Señales eléctricas y protocolos de transmisión.</li>
<li>7816-4:Conjunto de comandos estándar</li>
<li>...</li>
</ul>
<p>Hay más, hasta 15 según la wikipedia, pero aquí simplemente voy a comentar ciertas características y el formato de los mensajes.</p>
<p><span id="more-50"></span> En primer lugar, las smart card tienen actualmente 5 contactos usados, como se puede ver en la siguiente imagen:</p>
<p style="text-align: center"><img src="http://www.smartcardbasics.com/images/basicmodule.gif" height="321" width="326" /></p>
<p> Anteriormente el contacto C6 de la imagen era para programar la EEPROM mediante una tensión de programación  (Vpp) bastante más elevada que la de alimentación, Vcc.</p>
<p>Se puede observar que la tarjeta no tiene alimentación propia, ni siquiera reloj propio, sino que todo ello le es proporcionado por el terminal/lector.  Esto es importante porque puede llevar implicaciones de seguridad como veremos más adelante. Además, se ve que se trata de una interfaz de comunicación serie bit a bit a través del pin I/O.</p>
<p>En cuanto a la comunicación entre terminal y tarjeta, el terminal activa la tarjeta mediante un proceso definido en ISO 7816-3: activa las líneas tierra, tensión, reloj y reset. A esto la tarjeta responde con un ATR (Answer To Reset) y se da por iniciada la comunicación.</p>
<p>Cualquier comunicación SIEMPRE es iniciada por el terminal, enviando comandos a la tarjeta, y ésta realiza los cálculos o acciones que deba realizar y responde.  Estos comandos son las llamadas APDU, Application Protocol Data Unit. La trama APDU de tipo comando consta de los siguientes campos:</p>
<ul>
<li>CLA : Byte de <em>clase</em></li>
<li>INS : Byte de instrucción</li>
<li>P1,P2: Parámetros</li>
<li>Lc : tamaño del bloque de datos</li>
<li>Bloque de datos</li>
<li>Le : Tamaño de la respuesta esperada</li>
</ul>
<p>Los 4 primeros son obligatorio, mientras que los relacionados con los datos y la respuesta esperadas son opcionales. A partir del byte de instrucción, la tarjeta sabe qué es lo que se le pide y responde con una APDU de respuesta, que consta de los campos:</p>
<ul>
<li>Datos</li>
<li>SW1 y SW2: Palabra de estado, dónde se codifica el estado de la operación (correcta, error criptográfico, error general...).</li>
</ul>
<p>Una vez más, los datos son opcionales pero el código de estado es obligatorio.</p>
<p>Mediante este sencillo mecanismo se comunican hoy en día todas las smart cards disponibles.  Con esto ya sabemos cómo se le ordena a una smart card que realice una acción determinada y en qué formato viajan esos datos.  En próximos posts hablaremos de la evolución de los SO para smart cards, una pequeña introducción a Java Card y de ataques que se suelen realizar a este tipo de dispositivos... aunque no necesariamente en este orden, seguramente primero de ataques que es más interesante <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<div id="flaresmith" class="feedflare"><script src="http://feeds.feedburner.com/~s/LimitedEntropyDotCom?i=http://www.limited-entropy.com/smart-cards-normas-y-comunicacion-con-el-terminal" type="text/javascript" charset="utf-8"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.limited-entropy.com/smart-cards-normas-y-comunicacion-con-el-terminal/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Smart cards: Introducción</title>
		<link>http://www.limited-entropy.com/smart-cards-introduccion</link>
		<comments>http://www.limited-entropy.com/smart-cards-introduccion#comments</comments>
		<pubDate>Thu, 15 Nov 2007 21:03:21 +0000</pubDate>
		<dc:creator>Eloi Sanfèlix</dc:creator>
				<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[smart cards]]></category>

		<guid isPermaLink="false">http://www.limited-entropy.com/smart-cards-introduccion</guid>
		<description><![CDATA[Puesto que este cuatrimestre estoy haciendo una asignatura basada al 90% en smart cards, aprovecho para contar aquí algunas cosillas de las mismas que tal vez resulten de interés . En este primer artículo veremos qué es exactamente una smart card, comentando sus principales bloques funcionales y para qué se pueden utilizar. Más adelante comentaré [...]]]></description>
			<content:encoded><![CDATA[<p>Puesto que este cuatrimestre estoy haciendo una asignatura basada al 90% en <em>smart cards</em>, aprovecho para contar aquí algunas cosillas de las mismas que tal vez resulten de interés <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .  En este primer <em>artículo</em> veremos qué es exactamente una smart card, comentando sus principales bloques funcionales y para qué se pueden utilizar.  Más adelante comentaré algunas peculiaridades de la programación de <em>smart cards</em> usando la plataforma JavaCard.</p>
<p><strong>Arquitectura típica de una smart card</strong></p>
<p>Básicamente una <em>smart card</em> es un computador embedido en un pequeño chip, capaz de  almacenar y procesar de forma segura datos.  Generalmente se divide en varios tipos de <em>smart cards</em>, en función de sus posibilidades:</p>
<ul>
<li> Tarjetas de memoria: almacenan datos que pueden ser leídos <em>a posteriori</em>, posiblemente con cierto control de acceso o con mecanismos de memoria destructiva ( <em>write-only</em> ). Toda la funcionalidad de estas tarjetas está en una memoria ROM, de forma que siempre responden de la misma forma a una instrucción (leyendo la dirección de memoria correspondiente).</li>
</ul>
<ul>
<li>Tarjetas con microprocesador: Además de almacenar información, estas tarjetas incorporan un microprocesador para el tratamiento de dicha información mediante el software correspondiente.</li>
</ul>
<p>A veces se incluye (vease <a href="http://es.wikipedia.org/wiki/Tarjeta_inteligente">tarjetas inteligentes</a> en <a href="http://es.wikipedia.org/">wikipedia</a>) otro tipo de tarjetas llamado tarjetas criptográficas, que incluye además un coprocesador criptográfico capaz de realizar cifrado utilizando por ejemplo RSA, DES o triple DES.  Sin embargo yo este tipo lo incluiría en el grupo de tarjetas con microprocesador.</p>
<p>Aquí me centraré en las tarjetas con microprocesador, puesto que las podemos programar y son capaces de ofrecer funciones de seguridad bastante interesantes. Generalmente estas tarjetas llevan 3 tipos de memoria:</p>
<ul>
<li>ROM: Incluye el sistema operativo de la tarjeta.</li>
</ul>
<ul>
<li>EEPROM: El <em>disco duro</em> de estas tarjetas.</li>
</ul>
<ul>
<li>RAM:Espacio de trabajo donde encontramos la pila, variables temporales como claves criptográficas válidas durante la sesión actual, etc.</li>
</ul>
<p>Según los datos que yo tengo de la asignatura <em>HW &amp; OS Security </em>, una tarjeta actual típica puede tener unos 512 bytes de RAM, 16K de ROM y 64K de EEPROM.  En principio se usaban SO propietarios y cada tarjeta se programaba con su propia API en C, pero actualmente existen sistemas como <a href="http://java.sun.com/products/javacard/">JavaCard</a> que ofrecen una API común que los fabricantes pueden implementar en sus tarjetas.  Más adelante veremos cómo realizar aplicaciones básicas con JavaCard <img src='http://www.limited-entropy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><strong>Aplicaciones de las smart cards</strong></p>
<p>Para finalizar con este post introductorio simplemente voy a comentar algunas de las aplicaciones comunes de las smart cards.</p>
<ul>
<li>Firma digital: Puesto que las tarjetas son capaces de realizar funciones criptográficas, pueden utilizarse para firmar documentos digitalmente.  Simplemente se almacenan en la tarjeta las claves criptográficas correspondientes al usuario (clave privada RSA por ejemplo) y cuando se le pasa un documento a la tarjeta ésta lo firma. El problema que puede surgir aquí es que realmente no sabemos lo que se está mandando a la tarjeta para firmarlo, así que habría que autenticar de alguna forma el terminal usado.</li>
</ul>
<ul>
<li>Dinero electrónico: Se pueden utilizar estas tarjetas como monedero electrónico. Por ejemplo, en Holanda tienen el sistema Chipknip.</li>
</ul>
<ul>
<li>TV de pago: televisiones como Digital+ utilizan este tipo de tarjeta para identificar al usuario.  La tarjeta se introduce en el decodificador y con ella se tiene acceso al contenido de pago, mediante claves de cifrado contenidas en la tarjeta.</li>
</ul>
<div id="flaresmith" class="feedflare"><script src="http://feeds.feedburner.com/~s/LimitedEntropyDotCom?i=http://www.limited-entropy.com/smart-cards-introduccion" type="text/javascript" charset="utf-8"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.limited-entropy.com/smart-cards-introduccion/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

