<?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>It should work... &#187; FBI</title>
	<atom:link href="http://vierito.es/wordpress/tag/fbi/feed/" rel="self" type="application/rss+xml" />
	<link>http://vierito.es/wordpress</link>
	<description>Cuando cualquier trasto es útil</description>
	<lastBuildDate>Sat, 09 Jul 2011 02:34:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Reto FBI Mayo 09</title>
		<link>http://vierito.es/wordpress/2009/05/29/reto-fbi-mayo-09/</link>
		<comments>http://vierito.es/wordpress/2009/05/29/reto-fbi-mayo-09/#comments</comments>
		<pubDate>Fri, 29 May 2009 16:11:36 +0000</pubDate>
		<dc:creator>vierito5</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[criptografía]]></category>
		<category><![CDATA[cryptoanálisis]]></category>
		<category><![CDATA[FBI]]></category>
		<category><![CDATA[reto]]></category>
		<category><![CDATA[sustitución]]></category>

		<guid isPermaLink="false">http://vierito.es/wordpress/?p=434</guid>
		<description><![CDATA[Hoy me he enterado (via La Comunidad de DragonJar) que el 23/05/09 se publicó otro reto a estilo este que expliqué hace un tiempo. La solución después del &#8220;Read More&#8221; Nos dan una imagen con símbolos en plan de las runas. Lo primero es ver que tiene signos de puntuación. Un signo de admiración a [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy me he enterado (via <a title=\"La Comunidad de DragonJar\" href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5kcmFnb25qYXIub3JnLw==">La Comunidad de DragonJar</a>) que el 23/05/09 <a title=\"Reto 2009\" href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5mYmkuZ292L3BhZ2UyL21heTA5L2NvZGVfMDUyMzA5Lmh0bWw=">se publicó otro reto</a> a estilo <a title=\"Reto FBI 2008\" href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDkvMDQvMTgvZGVzY2lmcmFuZG8tdW4tcmV0by1kZWwtZmJpLw==">este</a> que expliqué hace un tiempo.</p>
<p><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDA5LzA1L2NvZGUwNTE4MDkuanBn"><img class="aligncenter size-full wp-image-435" title="code051809" src="http://vierito.es/wordpress/wp-content/uploads/2009/05/code051809.jpg" alt="code051809" width="480" height="247" /></a></p>
<p>La solución después del &#8220;Read More&#8221;</p>
<p><span id="more-434"></span></p>
<p>Nos dan una imagen con símbolos en plan de las runas. Lo primero es ver que tiene signos de puntuación. Un signo de admiración a principio de una palabra y un punto y una coma situados de la misma forma. Con eso se me ocurren 2 opciones: o es una transposición o está todo al revés. Como coincide que 3 elementos caen en esa posición vamos a suponer que simplemente le han dado la vuelta. En la Campus Party hubo una prueba que también tenía un signo de puntuación de estos y por culpa de suponer que era &#8216;al revés&#8217; perdimos mucho mucho tiempo jejeje resultó ser una transposición doble.</p>
<p>Así que cogemos todos los símbolos, les damos la vuelta y los sustituímos por letras siguiendo la estructura. Después de unos minutos ya lo tengo escrito en una hoja de papel y todo parece que sea una sustitucion simple (otra vez ¬¬). Hay 2 letras sueltas iguales, lo normal es que sea una &#8220;a&#8221; ya que es inglés. Y el final parece un &#8220;to go!&#8221; Bueno, no nos adelantemos. Vamos a buscar un patrón para tener por donde empezar.</p>
<p>Igual que en la solución del reto anterior del FBI cogemos <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDkvMDQvMTgvZGVzY2lmcmFuZG8tdW4tcmV0by1kZWwtZmJpLw==">el programita de buscar patrones en C</a> y el diccionario aspell (que es cutre pero sirve):</p>
<p><code>$ ./pattern en-common.dat ABCADEDBDEFG<br />
substituting<br />
substitution<br />
substitution's<br />
substitutions</code></p>
<p>A huevos! ¿no? Solo puede ser <em>substituting</em> o <em>substitution</em>. ¿Cuál de las 2 es? Vemos que además de ser sustitución simple el cambio guarda cierto parecido con las formas de los símbolos y no es difícil reconocer que es <em>substitution</em> y que justo la palabra que la precede es <em>simple</em> =&gt; <em>simple substitution</em>.</p>
<p>Vamos sustituyendo todas las letras que hemos sacado y las palabras van saliendo fácilmente. Al final el resultado es:</p>
<p><code>You have solved a simple substitution cipher, using symbols intead of letters and a few twists thrown in for good measure. Way to go!</code></p>
<p>Faciliiiiiiiiito <img src='http://vierito.es/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>En breve tendréis la solución de las pruebas 11 y 12 de nuestro reto, que <a title=\"Dani Kachakil\" href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5rYWNoYWtpbC5jb20=">Dani Kachakil</a> se pasó un buen rato dándole al coco hasta sacarlas.<br/><br/><i>&#8211;<br/>Fuente original en <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNz">http://vierito.es/wordpress</a></i><br/><br/><strong>Similar Posts:</strong>
<ul class="similar-posts">
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDkvMDQvMTgvZGVzY2lmcmFuZG8tdW4tcmV0by1kZWwtZmJpLw==" rel=\"bookmark\" title=\"April 18, 2009\">Descifrando un reto del FBI</a></li>
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDkvMDYvMDgvc29sdWNpb24tZGUtbGFzLXBydWViYXMtMTEteS0xMi1kZWwtcmV0by8=" rel=\"bookmark\" title=\"June 8, 2009\">Solución de las pruebas 11 y 12 del reto</a></li>
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDkvMDUvMTcvc29sdWNpb25lcy1kZWwtcmV0by1kZS1jcmlwdG9ncmFmaWEtcGFydGUtMS8=" rel=\"bookmark\" title=\"May 17, 2009\">Soluciones del reto de criptografía &#8211; Parte 1</a></li>
</ul>
<p><!-- Similar Posts took 6.212 ms --></p>
 <img src="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=434" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://vierito.es/wordpress/2009/05/29/reto-fbi-mayo-09/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Descifrando un reto del FBI</title>
		<link>http://vierito.es/wordpress/2009/04/18/descifrando-un-reto-del-fbi/</link>
		<comments>http://vierito.es/wordpress/2009/04/18/descifrando-un-reto-del-fbi/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 00:08:08 +0000</pubDate>
		<dc:creator>vierito5</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[criptografía]]></category>
		<category><![CDATA[cryptoanálisis]]></category>
		<category><![CDATA[FBI]]></category>
		<category><![CDATA[reto]]></category>
		<category><![CDATA[sustitución]]></category>

		<guid isPermaLink="false">http://vierito.es/wordpress/?p=336</guid>
		<description><![CDATA[Hace unos días TuXeD dejó propuesto un pequeño reto que propuso el FBI en 2008 para el entretenimiento del personal. Tal cual lo ví me puse manos a la obra. Vamos a la web y nos encontramos con esto: ¿Por dónde empezamos? Mmmm, así a primera vista vemos que el porcentaje de vocales es bajo, [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días <a title=\"TuXeD\" href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3R1eGVkLnNlcnZlYmxvZy5uZXQ=">TuXeD</a> dejó propuesto un pequeño <a title=\"Code Cracking FBI Challenge 2008\" href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5mYmkuZ292L2hlYWRsaW5lcy9jb2RlLnN3Zg==">reto</a> que propuso el FBI en 2008 para el entretenimiento del personal. Tal cual lo ví me puse manos a la obra.</p>
<p>Vamos a la web y nos encontramos con esto:</p>
<div id="attachment_337" class="wp-caption aligncenter" style="width: 490px"><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDA5LzA0L2ZiaS5qcGc="><img class="size-full wp-image-337" title="fbi" src="http://vierito.es/wordpress/wp-content/uploads/2009/04/fbi.jpg" alt="fbi" width="480" height="478" /></a><p class="wp-caption-text">Code Cracking Challenge FBI 2008</p></div>
<p style="text-align: center;">
<p>¿Por dónde empezamos? Mmmm, así a primera vista vemos que el porcentaje de vocales es bajo, casi todo son consonantes seguidas así que el cifrado usado debería ser de sustitución y no de transposición (en ese caso como se hubiera realizado un cambio de lugar de las letras debería haber un porcentaje razonable de vocales, cercano al 45% como es el caso del español o al 40% como es el caso del inglés, de todas formas seguro que es inglés al ser un reto del FBI).</p>
<div class="im">Enseguida nos damos cuenta que hay algo muy reconocible, algo tiene forma de URL:  YYY.AHB.MSK/NSCDC.OFZ</div>
<div class="im">¿Sera sea <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5mYmkuZ292L2luZGV4LnBocA==" target=\"_blank\">www.fbi.gov/index.php</a> ? A ver si vamos a terminar antes de empezar! Bueno, lo pruebo y no xD, la web no carga así que debe ser otra cosa.</div>
<p>Asumimos es un cifrado de sustitución y viendo ese &#8216;YYY&#8217; vamos a suponer que son Ws y que seguro que la web es del dominio fbi.gov, con lo cual por ahora tenemos las siguientes correspondencias:</p>
<div class="im">Y-W<br />
A-F<br />
H-B<br />
B-I<br />
M-G<br />
S-O<br />
K-V</div>
<p>TuXeD nos ha dado la pista de que &#8220;es un puzzle más bien&#8221; así que en lugar de darle mil vueltas al Cryptool casi mejor cogemos una hoja de papel. Nos escribimos el mensaje y cambiamos las letras que hemos supuesto a ver si vemos algo que nos suene para obtener más concordancias entre letras.</p>
<div class="im">Una vez escrito está claro que es inglés (por si no estaba claro) porque aparece la conjunción &#8220;OF&#8221;.</div>
<p>Delante de la URL tenemos la palabra VI-I- así que parece claro que es la palabra VISIT ¿qué puedes hacer sino con una URL? Así que parece que nuestra suposición con las primeras concordancias eran buenas. Ya tenemos:</p>
<p>V-S<br />
F-T</p>
<p>Nos ponemos a sustituir de nuevo. Una vez terminado vemos que el final de la URL es -T-. Yo de primeras he pensado que siendo de 3 letras podía ser HTM, PHP, JSP, ASP etc incluso un fichero PDF, pero ahora seguro que es HTM así que:</p>
<p>O-H<br />
Z-M</p>
<p>Pero <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5mYmkuZ292L2luZGV4Lmh0bQ==" target=\"_blank\">www.fbi.gov/index.htm</a> no carga, sh*t! así que no asignamos las letras de la palabra INDEX.</p>
<p>Nos ponemos de nuevo con el texto y vemos que FOBV casa con THIS pero ya no hay más palabras obvias pero, era inglés, ¿no? Hay una palabra que acaba en I-G, ¿será un gerundio? En ese caso L-N.</p>
<p>Ahora vemos un -NOW que seguro es un KNOW, luego Q-K.</p>
<p>Y ahora viene una de cajón, como no, parece que la palabra ENCRYPTION aparece en forma de -N&#8212;-TION. Esto ya está resuelto <img src='http://vierito.es/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Una vez sustituidas los nuevos pares de letras ya podemos reconocer muchas palabras: cracking, success, congratulate, you, el texto es nuestro <img src='http://vierito.es/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#8220;Stupendous. We congratulate you on cracking this latest encryption. Visit <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5mYmkuZ292L2NvZGVkLmh0bQ==" target=\"_blank\">www.fbi.gov/coded.htm</a> to let us know of your success.&#8221;</p>
<p>Cuya web si carga <img src='http://vierito.es/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Y ahora los más avispados dirán, baaaaaaah, eso es una mierda, ¿cómo lo haces en un texto donde no hay una manera de empezar tan clara como esa URL? Así que me puse a ello.</p>
<p>Vamos a suponer que en el texto no estuviera la URL, ¿qué hago? Por las mismas deducciones que antes suponemos que es un cifrado de sustitución simple y ahora viene el truco, todos los idiomas tienen ciertas palabras que por su estructura son menos comunes que otras debido a tener la misma letra seguida en varias partes de la palabra. Debido a este tipo de cifrado usado ¡esa estructura se conserva! Pues vamos a chequear las palabras que nos parezcan de estructura más adecuada contra un diccionario, vamos a buscar patrones. Así que pillamos un diccionario de palabras en inglés (yo tenía el de aspell ya instalado así que con un <em>strings</em> lo meto en un txt) y con la ayuda del siguiente programa en C que tenía guardado buscamos patrones que encajen con la palabra elegida (no recuerdo de donde salió, si alguien lo sabe que me pase la fuente). Además, despues de comprobarla contra el diccionario seguro que podemos descartar muchas por la longitud que debe tener.</p>
<p>¿palabra candidata? Sin duda &#8220;VWNNDVV&#8221;, por esas repeticiones. Es de la forma ABCCDAA.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="" style="font-family:monospace;">$ ./pattern en-common.txt ABCCDAA
unsuccessful
unsuccessfully
falloff
falloffs
colossally
cappuccino
cappuccino's
cappuccinos
nonsuccessive
success
successor
success's
successive
successful
successfully
successively
successes
successor's
successors
succession
succession's
successions</pre></td></tr></table></div>

<p>Si nuestro diccionario es bueno hemos reducido el asunto a muy muy pocas palabras y gracias a que sabemos la longitud que tiene que tener la palabra sólo nos encajan 2. &#8220;falloff&#8221; y &#8220;success&#8221;. Tratándose de descifrar un código la palabra success tiene sentido, ¿no? Estaríamos dando de pleno en el clavo <img src='http://vierito.es/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ahora tendríamos ir operando como antes para ir sacando más palabras. Otra candidata para empezar podría haber sido la palabra cifrada que corresponde a &#8220;stupendous&#8221; pero el ataque contra diccionario no acota suficiente la solución.</p>
<p>Otro días más! Y aquí el programa en C:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;string.h&gt;</span>
&nbsp;
<span style="color: #993333;">void</span> remove_nl<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>str<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#91;</span>strlen<span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #009900;">&#41;</span>
      str<span style="color: #009900;">&#91;</span>strlen<span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> match_pattern<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>match<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>pattern<span style="color: #339933;">,</span> size_t pattern_len<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #993333;">int</span> i<span style="color: #339933;">,</span>j<span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>pattern_len<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>j<span style="color: #339933;">=</span>i<span style="color: #339933;">;</span> j<span style="color: #339933;">&gt;</span>pattern_len<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>pattern<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span>pattern<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>match<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">!=</span>match<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
               <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>pattern<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">!=</span>pattern<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>match<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span>match<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
               <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   <span style="color: #993333;">char</span> word<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">64</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
   <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>pattern <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
   <span style="color: #993333;">int</span> pattern_len <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>argc<span style="color: #339933;">!=</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Usage: %s [word list] [crypto-pattern]<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   pattern <span style="color: #339933;">=</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
   pattern_len <span style="color: #339933;">=</span> strlen<span style="color: #009900;">&#40;</span>pattern<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   FILE <span style="color: #339933;">*</span>file <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>file<span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      perror<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;fopen()&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>feof<span style="color: #009900;">&#40;</span>file<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      fgets<span style="color: #009900;">&#40;</span>word<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>word<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> file<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      remove_nl<span style="color: #009900;">&#40;</span>word<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>substr <span style="color: #339933;">=</span> word<span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>strlen<span style="color: #009900;">&#40;</span>substr<span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;=</span>pattern_len<span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
         <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>strlen<span style="color: #009900;">&#40;</span>substr<span style="color: #009900;">&#41;</span><span style="color: #339933;">&lt;</span>pattern_len<span style="color: #009900;">&#41;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #993333;">char</span> match<span style="color: #009900;">&#91;</span>pattern_len<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         strncpy<span style="color: #009900;">&#40;</span>match<span style="color: #339933;">,</span> substr<span style="color: #339933;">,</span> pattern_len<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         match<span style="color: #009900;">&#91;</span>pattern_len<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
         <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>match_pattern<span style="color: #009900;">&#40;</span>match<span style="color: #339933;">,</span> pattern<span style="color: #339933;">,</span> pattern_len<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> word<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
         substr<span style="color: #339933;">++;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
   fclose<span style="color: #009900;">&#40;</span>file<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><br/><br/><i>&#8211;<br/>Fuente original en <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNz">http://vierito.es/wordpress</a></i><br/><br/><strong>Similar Posts:</strong>
<ul class="similar-posts">
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDkvMDUvMjkvcmV0by1mYmktbWF5by0wOS8=" rel=\"bookmark\" title=\"May 29, 2009\">Reto FBI Mayo 09</a></li>
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDkvMDUvMTcvc29sdWNpb25lcy1kZWwtcmV0by1kZS1jcmlwdG9ncmFmaWEtcGFydGUtMS8=" rel=\"bookmark\" title=\"May 17, 2009\">Soluciones del reto de criptografía &#8211; Parte 1</a></li>
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDkvMDUvMjIvc29sdWNpb25lcy1kZWwtcmV0by1kZS1jcmlwdG9ncmFmaWEtcGFydGUtMi8=" rel=\"bookmark\" title=\"May 22, 2009\">Soluciones del reto de criptografía &#8211; Parte 2</a></li>
</ul>
<p><!-- Similar Posts took 6.201 ms --></p>
 <img src="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=336" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://vierito.es/wordpress/2009/04/18/descifrando-un-reto-del-fbi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Fprint] Procesado de la imagen &#8211; Huellas dactilares</title>
		<link>http://vierito.es/wordpress/2008/10/24/fprint-procesado-de-la-imagen-huellas-dactilares/</link>
		<comments>http://vierito.es/wordpress/2008/10/24/fprint-procesado-de-la-imagen-huellas-dactilares/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 16:37:59 +0000</pubDate>
		<dc:creator>vierito5</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[bozorth3]]></category>
		<category><![CDATA[DHS]]></category>
		<category><![CDATA[FBI]]></category>
		<category><![CDATA[fingerprint]]></category>
		<category><![CDATA[fprint]]></category>
		<category><![CDATA[huellas dactilares]]></category>
		<category><![CDATA[mindtct]]></category>
		<category><![CDATA[minutiae]]></category>
		<category><![CDATA[NBIS]]></category>
		<category><![CDATA[NIST]]></category>

		<guid isPermaLink="false">http://vierito.es/wordpress/2008/10/24/fprint-procesado-de-la-imagen-huellas-dactilares/</guid>
		<description><![CDATA[Si analizamos los dispositivos que ya vimos en el post anterior podemos dividirlos en 2 grandes grupos. Los lectores de huellas que son un dispositivo de imágenes (y nos devuelven, entre otras cosas, una imagen en un cierto formato) y los lectores de huellas que son un dispositivo más autónomo que realizan el procesado y [...]]]></description>
			<content:encoded><![CDATA[<p>Si analizamos <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDgvMTAvMDkvZnByaW50LWxvcy1kaXNwb3NpdGl2b3Mv" title=\"Fprint devices dispositivos\">los dispositivos que ya vimos en el post anterior</a> podemos dividirlos en 2 grandes grupos. Los lectores de huellas que son un dispositivo de imágenes (y nos devuelven, entre otras cosas, una imagen en un cierto formato) y los lectores de huellas que son un dispositivo más autónomo que realizan el procesado y tan sólo nos devuelven una respuesta booleana.</p>
<p>Para el primer grupo de lectores de huellas necesitaremos pues una serie de algoritmos que nos permitan analizar y comparar las imágenes de las huellas dactilares.</p>
<p>A la hora de desarrollar <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDgvMTAvMDIvZnByaW50LWxlY3RvcmVzLWRlLWh1ZWxsYXMtZW4tbGludXgv" title=\"Fprint - Lectores de huellas\">fprint</a> se consideró programar todos estos algoritmos pero ya existían, además en forma de código libre, unas posibles soluciones que ahora veremos.</p>
<p>Pero primero, ¿qué buscamos en una huella dactilar? ¿cuáles son los puntos de interes? En una huella tenemos una serie de crestas y surcos que van dibujando un laberinto en el cual podemos de reconocer ciertos puntos de interés, comunmente llamados <em>minutiae</em>. Lo que tenemos que detectar son principalmente las terminaciones o bifurcaciones de las crestas. Existen otros puntos de interés como: el corazón (centro del patrón de la huella), islas, deltas y discontinuidades. En la siguiente imagen podemos ver un ejemplo de cada caso:</p>
<p><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDA4LzEwL21pbnV0aWFlLnBuZw==" title=\"Minutiae\"><img src="http://vierito.es/wordpress/wp-content/uploads/2008/10/minutiae.png" alt="Minutiae" /></a></p>
<p>Decía antes que ya existe una colección de herramientas libres que tenían los algoritmos implementados. Se llama <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2ZpbmdlcnByaW50Lm5pc3QuZ292L05CSVMvaW5kZXguaHRtbA==" title=\"NBIS - NIST Biometric Image Software\">NBIS</a> (NIST Biometric Image Software) y fue creada por el grupo de imagen del <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5uaXN0Lmdvdi8=" title=\"NIST\">NIST</a> (National Institute of Standards and Technology). Inicialmente fue desarrollada para el <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5mYmkuZ292" title=\"FBI\">FBI</a> (Federal Bureau of Investigation) y el <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5kaHMuZ292Lw==" title=\"DHS\">DHS</a> (Department of Homeland Security) y fue usada para el control del crímen y el control fronterizo respectivamente. Vamos, que cuando vamos a USA y nos escanean las huellas usan este software.</p>
<p><strong>MINDTCT</strong></p>
<p>Dentro del paquete NBIS esta es la herramienta que se usa para detectar las <em>minutiae</em>, como bien su nombre indica: minutiae detector. Antes de buscar los puntos de interés deberemos tratar la imagen para que facilitar esa detección. Se realiza un aumento de contraste en la imagen para binarizarla a 2 colores sólidos. De ese modo las crestas se convertirán en zonas negras sobre blanco. Luego se escanea durante varias pasadas buscando patrones de píxeles. La realidad es que se generan bastante falsos positivos así que seguidamente se eliminan las minutiae de las zonas de la imagen con menos calidad y las que no están claras.</p>
<p>Deberíamos quedarnos no solo con las coordenadas de la minutiae sino también con la dirección de la cresta, que tipo de punto de interés es (bifurcación, terminación, etc, y muy importante un factor de confianza sobre  la formalidad de ese punto detectado.</p>
<p><strong>BOZORTH3</strong></p>
<p>El siguiente paso sería tener la capacidad de concordar diferentes huellas para buscar casos coincidentes y para ello se puede usar este algoritmo. Fue creado por el FBI (un tal Allan S. <em>Bozorth</em>, original, eh?) y detecta coincidencias independientemente de la traslación y rotación de las imágenes. Posteriormente el NIST lo adoptó y lo mejoró. Tiene un umbral configurable para ser más o menos estrictos en las concordancias.</p>
<p>Existe otro sistema open source de procesamiento de huellas digitales, se llama F<a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Z2cy5zb3VyY2Vmb3JnZS5uZXQv" title=\"Fingerprint verification system FVS\">ingerprint Verification System</a> junto con <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lZmluZ2Vy" title=\"eFinger\">efinger</a>,  pero no es tan eficaz como el creado por el NIST.<br/><br/><i>&#8211;<br/>Fuente original en <a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNz">http://vierito.es/wordpress</a></i><br/><br/><strong>Similar Posts:</strong>
<ul class="similar-posts">
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDgvMTAvMDkvZnByaW50LWxvcy1kaXNwb3NpdGl2b3Mv" rel=\"bookmark\" title=\"October 9, 2008\">[Fprint] Los dispositivos</a></li>
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDgvMTAvMzAvZnByaW50LWxhLWltcGxlbWV0YWNpb24tZGVsLWRyaXZlci8=" rel=\"bookmark\" title=\"October 30, 2008\">[Fprint] La implemetación del driver</a></li>
<li><a href="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3ZpZXJpdG8uZXMvd29yZHByZXNzLzIwMDgvMTAvMDIvZnByaW50LWxlY3RvcmVzLWRlLWh1ZWxsYXMtZW4tbGludXgv" rel=\"bookmark\" title=\"October 2, 2008\">[Fprint] Lectores de huellas en linux</a></li>
</ul>
<p><!-- Similar Posts took 5.458 ms --></p>
 <img src="http://vierito.es/wordpress/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=135" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://vierito.es/wordpress/2008/10/24/fprint-procesado-de-la-imagen-huellas-dactilares/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

