tag:blogger.com,1999:blog-82017313221155421792009-07-16T10:11:12.707+02:00El Blog de Daniel LerchBlog sobre Seguridad Informática, Criptografía, Inteligencia Artificial, Programación, etc.Daniel Lerchnoreply@blogger.comBlogger99125tag:blogger.com,1999:blog-8201731322115542179.post-75845255160659734442009-07-16T01:08:00.001+02:002009-07-16T10:11:12.717+02:00Criptograma 16/07/09<div style="font-family: "Courier New",Courier,monospace;"></div><span style="font-family: "Courier New",Courier,monospace;"> <br /></span><br /><span style="font-family: "Courier New",Courier,monospace;">HOLAB UHODE MIMAH OLASI TUMAC ETUNA NATUB IMICI RUTUM </span><br /><span style="font-family: "Courier New",Courier,monospace;">AHOCE HOMAS IMIRU SIMIR EFAHO DOTUB LNATU MACIB IHOLA </span><br /><span style="font-family: "Courier New",Courier,monospace;">RUHOS STUMA NATUL ABIFA BITUL ABIHO GRUXR UUXSI UXGUT </span><br /><span style="font-family: "Courier New",Courier,monospace;">UBUHO RUSIH ORRMA MIFAY YMIBU TUMAY YXXXX</span><br /><span style="font-family: "Courier New",Courier,monospace;"> <br /></span><br /><span style="font-family: "Courier New",Courier,monospace;"> <br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-7584525516065973444?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-28980005208648691342009-07-09T08:27:00.006+02:002009-07-09T10:25:48.449+02:00Comandos útiles para Vim <br /># las funciones de autocompletado buscan en los directorios indicados<br /><div style="color: #93c47d;">: set path=/usr/include, /usr/local/include</div><br /># Habilita el coloreado de sintaxis<br /><div style="color: #93c47d;">: syntax on</div><br /># habilita el auto indentado<br /><div style="color: #93c47d;">: set autoindent</div><br /># habilita el auto indentado inteligente<br /><div style="color: #93c47d;">: set smartindent</div><br /># Define 3 espacios para el indentado<br /><div style="color: #93c47d;">:set shiftwidth=3</div><br /># Convierte tabulados en espacios. Deshabilitar con :set noexpandtab <br /><div style="color: #93c47d;">: set expantab </div><br /># Hace que los tabuladores sean de tres espacios <br /><div style="color: #93c47d;">: set tabstop=3 </div><br /># Plega bloques delimitados por {{{ }}} <br /><div style="color: #93c47d;">: set fdm=marker </div><br /># Plega blouqe segun la sintaxis. No necesita marcas, como en el caso anterior.<br /><div style="color: #93c47d;">: set fdm=syntax</div><br /># Establece los nivels de anidamiento para plegar código.<br /><div style="color: #93c47d;">: set foldnestmax=1</div><br /># Cierra un bloque delimitado por {{{ }}}. <br /># Se abre pulsando el espacio sobre el bloque. <br /><span style="color: #93c47d;">: foldclose </span> <br /><br /># Marca el parentesis/llave que abre y el que cierra al situarse encima. <br /><div style="color: #93c47d;">: set showmatch </div><br /># La marca habilitada con 'showmatch' dura un segundo. <br /><span style="color: #93c47d;">: set matchtime=1 </span> <br /><br /># Aparecen indicadores con el numero de linea, de columna, etc. <br /><div style="color: #93c47d;">: set ruler </div><br /># Cuando se abre un archivo coloca el cursor en su posicion del ultimo cierre<br /><div style="color: #93c47d;">if has("autocmd")</div><div style="color: #93c47d;"> au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")</div><div style="color: #93c47d;"> \| exe "normal! g'\"" | endif</div><div style="color: #93c47d;">endif</div><br /># Entra en modo insercion a continuacion de la posicion actual <br /><span style="color: #93c47d;">a </span> <br /><br /># Entra en modo insercion en la posicion actual <br /><span style="color: #93c47d;">i </span> <br /><br /># Deshace los cambios <br /><span style="color: #93c47d;">u </span> <br /><br /># Rehace los cambios <br /><div style="color: #93c47d;">:redo </div><br /># Guarda los cambios <br /><div style="color: #93c47d;">:w! </div><br /># Guarda los cambios en el fiechero 'file' <br /><span style="color: #93c47d;">:w! file</span> <br /><br /># Sale sin guardar <br /><div style="color: #93c47d;">:q! </div><br /># Mueve el cursor al final del fichero <br /><span style="color: #93c47d;">G</span> <br /><br /># Mueve el cursor al principio del fichero <br /><div style="color: #93c47d;">gg </div><br /># Mueve el cursor a la linea N <br /><div style="color: #93c47d;">N G </div><br /># Entra en modo visual. Seleccion a nivel de columnas. <br /><div style="color: #93c47d;">ctrl + v </div><br /># Entra en modo visual. Seleccion de todo el texto. <br /><div style="color: #93c47d;">ctrl + v v </div><br /># Corta/borra el texto seleccionado <br /><div style="color: #93c47d;">dd </div><br /># Copia el texto seleccionado <br /><div style="color: #93c47d;">y </div><br /># Pega el texto del portapapeles <br /><div style="color: #93c47d;">p </div><br /># Sustituye from por to, pidiendo confirmacion <br /><span style="color: #93c47d;">:%s/from/to/gc</span> <br /><br /># Sustituye from por to, pidiendo confirmacion de un texto seleccionado.<br /><div style="color: #93c47d;">:'<,'>s/from/to/gc</div><br /># Ir al principio de la linea<br /><div style="color: #93c47d;">0</div><br /># Ir al final de la linea<br /><div style="color: #93c47d;">$</div><br /># Ir a la palabra siguiente<br /><div style="color: #93c47d;">w</div><br /># Pinta los resultados de la busqueda<br /><div style="color: #93c47d;">: set hlsearch</div><br /># Busca palabras como la situada debajo del cursor<br /><div style="color: #93c47d;">#</div><br /># Abre la pagina man de la función sobre la que se encuentra el cursor<br /><div style="color: #93c47d;">K</div><br /># Salta a la definición/declaración de la variable sobre la que se encuentra el cursor<br /><div style="color: #93c47d;">gd</div><br /># Salta al parentesis/llave asociado al parentesis/llave sobre el que se encuentra el cursor<br /><div style="color: #93c47d;">%</div><br /># Abre una pestaña con el fichero 'file'<br /><div style="color: #93c47d;">: tabnew file</div><br /># Salta de una pestaña a otra<br /><div style="color: #93c47d;">gt</div><br /><br /># Divide la ventana en dos abriendo el fichero 'file'<br /><div style="color: #93c47d;">: split file</div><br /># Salta de una ventana a otra<br /><div style="color: #93c47d;">Ctrl+w w</div><br /><br /># Autocompleta la palabra<br /><div style="color: #93c47d;">Ctrl + p</div><div style="color: #93c47d;">Ctrl + n</div><br /><span style="font-size: small;"><br /></span><br /><span style="font-size: small;"><br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-2898000520864869134?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-47088829789228913022009-07-06T07:31:00.000+02:002009-07-06T10:40:30.357+02:00Estamos dentro de VMWare?<div style="text-align: justify;"></div><div style="text-align: justify;">A continuacion dejo un programa que permite detectar si nuestro servidor se encuentra dentro de una maquina virtual VMWare. Utiliza una tecnica descubierta por Ken Kato que consiste en encontrar el Backdoor I/O port. Este puerto es el que utiliza VMWare para comunicarse con la maquina virtual. Como dicho puerto no existe en un servidor normal su deteccion indica que nos encontramos bajo VMWare.</div><br /><br /><pre class="cpp" name="code">/*<br /> * 4tphi-vmchk.c<br /> * Detects if you are in a VMWare virtual machine.<br /> *<br /> * Written by Andrew Hintz <http://guh.nu><br /> * and AAron Walters<br /> * Fortify Research Laboratories <http://4tphi.net><br /> *<br /> * "Oft at the hives of his tame bees<br /> * They would their sugary thirst appease."<br /> *<br /> * This program is based on info and code from:<br /> * http://chitchat.tripod.co.jp/vmware/<br /> * by chitchat_at_lycos.jp<br /> *<br /> * Notes:<br /> * The program can be run as a normal user.<br /> * We tested the program only in x86 Linux.<br /> * The m4dn3ss lives on!<br /> */<br /><br />#include <stdio.h><br />#include <stdlib.h><br />#include <sys/signal.h><br /><br />#if __INTSIZE == 2 /* 16 bit environment */<br />typedef unsigned int uint16;<br />typedef unsigned long uint32;<br />#else /* 32 bit environment */<br />typedef unsigned short uint16;<br />typedef unsigned int uint32;<br />#endif /* __INTSIZE */<br /><br />void segfault()<br />{<br /> printf("Not running inside VMware.\n");<br /> exit(1);<br />}<br /><br />int main()<br />{<br /> uint32 verMajor, verMinor, magic, dout;<br /><br /> signal(SIGSEGV, segfault);<br /><br /> __asm__ __volatile__ <br /> (<br /> "mov $0x564D5868, %%eax; /* magic number */"<br /> "mov $0x3c6cf712, %%ebx; /* random number */"<br /> "mov $0x0000000A, %%ecx; /* specifies command */"<br /> "mov $0x5658, %%edx; /* VMware I/O port */"<br /> "in %%dx, %%eax;"<br /> "mov %%eax, %0;"<br /> "mov %%ebx, %1;"<br /> "mov %%ecx, %2;"<br /> "mov %%edx, %3;"<br /> : "=r"(verMajor), "=r"(magic), "=r"(verMinor), "=r"(dout)<br /> );<br /><br /> if (magic == 0x564D5868) <br /> {<br /> printf("Running inside VMware. ");<br /> printf("(Version %lu,%lu)\n", verMajor, verMinor);<br /> /* I'm not really sure what the versions mean. */<br /> }<br /><br /> return 0;<br /><br />}<br /><br /></http://4tphi.net></http://guh.nu></pre><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-4708882978922891302?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-33353440569970582062009-06-17T23:40:00.004+02:002009-07-16T09:32:44.868+02:00OpenDomo visto desde un iPod touchDejo una foto de un sistema OpenDomo controlado desde un iPod Touch, en el se accede al sistema de videovigilancia.<br />Cortesía de Isidro, uno de los desarrolladores principales de <a href="http://www.opendomo.org/">OpenDomo</a>.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://www.opendomo.com/files/ipod.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="420" src="http://www.opendomo.com/files/ipod.jpg" width="312" /></a></div><br /><br /><br />Enlace original:<br /><a href="http://www.opendomo.com/drupal/node/55">http://www.opendomo.com/drupal/node/55</a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-3335344056997058206?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-78174937023947398012009-06-17T23:28:00.001+02:002009-06-18T10:31:04.292+02:00Control de sensores e interruptores con OpenDomo <br />Recientemente he publicado un manual en OpenDomo que explica como controlar sensores e interruptores.<br />Por fin opendomo puede usarse en sistemas reales, aunque esté todavía en fase alpha.<br /><br />Dejop un enlace al manual:<br /><br /><a href="http://www.opendomo.com/drupal/node/54">¿Cómo controlar sensores e interruptores con OpenDomo y Micropik PS3X8?</a><br /><br /> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-7817493702394739801?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-40142025114623205632009-06-12T07:31:00.004+02:002009-06-12T12:41:44.289+02:00Criptograma 11/04/09: Solución <br />Se trataba de un autocifrado, cuya clave era nada más y nada menos que "AUTOCIFRADO" ;)<br /><br />Aquí tenéis un ejemplo de como se hace el cifrado:<br /><span style="font-size: x-small;"><br /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;">SIHEVISTOMASLEJOSESPORQUEESTOYSENTADOSOBREHOMBROSDEGIGANTESISAACNEWTON</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;">AUTOCIFRADOSIHEVISTOMASLEJOSESPORQUEESTOYSENTADOSOBREHOMBROSDEGIGANTES</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;">======================================================================</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;">SCASXQXKOPOKTLNJAWLDARIFINGLSQHSEJUHSKHPPWLBFBUCKRFXMNOZUVGAVEGKTEJMSF</span><br /><br /><br /> y un ejemplo de como se descifra:<br /><br /><div style="font-family: "Courier New",Courier,monospace;"></div><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;">SCASXQXKOPOKTLNJAWLDARIFINGLSQHSEJUHSKHPPWLBFBUCKRFXMNOZUVGAVEGKTEJMSF</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;">AUTOCIFRADO</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;">===========</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;">SIHEVISTOMA</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> SIHEVISTOMA</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> ===========</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> SLEJOSESPOR</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> SLEJOSESPOR</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> ===========</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> QUEESTOYSEN</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> QUEESTOYSEN</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> ===========</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> TADOSOBREHO</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> TADOSOBREHO</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> ===========</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> MBROSDEGIGA</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> MBROSDEGIGA</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> ===========</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> NTESISAACNE</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> NTES</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> ====</span><span style="font-size: x-small;"><br style="font-family: "Courier New",Courier,monospace;" /></span><br /><span style="font-family: "Courier New",Courier,monospace; font-size: x-small;"> WTON</span><br /><span style="font-size: x-small;"><br /></span><br /><br /><br />Habéis perdido el interés o es que era muy difícil?! :)<br /><br /> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-4014202511462320563?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com2tag:blogger.com,1999:blog-8201731322115542179.post-4742318026444788232009-06-07T22:27:00.001+02:002009-06-08T17:30:36.780+02:00Librerías para Visión Artificial <br />Excelente colección de código que implementa diferentes técnicas de visión artificial. Desde algoritmos 'sueltos' hasta librerías completas.<br /><br /><a href="http://www.cs.cmu.edu/%7Ecil/v-source.html">http://www.cs.cmu.edu/~cil/v-source.html</a><br /><br /> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-474231802644478823?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-90141640877512631432009-05-13T22:56:00.007+02:002009-05-18T13:58:30.477+02:00OpenBSD en el escritorio<div style="text-align: justify;"> </div><div style="text-align: justify;"><a href="http://www.openbsd.org/">OpenBSD</a> es un Sistema Operativo centrado en la seguridad. Es muy apreciado en el mundo de los servidores no tan solo por su seguridad, si no por su gran estabilidad y su política de 'corrección' del código.</div><div style="text-align: justify;"></div><div style="text-align: justify;"><br />Desde hace algún tiempo he ido viendo posts de gente que lo usaba como entorno de escritorio. lo que me ha llevado a hacer mis propias pruebas. Esta no es su mejor baza, ni mucho menos. Pero si se quiere una roca como Sistema Operativo, hay que tenerla en cuenta.<br /> </div><div style="text-align: justify;"></div><div style="text-align: justify;">En este post explico el procedimiento para instalar OpenBSD en el escritorio. No es <a href="http://www.ubuntu.com/">Ubuntu</a>, así que no esperéis nada parecido, pero tampoco resulta excesivamente complicado. Usaré OpenBSD 4.5 (la última en el momento de escribir el post) en una arquitectura AMD64. El que tenga otra arquitectura solo tendrá que sustituir en las URL amd64.</div><br /><br /><b>Instalación del sistema base</b><br /><br /><div style="text-align: justify;">Descargamos la imagen y la quemamos en un CD:</div><div style="text-align: justify;"><a href="ftp://ftp.openbsd.org/pub/OpenBSD/4.5/amd64/install45.iso">ftp://ftp.openbsd.org/pub/OpenBSD/4.5/amd64/install45.iso</a><br /> </div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;">Arrancamos desde el CD y seguimos los pasos que se nos indican. En general, aunque es unainstalación en modo texto, no supone mucho problema: configuración de teclado, red, etc.</div><div style="text-align: justify;"></div><div style="text-align: justify;"><br />Lo que sí puede resultar difícil si no se está acostumbrado es el particionado de disco. Si no se sabe lo que se esta haciendo lo mejor es usar el disco entero para OpenBSD, o la pérdida de datos estará garantizada. </div><div style="text-align: justify;"></div><div style="text-align: justify;"><br />Esta parte está explicada en detalle en el siguiente enlace, en el punto 4.5.2:</div><div style="text-align: justify;"><a href="http://www.openbsd.org/faq/faq4.html">http://www.openbsd.org/faq/faq4.html</a></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"><br /><b> <br /></b><br /><b>Selección de paquetes</b> </div><div style="text-align: justify;"></div><div style="text-align: justify;">Durante la instalación se nos solicitarán los paquetes que queremos instalar. Los seleccionaremos todos, o como mínimo, los paquetes relacionados con las X.</div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"><br /><b> <br /></b><br /><b>Ejecutando las X<br /></b></div><div style="text-align: justify;"></div><div style="text-align: justify;">En estos momentos tenemos un sistema base con las X, las cuales podemos ejecutar mediante el comando startx. Si no funcionan correctamente tendremos que revisar /etc/X11/xorg.conf y adaptarlo a nuestro sistema.</div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"><br /><b> <br /></b><br /><b>Instalando GNOME</b></div><div style="text-align: justify;"></div><div style="text-align: justify;"><br />Habrá quien quiera instalar <a href="http://www.kde.org/">KDE</a>. Googlead un poco, no creo que sea muy diferente. Aquí instalaremos <a href="http://www.gnome.org/">GNOME</a>. </div><div style="text-align: justify;"></div><div style="text-align: justify;"><br />Para poder instalar binarios de forma cómoda tendremos que establecer la variable de entorno PKG_PATH. Lo haremos añadiendo:<br /><br />export PKG_PATH=<a href="ftp://ftp.openbsd.org/pub/OpenBSD/4.5/packages/amd64/gnome-session-2.24.3p4.tgz">ftp://ftp.openbsd.org/pub/OpenBSD/4.5/packages/amd64/</a><br /><br />en el fichero ~/.profile. Así quedara configurada al reiniciar. <br /><br />Ahora, para instalar GNOME haremos: </div><div style="text-align: justify;"></div><div style="text-align: justify;">$ pkg_add gnome-session</div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div> <br />Y para que GNOME arranque al iniciar el sistema pondremos en /etc/rc.local<br />/usr/local/bin/gdm -nodaemon <br /><br /><br /><b>Creación de usuarios <br /></b><br /><br />Ejecutaremos:<br />$ adduser<br /><div style="text-align: justify;"></div><div style="text-align: justify;">Este nos irá preguntando lo típico: nombre de usario, shell a usar, contraseña, etc.</div><div style="text-align: justify;"></div><div style="text-align: justify;">Si queremos que el usuario se pueda convertir en root con el comando 'su' necesitaremos añadirlo al grupo wheel. Lo haremos con:</div><br />$ moduser -G wheel usuario<br /><br /><br /><br />Y con esto, ya tenemos un espléndido OpenBSD en nuestro escritorio.<br /><br />Solo faltará instalar los paquetes que creamos necesarios como:<br /><br />$ pkg_add openoffice-3.0.1p2<br />$ pkg_add firefox-i18n-es-ES-3.0.6<br /><br />etc.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-9014164087751263143?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-75251378163254306422009-05-12T12:50:00.001+02:002009-05-12T12:51:13.870+02:00Factorización en tiempo polinómico!? <br />Claus P. Schnorr ha presentado en el Eurocrypt 2009 "<a href="http://eurocrypt2009rump.cr.yp.to/e074d37e10ad1ad227200ea7ba36cf73.pdf">Average Time Fast SVP and CVP Algorithms: Factoring Integers in Polynomial Time</a>". <br /><br />Habría que ver el impacto que puede tener este documento en la criptografía de clave pública. Pero si es correcto, podría representar el fin de <a href="http://en.wikipedia.org/wiki/RSA">RSA</a>.<br /><br />Se ha iniciado un hilo de discusión en <a class="ln" href="http://groups.google.com/group/sci.crypt.research/browse_thread/thread/a59a39ce28578972?hl=en">sci.crypt.research</a>.<br /><br /> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-7525137816325430642?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-72274299784398192372009-05-09T23:18:00.003+02:002009-05-09T23:19:18.310+02:00Free Mathematics Books <br />Estupenda colección de libros de matemáticas distribuidos gratuitamente:<br /><br /><a href="http://www.e-booksdirectory.com/mathematics.php">http://www.e-booksdirectory.com/mathematics.php<br /></a><br /><br /> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-7227429978439819237?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com2tag:blogger.com,1999:blog-8201731322115542179.post-38287121912528876502009-05-07T23:42:00.004+02:002009-05-09T23:19:54.005+02:00The P-versus-NP page <br />Dejo un enlace a una página estupenda que recopila todos los intentos de demostrar el problema <a href="http://en.wikipedia.org/wiki/P_%3D_NP_problem">P?=NP</a>.<br /><br /><a href="http://www.win.tue.nl/%7Egwoegi/P-versus-NP.htm">http://www.win.tue.nl/~gwoegi/P-versus-NP.htm</a><br /><br />Después de todo, hay un <a href="http://www.claymath.org/millennium/">suculento premio</a> para el que lo consiga.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-3828712191252887650?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-10517675220515731202009-05-05T00:56:00.000+02:002009-05-05T23:20:47.645+02:00Criptograma 11/04/09<div style="text-align: center;"></div><div style="text-align: center;">Pista: Autocifrado</div><div style="font-family: "Courier New",Courier,monospace; text-align: center;"></div><div style="font-family: "Courier New",Courier,monospace; text-align: center;"><br /><br /> SCASXQX KOPOKTL NJAWLDA RIFINGL SQHSEJU </div><div style="font-family: "Courier New",Courier,monospace; text-align: center;">HSKHPPW LBFBUCK RFXMNOZ UVGAVEG KTEJMSF<br /><br /> </div><div style="font-family: "Courier New",Courier,monospace; text-align: center;"></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-1051767522051573120?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-33614658159988426312009-04-23T20:00:00.000+02:002009-04-23T20:00:01.215+02:00Criptograma 07/04/09: Solución<div style="text-align: justify;">Una combinación de transposición y sustitución. Primero había que transponer las letras del criptograma:</div><br /><br /><span style="font-family: "Courier New",Courier,monospace;">TRJVMFPTTFIEPFNCCFSFFTTDIVBDOIOBBSDZJNEJPSDBPSOEEPPTTWPFKDP</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">FTTEBPOTUPFSTFEKFBITBZCVMOBBSTNPBMEBBMNFFOEHFVTBFFWTJQHPOS</span>F<br /><br /><br />Cogiendolas con un periodo de dos: una si, una no, ... Obteníamos:<br /><br /><br /><div style="font-family: "Courier New",Courier,monospace;">TJMPTIPNCSFTIBOOBDJEPDPOEPTPKPTEPTPSFKBTZVOBTPMBMFOHVBFTQPS<br />RVFTFEFCFFTDVDIBSZNJSBSEPTWFDFTBOUFTEFIBCMBSNBEBNFEFTFWJHOF</div><br /><br />Finalmente con un desplazamiento de una letra en el abecedario inglés:<br /><br /><br /><span style="font-family: "Courier New",Courier,monospace;">SILOSHOMBRESHANNACIDOCONDOSOJOSDOSOREJASYUNASOLALENGUAESPOR</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">QUESEDEBEESCUCHARYMIRARDOSVECESANTESDEHABLARMADAMEDESEVIGNE</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-3361465815998842631?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-83389987476520236742009-04-22T14:05:00.002+02:002009-04-22T14:05:52.122+02:00Evitar timeouts en conexiones ssh <br />echo "ServerAliveInterval 60" >> ~/.ssh/config<br /><br />Y se acabaron los timeouts por inactividad.<br /><br />Gracias Jordi!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-8338998747652023674?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-61806480685789883282009-04-21T20:00:00.001+02:002009-04-21T20:00:02.218+02:00Criptograma 05/04/09: SoluciónObservando los números con atención se veía que 'todos' se podían descomponer en, únicamente, dos números primos. Dado que había un total de 26 números primos, se podía deducir que había un primo por letra del abecedario inglés.<br /><br />La asignación era la siguiente:<br /><br /><div style="font-family: "Courier New",Courier,monospace;">A: 002, B: 003, C: 005, D: 007, E: 011, F: 013, G: 017, </div><div style="font-family: "Courier New",Courier,monospace;">H: 019, I: 023, J: 029, K: 031, L: 037, M: 041, N: 043, </div><div style="font-family: "Courier New",Courier,monospace;">O: 047, P: 053, Q: 059, R: 061, S: 067, T: 071, U: 073, </div><div style="font-family: "Courier New",Courier,monospace;">V: 079, W: 083, X: 089, Y: 097, Z: 101</div><br />El problema añadido del criptograma, era que al asignar cada letra a su número primo correspondiente las letras podían quedar desordenadas, pues dependía del orden en que se colocaban los dos factores. Aun así, después de la sustitución, no ser dificil finalizar el criptograma.<br /><br />Despues de factorizar los números originales quedaba como:<br /><br /><div style="font-family: "Courier New",Courier,monospace;">37 2 5 23 11 43 5 23 2 43 47 43 47 67 19 2</div><div style="font-family: "Courier New",Courier,monospace;">11 43 67 11 43 2 7 47 2 73 43 67 23 37 2 37</div><div style="font-family: "Courier New",Courier,monospace;">47 5 73 61 2 11 67 47 43 47 37 47 41 2 67 67</div><div style="font-family: "Courier New",Courier,monospace;">73 3 37 23 41 11 7 11 37 2 23 43 71 11 37 23</div><div style="font-family: "Courier New",Courier,monospace;">17 11 43 5 23 2 11 7 17 2 61 2 37 37 2 43</div><div style="font-family: "Courier New",Courier,monospace;">53 47 11 101</div><div style="font-family: "Courier New",Courier,monospace;"></div><div style="font-family: "Courier New",Courier,monospace;"></div><br />Y finalmente, después de sustituir:<br /><br /><div style="font-family: "Courier New",Courier,monospace;">LACIENCIANONOSHAENSENADOAUNSILALOCURAESONO</div><span style="font-family: "Courier New",Courier,monospace;">LOMASSUBLIMEDELAINTELIGENCIAEDGARALLANPOEX</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-6180648068578988328?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-42312475398496752442009-04-20T17:39:00.000+02:002009-04-20T17:39:32.831+02:00Catástrofe!!<a href="http://www.oracle.com/">Oracle</a> compra <a href="http://www.sun.com/">Sun Microsystems,</a> y con ella MySQL, Java, OpenOffice, OpenSolaris, VirtualBox, ...<br /><br />Esta noche voy a tener pesadillas.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-4231247539849675244?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com1tag:blogger.com,1999:blog-8201731322115542179.post-39033149658072046882009-04-19T20:00:00.001+02:002009-04-19T20:54:55.774+02:00Criptograma 26/03/09: Solución <br /><div style="text-align: justify;">Volvíamos con Kasiski, esta vez con una clave un poquito más larga...</div><br /><div style="font-family: "Courier New",Courier,monospace;">VRBCI UGJZB JMCJK EVMBF ZSCNX<br />NIWAN CEGYI UVIQV FRWUZ ANWEH<br />VLPAT EUQUH RPIIW ONWQB EWXXX<br />RCVAN CCDHH PKMBF FTJYL HCKSE<br />EMCAN NFIBB HYTLB EPLCI ZZXLY<br />UGZOQ VPGYU APWBB RPPAX NVMBB<br />XYHNT QWMIA FXTHZ AUCDE FTXUY<br />EPWOY RKTHM EPWUH JXPKN EWVCG<br />VRVUL URZCC ZEUYM OFWGG FHDMF<br />EOQFN EQPFL ANDCY FWRCX GQASF<br />EEIOK ANIPP UIUAA ILSZZ FTFLL<br /></div><br /><br />CLAVE: REPUTACION<br /><br /><br /><br /><span style="font-family: "Courier New",Courier,monospace;">ENMIP UEBLO SINPR ETENS IONTE</span><br /><span style="font-family: "Courier New",Courier,monospace;">NGOMA LAREP UTACI ONHAG ALOQU</span><br /><span style="font-family: "Courier New",Courier,monospace;">EHAGA ESIGU ALTOD OLOCO NSIDE</span><br /><span style="font-family: "Courier New",Courier,monospace;">RANMA LYONO PIENS OPUES HACER</span><br /><span style="font-family: "Courier New",Courier,monospace;">NINGU NDANO QUERI ENDOV IVIRF</span><br /><span style="font-family: "Courier New",Courier,monospace;">UERAD ELREB ANONO ALAGE NTENO</span><br /><span style="font-family: "Courier New",Courier,monospace;">GUSTA QUEUN OTENG ASUPR OPIAF</span><br /><span style="font-family: "Courier New",Courier,monospace;">ENOAL AGENT ENOGU STAQU EUNOT</span><br /><span style="font-family: "Courier New",Courier,monospace;">ENGAS UPROP IAFET ODOST ODOSM</span><br /><span style="font-family: "Courier New",Courier,monospace;">EMIRA NMALS ALVOL OSCIE GOSES</span><br /><span style="font-family: "Courier New",Courier,monospace;">NATUR ALABC DEFGH IJKLM OPQRS</span><br /><br /><br /><br /><br /> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-3903314965807204688?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-91548212000348723222009-04-17T20:00:00.002+02:002009-04-19T20:53:55.040+02:00Criptograma 20/03/09: Solución<div style="text-align: justify;">Como ya se decía en la pista del criptograma se trataba de un cifrado Vigenere susceptible al ataque Kasiski.</div><br /><br /><br /><div style="font-family: "Courier New",Courier,monospace;">BEAOSERIPMXAQUTLXTDMTLDDTCXABIEAEABEAOSIYEGOCMJCWAHVTCTS</div><div style="font-family: "Courier New",Courier,monospace;">NLDOAVXDPBPMJCWAHMPSIRPBPJPNXNDNDTTPXECSTSFUTSXNSICEGOKI</div><div style="font-family: "Courier New",Courier,monospace;">KIGAHJJNIATLTSUUTROONEAAWOGRDAQRTTTPPSDYPVTRPSROBOAAKISA</div><div style="font-family: "Courier New",Courier,monospace;">IESEEAGAQUTNDSBOBECTDSIEPLOAGAHSDBGEAOHPDBGEHYBEOQJICOHQ</div><div style="font-family: "Courier New",Courier,monospace;">JECOWACSPBXDDDTSROALPRBEAOSERIPMXAQUTLXTDMTLDDTCXABIEAEA</div><div style="font-family: "Courier New",Courier,monospace;">BEAOSIYEGOCMJCWAHVTCTSNLDOAVXDPBPMJCWAHMPSAAKISATSAURHPD</div><div style="font-family: "Courier New",Courier,monospace;">TSEIPDPDPNPDXEIEPYJDPAHICOBAHYHIIUHOAOCOPDTLPNIAHTTIGACD</div><div style="font-family: "Courier New",Courier,monospace;">TJPNSOPTGAHAIRPSPNSABURHPCWOSAAESUGOAAIITRGAIOSATLHOAITL</div><div style="font-family: "Courier New",Courier,monospace;">BAGSDNEAGAPQJEALDSFUTHPNHAQISOHECTPRHEHOQRTLDSSEBAHMTLDD</div><div style="font-family: "Courier New",Courier,monospace;">TCXABIPBJEAIIOBEAOSERIPMXPPPPMTLDDXJTRDNBURHPSKEREHYAOWE</div><div style="font-family: "Courier New",Courier,monospace;">DLKISASOHITMERTMPSYOHEPGJSIICGDYIIHOAOPBRDTFVHXJZLBNDPFR</div><div style="font-family: "Courier New",Courier,monospace;"></div><div style="font-family: "Courier New",Courier,monospace;"></div><br /><br /><br />CLAVE : PAPA<br /><br /><div style="font-family: "Courier New",Courier,monospace;"></div><div style="font-family: "Courier New",Courier,monospace;"></div><div style="font-family: "Courier New",Courier,monospace;">MELODECIAMIABUELITOMELODECIAMIPAPAMELODIJERONMUCHASVECES</div><div style="font-family: "Courier New",Courier,monospace;">YLOOLVIDABAMUCHASMASTRABAJANINONOTEPIENSESQUESINDINEROVI</div><div style="font-family: "Courier New",Courier,monospace;">VIRASJUNTAELESFUERZOYELAHORROABRETEPASOYAVERASCOMOLAVIDA</div><div style="font-family: "Courier New",Courier,monospace;">TEDEPARABUENOSMOMENTOSTEALZARASSOBRELOSPOBRESYMEZQUINOSQ</div><div style="font-family: "Courier New",Courier,monospace;">UENOHANSABIDODESCOLLARMELODECIAMIABUELITOMELODECIAMIPAPA</div><div style="font-family: "Courier New",Courier,monospace;">MELODIJERONMUCHASVECESYLOOLVIDABAMUCHASMASLAVIDAESLUCHAD</div><div style="font-family: "Courier New",Courier,monospace;">ESPIADADANADIETEAYUDAASINOMASYSITUSOLONOADELANTASTEIRAND</div><div style="font-family: "Courier New",Courier,monospace;">EJANDOATRASATRASANDAMUCHACHODALEDUROLATIERRATODAELSOLIEL</div><div style="font-family: "Courier New",Courier,monospace;">MARSONPARAAQUELLOSQUEHANSABIDOSENTARSESOBRELOSDEMASMELOD</div><div style="font-family: "Courier New",Courier,monospace;">ECIAMIABUELITOMELODECIAMIPAPAMELODIJERONMUCHASVECESYLOHE</div><div style="font-family: "Courier New",Courier,monospace;">OLVIDADOSIEMPREMASJOSEAGUSTINGOYTISOLOABCDEFGHIJKLMNOPQR</div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-9154821200034872322?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-49515399616478554002009-04-13T00:07:00.008+02:002009-04-15T23:04:27.316+02:00Vectores Dinámicos en C<div style="text-align: justify;">Si queremos usar vectores dinámicos en C necesitamos recurrir a funciones de manejo de memoria de la familia *alloc(). En este post explico cómo hacerlo de forma sencilla y añado algunas macros que facilitan la tarea.<br /><br /><br />Para empezar necesitaremos declarar el vector. Lo haremos como apuntador a NULL, creando así, un vector vacío. Necesitaremos también una variable que almacene el tamaño del vector, es decir, la cantidad de elementos que contiene.<br /><br />Como ejemplo crearemos un vector de números enteros.<br /></div><br /><pre class="cpp" name="code">int *v = NULL;<br />size_t v_size = 0;<br /><br /></pre><br /><br /><div style="text-align: justify;">Tenemos un vector vacío, por lo que el siguiente paso no puede ser otro que añadir elementos. Lo haremos mediante realloc(), función que permite reasignar el tamaño reservado en memoria.<br /><br /></div><br /><br /><pre class="cpp" name="code">v_size++;<br />v = realloc(v, sizeof(int)*v_size);<br />v[v_size-1] = 5;<br /><br /></pre><br /><div style="text-align: justify;">De esta manera podemos añadir tantos elementos como creamos oportuno. El acceso a ellos se realizará mediante la tradicional indexación de vectores v[i], donde i es el índice del vector. Así podremos acceder al contenido de las diferentes posiciones del vector tanto para leerlas como para escribir en ellas.<br /><br />Finalmente, tendremos que liberar la memoria asignada al vector mediante la función free().<br /></div><br /><br /><pre class="cpp" name="code">free(v);<br /><br /></pre><br /><br /><div style="text-align: justify;">A continuación pego un ejemplo completo del uso de vectores dinámicos con las sentencias comentadas anterioremente. Añado tambien un ejemplo de uso de la función qsort() que permite ordenar el vector.<br /></div><br /><pre class="cpp" name="code">#include <stdio.h><br />#include <stdlib.h><br /><br /><br />int cmp(const void *a, const void *b)<br />{<br /> int *ia, *ib;<br /><br /> ia = (int *) a;<br /> ib = (int *) b;<br /><br /> return (*ia - *ib);<br />}<br /><br />int main()<br />{<br /> /* Declaracion del vector y de su tamaño */<br /> int *v = NULL;<br /> size_t v_size = 0;<br /><br /><br /> /* Añade un elemento al vector con valor 5 */<br /> v_size++;<br /> v = realloc(v, sizeof(int)*v_size);<br /> v[v_size-1] = 5;<br /><br /> /* Añade un elemento al vector con valor 3 */<br /> v_size++;<br /> v = realloc(v, sizeof(int)*v_size);<br /> v[v_size-1] = 3;<br /><br /> /* Añade un elemento al vector con valor 1 */<br /> v_size++;<br /> v = realloc(v, sizeof(int)*v_size);<br /> v[v_size-1] = 1;<br /><br /> /* Mofifica el valor del primer elemento del vector */<br /> v[0] = 2;<br /><br /> /* Ordena el contenido del vector */<br /> qsort(v, v_size, sizeof(int), cmp);<br /><br /> /* Muestra los elementos del vector */<br /> int i;<br /> for(i=0; i<v_size; i++)<br /> printf("%d ", v[i]);<br /> printf("\n");<br /><br /> /* Libera la memoria asignada */<br /> free(v);<br /><br /> return 0;<br />}<br /><br /></pre><br /><br /><div style="text-align: justify;"><br />La sintaxis usada es un poco engorrosa, principalmente cuando se trata de añadir elementos a un vector. Esto puede solucionarse mediante el uso de macros. A continuación pego un ejemplo usando macros. En el puede verse también cómo pasar un vector como parámetro a una función.<br /><br /></div><br /><pre class="cpp" name="code">#define VECTOR(v_var,v_size_var,type) \<br /> type *v_var = NULL; \<br /> size_t v_size_var = 0;<br /><br />#define VECTOR_ADD(v_var,v_size_var,type,value) \<br /> (v_size_var)++; \<br /> v_var = realloc(v_var, sizeof(type)*(v_size_var)); \<br /> v_var[v_size_var-1] = value;<br /> <br />#define VECTOR_FREE(v_var) if(v_var) free(v_var);<br /><br /><br />void add_elements(int *v, size_t *v_size)<br />{<br /> VECTOR_ADD(v, *v_size, int, 3);<br /> VECTOR_ADD(v, *v_size, int, 5);<br /> VECTOR_ADD(v, *v_size, int, 7);<br />} <br /><br />int main()<br />{<br /> VECTOR(v, v_size, int);<br /> VECTOR_ADD(v, v_size, int, 2);<br /> <br /> add_elements(v, &v_size);<br /><br /> int i;<br /> for(i=0; i<v_size; i++)<br /> printf("%d ", v[i]);<br /> printf("\n");<br /> <br /> VECTOR_FREE(v);<br /><br /> return 0;<br />}<br /><br /><br /></pre><br /><br /><div style="text-align: justify;">Para finalizar, solo recordar que el punto fuerte de los vectores es el acceso directo a los elementos (solo es necesaria una operación - O(1) ). Esto permite por ejemplo ordenar los elementos del vector a gran velocidad.<br /><br />Por el contrario son costosas las inserciones de elementos. Pueden añadirse con facilidad al final, pero insertar un elemento en el medio, obliga a recolocar todos los demás elementos. Si se requiere una estructura de datos que permita estas operaciones es mejor recurrir a las listas dinámicas. <br /><br /><br /></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-4951539961647855400?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-6544993528291274842009-04-10T00:43:00.004+02:002009-04-10T00:50:44.155+02:00Criptograma 01/04/09: Solución<div style="text-align: justify;">Se trataba de un cifrado de sustitución homofónica que usaba dos valores para cada letra. A contnuación, la solución propuesta por Izzec.</div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;">Mis felicitaciones, Izzec!</div><div style="text-align: justify;"></div><blockquote><div style="text-align: justify;"></div><div style="text-align: justify;">dEbo decir que soy un priNcipiante en esto, y que a pesar de Haberme informadO sobRe Algunos aspectos de la criptografía tengo que decir que no tengo aún una haBilidad adqUirida. aún así mE gusta, y con coNstancia, en mi tiempo libre le dedico lo suficiente pAra intentar saber semana tras semana (aunque siemPre se nOs adelante altaiR) que nos escondes en los cripTogramas, daniel.</div><div style="text-align: justify;"></div><div style="text-align: justify;"> bUeno el método que seguí fue Bastante sencilLo la verdad. en primera instancia hice una lectura rápida de los númerOs, y me di cuenta que todos eran curiosamente impares. alGo me Hizo pensar en esE momento que serían números impares sustituidos por letras. así que me puse a contar caDa númEro impar las veces que aparecía en dicho criptograma (esto no me serviría de mucho más adelante). hecho esto los clasifique por orden ascendente 002 (el único que no era impar) -003-005, etc. y me di cuenta que eran primos.así que los reordené todos de forma ascendente de tal forma que quedasen cuadrados con el alfabeto (sin utilizar la ñ). adjunto eJemplo;</div><br /> 002 A 003 b 005 c 007 D 011 e 013 f 017 g 019 h 023 i 029 j ¿? k 037 l<br /><br /> 041 m 043 n 047 O 053 p 059 q 061 r 067 s 071 t 073 U ¿? v ¿? w 089 x<br /><br /> 097 y ¿? z 103 a 107 b 109 c 113 d 127 e ¿? f ¿? g 139 h 149 i ¿? j<br /><br /> ¿? k 163 l 167 m 173 N 179 o ¿? p 191 q 193 r 197 s 199 t 211 u ¿? v<br /><br /> ¿? w ¿? x 233 y ¿? z 241 a ¿? b 257 C 263 d 269 e ¿? f ¿? g ¿? h<br /><br /> 283 i ¿? j ¿? k 311 l 313 m 317 n 331 o ¿? p ¿? q 349 R 353 s 359 t<br /><br /> 367 u</blockquote><blockquote> Y luego lo demás fue cambiar las cifras Por las leTras. El texto queda así:<br /><br /><span style="font-family: "Courier New",Courier,monospace;"> l a d i f e r e N c</span></blockquote><blockquote style="font-family: "Courier New",Courier,monospace;"> i a q u e e x i s t<br /><br /> e e n t r e l o s h<br /><br /> o M b r e s n e c I<br /><br /> o s y l o s h o m B<br /><br /> r e s d e t a L e n<br /><br /> t O s u e l e s e r<br /><br /> q u e l o s p r i m<br /><br /> e r o s d i c e n n<br /><br /> e c e d a d e s y l<br /><br /> o s s e G u n d o s<br /><br /> l a s c o m e t e n<br /><br /> m a r i a n o j o s<br /><br /> e d e l a r r a</blockquote><br /><br />Lo habéis leído con atención? ;)<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-654499352829127484?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com2tag:blogger.com,1999:blog-8201731322115542179.post-39395053812675995442009-04-08T00:56:00.002+02:002009-04-13T00:43:47.100+02:00Búsqueda de Patrones en Cifrados de Sustitución<div style="text-align: justify;"></div><div style="text-align: justify;">Cuando se realiza el criptoanálisis de un cifrado de sustitución monoalfabética, suele ser necesario encontrar palabras que encajen en ciertos patrones de letras. Por ejemplo, en un patroón como AACBBDA encajarían palabras como <i>arrollar</i>, <i>guerrillero</i> o <i>encarrillar</i>. Muchas veces, para encontrar estas palabras no es suficiente con nuestra imaginación y conocimiento de la lengua, por lo que suele ser útil recurrir al ordenador.</div><div style="text-align: justify;"></div><div style="text-align: justify;">A continuación, pego un programa que permite realizar este tipo de búsquedas de forma muy sencilla.</div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><br /><br /><pre class="cpp" name="code">#include <stdio.h><br />#include <stdlib.h><br />#include <string.h><br /><br />void remove_nl(char *str)<br />{<br /> if(str[strlen(str)-1]=='\n')<br /> str[strlen(str)-1]=0;<br />}<br /><br />int match_pattern(char *match, const char *pattern, size_t pattern_len)<br />{<br /> int i,j;<br /><br /> for(i=0; i<pattern_len; i++)<br /> {<br /> for(j=i; j<pattern_len; j++)<br /> {<br /> if(pattern[i]==pattern[j])<br /> if(match[i]!=match[j])<br /> return 0;<br /><br /> if(pattern[i]!=pattern[j])<br /> if(match[i]==match[j])<br /> return 0;<br /> }<br /> }<br /><br /> return 1;<br />}<br /><br />int main(int argc, char *argv[])<br />{<br /> char word[64];<br /> char *pattern = NULL;<br /> int pattern_len = 0;<br /><br /> if(argc!=3)<br /> {<br /> printf("Usage: %s [word list] [crypto-pattern]\n\n", argv[0]);<br /> return 0;<br /> }<br /><br /> pattern = argv[2];<br /> pattern_len = strlen(pattern);<br /><br /> FILE *file = fopen(argv[1], "r");<br /> if(!file)<br /> {<br /> perror("fopen()");<br /> exit(0);<br /> }<br /><br /> while(!feof(file))<br /> {<br /> fgets(word, sizeof(word), file);<br /> remove_nl(word);<br /><br /> char *substr = word;<br /><br /> while(strlen(substr)>=pattern_len)<br /> {<br /> if(strlen(substr)<pattern_len)<br /> break;<br /><br /> char match[pattern_len];<br /> strncpy(match, substr, pattern_len);<br /> match[pattern_len]=0;<br /><br /> if(match_pattern(match, pattern, pattern_len))<br /> printf("%s\n", word);<br /><br /> substr++;<br /> }<br /> }<br /><br /><br /> fclose(file);<br /><br /> return 0;<br />}<br /><br /><br /><br /></pre><br />Para el patrón del ejemplo bastarí con compilar el programa con:<br /><br /><pre>$ gcc pattern.c -o pattern<br /></pre><br />Y ejecutarlo con:<br /><br /><pre>$ ./pattern ../dict/spanish AACBBDA<br />acurrullar<br />aporrillarse<br />arrollar<br />arrullar<br />aturrullar<br />barrillar<br />barrillera<br />barrillero<br />carrillera<br />cerrillar<br />churrillera<br />churrillero<br />churrullera<br />churrullero<br />corrillera<br />corrillero<br />desarrollar<br />descarrillar<br />emborrullarse<br />emparrillar<br />encarrillar<br />guerrillero<br />marrullera<br />marrulleria<br />marrullero<br />pantorrillera<br />zarzaparrillar<br /></pre><br />Espero que os sirva para vuestros cripoanalisis!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-3939505381267599544?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-10960330476397143352009-04-07T22:41:00.002+02:002009-04-09T11:24:48.956+02:00Criptograma 07/04/09<span style="font-family: "Courier New",Courier,monospace;">TRJVMFPTTFIEPFNCCFSFFTTDIVBDOIOBBSDZJNEJPSDBPSOEEPPTTWPFKDP</span><br style="font-family: "Courier New",Courier,monospace;" /><span style="font-family: "Courier New",Courier,monospace;">FTTEBPOTUPFSTFEKFBITBZCVMOBBSTNPBMEBBMNFFOEHFVTBFFWTJQHPOSF</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-1096033047639714335?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com3tag:blogger.com,1999:blog-8201731322115542179.post-42122759748381600282009-04-05T23:44:00.000+02:002009-04-09T11:24:48.957+02:00Criptograma 05/04/090074 0115 0473 0115 0086 2021 3149 0038 0473 0737 0086 <br />0329 0146 2881 0851 0074 0235 4453 0022 3149 2021 1739 <br />0082 4489 0219 0851 0451 0077 0074 0989 0781 0621 0187 <br />0215 0046 0077 0034 0122 1369 0086 2491 1111<br /><br /><div style="text-align: justify;">Podéis enviar vuestro procedimiento de solución a dlerch (en gmail) o publicar un comentario. </div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-4212275974838160028?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com3tag:blogger.com,1999:blog-8201731322115542179.post-2896516984162432362009-04-05T22:53:00.001+02:002009-04-09T11:21:52.856+02:00The General Number Field SieveActualmente, el algoritmo de factorización más rápido que existe. Dejo aquí mi colección de <i>papers</i>.<br /><br /><b>Antecedents</b><br />-<a href="http://www.std.org/%7Emsm/common/f9paper.ps"> The Factorization of the Ninth Fermat Number</a> , A.K. Lenstra, H.W. Lenstra, M.S. Manasse, and J.M. Pollard (1993).<br />- <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.1306">The Number Field Sieve</a> , A. K. Lenstra, M. S. Manasse, J. M. Pollard (1990).<br /><br /><b>Introduction to the GNFS algorithm</b><br />- <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.96.6146">An Introduction to the General Number Field Sieve</a> , Matthew E. Briggs (1998).<br />- <a href="http://islab.oregonstate.edu/koc/ece575/03Project/Case/paper.pdf">A Beginner's Guide To The General Number Field Sieve</a> , Michael Case.<br />- <a href="http://websites.math.leidenuniv.nl/algebra/nfs.pdf">The Number Field Sieve</a> , Peter Stevenhagen.<br />- <a href="http://www.geocities.com/sbyrnes321/math129-finalpaper.pdf">The Number Field Sieve</a> , Steven Byrnes.<br /><br /><b>Polynomial Selection</b><br />- <a href="http://citeseer.ist.psu.edu/murphy99polynomial.html">Polynomial Selection for the Number Field Sieve Factorisation Algorithm</a> , Brian Murphy (1999).<br />- <a href="http://citeseer.ist.psu.edu/458063.html">On quadratic polynomials for the number field sieve</a> , Brian Murphy and Richard P. Brent (1998).<br />- <a href="http://www.iacr.org/archive/asiacrypt2003/07_Session07/04_021/28940055.pdf">Rotations and Translations of Number Field Sieve Polynomials</a> Jason Gower (2003).<br />- <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.2036">The multiple-lattice number field sieve</a> , Daniel J Bernstein.<br /><br /><b>Sieve</b><br />- <a href="http://www.hyperelliptic.org/tanja/SHARCS/talks/FrankeKleinjung.pdf">Continued Fractions and Lattice Sieving</a> , Jens Franke, Thorsten Kleinjung.<br /><br /><b>Filtering</b><br />-<a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.5186"> Strategies in filtering in the number field sieve</a> , S. Cavallar (2000).<br /><br /><b>Linear Algebra</b><br />- <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.9222">Solving Large Sparse Linear Systems over Finite Fields</a> , B. A. LaMacchia and A. M. Odlyzko (1991).<br />- <a href="http://dsns.csie.nctu.edu.tw/research/crypto/HTML/PDF/E95/106.PDF">A Block Lanczos Algorithm for Finding Dependencies over GF(2)</a> , Peter L. Montgomery.<br />- <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.36.9222">Solving large sparse linear systems over finite fields</a> , B. A. Lamacchia, A. M. Odlyzko (1991).<br /><br /><b>Square Root</b><br />-<a href="http://citeseer.ist.psu.edu/nguyen98montgomerylike.html"> A Montgomery-like square root for the Number Field Sieve</a> , Phong Nguyen, Ecole Normale Superieure (1998).<br />- <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.39.5935">Computing a Square Root for the Number Field Sieve</a> , Jean-Marc Couveignes (1993).<br />-<a href="ftp://ftp.cwi.nl/pub/pmontgom/sqrt.ps.gz"> Square Roots of Products of Algebraic Numbers</a> , Peter L. Montgomery.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-289651698416243236?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0tag:blogger.com,1999:blog-8201731322115542179.post-72100991572672240212009-04-03T12:58:00.010+02:002009-04-09T11:26:53.229+02:00Cómo diferenciar entre cifrados de transposición y de sustitución<div style="text-align: justify;"></div><div style="text-align: justify;"> <br />En criptoańalisis de cifrados clásicos, el primer problema con el que se enfrenta el criptoanalista es el desconocimiento del tipo de cifrado usado en el criptograma.<br /> </div><div style="text-align: justify;"></div><div style="text-align: justify;">En criptografía clásica existen dos grandes grupos de sistemas de cifrado: los cifrados de sustitución y los cifrados de transposición.<br /> </div><div style="text-align: justify;"></div><div style="text-align: justify;">Los primeros son aquellos en los que cada letra es sustituida por otra letra o símbolo. En los segundos, en cambio, no hay sustitución, pues solo se realiza una mezcla de las letras.<br /> </div><div style="text-align: justify;">Mientras que en el caso de los cifrados de sustitución, nuestro objetivo será averiguar que símbolo corresponde a cada letra, en los cifrados de transposición tendremos que encontrar el patrón de 'mezcla' utilizado.<br /><br /><br /> </div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"><b>Características del Texto Cifrado:</b></div><div style="text-align: justify;"><b></b></div><br /><div style="text-align: justify;">Dado que en los cifrados de transpoción, únicamente se mezclan letras, en el resultado cifrado tendremos las misma letras que en el mensaje en claro. Así pues se mantendrán los porcentajes de vocales y de consonantes de la lengua usada.</div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;">Sin embargo, en los cifrados de sustitución, cada símbolo será sustituido por otro, de manera que no se mantendrá la distribución de vocales y consonantes.<br /><br /><br /> </div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"><b>Técnicas disponibles:</b><br /><b><br /></b></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;">Las características del texto cifrado nos ofrecen dos técnicas para distinguir entre cifrados de sustitución y cifrados de transposición: El porcentaje de vocales y el <a href="http://dlerch.blogspot.com/2007/09/criptoanlisis-anlisis-de-recuencias.html">análisis de frecuencias</a>.</div><div style="text-align: justify;"></div><div style="text-align: justify;"><br />El porcentaje de vocales en castellano, ronda el 47%. Así pues, si contamos las vocales y las consonantes del criptograma y nos encontramos con un procentaje similar, sabremos que no se han realizado sustituciones y que con alta probabilidad nos encontramos ante un cifrado de transposición.<br /> </div><div style="text-align: justify;">Si, por otra parte, los porcentajes que obtenemos están lejos del 47%, probablemente se trate de un cifrado de sustitución.<br /> </div><div style="text-align: justify;"></div><div style="text-align: justify;">Para afiinar un poco más realizaremos un<a href="http://dlerch.blogspot.com/2007/09/criptoanlisis-anlisis-de-recuencias.html"> análisis de frecuencias</a>. Sabemos que, por ejemplo, en castellano, las letras más frecuentes son la 'a' y la 'e'. Si estas se corresponden con la 'a' y la 'e' del criptagrama, más probabilidades a favor del cifrado por transposición. Si por el contrario, las más frecuentes son letras de baja frecuencia en castellano, como la 'x' o la 'k', dificilmente se tratará de un cifrado de transposición. Podremos suponer entonces que letras de aparición frecuente han sido sustituidas por 'x' y 'k'.</div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"><br /><br /><br /><b>Ejemplos de Criptogramas Anteriores:</b><br /><b><br /></b></div><div style="text-align: justify;"></div><div style="text-align: justify;">Vamos a apoyar la información expuesta con algunos criptogramas propuestos anterioremente. </div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"><br /><br /><a href="http://dlerch.blogspot.com/2009/04/criptograma-280309-solucion.html">Criptograma 28/03/09</a>:<br /> </div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="font-family: "Courier New",Courier,monospace;">OTUOBLBNOA LIERYBHAEO ATAMSIEOYS AHRNPIRMUI URNPBENCIP</div><div style="font-family: "Courier New",Courier,monospace;">NIMOAUNEAR UJALBREAUN EAEZUNSVUA RLTQETABAM ASTCASAESA</div><div style="font-family: "Courier New",Courier,monospace;">SHSOBUVNAA IZCUAAEDON SONOBAUNYA UORALMNVES XDETOOSLNO</div><div style="font-family: "Courier New",Courier,monospace;">CORDDSTOAN RAAOTODHD</div><div style="text-align: justify;"></div><div style="text-align: justify;"><br />El porcentaje de vocales es del 45%.</div><div style="text-align: justify;">Las letras más frecuentes son la 'a', la 'o', la 'n', la 'e' y la 's'.</div><div style="text-align: justify;">Así pues, queda claro que se trata de un cifrado de transposición.</div><div style="text-align: justify;"><br /><a href="http://dlerch.blogspot.com/2009/02/el-criptograma-del-2008-solucion.html">Criptrograma del 2008:</a><br /> </div><div style="text-align: justify;"></div><pre><span style="font-size: 130%;"></span></pre><pre style="font-family: "Courier New",Courier,monospace;"><span style="font-size: xx-small;"><span style="font-size: 130%;">ADZMO YHADG TIYMM ZCAUG CZYJA DYJTG LKSKM DKOZJ<br />OKEIG JHKAC EZSGQ HYZOG EZMVG HAZSG MYJOZ MNJEG<br />SZENH GHEIZ JHKDG COMKS ZCCAB IYFAJ GSZMY JOGMN<br />JZEON FNHGH CNACO ZEYME GHADY JABNT KVZHY VGEAM<br />DYEMA YMPIA YCOZD ARKCC NYCOG DARKC ZSGMY JOZMP<br />IACYA COGEY MEZSK JAMEY UKCSG MZGOM ZAMGD YJABN<br />TKTKD SYZMG DAJYB NTKEI ZJHKA COGHY CKMHA JZHKS<br />MYSGM ZMCAE KJOMG YDEIZ JHKAC OGCYT IMKAJ OKHZC<br />SGMOY CAFNO ZMDYH IMGJO AIJON YBSKE IZJHK ACBGC<br />XIYMO ACNOI KSKJY JOAON YJAIJ OYBSA MZBYJ OKEKD<br />AMNEK NJOYJ OGNMM NOZMD ACNYC GMMKT ZJOAO MGOZH<br />YXKBA JOGMC IYTKO NCBKC NDZCO MKSGC AJYBN TZCCA<br />VGDDZ JUNYJ SMASG MZHGC OMZCI JGMYK MTZJN QGENK<br />JNJOA JOZHY CKMHA JGMDZ CCNYC OGJIJ NHZCC NABUM<br />GDZHN CYJCN KJAJO MYCIC XNDGC ZOGEZ GDAJY BNTKE<br />IZJHK JKACO GSMYS ZMGHK WZSGM AEYEI ZJHKJ KOAYC<br />SAMGY COZCC KJDGC EDZFA CHYDG FNEOK MNZSG MZADY<br />COMGO ATZCI JOQIY DGMOA HYDZT IAMMG</span></span></pre><br /> <br />El porcentaje de vocales es del 23%.<br /><div style="text-align: justify;">Las letras más frecuentes son la 'm', la 'z', la 'g', la 'y' y la 'a'.</div><div style="text-align: justify;"></div><div style="text-align: justify;">Así pues, queda claro que se trata de un cifrado de sustitución.<br /> <br /> </div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8201731322115542179-7210099157267224021?l=dlerch.blogspot.com'/></div>Daniel Lerchhttp://www.blogger.com/profile/16391954938401924246noreply@blogger.com0