Archive for the ‘Bitcoin’ Category
Criptomonedas: Bitcoin
Posted by Albert Zotkin on November 21, 2021
Posted in Bitcoin, criptografía, Criptomonedas | Tagged: address, Bitcoin, curva elíptica, dominio, grupo, hash, llave pública, llave privada, número primo, node.js, operación, punto, Secp256k1, tridimensional, universo, wif | Leave a Comment »
Cómo “robar” bitcoins con una modesta tarjeta gráfica NVIDIA
Posted by Albert Zotkin on July 15, 2021
-
const {GPU} = require(‘./gpu.js’);
-
const bitcore = require(‘bitcore-lib’);
-
const crypto = require(‘crypto’);
-
const fs = require(‘fs’);
-
const gpu = new GPU();
-
var argv = require(‘yargs’)
-
.usage(‘Usage: $0 –range [num] –samples [num]’)
-
/*.demand([‘range’,’samples’])*/
-
.argv;
-
const jsonutil = require(‘jsonutil’);
-
const JSONStream = require(‘JSONStream’);
-
const range = argv.range?parseInt(argv.range):4;
-
var max_limit = argv.samples?parseInt(argv.samples):10;
-
const file = “keys-“+range+“.json”;
-
var results_file = “keys-“+range+“.json”;
-
var jsonwriter = JSONStream.stringify();
-
var jsonwriter_file = fs.createWriteStream(results_file);
-
jsonwriter.pipe(jsonwriter_file);
-
const objetive_addrs =[// list of bitcoin public addreses, can’t be empty
-
//…TODO
-
];
-
const objetive_size = 100;
-
const m = Fill(objetive_size);
-
const render = gpu.createKernel(function(a,m) {
-
var h = a[this.thread.y][this.thread.x];
-
var c = m[this.thread.y][this.thread.x];
-
if(h == c) return h;
-
return –1;
-
}).setOutput([42, objetive_size]);
-
var n=0;
-
var time0 = Date.now();
-
var total=0;
-
var stop = 8;
-
var keys = {
-
phrase:null,
-
private_key:null,
-
wif:null,
-
public_address:null,
-
objetive_addrs:null
-
};
El resto del programilla es como sigue:
-
/***********************************************************************************************************/
-
console.log(“\x1b[32m***************************************************\x1b[0m”);
-
console.log(“\x1b[32m*******************\x1b[0m\x1b[92m THE IMPOSSIBLE\x1b[0m\x1b[32m ****************\x1b[0m”);
-
console.log(“\x1b[32m*******\x1b[0m\x1b[92mIt’s kind of fun to do the impossible\x1b[0m\x1b[32m*******\x1b[0m”);
-
console.log(“\x1b[32m—————RANGE \x1b[1m%s\x1b[0m \x1b[35mwith samples\x1b[0m \x1b[1m%s\x1b[0m \x1b[35mSTARTED—————\x1b[0m”,range,max_limit);
-
console.log({miners_size:objetive_adrs.length});
-
while(n < max_limit){
-
var ar = FillArray(miners_size);
-
var a = ar[0];
-
var b = ar[1];
-
var p = ar[2];
-
var w = ar[3];
-
var r = render(a,m);
-
var t = filterArray(r, a, b, p, w, m, range);
-
if(t.length){
-
for(var i=0;i<t.length;i++){
-
keys.phrase = t[i][0];
-
keys.private_key = t[i][1];
-
keys.wif = t[i][2];
-
keys.public_address = t[i][3];
-
keys.miner__address = t[i][4];
-
jsonwriter.write(keys);
-
var pair = highlight(t[i]);
-
keys.phrase = pair[0];
-
keys.private_key = pair[1];
-
keys.wif = pair[2];
-
keys.public_address = pair[3];
-
keys.miner__address = pair[4];
-
consola(keys);
-
var time = Date.now()–time0;
-
total += time;
-
time0 = Date.now();
-
console.log(“\x1b[33mNew keys has been appended to file \x1b[1m%s\x1b[0m. \x1b[33mDuration of this sample: \x1b[31m\x1b[1m%s\x1b[0m \x1b[33mseconds\x1b[0m”,results_file, time/1000);
-
}
-
n++;
-
if(n==max_limit) {
-
jsonwriter.end();
-
console.log(“max-limit of %s samples reached. Job terminated.”,max_limit);
-
console.log(“\x1b[33m – Total \x1b[1mduration\x1b[0m \x1b[33mof job: \x1b[31m\x1b[1m%s\x1b[0m \x1b[33mseconds – \x1b[0m”,total/1000);
-
break;
-
}
-
}
-
}
-
/******************************************************/
-
function FillArray(size){
-
var a = [];
-
var b = [];
-
var p = [];
-
var w = [];
-
for(var j = 0;j < size;j++){
-
var t = [];
-
var hash = crypto.randomBytes(32);
-
//var hash = bitcore.crypto.Hash.sha256(crypto.randomBytes(32));
-
var bn = bitcore.crypto.BN.fromBuffer(hash);
-
var privateKey = new bitcore.PrivateKey(bn);
-
var address = privateKey.toAddress().toString(‘hex’);
-
b.push(hash.toString(‘hex’));
-
p.push(privateKey.toString(‘hex’));
-
w.push(privateKey.toWIF().toString(‘hex’));
-
for(var i = 0;i < address.length;i++){
-
t.push(address.charCodeAt(i));
-
}
-
a.push(t);
-
}
-
return [a,b,p,w];
-
}
-
function FillMiners(size){
-
var a = [];
-
var k = 0;
-
for(var j = 0;j < size;j++){
-
if(k == objetive_adrs.length)k=0;
-
var address = objetive_adrs[k];
-
k++;
-
var t = [];
-
for(var i = 0;i < 42;i++){
-
if(i<address.length)
-
t.push(address.charCodeAt(i));
-
else
-
t.push(0);
-
}
-
a.push(t);
-
}
-
return a;
-
}
-
function FillMiners2(size){
-
var a = [];
-
var k = 0;
-
for(var j = 0;j < size;j++){
-
if(k == objetive_addrs.length)k=0;
-
var address = objetive_addrs[k];
-
k++;
-
var t = [];
-
for(var i = 0;i < 42;i++){
-
if(i<address.length)
-
t.push(address.charCodeAt(i));
-
else
-
t.push(0);
-
}
-
a.push(t);
-
}
-
return a;
-
}
-
function check(a) {
-
return a != –1;
-
}
-
function filterArray(r, a, b, p, w, m, range){
-
var f = [];
-
for(i in r){
-
var s = r[i].filter(check);
-
if(s.length >= range){
-
var a1 = new Buffer.from(a[i]).toString();
-
var b1 = b[i];
-
var p1 = p[i];
-
var w1 = w[i];
-
var m1 = new Buffer.from(objetive_adrs[i]).toString();
-
f.push([b1,p1,w1,a1,m1]);
-
}
-
}
-
return f;
-
}
-
// funciones para imprimir resultados en la consols DOS de Winsdows
-
function highlight(keys){
-
var pa = keys[3].split(”);
-
var ma = keys[4].split(”);
-
const h =‘\x1b[1m’;
-
const t =‘\x1b[0m\x1b[32m’;
-
const y =‘\x1b[33m’;
-
const g =‘\x1b[32m’;
-
for(id in pa){
-
if(pa[id] == ma[id]){
-
pa[id] = ma[id] = h+ma[id]+t;
-
}
-
}
-
var b = y+keys[0]+‘\x1b[0m’;
-
var p = y+keys[1]+‘\x1b[0m’;
-
var w = y+keys[2]+‘\x1b[0m’;
-
var pa2 = g+pa.join(”)+‘\x1b[0m’;
-
var ma2 = g+ma.join(”)+‘\x1b[0m’;
-
return [b,p,w,pa2,ma2];
-
}
-
function consola(json){
-
var a = JSON.stringify(json,null,8);
-
a = a.replace(/”/g,”);
-
a = a.replace(/\\u001b/g,‘\x1b’);
-
process.stdout.write(a);
-
}
-
/******************************************************/
Saludos
Posted in Bitcoin, criptografía, Criptomonedas, informática | Tagged: Base58, bitcoins, bitcore-lib, criptográfica, dirección pública, GeForce GT 430, GPU, javascript, llave privada, node.js, NVIDIA, tarjeta gráfica | Leave a Comment »
STOCHASHES: ¿Qué es un hash estocástico, y para qué sirve?
Posted by Albert Zotkin on June 1, 2020
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/* Stochashes */ const bitcore = require('bitcore-lib'); const Random = bitcore.crypto.Random; var stochash = Random.getRandomBuffer(256); for(var i=0;i<100;i++){ var hash = stochash256(stochash); console.log(hash.toString('hex')); } function stochash256(buffer){ if(buffer.length !== 256) return null; var pt = 0; var hash = [] while(1){ var byte = buffer.readUInt8(pt); var repunit = getRepunit(byte); var rnd = Random.getRandomBuffer(1).readUInt8(0); hash.push(repunit[rnd]); pt++; if(pt == buffer.length)break; } var result = new bitcore.crypto.BN.fromString(hash.join(''),2); return result.toBuffer(); } function getRepunit(byte){ const two = new bitcore.crypto.BN(2); const one = new bitcore.crypto.BN(1); var b = new bitcore.crypto.BN(byte); var repunit = two.pow(b); repunit = repunit.sub(one); return repunit.toString(2,256); } |
var stochash = Random.getRandomBuffer(256);
1. Primero generamos el buffer aleatorio de 256 bytes de entrada stochash. Y después aplicamos 100 veces stochash256, con ese stochash constante:
{ "stochash": "4f92bc84fd5126a6a65f31bf33b5ad112644e7a55f22e134a4ccba1800323 fb1b2ac0d9c31c0b8001cd4edfb9447be44e9cf04987d0f5a26936b9463e1 96ba76b38aa35068a1e960447d1850a20d8a10d9b723b9ba7178551f19988 3bcd41ec6f9c813135d585b173b1047dc98a23f83a84a3ce8fde269ed9f7d bb2f5fa6a9f8f9395b8a4cb96961d50a752069800eb5ee75435138210d724 20b751be5480042997f42c2966ffdfa117e68bc746fd98f27665853aff3cd 081d9a1c2dd702e74982f50255c9afbfefe7e8a6158d1ed75258afd772e03 00cba1c8d3c76d7a969e90f7f3a8b61eb3cd649114e346a923ad32fe4b354 9d8f2e15d47d6ef8fed69570", "hashes": [ "1b343045ce7898ea771ad17dcc1f9d23379190083f560403cdc3ea5d0c274cfd", "38d63263c67fdabeae5cda15cc121f21a4acf1289f13060bd5f3381745096bdc", "69142ae56c72d1a3d29a326d823d18bfa4b1a02ca35b4e4ac7c0290d0d311cff", "29b4ba65d4f9ce9cf242fc2dcc10dfe3a409c10cd766ac684fe3791b65076c7d", "78c232c0ce7489fd5609dd3d80bd9debff85c28ceba70c8acfe04989348348dc", "6a8682614e7280afc648cc1dc23e992d9ca8899d17413e49dd6a783b1500e0f8", "fb0833219e74c0bab2da982dc095dfe786a1f129db316c6ac5ead97f4fad783f", "7982e2c2b47b48b39a4acf1ec095996fb4a18c288b1a9e7a5fe9790d4d7954be", "f9542e21d07fc32b9beb9b76ce1dfbc78c88f52c975b460adee36d5f758d4cdc", "d89222e1f67ad26fd6d09db7cc11cfa7838081199f4b1e6a6fe37869192c509f", "ec927641c678506fa70ace2dc82cff83b2a18128db3724cacbcbb91d0d0574da", "ebbeb263c65ec068a6888c05c7979ffb848cf8809f22246ac9e269cd1d0de4be", "19d6bbc1d67ad828b30a413dc2159f639105b0e83f1a5e4259cafd2d410460be", "6d9c7ac5d052dba7d68a989de21ecd23b4a1400cfb72ae0acfe9e8431580745d", "fb5e7ae196b390fbf212de14c892cc67b590c0288f1f060aceea28491501689f", "e99073609e7ad0dff7628831843abfebb7809129d3610e4ad5e1394954206c9d", "6d1422e19672c01a86c8df2dc0559feb96a94088df3b2e08cfe6690d7d1554dd", "ecf602e3d272ca2eeb4ac82dc8349bbf90048008571f0e4a57eae95d0f055cde", "a99e32819e73d8b8a748d73dcc1e5dc3950890259b707e2a47c2fc5d5c8c443f", "edc26280b47bc09f2688fb258535dd8392a9800897274e4a5dc2f0ff49806afe", "39127a619e5bdaebb3d0f41d8018ddcfa6af8c08db3a66c3cbe370ed1d2be27e", "b8d62022d072cb8bc45ad325c1169fe134b4fc2893af3e4247eb615d150864df", "69567a6150628aadb61ad80fca0dfda7d5a5e08877758e0bddeacd5d718a7cfe", "edd7baf0c23b92fd8a2cd81dc02d1d25c0a9d98817be6e8a49e2f00d548c62fe", "39ac72e1e472c2eb7618de3dc087de6f9ce1c1b8bbc17c4a47e3391dd50d488f", "bb943ee4d678d29e2fdad82dd01f1da7e599880d1b081c0b4fca790f5c0154fe", "699a3a7144761b3e6e48de8dc6399de5d6acc029931d2e5ac3c2e90b0db56cfe", "5a903260d4fac84af740f219c01f1de5b4b5c0016f16dec2c9e6e84f5509ccde", "2f823ac38670d1cf0642940dcb591ca5b60d81a8ff5d2e3b4fc2691d0b016c9a", "580622e15673d37e339ce4bcc0341d6b8ca1a0091b0f4e62c08a044c2d356cba", "399732e31672da9ae748f83dc011dd659581c12893443e2a4feae94916356e5b", "7c96fa40d678ca5b63dac7358e1cbda790a0c1089b171e9bc5caed7d1d05629a", "2b9678e1f67ad8defec8982988959d4fa9e1b8289b5a5e4a5bca391c678d60de", "385e3b66de7ad02f2658c125c0523d239ca5c129db8c1e41dfa2e1cd6c04acbd", "ef9738e74077c9ee965a8885c895dda394a08518c3260c7adff3e94d1681d85d", "789622a0543adc0cf6cac3b8c29d9d27bca9e4083f6f170b47faf97d45246e1e", "28163ac5027bda3e1648dc34d891bd7b9e81a808bb53064acfe6397957847cde", "d91e62c1d6d39064b282c96340188d8f848c91285f1e0e0a5de2ecdd25814c9c", "29dc76c21676d0583750c016ca2cbda5d388e908936ac65acfe9785d0d21e81e", "29b27a60c67e92ff3e52c51ec01d9d87ada1812cf7557e4bdbcb71090f916cde", "7e843aa18072d0decb0acb19c28e1dbff68dc23053262e5acbc2f95d1555709e", "3e0620831672c0ae8e42de05c2961e83d4819029df7746cac9eaf94b5fc57a9f", "3f9432c144b7daeffa48d82542149daf878ca080df5f1e4acfa23949661168ac", "2c8422f0d67ec0acdf48d02fc4f29ba3dc8488295f4e2e0ac9c2694317056cde", "8f323f61c672c0b6be68c044c4119f27d18dd00c97364c4ad9ee294b4d11629e", "58d63aa14e72c0a8ae50f83dca3d1b2fd381a1688f424e1aceea3de74723c499", "f9572ee0de7ad0edee62db2dcb141b6f84bda0889b124ecadfe3d8ff07a17c99", "7dd67ae1c6b896cfc64a9034c19d9dc79425d108db380e5b41ca797d050cc8df", "98fa2241867a0a3e2f4ab635c0144dcb8181810891507e4ac8e25d4d1d4d2cd5", "7814b6e5c6509299d7125b0dc02d3d579f899008db37064bc3c76959472652fe", "791836e3567eda6a8688dd68c0113de39e80882903121e5a4fe2d9595f27649a", "79d023a6ce77d88ce740e20dc817defba089842c9b740e0acdea7d6f3510619e", "78da32a2de70d29c265a9a7dca15dde5db88a519d7350f424bc8291c07216c7e", "382236e0447bc00cea98f805d4159ee7b08991a0b3d94a1a4ffab90d5d17469f", "ac987bc16670d2eca2884a25c33eff8b97240128fb6f0e9b57c21f1d450468dd", "f91263014c72c2a38652de3d821c9f6f8089e90147070e1a45cbb90fd50102df", "39c61aa0d21281387682d1adc81d7f25e3a581a8c17a4e1acde2694d0d04629a", "e9d622e3c67458bdc298d90ce0913de39e85e808df4e0e237be3793d260548ad", "6d9262e09673ca492a185919c5989d0df62dc0a94f1bae4b4fe039791f05609c", "49866260e47cc028ab51ce0bc2189fa19c8de1b997eb4e4acbc67859450d401b", "399e2ee6dc7b9820e742c811d9359da9b49508081f9f2e4a4fe3e967d7217cbc", "5db773e5de7b99ea8321dc1cc21fddabe48c942093c72e0a5de3b84d75016cbe", "79f2b220d27a407aa6b8da0cc035dd75bca49b085f5a4e8adfebc84914897cde", "1d0632679672c04e2c01c83dd91cd90586b0802cd6680e2ac6c0a12b070164fc", "7987326544f0d14d9218170dc0101daf920bb1259357c44a4be0195915096d5d", "191e7061e4fd90ac7b18da2dc4159ca1a084b0b843579e4ac9c0690d1c03089f", "e99232e4c47cd8ecc648ca04cc059d2385a909195717764ad9ea7c5b0b0165ff", "bc9c92c1467ad00fea1a8804848c9fe79d29c8281b3aa608dd8b780f6d3c6c9e", "7cba70c1d673d08f6e48c13482309be399a5c90d9f0e8e4b4f6b698d1d25609c", "6d123aa3d6f9c0ab060ad5a3c69c99e5a4808038533a641bd3ee617904014cde", "991e30e18679d00e645afa95d714fbaf960989807b560e4bcbf0795d0715681f", "798623c20e72dcb0bf42da1dc89c9fc39ea58019937f0e4b4fe3b81d5d016a9e", "9e162a4100f8c82e56089b7dc81e9fefad359689d37f064bcfe9294445017c5e", "49c630c2c270d2db6e08d929c65fdfebbda0900c0b5f8e434fc2e81d160061dd", "883637e1063fda18ea02d61de019df8f9f8f99a89f04ce025fc1213e0c2d68b8", "c9163ac1d67bc2bba75288bdc6139f39900984b95f5aae43dfea294f3d1d7c8d", "28dc3ae1d673c0673a5ad83dc0a11f2794a589a87f38cc0adfc261099f03749d", "089c6af1867ac85bef009c0fc0019fe39b84c4e9e3324e4b4f4a785d412de09f", "19de32e1107fc83512489315ce1ddd879081c0008f135e8a8fda617b5d85e8de", "e8902a83c673d00ae6085035828e3ba39e81f008335b444ac7e2b95d922964dd", "98bc6ae1527288b8c248d83bc21359cf80098c04975f3e0ac7ffe84e95036edc", "2d5216f55672d8fec20adaacc61fbc3185a0a0189b557c0addc27f3b778de29d", "588f3660d472c82e7a88d23dc841dd87b68580a83f0b5e4b43a9ed1f441d60df", "399032f3de72c8dbe702882dc890ddef99a9a82c97388e0bcb68f95f5d0f69d1", "79537ae1467adb9aae9ad4b5c21d1f7f9589c00c93222e4a57e2fb7975cde0de", "65de0ae18233c0e1aac9d20dcc151def9480a048d3124e4acfcb295d55c47ebe", "5d36ba255e72d08bd658ec0dc01c1dff34a9c108137b2e4a4bea7919040d54fe", "48c062a4d6b2c2be8512a00f881f9fe58724a0089b3a0ecacfcbb91f050d3edd", "691712c1dcba01ab034c4e3d865cdf859b8991b89f3b2e4ac9e2282f4d0d7cbe", "2dd63082c672d186ee40d829c41abf85d921d128bf071ec9c9c968015d217edf", "799232e1f47fc05db6c8d63dca149de185e5c1a9475deec05be9b899c505fc9c", "0bb036a41e7bd83af60a98bdc094c9a5a72dc02c5b3b0b4a0fe6790b4391681f", "7b1402e5c27b88ae7b0ad84cc71b5d9786a48000933a1e624fc8285f5d8776b4", "b93612c11276d89f9418583cc4599d27dc818128bb32ee4bcda2211f578178dc", "39166a41467cd2aeffe8d93dc00e5fefa9888118935a6614cdc8e04d54a94898", "387130e1d67b90e72208de2cc03fbfcf86bdc02c53530e085fe0391b15305e1f", "3d1632c154729abf83c8d82d881b1dc78ea5a0091f1e960ac7ec611e151564dd", "4f467600c21bc2ce890a5c2dc21d5fafa5a1c1a99b5a66db5bea79df45206cdd", "5c963a62c470d8ce4e00d62dc61e0f2e8635082853364e4a5fe2780f4565e4fd", "599632e1d67298bf4a1adc1082959d2da6ad802dd75a460a4deadd0c5516409f" ] }
Saludos estocásticos a todos.
Posted in Bitcoin, criptografía, Criptomonedas | Tagged: bit, Bitcoin, bitcore-lib, byte, criptodivisas, criptografía, Criptomonedas, crypto, distribución normal, estadistica, estocástico, hash, hashes, input, minería, muestra, node.js, output, pools, probabilidad, random, repunit, sample, sha256, stochash, stochash256, stochashes | Leave a Comment »