عکس پیش‌فرض نوشته

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

در تمام این سیستم ها دو اصل بنیادی وجود داشته و از اهمیت بسیاری برخوردارند.

اصول رمزنگاری اطلاعات

 

دو اصلی که در ادامه به توضیح آنها خواهیم پرداخت، چنان مهم هستند که برخی میگویند: اگر میخواهید خود را در خطر نابودی قرار دهید، این اصول را نقض کنید!

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

 

افزونگی (Redundancy)

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

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

برای فهم بهتر، فرض کنید شرکتی با 55 هزار کالا، از طریق سیستم ایمیلی سفارش های جدید خود را دریافت میکند.

برنامه نویسان شرکت، به خیال آن که برنامه های موثر و کارآمدی مینویسند، تصمیم میگیرند که پیام های سفارش کالا می بایست 19 بایتی باشد؛ 16 بایت برای نام مشتری و به دنبال آن 3 بایت فیلد داده (شامل یک بایت برای تعداد کالا و 2 بایت برای شماره کالا)

همچنین در نظر دارند که 3 بایت آخر توسط یک کلید بسیار طولانی رمزنگاری شود و این کلید را فقط مشتری و شرکت داشته باشند.

 

در نگاه اول ممکن است این طرح مطمئن و امن به نظر برسد، از آن جهت که یک اخلالگر غیرفعال (Passive Intruder) به هیچ عنوان قادر به رمزگشایی اطلاعات نخواهد بود.

ولی متاسفانه در این منطق یک اشتباه اساسی وجود دارد که عملاً آنرا به طرحی غیرقابل استفاده تبدیل میکند.

فرض کنید یک کارمند اخراج شده از شرکت، به واسطه داشتن کینه، میخواهد از شرکت انتقام بگیرد.

به همین هدف، قبل از ترک شرکت فهرستی از مشتریان این شرکت را با خود به همراه می برد. (فهرست مشتریان محرمانه و سری نیست و رمزنگاری نیز نمیشود.)

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

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

 

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

از آنجا که تمام مقادیر این 3 بایت معتبر هستند (یعنی مقادیر تصادفی درون آن پس از رمزگشایی به یک مقدار تصادفی ولی معتبر تبدیل میشود)، بنابراین کامپیوتر، شروع به چاپ سفارش های خرید و صورتحساب میکند.

در بیش از 80% این پیام ها، اخلالگر به هدف خود میرسد! (فضای اعداد 16 بیتی معادل 65536 عدد است که شرکت از 55000 تای آن استفاده میکند.)

اگرچه شاید عجیب به نظر برسد که یک مشتری 840 عدد CPU یا 630 عدد دسته بازی سفارش دهد ولی بر اساس دانشی که یک کامپیوتر دارد، شاید مشتری این مقدار تجهیزات را برای راه اندازی یک گیم نت بزرگ بخواهد.

بدین ترتیب یک اخلالگر فعال (کارمند اخراجی) توانسه مشکلات بزرگی را برای شرکت ایجاد کند، هر چند خود فرد نمیتواند بفهمد پیام هایی که کامپیوتر برای او تولید کرده چه معنایی دارند!

 

این مشکل را میتوان با اضافه کردن مقداری افزونگی به تمام پیام ها برطرف کرد.

به عنوان مثال اگر فیلد سفارش در هر پیام از 3 بایت به 12 بایت افزایش یابد و 9 بایت اول آن 0 باشد، آنگاه حمله فوق عملی نخواهد شد، چون کارمند اخراجی، با تولید اعداد تصادفی 12 بایتی، قادر نخواهد بود یک حجم عظیم از سفارش های معتبر تولید کند.

زیرا آن اعداد 12 بایتی ای که پس از رمزگشایی، 9 بایت اول آنها دقیقاً صفر شود اصلا مشخص نیستند و تولید آنها به روش آزمون و خطا در فضای 12 بایتی تقریباً ممکن نخواهد بود.

 

حقیقت قضیه آن است که تمام پیام ها باید مقدار قابل توجهی افزونگی (Redundancy) داشته باشند، به گونه ای که یک اخلالگر فعال (Active Intruder) نتواند پیام های تصادفی بی معنا تولید و ارسال کند و باعث شود این پیام ها به عنوان پیام های معتبر تفسیر شوند.

با این وجود اضافه کردن مقداری افزونگی به پیام ها باعث میشود که رمزشکن ها ساده تر بتوانند رمز پیام ها را بشکنند.

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

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

در طرح اصلی با 3 بایت در بدنه پیام، شکستن رمز و به دست آوردن کلید تقریباً غیرممکن است؛ زیرا پس از حدس زدن یک کلید، رمزشکن هیچ راهی برای اثبات صحت حدس خود ندارد چراکه تقریباً تمام پیام ها معتبر هستند.

در طرح جدید با پیام های 12 بایتی، رمزشکن به سادگی میتواند پیام های معتبر را از پیام های غیرمعتبر تشخیص دهد. (زیرا از بین حدس هایی که در مورد کلید رمز آزمایش میکند، حدسی درست است که پیامی با 9 بایت 0 در ابتدای آن تولید کند.)

در هر حال وجود افزونگی الزامی است؛ بنابراین:

اصل اول رمزنگاری : پیام ها باید شامل مقداری افزونگی باشند.

 

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

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

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

علاوه بر این، افزونگی اطلاعات نباید در قالب اضافه کردن n تا صفر به ابتدا یا انتها پیام انجام شود؛ چراکه اجرای الگوریتم های رمزنگاری روی چنین پیام هایی، نتایج قابل پیش بینی بازمیگرداند و کار رمزشکن را ساده تر میکند.

اضافه کردن یک چند جمله ای CRC (مخفف Cyclic Redundancy Code) به جای دنباله ای از صفرها بهتر خواهد بود، زیرا از یک طرف گیرنده اصلی به راحتی میتواند صحت پیام ها را بررسی کند و از طرف دیگر رمزشکن با حجم بسیار زیادی مواجه میشود. (عمل رمزشکنی ناموفق باشد.)

حتی بهتر از مورد فوق، استفاده از توابع درهم سازی رمز (Hash) است.

 

 

تازگی پیام ها (Freshness)

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

این کار برای جلوگیری از ارسال مجدد پیام های قدیمی توسط یک Active Intruder لازم و ضروری است.

اگر چنین کاری صورت نگیرد، کارمند اخراجی قادر است با انشعاب گیری از خط تلفن، پیام های معتبر قبلی را، حتی اگر نداند محتوای آنها چیست، به دفعات تکرار کند؛ بنابراین:

اصل دوم رمزنگاری : برای خنثی کردن جملات بازپخش (تکرار پیام) باید تمهیداتی اندیشیده شود.

 

یک راه برای اطمینان از تازگی پیام ها، قرار دادن مهر زمان (Timestamp) در آنهاست تا فقط برای مدتی محدود، مثلا چند ثانیه اعتبار داشته باشند.

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

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