TARDÍGRADOS

Ciencia en español -ʟᴀ ʀᴀᴢóɴ ᴇsᴛá ᴀʜí ғᴜᴇʀᴀ-

Archive for the ‘informática’ Category

Iconos para bloques en la blockchain de bitcoin

Posted by Albert Zotkin en febrero 27, 2020

Ayer, mientras ganaba algunos miles de euros minando bitcoins, se me ocurrió una idea gráfica, para identificar mediante una imagen a cada uno de los bloques en la blockchain.
Como cada bloque posee tres hashes principales de 32 bytes cada uno: el hash propio del bloque, el del bloque inmediato anterior, y el de la raíz del árbol Merkle de las transacciones., se me ocurrió lo siguiente: cada dígito de cada uno de esos tres hashes podría ser un código de color de una terna RGB, rojo, verde y azul, para cada pixel de la imagen. Pongamos un ejemplo. Elijamos el Bloque Génesis, es decir, el primer bloque de bitcoin que fue minado por el propio Satoshi Nakamoto. El objeto JSON de este histórico bloque es:

{
        "0": {
                "hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
                "version": 1,
                "previous_block": "0000000000000000000000000000000000000000000000000000000000000000",
                "merkle_root": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
                "time": 1231006505,
                "bits": 486604799,
                "fee": "0.00000000",
                "nonce": 2083236893,
                "n_tx": 1,
                "size": 285,
                "block_index": 0,
                "main_chain": true,
                "height": 0,
                "received_time": null,
                "relayed_by": null,
                "transactions": [
                        {
                                "double_spend": false,
                                "block_height": null,
                                "time": 1231006505,
                                "lock_time": 0,
                                "relayed_by": "0.0.0.0",
                                "hash": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
                                "tx_index": 0,
                                "version": 1,
                                "size": 204,
                                "inputs": [
                                        {
                                                "sequence": 4294967295,
                                                "script_sig": "04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73",
                                                "coinbase": true
                                        }
                                ],
                                "outputs": [
                                        {
                                                "n": 0,
                                                "value": "50.00000000",
                                                "address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
                                                "tx_index": 0,
                                                "script": "4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac",
                                                "spent": false
                                        }
                                ]
                        }
                ]
        }
}
Por lo tanto vemos que los tres hashes principales son:

                "hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
                "previous_block": "0000000000000000000000000000000000000000000000000000000000000000",
                "merkle_root": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",
los cuales son números de 64 dígitos en base hexadecimal, es decir, 32 bytes cada uno. Podemos diseñar una imagen en formato PNG de 64 x 64 pixels. Para ello vamos seleccionado ternas de dígitos para componer el RGB de cada pixel. Así tendremos que el primer pixel de nuestra imagen (posición superior izquierda será el RGB(4,0,0), porque 4 es el primer dígito en el hash de la Merkle root, y 0 para los otros dos. El siguiente pixel sería RGB(a,0,0), y los cuatro siguientes son RGB(5,0,0), RGB(e,0,0), RGB(1,0,0). Pero como esos dígitos son hexadecimales, sólo van desde el 0 al 15, en lugar de ir del 0 al 255, lo cual produciría un color bastante oscuro. Por lo tanto, le vamos a dar brillo a cada pixel duplicando cada componente RGB hasta completar el byte, es decir, seróa como multiplicar por 17 cada componente (dígito hexadecimal). Así nuestros pixeles, con brillo serían: RGB(44,0,0), RGB(aa,0,0), RGB(55,0,0), RGB(ee,0,0), RGB(11,0,0), y el ultimo pixel de la imagen PNG sería el RGB(bb, 0, ff). Es decir, nuestra imagen PNG para el Bloque Génesis sería esta:

ID imagen del Bloque Génesis de Satoshi Nakamoto

O sea, podemos crear la imagen dinámicamente mediante lenguaje PHP, creando una función que tome como argumentos esos tres hashes del bloque en un array. Yo escribí el código para una función que haga eso. Esa función es la siguiente:

function ImageFromHash3($hash){
if(strlen($hash[0])!=64 && strlen($hash[1])!=64 && strlen($hash[2])!=64) return '';
// Create a 64 x 64 image
$image = imagecreatetruecolor(64, 64);
$n=0;
$r = str_split($hash[0],1);
$g = str_split($hash[1],1);
$b = str_split($hash[2],1);
				
for ($y = 0; $y < 64; $y+=8){
for ($x = 0; $x < 64; $x+=8) {						
imagefilledrectangle($image, $x, $y, $x+8, $y+8, 
imagecolorallocate($image, hexdec($r[$n])*17, hexdec($g[$n])*17, hexdec($b[$n])*17 ));			   		
$n ++;			
}				 
ob_start();
imagepng($image);
$im = ob_get_contents();
ob_end_clean();
imagedestroy($image);
return '<img src="data:image/png;base64,'.base64_encode($im).'" />';					
}
Y así, la podemos presentar en nuestra página web. Pongamos un ejemplo más. El ultimo bloque validado por la minería de bitcoin, hasta la fecha, tiene una altura de 619122 (la altura n de un bloque significa el orden, o sea, que existen n bloques antes que él en la blockchain). Este bloque de fecha 26/2/2020 22:16:32, posee los siguientes tres hashes:

                "hash": "0000000000000000001159ec899185ec8f056b7655bf7898fef186454efde94f",
                "previous_block": "00000000000000000008e901529a41ef9350ff42166c8abeea80f6e708a46463",
                "merkle_root": "1adeb8334f75e32a335b19005871b2be3ac5555c661ce17b81131b0c43579a61",

y ha sido minado por la pool ViaBTC. La imagen generada con nuestra función sería esta:

ID imagen del bloque con altura = 619122

Como vemos la imagen ha sido creada dinámicamente en formato PNG con el lenguaje de programación PHP, y los bytes del rawdata de la imagen están codificados en base64, mediante la función base64_encode. Y el rawdata está en la variable $im. Es decir:

data:image/png;base64,iVBORw0KGg
oAAAANSUhEUgAAAEAAAABACAIAAAAlC+
aJAAAACXBIWXMAAA7EAAAOxAGVKw4bAA
ABWklEQVRoge2awY2DMBRE8SoNeEvwlk
ALUAKUACUkJUAJSwlQApSwtOASQgnZBm
YOOU0szTsOlqOnL32bH0KsML8kr0nO9j
nfzDeSM77eXP9xWECNBdRYQE1oyIOd5A
+SZ5Kz86Ql+UXyieTFV8ACaiygxgJqAr
vfMxK5+Q+kUfcDPmmmDefj2OGNIj5piq
+ABdRYQI0F1NxShxt4feJ+f93xRn3Ebw
prj0+a8Txgvj/xOVCTwVPxFbCAGguosY
CaWyaDoS4PME9HgHnecP9eXvgeX1d4/6
WdYX7PeGJUfAUsoMYCaiygJgyRzGFIvJ
H+vZP5Tzrwe8JPIvOliPOm9jnwmVhAjQ
XUFC8QpucLPpgP8o9txn06Pb7x8hceJK
0jfk9oJ5z/zfh3i6+ABdRYQI0F1ISmwv
f4a1phnsg9Pi24f7P1MeMvRI+E8+3EXz
AVXwELqLGAGguo+Qen00MzJKmE8gAAAA
BJRU5ErkJggg==
Saludos, me siento como bloqueado ya 😛

Posted in Bitcoin, Criptomonedas, informática, Matemáticas | Etiquetado: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , | Leave a Comment »

Minería de bitcoins explicada con lápiz y papel

Posted by Albert Zotkin en enero 30, 2020

Hola amigos de tardígrados. Hoy vamos a aprender a hacernos ricos en poco tiempo 🙂 En este pequeño tutorial aprenderemos cómo minar bitcoins desde cero, burlando así a las grandes granjas chinas de minería de criptomonedas.

Quizás yo no sea muy bueno en muchas cosas, pero con los años aprendí a conocerme a mi mismo bien, y descubrí que tengo ciertos talentos ocultos. Una de esas destrezas, que tenía oculta, es que soy capaz de adivinar cualquier contraseña en menos de un minuto sólo con el poder de mi mente 😛 ¿No te lo crees?. Mándame una dirección de correo electrónico tuya, y verás en tu sección de correos enviados, cómo, en poco tiempo (dependiendo del número de solicitudes de incrédulos), “me habrás enviado” un correo electrónico a albertzotkin@yahoo.com, en el que me dirás lo siguiente: “Esto prueba que sé tu contraseña y usé tu dirección de correo para enviarme esto”. Sí, amigo de Tardígrados, yo soy un superhéroe los días pares, y los impares un villano. A parte de esa destreza de adivinar mentalmente contraseñas, la cual resulta bastante sorprendente, teniendo en cuanto que soy un humano, también tengo otras cualidades ocultas, más sorprendentes aún que esa, si cabe, pero no te las voy a decir de momento, para que sigan siendo ocultas.

Hoy en día existen muchas criptomonedas, la mayoria están basadas en la tecnología del blockchain. Hasta la tostadora IoT que tengo en mi casa sería capaz de crear una criptomoneda. Sólo hay que ver que hasta Nicolás Maduro fue capaz de crear la criptomoneda Petro, con eso está dicho todo.

En este pequeño artículo que estoy escribiendo, me voy a centrar solo en el bitcoin. Hoy en día es posible comprar y vender bitcoins fácilmente, con lo que tú solito puedes llegar a enriquecerte, o a arruinarte a placer, especulando con esa moneda electrónica tan volátil. Las ventajas que tiene el bitcoin y otras monedas electrónicas, son que es un sistema descentralizado, y puede escapar fácilmente del fisco, pero a cambio, estás a expensas de fraudes, robos, y demás actividades encaminadas por terceros a dejarte sin dinero en tu billetera a cambio de nada más que disgustos. Pero, como vamos a partir de cero, es decir, de cero euros, nuestro disgusto de que nos roben cero euros sería menos del que sufriríamos si partiéramos de nuestros ahorros de toda la vida, o del dinero de la cesta de la compra.

Pero vayamos ya sin más tardar, al ajo. Para poder hacernos ricos con el bitcoin, lo primero que tenemos que hacer es conseguir una billetera (no digo monedero, porque hay ciertas personas con ciertos apellidos que me caen mal). Para ganar nuestro primer bitcoin, que a día de hoy esta a 8212.96 € en el mercado cambiario, tendremos nuestra billetera preparada para recibir moneditas calenticas recién minadas. La mejor billetera que puedes conseguir es la electrum. Una vez que hayas creado tu billetera de bitcoin electrum, guardarás tus claves offline, fuera del sistema, para que nadie que no seas tú, pueda hacerse con ellas y desplumarte. La electrum crea una clave muy peculiar, desde la que puedes acceder a tu billetera desde cualquier parte que posea conexión a internet, o con una única contraseña si la usas localmente desde tu dispositivo habitual. Dicha clave consiste en una secuencia ordenada de 12 palabras. Esa secuencia ordenada la puede memorizar, o la puedes guardar donde te plazca, pero siempre fuera del alcance de curiosos. Yo, por ejemplo, la clave de mi billetera electrum la tengo memorizada, pero también me hice un pictograma con esas 12 palabras de mi clave, porque a veces mi memoria me falla. El pictograma mnemotécnico de mi clave electrum, donde guardo algunos bitcoins, es este:

Si sientes el deseo que robarme mis criptomonedas, sólo tienes que adivinar a qué palabra corresponde cada uno de esos iconos, y voila!. Pero, si lo que deseas es enviarme algunos Satoshis, puedes hacerlo a mi clave publica:

un Satoshi es la cien millonésima parte de un bitcoin = 0.00000001 BTC. O sea que si un bitcoin se cambia actualmente por 8212.96 €, entonces 1 euro serían 12175.87 Satoshis. Lo de comprar y vender bitcoins, o con bitcoins, no tiene mayor misterio. Como habrás comprobado ya, incluso a la hora de recibir o enviar bitcoins con electrum, lo podemos hacer mediante los famosos códigos QR desde nuestros teléfonos móviles. Entonces, te estarás preguntando, cómo y cuándo vamos a empezar ya de una vez a ganar nuestros miles de Satoshis. La respuesta está en la minería de bitcoins.

La minería de bitcoins es una actividad mediante la cual van agrupando las nuevas transacciones en bloques, y estos bloques se unen a la gran cadena de bloques o blockchain. Los mineros usan potentes maquinaria de hardware a gran escala, para conseguir algún provecho, de lo contrario, esa actividad no sería rentable. Los mineros se comunican unos con otros mediante una red de nodos P2P, peer-to-peer. Usualmente lo hacen con el protocolo TCP estándar, el de los servidores web, pero no por el puerto 80 habitual, sino por los puertos 8333 o el 8332. Estos mineros de criptomonedas usan factorías llenas de cientos de procesadores fabricados y dedicados expresamente a realizar una única y sencilla operación matemática, pero han de hacerlo a gran velocidad para tener algo de probabilidad de encontrar la solución en un tiempo razonable para la rentabilidad económica. El problema con esos dispositivos es que, cada uno de ellos, es un monstruito muy ruidoso, bastante tragón de energía eléctrica, y se calienta bastante. Si juntamos en una nave industrial cientos de esos monstruitos computando a la vez sin parar las 24 horas del día, lo que obtenemos es una actividad super contaminante de ruido y calor, con energía desaprovechada por un tubo. La factura de la luz de un sólo día puede llegar a alcanzar miles de euros. La recompensa por resolver un bloque de transacciones de bitcoins es de algunas monedas, suficiente para conseguir rentabilidad.

¿En qué consiste esa sencilla operación matemática que tienen que realizar a toda velocidad esos procesadores para conseguir hacer negocio?. La solución de esa rutina operacional se llama Prueba de Trabajo. Los mineros, recolectan un conjunto de últimas transacciones del día, que están por ser confirmadas (validadas), y con ese conjunto de transacciones construyen un proyecto de bloque para ser añadido e integrado en la cadena blockchain. Junto a esas transacciones redactan la suya propia (transacción coinbase) para ganar la recompensa en el momento de dar con la solución, y todo irá incluido en el mismo proyecto de bloque. Pongamos un ejemplo concreto. Hace unos momentos, a las 17:55 de la tarde (hora de Benidorm 🙂 ), unos mineros chinos del pool AntPool han conseguido cuadrar (resolver) un nuevo bloque. Exactamente uno con el hash = 000000000000000000044b6c80648ead63c9ab7cad89f7841d6c1a420d34ba43. ¿Que qué es un hash?. Un hash es simplemente algo muy parecido a la huella de una cadena de caracteres. Existe una función hash256 que se aplica, para nuestro caso concreto, dos veces (iteración) sobre una cadena de 80 caracteres, correspondiente a la cabecera del bloque proyecto que proponen los mineros. Este bloque hallado es el número 614930 dentro del blockchain. Estos mineros chinos, en su granja con sus miles de “gallinas cibernéticas”, cacareando calientes sin parar, han puesto un huevo, por el que se están llevando al bolsillo 12.5 bitcoins, más una comisión de 0.2, es decir, un total de 12.7 bitcoins = 104304.6 euros (y eso lo hacen cada día, unas cuantas veces). La cabecera de 80 bytes, codificada en binario, de ese bloque es la siguiente:

0000000h : 00 00 00 20 9d 88 e1 40 67 f7 f0 10 db 58 5a 2f ; ... ...@g....XZ/ 0000010h : d7 28 bb c2 d8 1e e3 09 64 b7 0b 00 00 00 00 00 ; .(......d....... 0000020h : 00 00 00 00 82 e4 1c d2 3e c9 9f 27 d0 66 27 99 ; ........>..'.f'. 0000030h : c0 cc 88 11 35 1e 33 ed d0 33 6c bd 3c b5 11 79 ; ....5.3..3l.<..y 0000040h : 68 a5 e4 5e 9b 67 30 5e ff 32 12 17 74 c7 f9 01 ; h..^.g0^.2..t...
Si desglosamos la estructura de esa cabecera de 80 bytes, veremos qué parámetros la forman:

$version = 536870912
$previous_block = 0000000000000000000bb76409e31ed8c2bb28d72f5a58db10f0f76740e1889d
$merkle_root = 5ee4a5687911b53cbd6c33d0ed331e351188ccc0992766d0279fc93ed21ce482
$time = 1580230555
$nbits = 387068671
$nonce = 33146740

Si ahora aplicamos la función hash256 dos veces sobre la cadena en binario de esos 80 bytes de la cabecera, obtenemos lo siguiente:
hash256(hash256(cabecera))= 000000000000000000044b6c80648ead63c9ab7cad89f7841d6c1a420d34ba43
que coincide exactamente con el hash del bloque encontrado por los mineros del Antpool. Esto significa que hemos comprobado por nosotros mismos que ese block es válido. Ya de entrada, notamos algo raro en el hash de ese bloque. Los hash256 son todos cadenas alfanuméricas (aparentemente aleatorias, porque no hay manera de saber a qué cadena de caracteres corresponde un hash determinado) de exactamente 64 caracteres, o lo que es lo mismo, de 32 bytes (independientemente del número de caracteres de la cadena sobre la que se aplica). En realidad, vemos que todo hash es un número expresado en base hexadecimal. Lo raro que notamos, es pues que existan tantos ceros seguidos a la izquierda de ese hash, de hecho es muy raro que un hash256 empiece siquiera por un único cero. En realidad, esa rareza de muchos ceros al inicio del hash es precisamente lo que se busca con tanta codicia por los mineros. Los dos parámetros clave para los mineros son el nbits y el nonce. Este ultimo es un valor que el minero está autorizado a cambiar, para ir probando hasta hallar un hash que tenga muchos ceros al inicio y que cumpla una condición. La condición la dicta el parámetro nbits. Mediante una sencilla operación el nbits se transforma en un número en base hexadecimal llamado target. Para el caso concreto del ejemplo de bloque que estamos analizando, como nbits = 387068671, el target, con esa sencilla operación, resultará ser

target=1232ff0000000000000000000000000000000000000000
Como tanto el hash del bloque como el target son números enteros (expresados en base hexadecimal, pero números), la condición, que exige Prueba de Trabajo es una simple pregunta: ¿Es el hash del bloque menor que el target?. Para contestar afirmativamente a esa pregunta los mineros empiezan a calcular el doble hash256 de la cabecera, desde nonce = 0. Y la palabra Bingo! suena bien alto en la sala cuando se halla un hash que es menor que el target.

En nuestro caso, para un nonce = 0, obtendríamos un doble hash256 de:
hash256(hash256(cabecera))= a625bbfaf77163b53d1e30c30e8d01a7b0e00fb396b08f475d1c3eda7ecaf133
Es fácil ver que ese hash es mayor que el target. Por lo tanto, un bloque con ese nonce = 0 no sería un bloque válido. Es imposible saber qué valor de nonce cumpliría la condición. En nuestro ejemplo el nonce = 33146740 hace que se cumpla la condición, y por la tanto el bloque queda validado.Todo es puro azar, una lotería, vamos. Cuanto más juegues a la lotería más probabilidad tienes de que te toque. En eso consiste la minería de criptomonedas, con trastos ASIC, tragando hashes a velocidades endiabladas. Ludopatía pura y dura.

La velocidad de los procesadores mineros debe ser muy alta si quieren conseguir rentabilidad. Actualmente se usan en las granjas de minería de bitcoins esos chips tipo ASIC. En cada granja puede haber instalados cientos de esos ruidosos aparatos. Compremos uno de esos aparatos y pongámonos a minar bitcoins por nuestra cuenta. Podemos adquirir uno baratito por 100 euros, el AntMiner S7

Este aparatito tiene una velocidad de cálculo de 4.73 TH/s, es decir, 4.73 x 1012 hashes por segundo, pero chupa electricidad por un tubo, ya que consume con una potencia eléctrica de 1210 vatios. Teniendo en cuenta que en España el precio del kilovatio-hora es aproximadamente de unos 0.13 euros, ese aparatito, por sí solo, durante 1 día consume 29040 kilovatios-hora, es decir, un coste por día de 3.7 euros.

¿Cuál es la probabilidad de que a la primera obtengamos un doble hash256 que cumpla esa condición de ser menor que el parámetro target?. Es como tirar un dado y ver si obtenemos un 6 a la primera tirada, pero en el caso de los hashes existirían muchos más lados que los seis de un dado normal. ¿Cuántos exactamente?. El máximo número entero de 64 cifras en representación de base hexadecimal es este:

\displaystyle  m = \text{ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff},

y si lo expresamos en base decimal obtendremos el número de 81 cifras

\displaystyle  n = 115792089237316195423570985008687907853269984665640564039457584007913129639935.

Esto significa que el número de caras de ese supuesto dado gigantesto sería de n+1. El target que se usó en el hallazgo de la solución para ese bloque era, como he dicho antes,

\displaystyle  \text{target}=1232\text{ff}0000000000000000000000000000000000000000,

que expresado en base decimal es

\displaystyle  \text{target}_{10}= 1743137387349479903250289511035208906392689711805104128,

Esto significa que la probabilidad de que un hash256 sea menor o igual a ese target es precisamente

\displaystyle  p = \frac{\text{target}_{10}}{n+1} = 1.5054028291837063 \; \times  \; 10^{-23}

Nuestro aparatito para minar (el AntMiner S7) tiene una velocidad de v = 4.73 TH/s, por lo tanto, en un día, la probabilidad de resolver ese bloque sería de

\displaystyle  p_d = p \times v \times 24  \times 60 \times 60 = 6.15216 \; \times  \; 10^{-6}

Si no me he equivocado en los cálculos, resulta ser una probabilidad demasiado baja, se necesitaría un promedio de 445 años para hallar la solución. ¿Entonces, cómo podemos ganar dinero nosotros si no nos unimos a uno de esos pool de minería?. Parece obvio que, por nuestra cuenta, las probabilidades de obtener ganancias están muy próximas a cero. De hecho los mineros en pools incluso, a veces, agotan todos los nonces, y necesitan incluir extra nonces en los proyectos de bloque para seguir probando suerte.

Y hasta aquí puedo escribir … 😛 … de momento.

Posted in Bitcoin, Criptomonedas, informática, Matemáticas | Etiquetado: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , | Leave a Comment »

Cómo romper los códigos criptográficos RSA: factorizacion de semiprimos y las raices rectangulares

Posted by Albert Zotkin en noviembre 18, 2016

riemann-estela
En la actualidad, usamos algunas de las propiedades de los números primos para codificar mensajes, de modo que ningún intruso pueda leer fácilmente nuestras comunicaciones. Para ello usamos la propiedad siguiente de los número semiprimos: Elegimos dos números primos suficientemente grandes, y obtenemos el semiprimo multiplicándolos. El número semiprimo será parte de la llave pública para nuestro método de encriptación, y con los dos números primos se construyen las llaves privadas. Dado un semiprimo suficientemente grande, es prácticamente imposible hallar en tiempo razonablemente corto, sus dos factores primos. Eso es incluso casi intratable usando supercomputadores. esta dificultad se llama Problema RSA.
Si estás interesado en desencriptar los códigos que protegen el acceso a tarjetas de crédito bancarias o a páginas web seguras, quizás estés interesado en participar en esta clase de Competición de factorización RSA. Veamos un semiprimo catalogado por la RSA y que tiene un premio de 100.000 dólares para quien halle sus dos factores primos. Este semiprimo es el RSA1024, es decir, posee 1024 cifras binarias (309 cifras decimales):

\displaystyle \text{RSA}_{1024} = \\ 13506641086599522334960321627880596993888147560566702752448514385152651060 \\ 48595338339402871505719094417982072821644715513736804197039641917430464965 \\ 89274256239341020864383202110372958725762358509643110564073501508187510676 \\ 59462920556368552947521350085287941637732853390610975054433499981115005697 \\ 7236890927563
Si queremos factorizar con éxito un número semiprimo de la RSA, lo primero que debemos hacer es estimar lo grande que serán sus dos factores primos. Así, para ese RSA1024, los dos factores primos estarán muy cerca relativamente de su raíz cuadrada, es decir, números primos cercanos a las 154 cifras decimales, o lo que es lo mismo, números primos de entre 100 y 200 cifras decimales. Por ejemplo, si uno de los primos resulta tener 120 cifras decimales, el otro estaría muy próximo a las 188. Pero, veamos, ¿cuántos números primos hay que tengan entre 100 y 200 cifras decimables?. Usemos la función contador de números primos, p(x), aproximémosla a x/log(x), porque según Gauss, esa es una buena aproximación para un x suficientemente grande. Así los números primos que tienen entre 100 y 200 cifras decimales son aproximadamente :

\displaystyle 2.17 \times 10^{197}
Supongamos que disponemos del superordenador más potente del mundo, el reciente Sunway TaihuLight, capaz de operar a máximo rendimiento, que es de 125.43 petaFLOPS. Conseguiría resolver el número RSA1024 1 petaFlop es 1 opración de coma flotando por cada femtosegundo. 10¹5 femtosegundos son 1 segundo. En total tardaríamos un maximo de :

\displaystyle 2.17 \times 10^{197} \times 10^{-15} = 2.17 \times 10^{182} \; \text{segundos,}
un tiempo demasiado largo como para tener alguna esperanza de llegar en vida hasta el final del cálculo y verlo con nuestros propios ojos 😛

Veamos ahora qué es una raíz rectangular. Cuando calculamos una raíz cuadrada en realidad estamos calculando dos números, pero como ambos son iguales, no nos damos cuenta que en realidad es un par de números. Por ejemplo, la raices cuadradas de 64 son el par (8, 8):

\displaystyle \sqrt{64}=(8,8)
Podemos calcular para 64 su raices rectangulares, ya que si nos fijamos 64 puede escribirse como 2 elevado a diferentes exponentes, es decir:

\displaystyle 64 = 2^6 = 2^3 \times 2^3 =  2^2 \times 2^4 = 2^1 \times 2^5
Es decir, el número 64 posee dos pares de raíces rectangulares y un par de raíces cuadradas:

\displaystyle 64 = (8,8) = (4,16) = (2,32)
Así, para entendernos, pondremos el par de exponentes de las raices rectangulares entre corchetes, de modo que siempre tendremos la equivalencia:

\displaystyle 1 = \left[\frac{3}{6}, \frac{3}{6}\right] = \left[\frac{2}{6}, \frac{4}{6}\right] = \left[\frac{1}{6}, \frac{5}{6}\right]
Con esto, lo único que estamos haciendo es dividir la unidad en dos partes, de modo que su suma sea esa misma unidad. ¿Por qué el número 64 posee esas raices rectangulare y no otras?. En realidad posee muchas más, pero las que he escrito arriba son las que dan raices enteras. Veamos estos casos:

\displaystyle 64 = 64^{\tfrac{1}{4}}\times 64^{\tfrac{3}{4}}= (2\sqrt{2}) (16\sqrt{2}) \\  64 = 64^{\tfrac{1}{5}}\times 64^{\tfrac{4}{5}}= (2\sqrt[5]{2}) (16\sqrt[5]{2^4}) \\
en general, para cualquier par de número enteros m y n, que sean coprimos,tendremos las raices rectangulares de un número N:

\displaystyle N= N^{\tfrac{m}{n}}\times N^{1-\tfrac{m}{n}}
Veamos ahora cómo aplicamos esto a la factorizaación de números RSA: sean los números primos p = 486023 y q = 598727, por lo que su producto es N = 290995092721. Empezaremos nuestros cálculos con su raíz cuadrada:

\displaystyle \sqrt{N}=539439.60989252541168458987732327730802813682656081\ldots
Igualmente sabemos que ha de ser:

\displaystyle p= N^{\tfrac{m}{n}} \\  q= N^{1-\tfrac{m}{n}}

y puesto que sabemos los valores de p y q, es fácil resolver m y n:

\displaystyle \frac{m}{n}=\frac{\log p}{\log(pq)} \\ \\ \\  1-\frac{m}{n}=1-\frac{\log p}{\log(pq)}=\frac{\log q}{\log(N)}
Por otro lado, si pensamos un poquito, nos daremos cuenta de que factorizar un número RSA no es muy difícil en principio, la dificultad reside en que los números primos, p y q, que forman el semiprimo N, sean muy grandes. Así, es incluso posible presentar una ecuación matemática con la que podemos resolver cualquier número RSA, y es esta:

\displaystyle \mathrm{mcd} (N, \lfloor\sqrt{N}\rfloor !)=\min (p,q) (1)
Aquí N es producto de los dos primos p y q, mcd es el máximo común divisor de dos números, \lfloor\ r\rfloor ! es el factorial de la parte entera del número real r. Podemos incluso optimizar un poco esa ecuación (1) si usamos el primorial en lugar del factorial,

\displaystyle \mathrm{mcd} (N, \lfloor\sqrt{N}\rfloor \#)=\min (p,q) (2)
Si N ya es en principio un número muy grande (más de 1024 digitos binarios), el factorial (o el primorial) de la parte entera de su raíz cuadrada será incluso más grande aún, prácticamente intratable. De ahí que las fórmulas (1) y (2) aunque sean correctas, no son muy útiles para el cálculo. En realidad, para calcular un mcd de dos números primero hay que factorizar esos dos números. Es evidente que factorizar N es más fácil que factorizar el primorial de la parte entera de su raíz cuadrada.

Posted in informática, Matemáticas | Etiquetado: , , , , , , , , , , , , , , , , , , , | Leave a Comment »

En el cálculo estocástico de las órbitas gravitatorias en el problema de los dos cuerpos, las ondas gravitacionales no existen

Posted by Albert Zotkin en julio 11, 2016

Hola amigo de Tardígrados. Hoy vamos a calcular, de diversas formas, las órbitas de dos cuerpos que gravitan el uno alrededor del otro. En realidad, dos cuerpos de masas m1 y m2, gravitan alrededor de un centro común, llamado baricentro (o centro de masas). Si los vectores de posición son r1 y r2, el baricentro será el apuntado por el vector:

\displaystyle R =\frac{m_1r_1+m_2r_2}{m_1+m_2}

Voy a programar una simulación (una animación en Flash) escribiendo unas pocas lineas de código en actionscript, en la cual veremos el movimiento orbital de esos dos cuerpos. Para ello, yo usaré el software Flash CS4 de Adobe (Abode Flash Profesional). La intención de diseñar esta pequeña simulación no es sólo ver la evolución gravitatoria del problema de los dos cuerpos, sino de ver cómo las órbitas decaen en dicha simulación debido a algo insólito: la perdida de información computacional. Esto significa que las órbitas de los dos cuerpos pierden poco a poco energía gravitacional, pero esa pérdida no se disipa en forma de ondas gravitacionales, sino que simplemente se expresa en ese decaimiento orbital hasta que los dos cuerpos solisionan.

Pero, empecemos ya a programar nuestra pequeña simulación de los dos cuerpos orbitales: abrimos nuestro programa de Adobe Flash CS4,

1. Creamos una animación en la versión de flashfile (actionscript 2.0). 2. Creamos tres videoclips, dos para cada uno de los dos cuerpos orbitales, y un tercero para el centro de masas. A los videoclips de los cuerpos los llamaremos a1 y a2, y al del centro de masas, cm. Los videoclips a1 y a2 serán dos circulos de distinto color y de pocos pixels de radio. Y el videoclip cm poseerá un radio mínimo, el suficiente para ser visto como un punto destacado sobre el fondo de la animación. Cada videoclip en una animación Flash posee una serie de propiedades, y una de esas propiedades son sus coordenadas espaciales bidimensionales, (_x, _y), dentro del plano de la animación. Por ejemplo, el videloclip correspondiente al primer cuerpo cuya masa es m1, que hemos llamado a1, posee, en la animación que he hecho yo, las siguientes coordenadas espaciales iniciales: a1._x = 160, a1._y = 185. En el sistema de referencia bidimensional usado en Flash, el origen de coordenadas está en la esquina superior izquierda del plano general, y los valores positivos para la abscisa _x corren hacia la derecha, mientras que los valores positivos de la ordenada _y corren hacia abajo. La unidades de medidas de las distancias se expresan en pixels.

Escribamos ahora todo el código de actionscript para nuestra animación. En primer lugar, escribiremos el código para cada uno de los videoclips cuando se cargan al inicio. Para el viceoclip a1 tendremos las siguientes condiciones iniciales:

load.a1

puesto que hemos definido propiedades como la masa y la densidad para ese cuerpo, dibujaremos el circulo que representa a dicho cuerpo a escala, según el valor relativo de esos paramétros. Así, como escribo en el código de arriba, su anchura a escala, _width (que es de igual valor que su altura, _height), la calculo así:

\displaystyle \mathrm{\_width}=20\sqrt[3]{\frac{4\pi \times \mathrm{mass}}{\mathrm{ density}}}
Igualmente, para el videoclip a2 tendremos el código inicial de carga siguiente:

load.a2

Observamos también, en estos códigos de carga de las condiciones iniciales, que está definida la velocidad inicial para cada cuerpo. Como aún no hemos escrito el código para la interacción gravitatoria, esas velocidades iniciales no serían modificadas, y por lo tanto los dos cuerpos permanecerian en movimiento inercial, rectilíneo uniforme. Cabe reseñar también dos cosas más. Primero, que he introducido unas variables, rx, ry, que uso para guardar los últimos valores de las coordenadas espaciales. Segundo, que la velocidad de cada cuerpo al ser una magnitud vectorial, la he separado en sus dos componentes ortogonales en el sistema de referencia. Así, por ejemplo, para este último videoclip a2, las componentes de su velocidad son speed.x = -1, speed.y = 0, y eso quiere decir que ese cuerpo se movería inicialmente e inercialmente hacia la izquierda, mientras que su componente en el eje vertical, al ser 0, indica que no se movería inercialmente por dicho eje.

Escribamos seguidamente el código de las condiciones iniciales de carga para el videoclip cm, que representa el centro de masas de los dos cuerpos anteriores:

cm

Aquí en este código, vemos cómo hemos escrito las coordenadas del centro de masas de los dos cuerpos. Ahora nos falta la rutina principal de la animación en la que escribiremos las ecuaciones para la interacción gravitatioria de esos dos cuerpos. Puesto que es evidente que estamos usando formalismos de gravitación clásica Newtoniana, hay que decir el movimiento inercial de esos dos cuerpos se rompe cuando interactuan gravitacionalmente, y eso significa que cada uno sentirá una aceleración cuyo valor será directamente proporcional a la masa del otro cuerpo e inversamente proporcional al cuadrado de su distancia. Es decir, la aceleración gravitatoria que siente el cuerpo a1 debido a la presencia del cuerpo a2 será:

\displaystyle a_{12}= \frac{G m_2}{r^2}

y recíprocamente la aceleración que siente a2 será:

\displaystyle a_{21}= \frac{G m_1}{r^2}
Por lo tanto, ya estamos en condiciones de escribir el código de la rutina principal para la interacción gravitatoria:

update3

Esta rutína (función) la he llamado update3, y posee un único argumento de entrada, el argumento m, que es una referencia a un videoclip, ya sea el a1 o el a2. Esta función devuelve (return) el valor de la variable r, es decir, la distancia actual entre ambos cuerpos. Vemos que la tarea principal de esta rutina es el cálculo de la aceleración del campo gravitatorio, como ya he especificado arriba en a12 y en a21. Una vez que se ha calculado esa aceleración, la descomponemos en sus componentes ortogonales según los dos ejes del sistema de referencia, y convenientemente escaladas, las restamos a las componentes de la velocidad. ¿Por qué hay que restar la aceleración a una velocidad?. Es decir, ¿por qué realizo los cálculos m.speed.x -= accel_x, m.speed.y-=accel_y?. Pues simplemente, se ha de realizar esa resta porque una aceleración no es más que un incremento o decremento de una velocidad por unidad de tiempo. En otras palabras, la aceleración no es más que la primera derivada de una velocidad respecto al tiempo. Después, en el código de esa rutina, igualmente resto la componente de la velocidad de la componente espacial, y se hace por la misma razón. Una velocidad no es más que un incremento o decremento de una distancia por unidad de tiempo, es decir, es la primera derivada del espacio respecto al tiempo. Con esta última substracción ya hemos actualizado las coordenadas espaciales de cada cuerpo según la interacción gravitatoria, aplicada a su movimiento inercial. Este cálculo con la función update3 se ha de hacer en cada uno de los frames (fotogramas) de la animación. En la que yo he realizado, el número de fotogramas por segundo (fps) lo he puesto a 100, y eso quiere decir que cada centésima de segundo hay que actualizar y calcular y dibujar todo para presentar la animación en tiempo real al espectador. Así, la rutina en actionscript para cuando el cursor de la animación pase por cada frame, será la siguiente:

enterframe

donde en la ultima línea de código controlo la posible colisión de los dos cuerpos, parando la animación cuando la distancia r sea menor que los tamaños relativos de cada círculo. El control de colisiones de videoclips en Flash tambíen se puede hacer con una función predefinida que se llama hitTest, pero yo he preferido definir mi propia función de colisión. Pero, aquí está el meollo de toda esta animación del problema de los dos cuerpos. Se supone que las órbitas de los dos cuerpos, que siguen la Ley de la Gravitación Universal de Newton, deberían ser estables, y por lo tanto deberían seguir trayectorias elípticas o circulares si no hay otras fuerzas externas que las perturben. Pero, lo sorprendente de esta pequeña animación que he realizado es que al ver como evolucionan esas órbitas observamos que poco a poco los dos cuerpos se van aproximando el uno hacia el otro hasta que acaban colisionando. ¿por qué ocurre eso?. La clave está en los incrementos (aceleraciones) que he substraido a las velocidades y de los incrementos substraidos (velocidades) a las coordenadas espaciales. Para que las órbitas fueran exactamente estables, sin que decayeran poco a poco, los incrementos a substraer deberían ser infinitesimales, es decir, unas cantidades muy próximas a cero. Pero, entonces deberíamos aumentar el número de frames por segundo hasta valores que no serían computables.

En la animación que yo he realizado hay algunos parámetros auxiliare más, que no he especifico, porque no tienen mucha importancia. Ahora solo resta hacer una captura de pantalla de la animación y convertirla en un gif animado, ya que WordPress ya no admite archivos Flash de extension swf:

tbp

Observamos con estupor que lo que la ciencia actual llama ondas gravitacionales, emitidas por pulsares binarios que son observados decayendo orbitalmente, es simple y llanamente una pérdida de información cuántica. El problema es que la mecánica cuántica no admite que los sistemas puedan perder información de forma irrecuperable, pero en esta pequeña animación Flash vemos cómo eso es posible en un universo cuya evolución es calculada en cada micro-estado y en intervalos infinitesimales de tiempo que quizás coincidan con tiempos de Planck. La conclusión más dramática que hemos de hacer de todo esto es que las ondas gravitacionales no existen en nuestro universo, y por lo tanto que el supuesto observatorio LIGO (advanced LIGO) nos la está metiendo doblada al afirmar que han descubierto evidencias directas de dichas ondas. Sólo una mente ingenua y simple podría creerse semejante patraña. Cualquier persona con una inteligencia mediana podría comprobar por si misma cómo ese supuesto observatorio no puede detectar movimientos vibratorios de amplitudes tan ínfimas como la milésima parte del radio de un protón. ¿Dónde está el Principio de Incertidumbre que es pieza central de la Mecánica Cuántica, y que la Relatividad General parece querer ignorarlo propugnando un espacio-tiempo infinitamente continuo?. Incluso si no fuera un fraude tan brutal ese que nos quiere meter LIGO, tampoco sería una prueba directa de la existencia de esas ondas gravitacionales, por la sencilla razón de que no existe ningún otro medio independiente de saber que esas supuestas ondas vienen de donde dicen ellos que vienen, y producidas por la causa que ellos dicen que son producidas. El único argumento que usan para afirmar tan rotundamente que esas ondas son reales es que coinciden en forma con las de los libros de texto de la Relatividad General. Si existieran otros medios de comprobar esos supuestos hallazgos, como por ejemplo señales luminosas observables con telescopios ópticos o señales radioeléctricas observables con radiotelescopios, de las supuestas fuentes cósmicas generadoras, entonces y sólo entonces podríamos empezar a creer en ellos. Pero mientras sigan diciéndonos los “listillos” de LIGO que esas ondas proceden de la colisión de dos agujeros negros, estarán intentando metérnosla doblada. Cuando digan que han observado la colisión de un pulsar binario, y a LIGO ha llegado la perturbación gravitacional y a los distintos telescopios ópticos el destello luminoso de esa colisión, entonces y sólo entonces, los que no somos idiotas del todo, empezaremos a creer en la existencia de ondas gravitaciuonales. Mientras tanto, hay que conformarse con mirar con estupor a este universo computacional y observar boquiabiertos que no sólo la interacción gravitatoria está sujeta a perdidas de información cuántica, sino todas las demás. Y todo esto nos indica que es muy probable que nuestro universo es simplemente una gigantesca simulación fractal que está siendo ejecutada en un superordenador cuántico. Que nuestro universo sea una gigantesca simulación no significa que no te duela tu dolor de muelas. En realidad ocurriría que todo en este universo simulado seria real para nosotros, pero sólo sería virtual para los hipotéticos espectadores externos a nuestro universo que contemplan esa simulación.

Saludos

.

Posted in Astrofísica, Cosmología, curiosidades y analogías, Física de partículas, Fractales, Gravedad Cuántica, informática, Matemáticas, Mecánica Cuántica, Relatividad | Etiquetado: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , | Leave a Comment »

¿Es posible comprimir 4 terabytes de datos en tan sólo 16 bytes?

Posted by Albert Zotkin en mayo 12, 2016

La respuesta a la pregunta del título es sí. Hola amigos de Tardígrados. Hoy voy a hablar de un método poco estándar de comprimir información binaria sin perdida. Este método es simplemente una curiosidad que se me ocurrió el otro día. Lo llamaré Compresión Estocástica de Datos Binarios, CEDaBit.

Supongamos que tenemos el siguiente archivo jpg de la Mona Lisa:

Mona_Lisa

que es una imagen de 560 pixels de ancho por 864 de alto. Es decir, sin comprimir, en total tenemos 483.840 pixels, y si cada pixel se puede describir por 3 bytes, tendremos en total una imagen de 1.451.520 bytes, y como cada byte consiste en 8 bits, tendremos una imagen de 11.612.160 bits. Pero esa imagen está codificada y comprimida en un archivo JPG, por lo tanto no son raw data (datos primarios), el tamaño es mucho menor. En dicho archivo existen también datos de cabecera y cola en los que se almacena más información. Si queremos “comprimir” en un CEDaBit todo el archivo JPG, debemos “comprimir” una cadena de 46.474 bytes. ¿Cömo lo haremos?.

Supongamos que queremos comprimir a un CEDaBit de 16 bytes. Para ello, lo primero que tenemos que hacer es calcular un hash de esos datos. Yo usaré un hash muy conocido llamado MD5, y para calcular dicho hash usaré una página online que posea una herramienta de cálculo, por ejemplo esta: Online MD5.

Subo el archivo a dicha página, y me calcula el siguiente hash para dicho archivo: 9E00544CEE3B677CA2E826980D9CF02A. Es decir, me da una cadena de 16 bytes, que es su MD5, es como la huella característica de ese archivo en concreto. Cada archivo de datos binarios posee un hash que casi es único, digo casi porque en realidad conjuntos de datos muy distintos pueden poseer el mismo hash, y a eso se le llama colisión. Pero, es muy probable que para ese archivo de ese tamaño que he usado no existan muchas colisiones de su hash MD5. Existen miles de páginas en internet y aplicaciones que calculan todo tipo de hashes para cadenas de bytes, pero no encontrarás ninguna que haga la tarea inversa. Es decir, calcular una cadena de bytes desde su hash no es trivial. De hecho, existen infinitas cadenas que resultarían de un mismo hash. ¿Cómo podemos saber cual es nuestro archivo al expandir un hash en una determinada cadena de bytes?. Tenemos que saber por otros medios cual es el tamaño del archivo que queremos recuperar. Por ejemplo el archivo jpg de la Mona Lisa de arriba sabemos que posee 46.474 bytes, ni uno más ni uno menos. Por lo tanto, tenemos 371792 bits, es decir, tenemos un número binario de 371792 bits. Así pues para recuperar nuestra Mona Lisa desde su Hash 9E00544CEE3B677CA2E826980D9CF02A, sólo tenemos que ir variando los ceros y los unos de esa cadena de 371792 bits y a cada paso calcular un hash y ver si coincide con el del archivo. ¿Cuántas variaciones de ceros y unos posee una cadena de 371792 bits?. Pues, precisa y exactamente posee tantas variaciones como representa ese mismo número binario. Por ejemplo, el número binario 111, que son 3 bits, representa al número 8, que es 23, y posee exactamente 8 variaciones de ceros y unos, es decir, 000, 001, 010, 011, 100, 101, 110, 111. Por lo tanto, nuestra Mona Lisa posee exactamente 2371792 variaciones de ceros y unos. Un número muy superior al de partículas subatómicas en nuestro universo observable. Supongamos que tenemos un superordenador capaz de calcular un trillón de esas variaciones binarias por segundos y de decidir a cada paso si ha encontrado una solución (coincidencia de hash). Incluso a esa velocidad de cálculo, tendríamos que esperar miles de trillones de veces la edad de nuestro universo (13 mil millones de años) para ver completadas todas las variaciones binarias, y poder afirmar con seguridad que hemos recuperado nuestra Mona Lisa desde su hash. El número 2371792 posee 111.921 dígitos en el sistema decimal, y por muy rápido y potente que sea nuestro super ordenador, la tarea de expandir ese hash en la cadena original de bytes es una tarea imposible. Pero, si nuestro ordenador es un ordenador cuántico de más de 371792 qubits, ese cálculo se podría hacer en unos pocos minutos, con lo cual, posiblemente, mediante esa computación cuántica, obtendríamos una carpeta de colisiones, con unos pocos archivos de igual tamaño, y todos con el mismo hash. Uno de ellos sería nuestra Mona Lisa.

Posted in curiosidades y analogías, informática, Matemáticas, Mecánica Cuántica | Etiquetado: , , , , , , , , , , , , , , , , , | Leave a Comment »

LISA Pathfinder: el enésimo intento de probar la existencia de ondas gravitacionales que fallará de nuevo

Posted by Albert Zotkin en diciembre 1, 2015

Hoy la ESA (Agencia Espacial Europea) ha lanzado desde la Guayana francesa el satélite LISA Pathfinder, llamado a abrir la vía a un futuro observatorio espacial capaz de detectar las famosas ondas gravitacionales teorizadas por Albert Einstein. Un cohete Vega ha puesto en órbita con éxito al LISA Pathfinder, construido por Airbus Defense & Space en el marco de un proyecto de la ESA.

Una vez más, todo ha sido un éxito, menos el hallazgo de la existencia de las ondas gravitacionales. El proyecto LISA (Laser Interferometer Space Antenna) es un proyecto conjunto de la ESA y la NASA para detectar ondas gravitacionales. Estas ondas son una predicción de la Relatividad General de Einstein, y sólo se tienen evidencias indirectas de su existencia. Pero, el método científico no admite las pruebas indirectas como válidas, requiere evidencias directas. El decaimiento orbital observado en pulsares binarios es simplemente una evidencia indirecta de esa predicción relativista, es indirecta porque ese decaimiento orbital podría tener otra causa muy distinta a las ondas gravitacionales. Y efectivamente ahí está el meollo de la cuestión. Nadie se atreve a cuestionar la Relatividad General. Nadie tiene lo que hay que tener para decir que las ondas gravitacionales son una predicción errónea de la Relatividad General. Ese decaimiento orbital observado en púlsares binarios es simplemente la evidencia directa de que existe pérdida de información cuántica en toda interacción gravitatoria. La naturaleza (aún no sabemos muy bien cómo) realiza inmensos cálculos cuánticos, pero esos cálculos no poseen una precisión infinita. Es pues esa pérdida de información cuántica la causa real de que exista decaimiento orbital. Esto se puede demostrar fácilmente programando una simulación de dos cuerpos orbitando entre sí. Si, por ejemplo, aplicamos frame a frame, como si de una cadena de Markov se tratara, unas ecuaciones para describir órbitas circulares, comprobaremos, con asombro que los círculos no serán exactos, y que a cada revolución los cuerpos estarán cada vez más próximos. Eso es así porque, en un proceso de Markov no existe memoria de los estados pasados del sistema. Para que una órbita fuera exactamente circular, la naturaleza debería guardar de alguna forma todo el número π con toda su precisión infinita, y eso es imposible.

Por lo tanto, la demostración de que no existen las ondas gravitacionales simplemente está en la constatación del hecho de que el número π es un número irracional, o la constatación de que la longitud de una órbita elíptica no puede ser calculada exactamente, por el hecho de que su cálculo requiere resolver una integral elíptica completa de segunda clase.

Cuando los físicos teóricos se den cuenta de que, aunque las leyes naturales obedezcan a formalismos matemáticos exactos que incluyan constantes numéricas irracionales o procesos no lineales, la naturaleza sólo puede computar discretamente con precisión finita los procesos naturales que resultan de esa aplicación de sus leyes, y eso se traduce inevitablemente en pérdida de información cuántica, entonces, y sólo entonces la física teórica empezará a resolver seriamente sus problemas.

Saludos

Posted in Astrofísica, Gravedad Cuántica, informática, Matemáticas, Mecánica Cuántica, Relatividad | Etiquetado: , , , , , , , , , , , , , , , | 8 Comments »

Un intento de investigar la profundidad computacional de nuestro universo

Posted by Albert Zotkin en septiembre 16, 2015

fractal-univser

Hace ya algún tiempo hice una pequeña animación en flash, en la que mostraba cómo una pequeña simulación de interacción gravitatoria entre dos cuerpos es suficiente para convencernos de que existe pérdida de información, y eso se traduce en decaimiento orbital (acortamiento del periodo orbital, estrechamiento de la órbita): Aquí os dejo una pequeña captura del programa SWF en acción, que he subido a youtube:

Esa animación está gobernada por un sencillo programa informático (escrito en actionscript). En dicho programa uso la clásica ecuación de Newton de la gravitación universal para el cálculo de la aceleración. Las coordenadas espaciales de los dos cuerpos, calculadas fotograma a fotograma, deberían de dar trayectorias elípticas estables según las leyes de Kepler, pero se observa cómo poco a poco los cuerpos aproximan sus periastros hasta llegar a colisionar. Lo curioso de todo eso es que esa aproximación progresiva, que se puede traducir como pérdida de energía gravitacional, no está programada en el actionscript, sino que emerge por la imprecisión de los registros informáticos que almacenan los datos de la computación. Es decir, aunque las ecuaciones matemáticas que expresan la ley de gravitación son exactas y dan órbitas estables, su ejecución en un ordenador con registros finitos deja de ser exacta para pasar a mostrar degeneración orbital a lo largo del periodo de evolución del sistema gravitacional binario que simula.

Para los incrédulos, mostraré sucintamente las rutinas que escribí en el actionscript de la animación. En primer lugar presento la función que actualiza las coordenadas espaciales de cada uno de los dos cuerpos del sistema binario (podría ser un pulsar binario, como el PSR B1913+16, por ejemplo). Esta rutina es llamada siempre antes de que el programa dibuje cada fotograma:

function update2(m)
{

var cm_x;
var cm_y;
if(_root.r_frame==null){
cm_x=Stage.width/2;
cm_y=Stage.height/2;
}else{
cm_x=_root.r_frame._x;
cm_y=_root.r_frame._y;
}

var r = Math.sqrt(Math.pow((m._x-m.target_body._x),2)+Math.pow((m._y-m.target_body._y),2));
var accel = 30*m.mass*m.target_body.mass/Math.pow(r,2);
var cosx=(m._x-m.target_body._x)/r;
var cosy=(m._y-m.target_body._y)/r;
var accel_x = accel*cosx;
var accel_y = accel*cosy;
var s=1;
m.speed.x-=accel_x;
m.speed.y-=accel_y;
m._x+=m.speed.x-cm_x+Stage.width/2;
m._y+=m.speed.y-cm_y+Stage.height/2;

s=(m._y-m.target_body._y)<0?-1:1;
m._rotation=s*Math.acos(cosx)*180/Math.PI-90;

}

y seguidamente, presento las rutinas de lo que tiene que hacer cada cuerpo en cada frame, así como sus condiciones iniciales:

onClipEvent (load) {
speed = new Object;
speed.x=0;
speed.y=0.1;
mass=3.0;
density =1;
_width=20*Math.pow((3/(4*Math.PI))*mass/density,1/3);
_height=_width;
/*
_width=mass*4;
_height=mass*4;
*/
target_body=_root.a2;
//_visible=false;
body_type=1;//2 star, 1 planet
gotoAndStop(body_type);
this.rx=this._x;
this.ry=this._y;

}

onClipEvent (enterFrame) {
if(this, hittest(this.target_body))
_root.pause=true;

if(_root.pause or !_visible)return;
_root.update2(this);
}

Señoras y señores, en otras palabras. Lo que hasta ahora se viene llamando ondas gravitacionales es simplemente una falacia más. Dichas ondas no existen en nuestro universo. El decaimiento de las órbitas de los sistemas binarios, y por extensión, de cualquier sistema gravitatorio, es simple y llanamente debido a una pérdida de información cuántica en la computación que la naturaleza hace. Aunque nuestro universo podría ser infinito y eterno, el aumento de entropía en él sería un signo inequívoco de esa pérdida de información cuántica. Nuestro universo es un holograma, un autómata celular, no es la última realidad profunda. Pero, alguien podría preguntarse : “¿cómo es posible que si el universo es infinito y eterno pueda ser al mismo tiempo un holograma, un autómata celular?. Esos automatas celulares requerirían unos registros cuánticos infinitos”. Esa pregunta es muy razonable, pero un universo infinito y eterno no está en contradicción con que sea una simulación ejecutada desde registros cuánticos finitos. Sólo se requiere que la simulación del universo sea un holograma fractal. Veamos, este video de Musicians With Guns en el que nos presenta un fractal infinito, pero obviamente ejecutado desde un ordenador (cuyos registros, sabemos sin duda, que son de capacidad finita):

Un fractal, como el que nos ha presentado Musicians With Guns, no es más que una sencillita ecuación matemática acompañada de una lista de condiciones de inclusividad, y todo ello define lo que es el conjunto fractal (es decir, un conjunto de elementos que cumplen ciertas condiciones). Cuando dibujamos el fractal, los pixeles pertenecientes al fondo (elementos que no pertenecen al conjunto fractal) se pintan con un color y los pixeles que representan a elementos del conjunto se pintan de otro color que contraste con el primero, de modo que podamos destacar con facilidad el fractal del fondo.

Saludos

Posted in Astrofísica, Autómatas celulares, Cosmología, Gravedad Cuántica, informática, Inteligencia artificial, Matemáticas, Mecánica Cuántica, Relatividad | Etiquetado: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , | Leave a Comment »

Algunas pistas para saber si nuestro universo es una simulación informática

Posted by Albert Zotkin en septiembre 13, 2015

Simulation-Theory

Nuestro universo podría ser una especie de Matrix, es decir, una gigantesca simulación por ordenador. El ordenador donde se estaría ejecutando la simulación de nuestro universo podría ser un ordenador cuántico con una memoria de al menos unos 1080 qubits activos.

¿Podemos investigar si nuestro universo es una simulación creada en un simple ordenador cuántico?. Hay varios caminos para saber si eso es así o no. Una forma, que se me ocurre, sería prestar atención a pulsares binarios. Un pulsar binario es un sistema estelar en el que a menudo un pulsar y una estrella enana blanca orbitan el uno alrededor del otro. Se ha observado que los pulsares binarios pierden energía gravitacional con el tiempo, y eso se ha identificado como una prueba de la existencia de ondas gravitacionales, tal y como predice la Teoría General de la Relatividad. Dicha pérdida de energía gravitacional se evidencia en que la pareja orbital se acerca lentamente, con lo cual el periodo de rotación es cada vez menor. Por ejemplo, para el pulsar binario PSR B1913+16 se ha observado que el periodo orbital decae según esta gráfica de una parábola:

orbital-decay

Veamos ahora si es posible explicar ese decaimiento orbital mediante la hipótesis de que la naturaleza realiza cálculos orbitales cuánticos. Para ello debemos saber cómo trabaja un ordenador cuando hace una computación clásica. Existen una serie de registros en los que el ordenador almacena los datos de entrada, y después cuando aplica unos algoritmos a esos datos obtiene unos datos de salida que también almacena en unos registros. Pero, los registros no poseen precisión infinita, sino que poseen un limite finito. Por ejemplo, el número π sólo podría ser almacenado numéricamente hasta cierta cifra. Y ya empezamos vislumbrar en qué consiste ese decaimiento orbital. Fijémonos en la ecuación clásica del periodo orbital de dos cuerpos de masas M1 y M2 que orbitan, según las leyes de Kepler, a lo largo de una elipse:

\displaystyle T = 2\pi\sqrt{\frac{a^3}{G(M_1+M_2)}} (1)

donde a es es semieje mayor de la trayectoria elíptica.

¿Por qué, a cada revolución, el periodo T se va acortando?. Por la sencilla razón de que los registros que usa la naturaleza no pueden almacenar toda la información con una precisión infinita. Una parte muy importante de esa imprecisión sucesiva la tiene el número π. Supongamos que por cada revolución completada, la naturaleza debe ajustar el valor del semieje mayor según el ultimo valor obtenido para el periodo orbital. Es decir, la naturaleza debe reajustar la órbita de forma recursiva a cada paso así:

\displaystyle a = \sqrt[3]{\cfrac{G(M_1+M_2)T^2}{4\pi^2}} (2)

gas

El problema es que no hay “registros naturales” que puedan almacenar el valor exacto del número π ni de cualquier otro número irracional, con lo cual la órbita elíptica se reajusta siempre a la baja (decaimiento orbital) en cada revolución.

Para el caso que tratamos, la ecuación recursiva sería la siguiente:

\displaystyle a_n = \sqrt[3]{a_{n-1}^3} (3)
Otra forma de interpretar esa pérdida de información cuántica, que produce decaimiento orbital, es considerar que en nuestro universo se produce siempre un aumento de la entropía. Por otro lado, la mecánica cuántica no admite como correcta ninguna solución que se base en la perdida de información cuántica.

La conclusión terrorífica es que nuestro universo podría ser una gigantesca simulación informática, un gigantesco autómata celular. Todo universo en el que exista aumento global de la entropía tiene bastantes papeletas para ser un universo simulado, un universo virtual.

Saludos

Posted in Astrofísica, Autómatas celulares, Cosmología, Gravedad Cuántica, informática, Inteligencia artificial, Matemáticas, Mecánica Cuántica, Relatividad | Etiquetado: , , , , , , , , , , , , , , , , , , , , , , , , , | 2 Comments »

Un universo eterno y transfinito: una foliación conforme del espaciotiempo

Posted by Albert Zotkin en septiembre 7, 2015

Foliación transfinita de la conciencia de Ridley

Foliación transfinita de la conciencia de Ridley

Nuestro universo podría poseer la forma de una hiperesfera transfinita. Para ver esto fijémonos en lo siguiente (que ya traté en un post anterior). La serie infinita N = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + … es divergente ya que su suma es N = ∞. Pero, puede ser regularizada, como demuestro en el link anterior, para dar una suma de N = -1/2. Es decir, la función Zeta de Riemann toma el valor -1/2 cuando la variable es cero:

\displaystyle N = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +\dots = \zeta(0) =-\frac{1}{2}\\
Esta suma nos sugiere que el infinito matemático, ∞, en la recta real, coincide con el número real negativo -1/2, y -∞ coincidiría simétricamente con 1/2. Si partimos de un sistema de referencia cartesiano de dos dimensiones, tendremos que los dos ejes ortogonales podrían ser recorridos, partiendo desde el origen de coordenadas, en dos posible direcciones. Para el eje de abscisas, podríamos alcanzar el infinito, por el camino largo (hacia la derecha) hasta llegar al punto (-1/2, 0). O también podríamos alcanzar dicho punto, que representa al infinito, por el camino más corto (andando hacia la izquierda). Sin embargo, si andamos en dirección derecha, desde el origen o cualquier punto de abscisa positiva, (x,0), no podríamos llegar a los puntos situados entre el punto (-1/2, 0) y el (x,0) ya que el infinito actuaria como barrera infranqueable para seguir el camino y cerrar el círculo.

Saludos transfinitos a todos

Posted in Astrofísica, Cosmología, curiosidades y analogías, Fractales, Gravedad Cuántica, informática, Matemáticas, Relatividad | Etiquetado: , , , , , , , , , , , , , , , , , , , , , , , , , , , | 2 Comments »

Nuestro universo no es una simulación por ordenador pero tú sí

Posted by Albert Zotkin en enero 14, 2015

La física teórica actual nos lleva a divagar sobre cuestiones tan absurdas como por ejemplo “¿somos una simulación de ordenador?”. Lo peor de todo esto es que se lo toman en serio, se crean debates por televisión, conferencias, simposios, talleres, se escriben artículos, muchos artículos, y dicen que todo es un debate científico. La culpa de todo este sinsentido la tiene una teoría llamada Mecánica Cuántica. Esa teoría en la que se basa la metateoría llamada Modelo Estándar permite que nuestra imaginación explote y se expanda hacia terrenos inhóspitos y “absurdos”. En el modelo cosmológico estándar, también llamado, modelo Lambda-CDM, ó ΛCDM (en inglés es Lambda-Cold Dark Matter), sí, ese que usa la teoría del Big Bang, existe un pequeño cabo suelto desde el cual los divagadores pueden proponer que nuestro universo fue creado (diseñado) por alguien (¿Dios?), y que ese alguien no sólo se conformó con crearlo sino que se “divierte” observando su creación (nos observa). Incluso hay quien afirma, que no sólo observa su creación sino que interactua de vez en cuando con ella (¿milagros?).

Todo esto sería muy gracioso si no fuera porque muchos se lo toman muy en serio. A mi me gusta respetar todas las creencias religiosas, pero cuando la ciencia intenta suplantar la religión, me da un ataque de risa. Obviamente los rezos y plegarias de muchos creyentes van dirigidos a su Dios (el creador de la simulación por ordenador) para que interactue con ellos y solucione sus problemas. Desgraciadamente, en este universo no existe la magia, y los milagros brillan por su ausencia. Todo obedece a las leyes naturales (leyes de la física), las cuales son inviolables, inexcusables, inexorables. Cuando una piedra cae por causa de la gravedad universal desde lo alto de una montaña hacia el valle, no podrá ser detenida con rezos ni ruegos, sólo con algo dentro de la ley natural que perturbe su trayectoria.
Múltiples universos dentro de un fractal

Múltiples universos dentro de un fractal

Nuestro universo no es una simulación por ordenador, sino que es real, por una sencilla razón ontológica: todo tiene una causa real y natural, y no existen causas incausadas. Imagina un personaje virtual que evoluciona en un mundo virtual (tipo Matrix). ¿Cómo podría saber ese personaje que en realidad vive en un mundo virtual, simulado?.

Si algunos sustituyen la religión por la ciencia para afirmar que vivimos en una simulación de ordenador, yo me arrogo el derecho a usar la lógica y el discurso de Bertrand Russell para afirmar que:

La religión se basa, principalmente, a mi entender, en el miedo. Es en parte el miedo a lo desconocido, y en parte, como dije, el deseo de sentir que se tiene un hermano mayor que va a defenderlo a uno en todos sus problemas y disputas. El miedo es la base de todo: el miedo a lo misterioso, el miedo a la derrota, el miedo a la muerte. El miedo es el padre de la crueldad y, por lo tanto, no es de extrañar que la crueldad y la religión vayan de la mano. […] Tenemos que mantenernos en pie y mirar al mundo a la cara: sus cosas buenas, sus cosas malas, sus bellezas y sus fealdades; ver el mundo tal cual es y no tener miedo de él. Conquistarlo mediante la inteligencia y no solo sometiéndonos al terror que emana de él. Toda nuestra concepción de Dios es una concepción derivada del antiguo despotismo oriental. […] Un mundo bueno necesita conocimiento bondad y valor; no necesita el pesaroso anhelo del pasado, ni el aherrojamiento de la inteligencia libre mediante las palabras proferidas hace mucho por hombres ignorantes. Necesita un criterio sin temor y una inteligencia libre. Necesita esperanza en el futuro, no el mirar hacia un pasado muerto, que confiamos que sea superado por el futuro que nuestra inteligencia puede crear.

Siguiendo la lógica y el conocimiento que Russell desplegó en su obra Why I Am Not a Christian, podemos aportar al menos tres argumentos en contra de la afirmación “vivimos en una simulación”:

Contra el argumento cosmológico que afirma que existe una Causa Primera Universal, podemos alegar que en el terreno de la ciencia ese argumento tiene poco peso. Si todo ha de tener alguna causa, entonces Dios debe tener una causa. Por el contrario, si puede haber algo sin causa, entonces bien podría nuestro universo no haber necesitado causa alguna para existir (universo eterno e infinito), por lo tanto no sería necesario ningún Dios para explicar ni su existencia ni su evolución (en esto piensa actualmente Stephen Hawking)

Para el argumento de las Leyes Naturales, podemos afirmar que si existe alguna causa por la que Dios dictó esas leyes naturales, entonces él mismo debe estar sometido a esa causa o ley externa y por lo tanto, Dios mismo sería un intermediario. Pero, entonces Dios no nos sirve porque no es el último que dicta la ley. Este argumento tampoco se sostiene.

En cuanto al argumento teleológico, que es una especie de principio antrópico, el cual afirma que todo en el mundo está hecho para que podamos vivir en él, y si el mundo variase un poco, no podríamos vivir. Es decir, este argumento dice que el mundo y todos nosotros estaríamos dentro de un Plan Divino. Pero entonces ese Plan Divino sería una autentica mierda, viendo la miseria y el sufrimiento que hay en el mundo. ¿En realidad alguien se cree que este mundo ha sido creado para vivir en él?. Yo podría diseñar un mundo mas confortable y feliz, donde las enfermedades, el sufrimiento y los fanatismos, producto de la irracionalidad y la animalidad, no pudieran existir por ley natural. ¿Qué clase de Dios tan imperfecto creó este valle de lágrimas?, ¿para qué?. Este argumento teleológico o antrópico tampoco sirve, se cae por su propio peso y su ingenuidad.

En resumen. Nuestro universo no es ninguna simulación por ordenador, aunque se le pueda parecer. Es un valle de lágrimas, donde reina la injusticia, y el sufrimiento. En realidad, este universo es bastante inhóspito, y parece casi un milagro que pueda existir algo siquiera parecido a lo que llamamos vida. Desde un punto de vista científico, ó más exactamente desde la termodinánica, los organismos vivos son sistemas que tienden a disminuir su entropía, en supuesta perfecta contradicción a las “leyes naturales”. ¿Cómo?, ¿dónde surgió la vida?, ¿por qué? ¿Quién ordenó esto? son preguntas que sólo la ciencia y no religión debe responder. Evidentemente, el principo antrópico es una especie de ingenuidad institucionalizada, una auténtica bobería. ¿Se pregunta una ameba por qué existe ella o por qué el universo es como es?. Nuestro universo es como es y punto, y si fuera de otra forma también sería como es.

Saludos

Posted in Astrofísica, Autómatas celulares, Cosmología, curiosidades y analogías, Física de partículas, Fractales, Gravedad Cuántica, informática, Inteligencia artificial, Matemáticas, Mecánica Cuántica, Relatividad | Etiquetado: , , , , , , , , , , , , , , , , , | 1 Comment »

 
A %d blogueros les gusta esto: