بخش اول کد پیاده سازی الگوریتم مورد استفاده برای رمزگذاری در bitcoin
همانطور که میدونید معادله عمومی منحنی بیضوی به شکل y2 = x3 + ax + b میباشد که در ورژن بیت کوین مقدار ضریب a برابر صفر و مقدار ثابت b برابر 7 میباشد. نمای کلی منحنی بیضوی بیت کوین به شکل زیر میباشد:
از ویژگیهای جالب این منحنی عبارتند از:
1- اگر دو نقطه را در روی منحنی انتخاب کنید که خط واصل آنها عمودی نباشد، خط واصل این دو نقطه، نقطه سومی را روی منحنی قطع خواهد کرد، که اگر این نقطه را نسبت به محور xها متقارن کنیم، حاصل آن برابر با حاصل جمع دو نقطه اولیه خواهد بود...(point adding)
برای اضافه کردن دو نقطه به هم از روابط زیر استفاده میشود، که rx و ry حاصل اضافه کردن این دو نقطه میباشد.
c = (qy – py) / (qx – px) rx = c2 – px – qx ry = c (px – rx) – py
2- اگر یک نقطه ای را در روی این نمودار انتخاب کنیم، و چند بار ان نقطه را با خودش جمع کنیم، دوباره نقطه جدید روی این منحنی خواهد افتاد.(point doubling)
برای اضافه کردن یک نقطه به خودش از روابط زیر استفاده میشود، که rx و ry حاصل اضافه کردن این نقطه به خودش میباشد.
c = (3px2 + a) / 2py rx = c2 – 2px ry = c (px – rx) – py
در ادامه کد متلب پیادهسازی این عملیات را میتوانید به شکل زیر مشاهده کنید:
clc; clear; close all; % An elliptic curve is represented algebraically as an equation of the form % y2 = x^3 + ax + b ,For a = 0 and b = 7 (the version used by bitcoin), it looks like this y2 = x^3 + 7 x=- nthroot(7,3):0.02: nthroot(7,3)*5; y = sqrt(((x.^3) +7)); plot(x, real(y),'r- ', 'lineWidth',1);hold on; plot(x,-real(y),'r- ', 'lineWidth',1);hold on; %% point adding px=x(5) ;py=real(y(5)) ;qx=x(500) ; qy=real(y(500)) ; c = (qy - py) / (qx - px) ; rx = (c^2) - px - qx; ry = c* (px-rx) -py; [X,Y]=polyxpoly( [px,qx],[py,qy],x,real(y)); plot([px,qx],[py,qy],'r*-') plot( X,Y,'go-');hold on; plot( rx,ry,'ko-');hold on; text( rx,ry,'point adding'); %% point doubling px=x(60) ;py=real(y(25)) ; c = (3*(px^2) + 0) / (2*py); rx = (c^2) - (2*px); ry = c*(px - rx) - py; plot( px,py ,'cd-') plot( rx,ry,'co-'); text( rx,ry,'point doubling');
نمونه خروجی:
این پست با پیادهسازی کامل بروزرسانی خواهد شد.....
مطالعه بیشتر...