سید مصطفی افزونی | Seyed Mustafa Afzouni
سید مصطفی افزونی | Seyed Mustafa Afzouni
خواندن ۲ دقیقه·۴ سال پیش

شفافیت در رمزنگاری، یک اصل اساسی

در ابتدا یک تعریف کلی از رمزنگاری (Cryptography) ارائه می‌شود:

رمزنگاری الگویی است که طبق آن داده‌های آشکار طبق یک روال برگشت‌پذیر به اطلاعاتی نامفهوم تبدیل می‌شود

مثلا کلمه hello با یک الگوریتم رمزنگاری مشخص (در اینجا AES) تبدیل به مقدار زیر می‌شود:

0xadc12796557b78116245d0c5d563e55a

اصول شش‌گانه

آقای آگوست کرکهوف (Auguste Kerckhoffs) در سال ۱۸۸۳ شش اصل را برای رمزنگاری بیان کرد:

  1. سیستم رمزنگاری در عمل نباید قابل شکستن باشد، هرچند از نظر تئوری بتوان آن را شکست.
  2. سیستم رمزنگاری نباید هیچ چیز پنهانی و محرمانه‌ای داشته باشد و فقط کلید رمز باید مخفی شود. جزئیات سیستم، الگوریتم و ... باید در معرض دسترس و دید همه و حتی دشمنان باشد. (اصل اساسی کرکهوف)
  3. کلید رمز باید به نحوی قابل انتخاب باشد که
    (الف) به راحتی قابل تغییر باشد.
    (ب) بتوان به خاطر سپرد.
    (پ) نیازی به یادداشت کردن آن نباشد.
  4. هرآنچه که رمزشده است با تلگراف قابل ارسال باشد.
  5. سیستم رمزنگاری یا هرآنچه که رمزشده، توسط یک نفر قابل حمل باشد.
  6. سیستم رمزنگاری به راحتی قابل راه‌اندازی باشد.

این شش مورد بعنوان اصول شش‌گانه کرکهوف یا Kerckhoffs's principle شناخته می‌شوند. همه این موارد به نحوی مورد استفاده قرار گرفته‌اند، اما اصل دوم بعنوان اصل اساسی کرکهوف شناخته می‌شود.

این شش اصل با قوانین کیرشهف (گوستاو کیرشهف) ارتباطی ندارد!


اصل اساسی: هیچ‌چیز پنهانی نداریم

جزئیات الگوریتم‌های رمزنگاری باید آشکار و در دسترس و دید همه باشد و فقط کلیدهای رمز محرمانه هستند

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

اما این سوال پیش می‌آید که چرا باید یک الگوریتم‌ رمزنگاری را بصورت عمومی منتشر کرد؟ دو دلیل وجود دارد:

دلیل اول
فرض کنید سفارتخانه‌های یک کشور برای ارتباط با دولت خودشان، از یک الگوریتم رمزنگاری بومی محرمانه استفاده می‌کند. اگر کلید فاش شود، هزینه‌ای برای تغییر کلید وجود ندارد.
اما اگر این الگوریتم که صرفا برای حفظ امنیت مخفی نگه داشته شده لو برود، عملا باید یک الگوریتم جدیدی جایگزین شود.

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

نکته طلایی برای هر سیستم رمزنگاری همین اصل است که همه جزئیات آن منتشر شود.

سیستم یا الگوریتم رمزنگاری خودش باید امنیت خودش را حفظ کند نه اینکه با محرمانگی به آن امنیت بدهیم

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

دو مثال واقعی

الگوریتم RC4

جزئیات الگوریتم RC4 تا شش سال مخفی بود تا اینکه در سال ۱۹۹۴ در اینترنت و لیست‌های ایمیل سایبرپانک (Cypherpunk) بصورت ناشناس منشر شد.

زمانی که جزئیات RC4 فاش شد، برخی متوجه شدند در آن اشکالاتی وجود دارد اما در آن زمان سخت‌افزارها و نرم‌افزارهای زیادی از RC4 استفاده می‌کردند و امکان تغییر/بروزرسانی آن‌ها در زمان کم وجود نداشت.

ماشین انیگما

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

پی‌نوشت: فیلم زیبای The Imitation Game داستان شکستن انیگما را به تصویر کشیده است.

ماشین انیگما
ماشین انیگما




رمزنگاریامنیتبرنامه‌نویسی
شاید از این پست‌ها خوشتان بیاید