در رمزنگاری کلید عمومی، منظور از **اثرانگشت کلید عمومی** دنباله‌ای کوتاه از بایت‌ها می‌باشد که برای تصدیق یا جستجوی کلید عمومی طولانی تر استفاده می‌شود. اثرانگشت‌ها با اعمال یک تابع درهم‌ساز رمزنگارانه بر روی یک کلید عمومی ایجاد می‌گردند. از آنجا که اثر انگشت‌ها نسبت به کلیدهای مربوط کوتاه‌تر هستند، می‌توان از آن‌ها به منظور ساده سازی برخی وظایف مدیریت کلید استفاده نمود.

ایجاد اثرانگشتهای کلید عمومی
----------------------------

معمولاً یک اثرانگشت کلید عمومی با استفاده از گام‌های زیر ایجاد می‌شود:

1. یک کلید عمومی (به همراه داده‌های اضافی) به دنباله ایی از بایت‌ها رمز می‌شوند. برای اطمینان از اینکه چنین اثر انگشتی را می‌توان در آینده دوباره ایجاد نمود، عملیات رمزگذاری باید قطعی بوده و هرگونه داده اضافی باید در کنار کلید عمومی تبادل و ذخیره گردد. داده اضافی معمولاً اطلاعاتی است که هر فرد استفاده‌کننده از کلید عمومی باید از آن آگاه باشد. مثال‌هایی از داده اضافی عبارتند از: کلید عمومی باید به همراه کدام نسخه پروتکل مورد استفاده قرار گیرد (در خصوص اثرانگشتهای PGP)؛ و نام نگهدارنده کلید (در خصوص اثرانگشتهای دارای پیوند اطمینان X.509، در جایی که داده اضافی شامل یک X.509 SSC می‌باشد).
2. داده تولید شده از مرحله قبل با استفاده از تابع درهم ساز کریپتوگرافیک مانند MD5 یا SHA-1 درهم‌سازی می‌شود.
3. در صورت تمایل، خروجی تابع درهم ساز می‌تواند اثرانگشت کوتاه‌تر و مناسب تر مهیا نماید.

این فرایند یک اثرانگشت کوتاه ایجاد می‌کند که می‌توان از آن برای تصدیق کلید عمومی طولانی تر استفاده کرد. به عنوان مثال، یک کلید عمومی RSA شامل ۱۰۲۴ بیت یا بیشتر می‌باشد، اما اندازه اثرانگشتهای MD5 یا SHA-1 تنها ۱۲۸ یا ۱۶۰ بیت است. برای خوانایی بیشتر، اثر انگشتها معمولاً به صورت رشته‌های هگزا نمایش داده می‌شوند. به عنوان مثال، یک اثرانگشت ۱۲۸ بیتی MD5 برای پوسته امن به صورت زیر نمایش داده می‌شود:

43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8

این کد می‌تواند توسط دستور زیر تولید گردد:

ssh-keygen -lf /path/to/key.pub

استفاده از اثرانگشت برای تصدیق کلید
-----------------------------------

*برای اطلاعات بیشتر به تصدیق کلید مراجعه فرمایید.* 
هنگامی که یک کلید عمومی از کانالی نامطمئن مانند اینترنت دریافت می‌گردد، معمولاً پذیرنده خواهان احراز اصالت آن کلید می‌باشد. از آنجایی که اثر انگشتها به دلیل اندازه کوچک خود اجازه عبور از کانالهای مطمئن را دارا می‌باشند، می‌توانند به انجام این کار (احراز اصالت) کمک کنند.

  

به عنوان مثال، اگر آلیس بخواهد کلید عمومی متعلق به باب را تصدیق نماید، می‌تواند به صورت فیزیکی یا تلفنی از او بخواهد اثرانگشت را برایش خوانده یا برگه ایی شامل اثرانگشت نوشته شده را به او بدهد. سپس آلیس می‌تواند اثرانگشت مطمئن بدست آورده از باب را با اثرانگشت کلید عمومی مطابقت دهد.

اثرانگشت در هنگام خودکارسازی تبادل و ذخیره داده احراز اصالت کلید نیز می‌تواند مفید واقع گردد. به عنوان مثال، اگر داده احراز اصالت نیاز به انتقال توسط یک پروتکل یا ذخیره‌سازی در پایگاه داده‌ها را داشته باشد اما اندازه کلید عمومی دردسر ساز واقع گردد، استفاده از اثرانگشت راه حل خوبی خواهد بود.

علاوه بر این، اثرانگشت‌ها می‌توانند جهت اطمینان از اینکه کلید عمومی دانلود شده توسط کاربر قابل رویت برای دیگر موتورهای جستجو باشد، توسط موتورهای جستجو مورد پرس و جو قرار گیرند. اگر موتور جستجو پاسخ‌هایی را برگرداند که به اثرانگشت لینک شده به وب سایتهای مناسب اشاره داشته باشد، کاربر می‌تواند از قرار نگرفتن در مقابل حملاتی مانند حمله مرد میانی بیشتر مطمئن شود.

PGP فهرست واژگان PGP را برای ایجاد سهولت در تبادل اثرانگشتهای کلید عمومی بر روی کانال‌های صوتی را توسعه داد.

اثرانگشت کلید داده در عمل
-------------------------

در سیستم‌هایی مانند SSH، برای احراز اصالت کلید، کاربران می‌توانند به صورتی دستی اثرانگشت را مبادله و بررسی نمایند. اگر کاربری یک بار اثرانگشت کاربر دیگر را قبول کند، آن اثرانگشت ذخیره شده و ارتباطات بعدی با آن کاربر به صورت خودکار تصدیق می‌شود.

در سیستم‌هایی مانند PKI مبتنی بر X.509، اصولاً اثرانگشت به منظور احراز اصالت کلیدهای سطح اصلی استفاده می‌گردند. کلیدهای سطح اصلی (ریشه) گواهینامه‌هایی را صادر می‌کنند که برای احراز اصالت کلیدهای کاربران می‌توانند مورد استفاده قرار گیرد. چنین کاربردی از گواهینامه‌ها، لزوم بررسی دستی اثرانگشت در میان کاربران را از بین می‌برد.

در سیستم‌هایی مانند PGP یا Groove، اثرانگشت می‌تواند به هر دو روش گفته شده در بالا مورد استفاده قرار گیرد.

در سیستم‌هایی مانند CGA، CFS یا اکثر شبکه‌های نظیر به نظیر، اثرانگشت در درون آدرس موجود از قبل جایگذاری می‌شود (مانند آدرسهای IPv6. اگر آدرس‌ها از میان کانالهای مورد اعتماد مبادله شده باشند، اثرانگشت‌ها نیز می‌توانند از آن‌ها استفاده نمایند).

امنیت اثرانگشت کلید عمومی
-------------------------

مهمترین تهدید برای امنیت اثرانگشت حمله پیش‌نقش می‌باشد. در این نوع حمله، مهاجم اقدام به ساختن یک جفت کلید می‌نماید که اثرانگشت به دست آمده از درهم سازی آن با اثرانگشت قربانی مطابقت می‌کند.

تهدید بعدی برای برخی سیستم‌ها حمله تصادم می‌باشد که در آن مهاجم چندین جفت کلید برای ساخت اثرانگشت‌های خود ایجاد می‌کند. این کار به مهاجم اجازه می‌دهد امضاهای ایجاد شده را رد کند.

برای جلوگیری از حمله پیش نقش، تابع درهم ساز استفاده شونده برای تولید اثرانگشت باید قابلیت مقاومت در برابر پیش نقش دوم را داشته باشد. اگر حملات تصادم یک تهدید هستند، این تابع باید قابلیت مقاومت در برابر تصادم را نیز دارا باشد. اگرچه به دلایل ذکر شده در بخش‌های قبلی کوتاه کردن اثرانگشت قابل قبول است، اما این دنباله باید برای مقابله با حملات جستجوی جامع به اندازه کافی طولانی باشد.

در عمل، اکثر اثرانگشت‌هایی که امروزه مورد استفاده قرار می‌گیرد از درهم سازهای MD5 و SHA-1 استفاده می‌کنند. از سال ۲۰۰۶، حملات تصادم توسط MD5 و SHA-1 قابل تشخیص می‌باشند. به دلیل مقاوم نبودن این درهم سازها در برابر حمله پیش نقش، در آینده استفاده از توابع درهم ساز جدیدتری مانند SHA-256 بیشتر خواهد شد.

در مواردی که به دلیل هزینه مجبور به استفاده از کوتاه‌ترین اثرانگشت ممکن هستیم، تکنیک‌هایی مانند توسعه درهم ساز منجر به افزایش امنیت اثرانگشت می‌شود.

منابع
-----

1. ↑   David Mazières; M. Frans Kaashoek (September, 1998). "Escaping the Evils of Centralized Control with self-certifying pathnames" (PostScript). Proceedings of the 8th ACM SIGOPS European workshop: Support for composing distributed applications. Sintra, Portugal: MIT. Retrieved 2006-12-23..