Search content
Sort by

Showing 20 of 26 results by John_Ahmet
Post
Topic
Board Announcements (Altcoins)
Re: [WDC] Worldcoin | 0.17.1 Released! | AuxPoW w/ LWMA diff algorithm. Resync Req.
by
John_Ahmet
on 17/09/2023, 03:51:36 UTC
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.
Post
Topic
Board Development & Technical Discussion
Re: Pollard's kangaroo ECDLP solver
by
John_Ahmet
on 09/11/2021, 04:52:52 UTC
For RSA this code results much faster.

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)
Post
Topic
Board Development & Technical Discussion
Re: Pollard's kangaroo ECDLP solver
by
John_Ahmet
on 09/11/2021, 00:23:49 UTC
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 key

RSAEncode(m, e, N) // m => message, e and N are public key
   h ≡ m ^ e mod N

RSADecode(h, d, N) // h => encrypted message, d is part of private key
   m ≡ h ^ d mod N

RSACrack_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 is 4GB, all below 64Bits primes use 1TB memory
   // use only odd numbers bit array
   // max 256 cycles
   for primesBuffer of primes
     for p of primesBuffer
       for q of primesBuffer.Inverse()
         bitLengthA = GetBitsLength(p)
         bitLengthB = GetBitsLength(q)
         bitSum = bitLengthA + bitLengthB
         if (max(bitLengthA, bitLengthB) >= bitLength && bitSum <= bitLength)
           if (p * q == N)
             d = (k * ((p - 1) * (q - 1)) + 1) / e
             return (e, d, p, q)
Post
Topic
Board Development & Technical Discussion
Re: Pollard's kangaroo ECDLP solver
by
John_Ahmet
on 05/11/2021, 15:33:27 UTC
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 ^ n % n

For 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;
}
Post
Topic
Board Proje Geliştirme
Re: Bitcoin; Algoritma Üzerine Yöntemler
by
John_Ahmet
on 10/01/2021, 21:26:47 UTC
Hayır! 1 ve 2 ^ 256 - 1 aralığında integer bir sayıya karşılık gelen public address üretmek bir işlemken private key wif adresi de üretmek ayrı bir işlemdir. Private key zaten bu sayıdır. Siz her seferinde wif adresini üreterek çok zaman kaybediyorsunuz. Dolayısyla bakiyeli mevcut adres listesine sahipseniz private wif adres üreterek vakit kaybetmek istemezsiniz. Zira bir çakışma olmadan zaten ihtiyacınız da olmaz ancak bir çakışma bulursanız private key'e o zaman ihtiyacınız olabilir. Tabi bu yöntemle çalışmak için sıralı olarak oluşturduğunuz her 256 bit sayınıza denk gelen public adresi ürettikten sonra BinarySearch ile gerçek zamanlı olarak bakiyeli adres listesinde arama gerçekleştirmelisiniz. Binary Search çok hızlıdır. Binary Search ile kaç döngüde aramayı tamamlayacağından emin olmak için elinizdeki listenin adres sayısının 2 nin hangi kuvvetinden küçük olduğunu bulmalısınız.

Örneğin 35 milyon bakiyeli adres varsa arama döngüsü 26 kez çalışır, bulur ya da bulamaz. Binary Search kullanmadan bahsettiğim hızlara asla ulaşamazsınız.

Hele SQL Bulk vb. yöntemler de olsa disk ile muhattap oluyorsanız işiniz çok zor. Bu tüm işlemleri ölümüne yavaşlatır.
Post
Topic
Board Proje Geliştirme
Re: Bitcoin; Algoritma Üzerine Yöntemler
by
John_Ahmet
on 10/01/2021, 19:22:31 UTC
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...
Post
Topic
Board Proje Geliştirme
Re: Bitcoin; Algoritma Üzerine Yöntemler
by
John_Ahmet
on 09/01/2021, 21:22:28 UTC
@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.
Post
Topic
Board Türkçe (Turkish)
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 23/12/2020, 08:44:43 UTC
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 d seçebilirim. ModPow kullanarak fakat x ile aralarında bir bağıntı varsa onu öğrenmek isterim.



Post
Topic
Board Türkçe (Turkish)
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 23/12/2020, 07:44:59 UTC
merhaba C# ta da olsa baska bir yerde de

Point1 + Point1  sonucu  "return PointNew"  için dönmesi EliptikEğriAritmetiğinde -> ECdobuble  kullanman gerekir

Point1 + Point2  sonucunu return etmen için EliptikEğriAritmetiğinde -> ECadd kullanman gerekir

Peki 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 fonksiyona ilgili ECdouble işlevine de örnek gösterip hemen paylaşayım.

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;

            [b]var doublePoint = point.Double();[/b]

            Console.WriteLine("Sample Add: {0}", sampleAdd);
            Console.WriteLine("Sample Multiple: {0}", sampleMultiple);

            Console.ReadLine();
        }
Post
Topic
Board Türkçe (Turkish)
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 23/12/2020, 07:25:31 UTC
Tekrar merhaba
anlattıklarım için python da örnek yazdım.

pythonda fastecdsa kütüphanesini kururyoruz

Merhaba!

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.
Post
Topic
Board Türkçe (Turkish)
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 23/12/2020, 07:03:08 UTC
RSA için Şadi hocanın videosunu izlemeni öneririm. http://bilgisayarkavramlari.com/2008/03/19/rsa/

Yıllar oldu izledim. Hatta 24-32 bitlik RSA kriptosu için kodlar yazıp public key den private key üreten kodlar da yazıp konunun temel mantığının anlaşılması için yayınladım.

Aslında sormak istediğim çok  detay var. Büyük harflerin noktayı küçük harflerin genelde çarpan olan sayıları ifade ettiğini anladım fakat örneğin xx ifadesi x * x ile aynı anlamamı geliyor yoksa xx ayrı bir değişken mi?

Ayrıca en baştaki soruna dönecek olursak ECdouble, ECadd ve ECmultiply methodlarını sormuştun. Hemen yazayım fakat burada Curve fonksiyonun secp256k1 olması ne anlama geliyor? Buradaki kodlara bakarak aradaki farkı anlatabilir misin?

Sana hemen ECdouble, ECadd ve ECmultiply işlevleri için bir C# kodu yazayım.

Programın çıktısı şöyle ana programa bakarsan bir curve fonksiyonu nasıl tanımlanır? Sonra bir point ile diğer bir point nasıl toplanır ve bir point ile bir skaler nasıl çarpılır aynı matematikte olduğu gibi bir hal aldı ve senin işini çok kolaylaştıracak.

Şimdi bana secp256k1 farkını anlatabilir misin? TODO yazığım yere yalnızca Main fonksiyonunu kullanarak prviate ve public key üretip gönderebilir misin?

O kısım nasıl oluyor?

Programın çıktısı şöyle;

Code:
Hello World!
Sample Add: (0,-4)
Sample Multiple: (-1,3)

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;
            }
        }
    }
}

Post
Topic
Board Türkçe (Turkish)
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 22/12/2020, 23:51:46 UTC
Ayrıca dikkat edersen benim paylaştığım kodlarda literal bir değer yok, bu da anlaşılmasını kolaylaştırıyor fakat sen 5, 27, 31 gibi sayılar kullanıyorsun hiç bir şey anlamıyorum. Bu sayılar nereden geldi ve ne için oradalar?
Post
Topic
Board Türkçe (Turkish)
Merits 1 from 1 user
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 22/12/2020, 23:23:05 UTC
⭐ Merited by Bthd (1)
Ne yapmak istediğime gelince aslında girdiğim integer ile  nokta üretmek ve kontrol etmek istiyorum.Ör : 300 olsun

Burada tam olarak ne yapıyoruz? Örneğin 300 senin public key'in ve merkeze uzaklığı tam 300 olan X ve Y koordinatlarını içeren bir point de senin private key'in mi oluyor? Peki imza nasıl doğrulanıyor.

Örneğin senin public keyin 300 olsun.
Benim ki de 500 olsun.

MP = 300
JP = 500

Örneğin A = 5 gibi bir bilgimiz olsun.

Ben sana A bilgisini şifreleyip göndermek istiyorum. Bunun için senin public key'in olan 300 ile şifrelemeliyim ki sen de sana ait 300 için X ve Y koordinatlarını içeren sahip olduğun private key ile bu bilgiyi deşifre edip gönderdiğim bilgiyi çözümleyip 5 bilgisini çözümleyip al. Sonra senin de bana B = 6 bilgisini göndermek istediğini farz edelim. Sen de bana benim public key imi kullanarak şifrele ve gönder. Bende de 500 public keyine ait X ve Y koordinatlarını içeren bir private key olması durumunda ben de bu şifreyi çözebilirim ki zaten benim public key im bu ilk olarak belirlenen bu x ve y koordinatlarını içeren private key den üretildiği için ben private keyim ile senin gönderdiğin bu 6 bilgisini gönderdiğin sayıdan oluşturabilmeliyim.


O halde Encode ve Decode işlemlerinin nasıl yapıldığını açıklayabilir misin?

C# için temel bir bir kod yazalım. Bu ECDSA keyini değil de basit bir merkeze uzaklık kodu olsun. ECDSA ile farkını anlatabilir misin? Ya da EllipticCurve bunu nasıl yapıyor?


Şimdi aşağıdaki kod simetrik mi yoksa asimetrik mi oldu? Bu basitlikte ve Point ve uzaklık yöntemiyle bu kodu asimetrik yapabilir miyiz? Zaten asimetrikse bu halde kalsın basitte olsa konuyu anlamak için örnek bir kod olabilir.

Code:
public class ECDSAKey
{
     public int X
     public int Y

     public ECDSA(int X, int Y)
    {
        this.X = X;
        this.Y = Y;
    }

     public int GetPubKey() // Merkeze olan uzaklık (bir noktanın merkeze uzaklığı)
    {
        return Math.floor(sqrt(X ^ 2 + Y ^ 2)); // Merkeze olan uzaklık için karelerinin toplamını al ve karekökünü hesaplayıp en yakın tam sayıya yuvarla...
    }
}

public class ECDSACrypto
{
    public int Encode(int message, int pubkey)
    {
        return message * pubkey;
    }

    public int Decode(int cryptedMessage, ECDSAKey key)
   {
       return cryptedMessage / Math.floor(sqrt(key.X ^ 2 + key.Y ^ 2))
   }
}
Post
Topic
Board Türkçe (Turkish)
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 22/12/2020, 18:04:35 UTC
Sen beni anlamamışsın. Örneğin ben RSA kriptolarının nasıl çalıştığını ve nasıl public key üretildiğini biliyorum.

Şimdi burada ilk belirlediğin sayı private keyimiz mi yoksa ona yakın bir asal sayı mı seçiyorsun? Sonraki ona yakın bir asal sayı daha var onu neden seçtin? Sonra hangi matematiksel işlemlerden sonra Gx ve Gy yi belirliyorsun. Örneğin RSA kriptolarında Fermat teoreminden faydalanılıyor. Ben burada ne yapıldığını hala anlamadım. Daha açıklayıcı şekilde öncelikle özetle "EllipticCurve nedir?" ile başlayıp, (1  ile 2 ^ 256 - 2) aralığında seçtiğimiz private key ile Wif adresini ve tüm public key türlerini oluştururken EllipticCurve işlevinin tüm detaylarını daha açıklayıcı anlatabilir misin? Ayrıca tüm bunlar hangi teoremlere dayanıyor.
Post
Topic
Board Micro Earnings
Re: Balkancoin faucet: Earn up to 50 BKC every 12 hours.
by
John_Ahmet
on 22/12/2020, 05:46:10 UTC
"Your connection is not private"

https://www.balkancoin.org/ is missing a proper SSL certificate. This undermines the trust in your site a lot and nobody will download the wallet. Fix the SSL cert and then add VirusTotal to the wallet if you want minimal chances of success for this faucet.

I am not the owner of the project. Although there were problems with SSL, the project was progressing with baby steps. I love this project.

This Balkancoin faucet is now running no more, the website itself is not opening. Maybe the coin itself is a spam coin or the faucet website has gone obsolete and the services are not working. So, if the Balkancoin is genuine crypto then mention here a legit faucet site or any free mining method.

After I sent this post, the project that was active for 2 years collapsed. I think someone reading this post attacked the site.
I believe that you should update any information regarding this project, because the resource is not available at all and no downloads or site visits are possible. At the very least, you should clarify so as not to mislead us with this topic. you originally tried to promote a site that does not have the appropriate certificate and appropriate protection standards.

I have recommended this coin because it has long been the most profitable coin among Cryptonight coins. It had a working faucet on its site, but it became unavailable right after I posted. Mining is still possible and it is still the most profitable coin for the coin I mentioned.
Post
Topic
Board Proje Geliştirme
Re: Bitcoin; Algoritma Üzerine Yöntemler
by
John_Ahmet
on 22/12/2020, 05:28:16 UTC
Bu adres arama işinden vazgeçeceğim zaman son kullanım ve tüm adresleri tekrar kontroldan sonra ya silecegim yada istek olursa paylaşacağım. Benim kontrolümden birşey çıkmadı başkası bakınca birşey çıkacak demiyorum. Adres ve privatekey lerden yola çıkarak tersine mühendislik için belki bir ışık tutabilir. Benim harcadıgım 2 yılı o harcamamış olur.

Farkındayım arkadaş çok yavaş bir yöntem kullanıyor. Bakiyeli adreslerle bir çakışma yakalamak için VanitySearch gibi bir yöntemle kendi işlemcimde (2. Nesil Intel Core i7) 3 milyon adres üretebildiğimi gördüm. Her saniye üretilen bu 3 milyon adresin en az birinin blockchain deki bir adresle çakıştıran kod tüm adresleri hafızada tutuğu için ve sıralı bir liste olduğundan çok hızlı sorgulanıyor. Random 96 bit genişliğinde bir aralıkta en az bir adres bulunabileceğini düşünüyorum.

Böyle bir bilgiyi de forumdakiler nimet zannedip bu konuda paylaşım yapmaktan imtina ediyor. Zaten bu kadar kolay olsaydı birileri bunu çoktan denemiş ve başarmış olup Bitcoin fantazisini tarih yapacaktı.
Post
Topic
Board Türkçe (Turkish)
Merits 1 from 1 user
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 22/12/2020, 02:07:14 UTC
⭐ Merited by Bthd (1)
Bu konudaki matematiği benden daha iyi biliyor olabilirsin. Sen de bana bu konuda daha detaylı bilgi verebilir misin?

Örneğin senin aradığın temel kodu ifade eden şöyle bir kod yazalım. Ancak burada x ve y kaç bitlik integer sayılar olmalı ve ECdouble için ne kadar duyarlı bir kayan noktalı sayı gerekiyor?

Bu temel kod üzerinden bana adım adım ElipticCurve'nin işlevini anlatabilir misin? EC_double işlevi de Point mi döndürüyor?

Code:
class Point
{
    public:
        long long int x, y;

    public: Point(long long int _x, long long int _y)
    {
        x = _x;
        y = _y;
    }

    public: void print()
    {
        cout << "(";
        cout << x;
        cout << ", ";
        cout << y;
        cout ")";
    }
};

class EllipticCurve
{
    public:
        int a;
        int b;
        unsigned int m;

    public: EllipticCurve(int _a, int_b, unsigned int modul)
    {
        a = _a;
        b = _b;
        m = modul;
    }

    public: Point generate(unsigned long long int x)
    {
        // looks for Points on the curve with the given x coordinate
        // returns the first matching point
    }

    public: Point add(Point p, Point q)
    {
        // complex addition function with if-else trees
        // the function code is not needed for this question
    }

    public: Point mul(Point p, unsigned int n)
    {
        // see above
    }
};
Post
Topic
Board Türkçe (Turkish)
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 22/12/2020, 01:56:42 UTC
Bende CUDA8 desteği olan eski bir grafik kartı var. CUDA8 ve CUDA 10.x arasında çok fark olabilir. Performans açısından pek çok farklılık oluyor. CUDA8 için çok vaktimi almazsa bir bakayım. CUDA 10.x için modifikasyon yapabilirsin.
Post
Topic
Board Türkçe (Turkish)
Re: Bitcoin Algoritmasi 256-SHA Hacklenebilir mi ?
by
John_Ahmet
on 22/12/2020, 00:27:23 UTC
Sonuçta bu algoritmayıda üreten bir insan değil mi ? Hemde Amerika'da bir şirket.Peki kendi ürettikleri algoritma ile çalışan bitcoini nasıl ve neden hackleyemiyorlar ?
Demek istediğim private keyleri kendi icat ettikleri algoritma ile tahmin edemiyorlarmı ?

pek mümkün değil çünkü stringleri tuttursanız dahi string üzerinden key üretilmiyor.

OpenSSL deki random_bit fonksiyonu kullanılıyor. Bu bitlerin tahmin edilemesi üzerine toplarca akademik makale var. kısaca sha256 icindeki string data cok uzun bir bir karmaşasıdır.

2013 teki Brainwallet faciasından sonra bu sekilde cüzdan üretimi durdu. Bulan buldu (:

Şaka mısınız? Örneğin bu adreste stringleri SHA256 algoritmasından geçirdikten sonra bu hash ile bir key üreterek şu linkini vereceğim kelimeleri girdiğiniz taktirde işlem görmüş 18 bin küsür adresi hacklemiş olacaksınız. Evet cüzdanlar boşaltılmış fakat zaman zaman yine aynı adreslere yeni bitcoin gönderiyorlar ve bu yeni gelenler için bir listener hazırlarsanız gönderdikleri anda haberiniz olur.

Hemen bu cüzdanları boşaltın demiyorum elbette ancak daha güvenli kurumlara adresi çözümlediğinizi bildirerek ödül kazanabilirsiniz. 30 BTC ye kadar ödül veren kurumlar var.

Şu adres inceleyin. Yukarıda verdiğim kod bu strigler ile nasıl key üretebileceğinizi gösteriyor.

https://eli5.eu/brainwallet/
Post
Topic
Board Türkçe (Turkish)
Merits 2 from 2 users
Re: GPU ile Eliptik Eğri Aritmetiği ve Programlama Hakkında
by
John_Ahmet
on 21/12/2020, 23:19:58 UTC
⭐ Merited by mamuu (1) ,Bthd (1)
Verdiğim kod bu işlemleri zaten yapıyor.

Code:
//first we hash the string
    SHA256 (string, strlen(string), hash);

Yukarıdaki kod satırını kaldırıp belirlediğin 0 ile 2 ^ (256 - 1) aralığındaki bir sayının 32 baytlık byte dizisini direk hash isimli değişkene verirsen zaten bu kod sana bu sayıya karşılık gelen priv ve pub keyleri verecektir. Bir döngü içerisinde senin belirleyeceğin matematikteki seyrek sayı dizilerinin bir kümesini test etmek isteyebilirsin. Malum bu brute force yönteminde birer birer artırmak yerine x artırarak işlemin daha hızlı sonuçlanmasını sağlayabiliyorsun. x ne kadar büyük olursa işlem o kadar çabuk tamamlanır. x elbette gerçekten çok büyük olursa Smiley

BigInt kullanmak yerine uint256 kullanmak çok fazla hız kazandırır.

Code:
uint256 N = 0;
uint256 X = [your magic number];
while(N < MAX_N) {
  N += X;
  if(checkPublicKeyInBlockChain(N)) {
    log(N);
  }
}

Elbette büyük marketlerin programcıları bu ihtimalleri düşünerek N  sayısını asal bir sayı olarak seçmişlerdir gibi bir ön kabulum var. Ne de olsa asal olmayan bir sayı seçerlerse bu yöntemler blockchain deki işlem görmüş yaklaşık 900 milyon adresten birini denk getirmeniz daha kolay olurdu.

Dolayısıyla N için matematikteki seyrek sahte asalları kullanarak çok hızlı bir algoritma elde edebilirsin. bu sayıların 256 bit içerisindeki karşılıkları gerçekten çok seyrektir ve kullanmış olma ihtimalleri de oldukça yüksektir.

Öncelikle karşılaştırma algoritmanı nasıl kurguladığın önemlidir. Geriye kalanlar zaten çözülmüş problemler...

GPU konusuna gelince, NVIDIA ekran kartları için CUDA AMD anakartları için de OPENCL platformlarını kullanabilirsin. Örnek bir kod görmek istersen VanitySearch projesinin kodlarına bakabilirsin. Gerçekten daha iyi bir kod görmek istiyorsan xmrig projesinin kodlarını incele bu Monero madenciliğini GPU üzerinden yapmak için RandomX hash algoritmasını kullanıyor olsa da CUDA ve OPENCL kullanımının nasıl yapıldığını öğrenmen için sana referans olabilir. Alttan alta monero madenciliği yap daha çok kazanırsın gibi bir mesaj da veriyor olabilirim Smiley