امضای دیجیتال اولیه به شما امکان میدهد تأیید کنید که هیچ کس دادههای شما را دستکاری نکرده است. این امضا، اصالت و یکپارچگی دادههای امضا شده را فراهم میکند، اما محرمانگی را حفظ نمیکند. نامتقارن است، به این معنی که از یک جفت کلید (کلید عمومی و کلید خصوصی) استفاده میکند.
امضای دیجیتال اولیه دارای ویژگیهای زیر است:
- اعتبارسنجی : ایجاد امضایی که
PublicKeyVerify.Verify(signature, message)آن را تأیید کند، غیرممکن است، مگر اینکه کلید خصوصی را داشته باشید. - نامتقارن : ایجاد امضا از کلیدی متفاوت از تأیید آن استفاده میکند. این به شما امکان میدهد کلید عمومی را برای تأیید امضاها بین طرفهایی که نمیتوانند خودشان امضا ایجاد کنند، توزیع کنید.
اگر به عدم تقارن نیازی ندارید، به جای آن از روش سادهتر و کارآمدتر MAC استفاده کنید.
عملکرد امضاهای دیجیتال در Tink به صورت یک جفت از عناصر اولیه نشان داده شده است:
- PublicKeySign برای امضای دادهها
- PublicKeyVerify برای تأیید امضا
یک نوع کلید انتخاب کنید
ما توصیه میکنیم برای اکثر موارد از ML_DSA_65 یا ECDSA_P256 استفاده کنید، اما گزینههای متنوعی وجود دارد. به طور کلی، موارد زیر صادق است:
- ML-DSA-65 در برابر کوانتوم ایمن است. ما به طور فعال در حال پیادهسازی آن هستیم و اکنون برای زبانهای برنامهنویسی که در دسترس هستند، توصیه میشود.
برای الگوریتمهای غیر کوانتومی زیر، میتوانید انتظار داشته باشید که در آینده نزدیک مجبور به تغییر نوع کلید شوید.
- ECDSA_P256 پرکاربردترین گزینه و یک پیشفرض معقول است. البته توجه داشته باشید که امضاهای ECDSA انعطافپذیر هستند.
- ED25519 امضاهای قطعی ایجاد میکند و عملکرد بهتری نسبت به ECDSA_P256 ارائه میدهد.
- RSA_SSA_PKCS1_3072_SHA256_F4 امضاهای قطعی ایجاد میکند و بهترین عملکرد تأیید را ارائه میدهد (اما امضا بسیار کندتر از ECDSA_P256 یا ED25519 است).
حداقل تضمینهای امنیتی
- دادههایی که باید امضا شوند میتوانند طول دلخواه داشته باشند
- سطح امنیتی ۱۲۸ بیتی در برابر حملات تطبیقی پیام انتخابی برای طرحهای مبتنی بر منحنی بیضوی
- سطح امنیتی ۱۱۲ بیتی در برابر حملات تطبیقی پیام انتخابی برای طرحهای مبتنی بر RSA (اجازه کلیدهای ۲۰۴۸ بیتی را میدهد)
چکش خواری
اگر یک مهاجم بتواند یک امضای معتبر متفاوت برای یک پیام از قبل امضا شده ایجاد کند، یک طرح امضا قابل انعطاف است. اگرچه این برای اکثر سناریوها مشکلی ایجاد نمیکند، اما در برخی موارد برنامهنویسان به طور ضمنی فرض میکنند که امضاهای معتبر منحصر به فرد هستند و این میتواند منجر به نتایج غیرمنتظرهای شود.
مثال مورد استفاده
ببینید، من میخواهم دادهها را به صورت دیجیتالی امضا کنم .