Bitcoin Forum
April 15, 2024, 06:09:29 AM
 News: Latest Bitcoin Core release: 26.0 [Torrent]
 Home Help Search Login Register More
 Show Posts Pages: [1] 2
 1 Alternate cryptocurrencies / Announcements (Altcoins) / Re: [WDC] Worldcoin | 0.17.1 Released! | AuxPoW w/ LWMA diff algorithm. Resync Req. on: September 17, 2023, 03:51:36 AM If a well-designed website, a setup application for the wallet, a mobile wallet, and another WDC explorer like wdcexplorer.com are prepared for this project, I believe the project has the potential to reach great heights. I can assist with all of these. If you are interested, please send a DM, and we can start creating the test applications right away. @WorldCoin
 2 Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: November 09, 2021, 12:23:49 AM I've shared the basic pseudo code for RSA Bruteforce below. Can you please write a basic pseudo-code for this method?Code:GenerateRSAKeys()   p => random big prime, below 64bits   q => random big prime, below 64bits   e => random small prime, below 16bits   k => random small integer, below 16 bits   N = p * q   d = (k * ((p - 1) * (q - 1)) + 1) / e   (e, N) => Public key   (e, d, p, q) => Private keyRSAEncode(m, e, N) // m => message, e and N are public key   h ≡ m ^ e mod NRSADecode(h, d, N) // h => encrypted message, d is part of private key   m ≡ h ^ d mod NRSACrack_GetPrivateKeyFromPublicKey(e, N, minPrimeBitsLength)   bitLength = GetBitsLength(N)   k = 2   // iterator uses sieve algorithm   primes = all64BitsPrimes.Select(p => GetBitsLength(p) >= minPrimeBitsLength && GetBitsLength(p) <= (bitLength - minPrimeBitsLength))    // Example Primes buffer uses 4GB memory, all below 64Bits primes use 1TB memory   // use only odd numbers bit array   // max 256 cycles   index = -1   for primesBuffer1 of primes     index++     for primesBuffer2 of primes.NextTo(index) // next buffers from index, including index. buffer. if you use ModMul, remove this line       for p of primesBuffer1         for q of primesBuffer2 // if you use ModMul, remove this line           bitLengthA = GetBitsLength(p)           bitLengthB = GetBitsLength(q)           bitSum = bitLengthA + bitLengthB           if (max(bitLengthA, bitLengthB) >= bitLength && bitSum <= bitLength)             if (p * q == N) // or (N % p == 0) or ModMul(N+1, 10, p) == 10               d = (k * ((p - 1) * (q - 1)) + 1) / e               return (e, d, p, q)For RSA this code results much faster. I expect you to write basic pseudocode for Kangaroo. Thanks.Code:RSAHacking_GetPrivateKeyFromPublicKeyUsingModPowNoPrimeTable(e, N)   k = 2   SqrtN = Sqrt(N)   if((SqrtN & 1) == 0) SqrtN++   for(p = SqrtN; p > 2; p-=2)     if (true/*You can use more filters for p*/ && ModPow(2, p-1, p) == 1 && ModMul(N+1, 10, p) == 10)       q = N / p       d = (k * ((p - 1) * (q - 1)) + 1) / e       return (e, d, p, q)[moderator's note: consecutive posts merged]
 3 Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: November 05, 2021, 03:33:27 PM Hello, thank you to everyone who contributed to this project.I want to try something and I need ModPow function for Int type.All Mod functions use P.Can a faster version be made for b=2?I want to calculate 2 ^ e % mFor int type like this:Code:int ModPow(int b, int e, int m){ int result = 1; if (1 & e) result = b; while (1) { if (!e) break; e >>= 1; b = (b * b) % m;//ModMul if (e & 1) result = (result * b) % m;//ModMul } return result;}
 5 Local / Proje Geliştirme / Re: Bitcoin; Algoritma Üzerine Yöntemler on: January 10, 2021, 07:22:31 PM Türklerin zeka problemi olduğu için illa private key i bir listede istiyor. Halbuki private key lere sadece bir çakışma bulursan ihtiyacın olur. Diğer durumlarda hangi aralığı taradığın bilgisini saklaman yeterli olur. 2 ^ 32 bitlik bir çözünürlük ile kaldığın yeri saklaman yeterli olur. Private key i yalnızca bir çakışma bulduğunda üretirsin. Fonksiyonunun pub keyi üretme hızı daha düşüktür. Her defasında private key i de ürettiğin için hızın çok düşüyor. Ben i7 makinemde 1-3M Key hız alıyorum kendi yöntemimle...
 6 Local / Proje Geliştirme / Re: Bitcoin; Algoritma Üzerine Yöntemler on: January 09, 2021, 09:22:28 PM @Kuz3y Arkadaşım bu liste zaten blockchain'deki bakiyeli adres listesi... Zaten tümünün bakiyesi var. Private key leri elinde olmadığı sürece işine yaramaz.Ayrıca diskten veri okumak RAM den okumaya göre çok çok yavaş kalır. Tüm adres listesini sıralayıp bir arrayda tutup BinarySearch ile inanılmaz bir hız elde edersin.
 7 Local / Türkçe (Turkish) / Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında on: December 23, 2020, 08:44:43 AM Ya da şöyle yapalım. Ben benim verdiğim kodlara göre C# ile kodu yazayım fakat oradaki p, a, b sayıları secp256k1 Curve fonksiyonunda hangi sabitleri kullanıyor. Bunu secp256k1 için nasıl modifiye etmek gerekiyor?Sanırım benim için en önemli kısım burası... Senin kodunu C# ile düzenleyip hazırladım. Burada secp256k1 için hangi sabitleri vermem gerekiyordu ya da curve G H ve N olarak ifade edilen curve sabitleri neler? Bunlar sabit mi yoksa nasıl belirleniyor?Ayrıca Gx ve Gy ve x arasında bir bağıntı var mı yoksa random mu seçiliyor? Gx ve Gy için birbirlerine yakın aralarında asal iki sayı seçmek gerekiyorsa bu benim için sorun olmaz. Fermat'ın Little teoremiyle kolaylıkla çok büyük sayılar için seçebilirim. ModPow kullanarak fakat x ile aralarında bir bağıntı varsa onu öğrenmek isterim.Code:static void Main(string[] args)        {            Console.WriteLine("Hello World!");            BigInteger p = BigInteger.Parse("0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", NumberStyles.HexNumber);            BigInteger a = BigInteger.Zero;             BigInteger b = (BigInteger)7;            var secp256k1 = new CurveFp(p, a, b);            var G = new Point(secp256k1,                 BigInteger.Parse("55066263022277343669578718895168534326250603453777594175500187360389116729240"),                 BigInteger.Parse("32670510020758816978083085130507043184471273380659243275938904335757337482424"));            var x = BigInteger.Parse("8723493475893459873498759834758934759837458973497593847598347598734985798982374987234");            var PrivateKey = x;            var GeneratorPoint = G;            var PublicPoint = GeneratorPoint * PrivateKey;            var xx = PublicPoint.X.ToString("X");            var xy = PublicPoint.Y.ToString("X");            var UncompressedPublicKey = "04" + xx + xy;            var CompressedPublicKey = "";            if (PublicPoint.Y % 2 == 0)                CompressedPublicKey = "02" + xx;            if (PublicPoint.Y % 2 == 1)                CompressedPublicKey = "03" + xx;            Console.WriteLine("Uncompressed Public Key: {0}", UncompressedPublicKey);            Console.WriteLine("Compressed Public Key: {0}", CompressedPublicKey);            Console.ReadLine();        }
 8 Local / Türkçe (Turkish) / Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında on: December 23, 2020, 07:44:59 AM Quote from: mamuu on December 23, 2020, 07:32:53 AMmerhaba C# ta da olsa baska bir yerde de Point1 + Point1  sonucu  "return PointNew"  için dönmesi EliptikEğriAritmetiğinde -> ECdobuble  kullanman gerekirPoint1 + Point2  sonucunu return etmen için EliptikEğriAritmetiğinde -> ECadd kullanman gerekirPeki Point Nasıl olusacak ?Onuda GeneratorPoint olarak Gx ve Gy ile üstteki python kodunda yazdım.Sanırım gözünden kaçırmışsın yalnızca main fonksiyonda ilgili ECdouble işlevine de örnek gösterip hemen paylaşayım. secp256k1 farkını anlatabilir misin?Code:static void Main(string[] args)        {            Console.WriteLine("Hello World!");            // TODO: generate private key and public key            // Örnek CurveFp ve Point nasıl kullanılır?            var curve = new CurveFp(5, 2, 3);            var point = new Point(curve, 19, 23);            var point2 = new Point(curve, 17, 11);            var sampleAdd = point + point2;            var skaler = 31;            var sampleMultiple = point * skaler;            var doublePoint = point.Double();            Console.WriteLine("Sample Add: {0}", sampleAdd);            Console.WriteLine("Sample Multiple: {0}", sampleMultiple);            Console.WriteLine("Sample Double: {0}", doublePoint);            Console.ReadLine();        }
 9 Local / Türkçe (Turkish) / Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında on: December 23, 2020, 07:25:31 AM Quote from: mamuu on December 23, 2020, 07:12:16 AMTekrar merhabaanlattıklarım için python da örnek yazdım.pythonda fastecdsa kütüphanesini kururyoruzMerhaba!Yazdıklarımı alıntının içerisine yazmışım. Neyse önemli değil. Python sanırım ne kadar hızlı bir kütüphane oluştursan da çok yavaş kalır. Bunun yerine C# önerebilirim. Sana çok hızlı uint256 kütüphanesi gösterebilirim. BigInteger yerine onu kullanırsın.Paylaştığım kod hakkında ne düşünüyorsun? Orada public key ve private key nasıl üretilir farazi Base58Encode ve Base58Decode fonksiyonları olduğunu düşünüp örnek bir main fonksiyonu yazabilir misin?private key de (2 ^ 256) - (2 ^ 32) olsun mesela... Gerçekten secp256k1 farkını anlamadım ve bilmiyorum. Sen biliyorsan lütfen bu kısmı anlat ki net şekilde anlamış olalım.Code:using System;using System.Text;using System.Numerics;namespace TestEllipticCurve{    class Program    {        static void Main(string[] args)        {            Console.WriteLine("Hello World!");            // TODO: generate private key and public key            // Örnek CurveFp ve Point nasıl kullanılır?            var curve = new CurveFp(5, 2, 3);            var point = new Point(curve, 19, 23);            var point2 = new Point(curve, 17, 11);            var sampleAdd = point + point2;            var skaler = 31;            var sampleMultiple = point * skaler;            Console.WriteLine("Sample Add: {0}", sampleAdd);            Console.WriteLine("Sample Multiple: {0}", sampleMultiple);            Console.ReadLine();        }        class Point        {            public static readonly Point INFINITY = new Point(null, default(BigInteger), default(BigInteger));            public CurveFp Curve { get; private set; }            public BigInteger X { get; private set; }            public BigInteger Y { get; private set; }            public Point(CurveFp curve, BigInteger x, BigInteger y)            {                this.Curve = curve;                this.X = x;                this.Y = y;            }            public Point Double()            {                if (this == INFINITY)                    return INFINITY;                BigInteger p = this.Curve.p;                BigInteger a = this.Curve.a;                BigInteger l = ((3 * this.X * this.X + a) * InverseMod(2 * this.Y, p)) % p;                BigInteger x3 = (l * l - 2 * this.X) % p;                BigInteger y3 = (l * (this.X - x3) - this.Y) % p;                return new Point(this.Curve, x3, y3);            }            public override string ToString()            {                if (this == INFINITY)                    return "infinity";                return string.Format("({0},{1})", this.X, this.Y);            }            public static Point operator +(Point left, Point right)            {                if (right == INFINITY)                    return left;                if (left == INFINITY)                    return right;                if (left.X == right.X)                {                    if ((left.Y + right.Y) % left.Curve.p == 0)                        return INFINITY;                    else                        return left.Double();                }                var p = left.Curve.p;                var l = ((right.Y - left.Y) * InverseMod(right.X - left.X, p)) % p;                var x3 = (l * l - left.X - right.X) % p;                var y3 = (l * (left.X - x3) - left.Y) % p;                return new Point(left.Curve, x3, y3);            }            public static Point operator *(Point left, BigInteger right)            {                var e = right;                if (e == 0 || left == INFINITY)                    return INFINITY;                var e3 = 3 * e;                var negativeLeft = new Point(left.Curve, left.X, -left.Y);                var i = LeftmostBit(e3) / 2;                var result = left;                while (i > 1)                {                    result = result.Double();                    if ((e3 & i) != 0 && (e & i) == 0)                        result += left;                    if ((e3 & i) == 0 && (e & i) != 0)                        result += negativeLeft;                    i /= 2;                }                return result;            }            private static BigInteger LeftmostBit(BigInteger x)            {                BigInteger result = 1;                while (result <= x)                    result = 2 * result;                return result / 2;            }            private static BigInteger InverseMod(BigInteger a, BigInteger m)            {                while (a < 0) a += m;                if (a < 0 || m <= a)                    a = a % m;                BigInteger c = a;                BigInteger d = m;                BigInteger uc = 1;                BigInteger vc = 0;                BigInteger ud = 0;                BigInteger vd = 1;                while (c != 0)                {                    BigInteger r;                    //q, c, d = divmod( d, c ) + ( c, );                    var q = BigInteger.DivRem(d, c, out r);                    d = c;                    c = r;                    //uc, vc, ud, vd = ud - q*uc, vd - q*vc, uc, vc;                    var uct = uc;                    var vct = vc;                    var udt = ud;                    var vdt = vd;                    uc = udt - q * uct;                    vc = vdt - q * vct;                    ud = uct;                    vd = vct;                }                if (ud > 0) return ud;                else return ud + m;            }        }        class CurveFp        {            public BigInteger p { get; private set; }            public BigInteger a { get; private set; }            public BigInteger b { get; private set; }            public CurveFp(BigInteger p, BigInteger a, BigInteger b)            {                this.p = p;                this.a = a;                this.b = b;            }        }    }}