cryptography - How to verify a .Onion domain against a private key -
i working on project sell .onion (tor) domain names. process of generating domains similar mining bitcoins - rsa private keys generated en mass , if 1 randomly matches in wordlist - gets saved off somewhere , added database.
the problem here still slow process solo - in order me try , make collaborate exercise - want create online api / rest api allow people upload domains , private keys them sell on site.
the problem - don't quite know how verify domain name against private key.
eg: providing domain like
abcdabcdabcdabcd.onion
and key be: -----begin rsa private key----- miicxqibaakbgqcb+wlpxr8voujsycefspx+lfb3jorw9qlh1n38itqvms0rytcb +c7hfyqh2f8z67lobwvveyct51ykhb8n3alumyif3oxglmqjumifqmkfrylexzpj lepreb7+kmel9sx1sl4a2z0qjl4501ij0t5c3cdemovuqbpbttpuubj1rqieztiy aqkbgbwwdemoykaso17xjruf32cdyjcdktkj1glwrohxreo68j+74dqf55rnoyl/ 4okfjuma2wjjjasvrmvibd79vni3eb9mfnzdemoya6eiyo1vdemozenfrszkpgej vochbdig/flzscksademoeauauq3w8669du4fro9/al+1iudhakeay+kbk8hfso8z uttdlslt8//l+nbemmwf/i588egyywuupuvjd5xv6isadmdecjew/xf4wja5c91n lcfb/lxhsqjbampz2fzcupykhk6jretsyoq0ivqco5pn/0qwtwrubkrexnnvbyy+ uco2ocfrwsmvk4luwpgict5qw10bzfl8vducqatuv/s0znc+demow/7p5ojk5hwa +hrhcf5avw1aoqysgs0e9v+qdyijrbkg/bdemod00bttv9a9h3pofrm+demoqf2t lgqybgdemozbe+pgebfb6swkfx9px7+pnnsbk+mld6pryldfq2demor/cy4jqdya oyx51snwumjzkygemeucqqc8i6b3e06b9+++ngademo9f5khldr1wwsqqnnccdx5 n5vnlhj/0dgximm/bp1zpuk4/bmvkjnyd7d8zuz2cpor -----end rsa private key-----
could point me in direction of .net code can take private key, , verify domain provided authentic? https://github.com/lachesis/scallion github project (one of tools use - has code 'generate' domains , private keys - not sure how perform verification after fact)
never got answer this, did find way, using scallions on source code verify private key against onion address.
rsawrapper rsawrapper = new rsawrapper("d:\\pk.txt"); console.writeline(rsawrapper.onionhash);
not ideal - requires private key. inside rsawrapper - unsafe code 'something' public key determine der encoded value. important part of getting onion address.
public string onionhash { { return tobase32str(this.get_der_hash(),10); } } private byte[] get_der_hash() { var sha1 = new system.security.cryptography.sha1managed(); return sha1.computehash(this.der); //return tobase32str(hash); } public byte[] der { { byte[] der; int buf_size = rsa.size + 100; int size = 0; unsafe // must better way this! { intptr hglob = marshal.allochglobal(buf_size); void* ptr = hglob.topointer(); void** ptr2 = &ptr; size = native.i2d_rsapublickey(rsa.handle, (byte**)ptr2); if(size > buf_size) throw new indexoutofrangeexception("der large!"); der = new byte[size]; marshal.copy(hglob,der,0,size); marshal.freehglobal(hglob); } return der; } }
edit - woot : looks rsawrapper class cohesive , modular. able copy out - needs access openssl library, , has rsa.frompublickey(string s); method creating rsa.
so now, able do
rsawrapper rsawrapper = new rsawrapper("d:\\pubkey.txt", true); console.writeline(rsawrapper.onionhash);
took few months - got better answer set out get. can take public keys, , verify onion address matches public key. verify ownership of onion address, without risk of having send private key across network.
Comments
Post a Comment