در قسمت اول این مقاله در مورد الگوریتم اول از سه الگوریتم مورد نیاز برای امضای دیجیتال (تولید کلید عمومی و خصوصی) صحبت کردیم. در قسمت دوم این مقاله در مورد الگوریتم دوم و سوم فرایند امضای دیجیتال (امضای یک پیام و تایید اعتبار آن امضا) صحبت میکنیم.
فرض کنید شما کلید خصوصی x که ۲۵۶ بیت است و کلید عمومی متناظر با آن یعنی X را میدانید. همچنین در قسمت اول با پارامتر P آشنا شدیم. حال فرض کنید که r یک پارامتر دیگر است که شما انتخاب میکنید و نهایتا R نیز بصورت زیر تعریف میشود:
R=r•P
حال شما میتوانید هر پیامای message را به صورت زیر امضا کنید:
s=hash(message,R)*x+r
و مقدار s را به عنوان امضای آن پیام اعلام کنید.
توجه کنید که هر پیام، امضای خاص خود را خواد داشت. بنابراین برای هر message به عنوان ورودی شما یک s متناظر با آن را اعلام میکنید. این s با استفاده از کلید خصوصی x محاسبه شده است اما در این فرایند شما هرگز کلید خصوصی خود x را اعلام نکردهاید.
مشاهده میکنید که این همان مرحله دوم از فرایند امضای دیجیتال است که در قسمت اول مقاله به آن اشاره شد:
sig := sign( sk , message)
حال سوال این است که شما چگونه میتوانید به بقیه ثابت کنید که مقدار x متناظر با X را میدانید بدون آنکه اطلاعات مهمی از مقدار x (کلید خصوصی تان) درز بدهید. به عبارت دیگر چگونه میتوان ثابت کرد که s امضای دیجیتالای است که شما با استفاده از کلید خصوصی خود x نوشتید.
با یکی از خواص جمع شروع میکنیم:
t•P+k•P = (t+k)•P
حال با استفاده از جایگزاری های زیر
t = hash(message, R)•x
k = r
خواهیم داشت
hash(message, R)•x•P + r•P = (hash(message, r•P)*x+r)•P
hash(message, R)•x•P+R = (hash(message, r•P)*x+r)•P
و در نتیجه:
hash(message, R)•X+R = (hash(message, R)*x+r)•P
و سرانجام خواهیم داشت:
hash(message, R)•X+R = s•P
حال فردی ادعا میکند که پیامای (message) را با کلید خصوصی خود امضا کرده است و پیام امضا شده (s) را به همراه کلید عمومی X اعلام میکند.
ما برای تایید اعتبار امضای او مقادیر message، s، و X را در معادله بالا قرار میدهیم تا ببینیم آیا دو طرف معادله با هم برابر هستند یا خیر. این همان مرحله سوم از فرایند امضای دیجیتال است که در قسمت اول این مقاله به آن اشاره شد:
isValid := verify( pk , message , sig)
و به این ترتیب ما توانستیم هر سه مرحله از فرایند امضای دیجیتال را تکمیل کنیم.