الگوریتم های رمزنگاری با کلید متقارن
مدیرکل |
رمزنگاری،
شیوه باستانی حفاظت از اطلاعات است که سابقه آن به حدود 4000 سال پیش از
میلاد باز می گردد. امروزه رمزنگاری در دنیای مدرن از اهمیت ویژه ای
برخوردار است، به طوری که به عنوان یک روش مؤثر برای حفاظت از اطلاعات حساس
مانند اطلاعات طبقه بندی شده نظامی، اطلاعات حساس مؤسسات مالی، کلمات عبور
ذخیره شده بر روی سیستم های کامپیوتری و داده های منتشر شده بر روی
اینترنت و یا از طریق امواج رادیویی به کار می رود.
در سری مقاله های رمزنگاری مفاهیم اولیه رمزنگاری را شرح خواهیم داد. لازم به ذکر است که رمزنگاری یک مبحث بسیار پیچیده است و در اینجا ما قصد توضیح پایه های ریاضی الگوریتمهای رمزنگاری یا باز کردن تمام جزئیات را نداریم و تنها به معرفی کلیات این مقوله خواهیم پرداخت. برای دریافت اطلاعات و جزئیات بیشتر می توانید به کتابهایی که در این زمینه نگارش شده اند مراجعه فرمایید.
در قسمتهای قبلی تاریخچه مختصری از رمزنگاری ، مفاهیم اولیه آن و کلیدهای رمزنگاری را توضیح دادیم. در این قسمت الگوریتم های رمزنگاری با استفاده از کلید متقارن و در قسمت بعدی الگوریتم های رمزنگاری با استفاده از کلید نامتقارن را شرح و بسط خواهیم داد.
در سری مقاله های رمزنگاری مفاهیم اولیه رمزنگاری را شرح خواهیم داد. لازم به ذکر است که رمزنگاری یک مبحث بسیار پیچیده است و در اینجا ما قصد توضیح پایه های ریاضی الگوریتمهای رمزنگاری یا باز کردن تمام جزئیات را نداریم و تنها به معرفی کلیات این مقوله خواهیم پرداخت. برای دریافت اطلاعات و جزئیات بیشتر می توانید به کتابهایی که در این زمینه نگارش شده اند مراجعه فرمایید.
در قسمتهای قبلی تاریخچه مختصری از رمزنگاری ، مفاهیم اولیه آن و کلیدهای رمزنگاری را توضیح دادیم. در این قسمت الگوریتم های رمزنگاری با استفاده از کلید متقارن و در قسمت بعدی الگوریتم های رمزنگاری با استفاده از کلید نامتقارن را شرح و بسط خواهیم داد.
الگوریتم های رمزنگاری متقارن
یک الگوریتم متقارن از یک
کلید برای رمزنگاری و رمزگشایی استفاده میکند. بیشترین شکل استفاده از
رمزنگاری که در کارتهای هوشمند و البته در بیشتر سیستمهای امنیت اطلاعات
وجود دارد data encryption algorithm یا DEA است که بیشتر بعنوان DES
شناخته میشود. الگوریتم DES یک محصول دولت ایالات متحده است که امروزه
بعنوان یک استاندارد بینالمللی شناخته شده و بطور وسیعی مورد استفاده
قرار می گیرد. بلوکهای ۶۴ بیتی دیتا توسط یک کلید تنها که معمولا ۵۶بیت طول
دارد، رمزنگاری و رمزگشایی میشوند. الگوریتم DES از نظر محاسباتی ساده
است و به راحتی میتواند توسط پردازندههای کند (بخصوص آنهایی که در
کارتهای هوشمند وجود دارند) انجام گیرد. در دهه 60 میلادی، با رشد فزاینده
فناوری کامپیوتر و نگرانی ها در مورد محرمانه و خصوصی بودن ارتباطات، علاقه
به ایجاد یک استاندارد رمزنگاری ملی در آمریکا به شدت افزایش پیدا کرد.
تلاشها در جهت ایجاد استانداردی بود که بتواند توسط کامپیوترها و شبکه های
متفاوت دولتی در آمریکا مورد استفاده قرار گیرد و همچنین در سیستم های
پیمانکاران دولتی نیز مفید واقع شود. تلاشهای مذکور منجر به ایجاد
استاندارد رمزنگاری داده یا Data Encryption Standard (DES) گشت که امروزه
به صورت وسیعی در رمزنگاری مورد استفاده قرار می گیرد. در سال 1965 موسسه
ملی استانداردها و فناوری آمریکا که امروزه با نام NIST شناخته می شود،
مسئولیت تعیین استانداردهای محافظت از سیستم های کامپیوتری را بر عهده
گرفت. موسسه مذکور در فاصله سالهای 1968 تا 1971 به مطالعه و تحقیق در مورد
نیازهای امنیتی سیستم های کامپیوتری دولتی پرداخت که در نهایت منجر به
تهیه یک استاندارد رمزنگاری شد. موسسه NIST با همکاری NSA یا آژانس امنیت
ملی آمریکا، نخستین برنامه رمزنگاری را تولید کرد. در اوایل کار هدف ایجاد
یک استاندارد واحد برای محافظت از داده های طبقه بندی شده دولتی و اطلاعات
حساس بخش خصوصی بود که از طرفی بتواند بین 10 تا 15 سال دوام آورد (هدفی که
DES بسیار پیشتر از آن رفت) و از طرفی نیز قابل استفاده در انواع سیستم
های مختلف حتی سیستم های کند باشد. در آگوست 1974، NSA از تولید کنندگان
الگوریتم های رمزنگاری برای بار دوم دعوت کرد تا روش های خود را اعلام کنند
تا شاید در ایجاد یک استاندارد رمزنگاری عمومی با کیفیت بالا مورد استفاده
قرار گیرد. در این زمان IBM الگوریتمی را ارائه کرد که مورد قبول NSA واقع
شد. در شرکت IBM تا قبل از آن کارهایی برای توسعه چندین الگوریتم متفاوت
رمزنگاری انجام شده بود. یکی از آنها یک الگوریتم 64 بیتی بود که برای
محافظت از تراکنش های مالی به کار می رفت و دیگری یک الگوریتم 128 بیتی به
نام Lucifer بود. آژانس امنیت ملی آمریکا در آن زمان از طرفی IBM را تشویق
به ثبت الگوریتم Lucifer کرد و از طرف دیگر به متخصصان خود اجازه داد تا
سعی کنند ارتباطات رمزنگاری شده توسط الگوریتم مذکور را بشکنند. لذا
الگوریتم مذکور بعد از بررسی پایه های ریاضی و سعی در شکستن آن، دچار
تغییرات و اصلاحاتی شد (برای مثال طول کلید از 128 بیت به 56 بیت کاهش یافت
و تغییراتی در توابع جایگزینی انجام شد) تا به تولد DES منجر شد. بالاخره
در سال 1977 این الگوریتم به عنوان استاندارد رمزنگاری داده منتشر شد و به
عنوان روشی رسمی در محافظت از داده های طبقه بندی نشده در مؤسسات دولتی
آمریکا مورد استفاده قرار گرفت. در عین حال NSA موظف شد تا هر پنج سال یک
بار این الگوریتم را مورد مطالعه قرار دهد و تأیید کند که هنوز می تواند به
عنوان استاندارد به کار رود. قابل ذکر است که این روش بستگی به مخفیبودن
کلید دارد. بنابراین برای استفاده در دو موقعیت مناسب است: هنگامی که
کلیدها میتوانند به یک روش قابل اعتماد و امن توزیع و ذخیره شوند یا جایی
که کلید بین دو سیستمی مبادله میشود که قبلا هویت یکدیگر را تایید
کردهاند. عمر کلیدها بیشتر از مدت تراکنش طول نمیکشد. رمزنگاری DES عموما
برای حفاظت دیتا از شنود در طول انتقال استفاده میشود.
استاندارد رمزنگاری یا DES چیست؟
در FIPS PUB 46 تعریف DES اینگونه آمده است:
استاندارد رمزنگاری داده (DES) یک الگوریتمی ریاضی است که برای رمزنگاری و رمزگشایی اطلاعات کدشده باینری به کار می رود. رمزنگاری داده ها را تبدیل به داده های نامفهومی به نام cipher می کند. رمزگشایی از cipher آن را به داده های اصلی بازمی گرداند. الگوریتم مذکور هر دو عملیات رمزنگاری و رمزگشایی را بر اساس یک عدد باینری به نام کلید مشخص می سازد ... داده ها تنها در صورتی قابل بازیابی از cipher هستند که دقیقاً از کلیدی که برای رمزنگاری استفاده شده برای رمزگشایی نیز استفاده شود.
الگوریتم DES دارای دو جزء است: یک الگوریتم رمزنگاری و کلید. الگوریتم DES منتشر شده شامل چندین تکرار از یک تغییر شکل ساده با استفاده از هر دو تکنیک جابجایی و جایگزینی (به رمزنگاری چیست مراجعه کنید) است. این الگوریتم تنها از یک کلید برای رمزنگاری و رمزگشایی استفاده می کند و به همین جهت به آن رمزنگاری کلید اختصاصی نیز گفته می شود. همان طور که در مقاله کلیدهای رمزنگاری توضیح دادیم در این حالت حفظ کلید به صورت محرمانه توسط فرستنده و گیرنده پیغام بسیار اهمیت دارد زیرا الگوریتم به صورت عمومی در اختیار همگان است و در صورت لو رفتن کلید، هر کسی می تواند پیغام محرمانه را ببیند. به همین جهت در رمزنگاری DES معمولاً عمر کلید به اندازه عمر تراکنش است.
کلید DES یک توالی هشت بایتی است که هر بایت شامل یک کلید هفت بیتی و یک بیت توازن است. در حین رمزنگاری، الگوریتم DES متن اصلی را به بلوک های 64 بیتی می شکند. این الگوریتم در هر زمان بر روی یک بلوک کار می کند و آن را از نصف شکسته و کاراکتر به کاراکتر رمزنگاری می کند. کاراکترها 16 بار تحت نظارت کلید تغییر شکل پیدا کرده و در نهایت یک متن رمزنگاری شده 64 بیتی تولید می شود. کلید حاوی 56 بیت معنادار و هشت بیت توازن است.
در سال 1997 در یک تلاش همگانی و با استفاده از 14 هزار رایانه یک پیغام رمزنگاری شده توسط DES شکسته شد که البته چندان باعث نگرانی نیست. زیرا در بیشتر انتقال پیغام ها، به خصوص در نقل و انتقالات مالی، یک بازه زمانی وجود دارد که در آن اطلاعات باید کاملاً محرمانه نگه داشته شود و بعد از آن فاش شدن آنها چندان اهمیت نخواهد داشت.
بعد از سقوط DES بسیاری از مؤسسات از DES سه گانه استفاده کردند که به عنوان 3DES شناخته می شود و در آن DES سه بار تکرار می شود(دو مرتبه با استفاده از یک کلید به سمت جلو (رمزنگاری) و یک مرتبه به سمت عقب (رمزگشایی) با یک کلید دیگر). به این صورت طول کلید به طرز مؤثری افزایش پیدا می کند و منجر به ارتقای امنیت می شود، هر چند که هیچ کس مطمئن نیست این روش تا کی جواب می دهد.
به هرحال DES به حیات خود ادامه می دهد زیرا اولاً هر کسی می تواند به راحتی از آن استفاده کند و ثانیاً قابلیت حفظ محرمانگی را برای مدت کوتاهی دارد که برای بسیاری از برنامه های کاربردی، زمان مناسبی محسوب می شود.
رمزنگاری DES چهار مد مجزا را فراهم می کند که از لحاظ پیچیدگی و موارد کاربرد متفاوت هستند. در زیر هر کدام از مد ها به صورت خلاصه شرح داده شده اند:
استاندارد رمزنگاری داده (DES) یک الگوریتمی ریاضی است که برای رمزنگاری و رمزگشایی اطلاعات کدشده باینری به کار می رود. رمزنگاری داده ها را تبدیل به داده های نامفهومی به نام cipher می کند. رمزگشایی از cipher آن را به داده های اصلی بازمی گرداند. الگوریتم مذکور هر دو عملیات رمزنگاری و رمزگشایی را بر اساس یک عدد باینری به نام کلید مشخص می سازد ... داده ها تنها در صورتی قابل بازیابی از cipher هستند که دقیقاً از کلیدی که برای رمزنگاری استفاده شده برای رمزگشایی نیز استفاده شود.
الگوریتم DES دارای دو جزء است: یک الگوریتم رمزنگاری و کلید. الگوریتم DES منتشر شده شامل چندین تکرار از یک تغییر شکل ساده با استفاده از هر دو تکنیک جابجایی و جایگزینی (به رمزنگاری چیست مراجعه کنید) است. این الگوریتم تنها از یک کلید برای رمزنگاری و رمزگشایی استفاده می کند و به همین جهت به آن رمزنگاری کلید اختصاصی نیز گفته می شود. همان طور که در مقاله کلیدهای رمزنگاری توضیح دادیم در این حالت حفظ کلید به صورت محرمانه توسط فرستنده و گیرنده پیغام بسیار اهمیت دارد زیرا الگوریتم به صورت عمومی در اختیار همگان است و در صورت لو رفتن کلید، هر کسی می تواند پیغام محرمانه را ببیند. به همین جهت در رمزنگاری DES معمولاً عمر کلید به اندازه عمر تراکنش است.
کلید DES یک توالی هشت بایتی است که هر بایت شامل یک کلید هفت بیتی و یک بیت توازن است. در حین رمزنگاری، الگوریتم DES متن اصلی را به بلوک های 64 بیتی می شکند. این الگوریتم در هر زمان بر روی یک بلوک کار می کند و آن را از نصف شکسته و کاراکتر به کاراکتر رمزنگاری می کند. کاراکترها 16 بار تحت نظارت کلید تغییر شکل پیدا کرده و در نهایت یک متن رمزنگاری شده 64 بیتی تولید می شود. کلید حاوی 56 بیت معنادار و هشت بیت توازن است.
در سال 1997 در یک تلاش همگانی و با استفاده از 14 هزار رایانه یک پیغام رمزنگاری شده توسط DES شکسته شد که البته چندان باعث نگرانی نیست. زیرا در بیشتر انتقال پیغام ها، به خصوص در نقل و انتقالات مالی، یک بازه زمانی وجود دارد که در آن اطلاعات باید کاملاً محرمانه نگه داشته شود و بعد از آن فاش شدن آنها چندان اهمیت نخواهد داشت.
بعد از سقوط DES بسیاری از مؤسسات از DES سه گانه استفاده کردند که به عنوان 3DES شناخته می شود و در آن DES سه بار تکرار می شود(دو مرتبه با استفاده از یک کلید به سمت جلو (رمزنگاری) و یک مرتبه به سمت عقب (رمزگشایی) با یک کلید دیگر). به این صورت طول کلید به طرز مؤثری افزایش پیدا می کند و منجر به ارتقای امنیت می شود، هر چند که هیچ کس مطمئن نیست این روش تا کی جواب می دهد.
به هرحال DES به حیات خود ادامه می دهد زیرا اولاً هر کسی می تواند به راحتی از آن استفاده کند و ثانیاً قابلیت حفظ محرمانگی را برای مدت کوتاهی دارد که برای بسیاری از برنامه های کاربردی، زمان مناسبی محسوب می شود.
رمزنگاری DES چهار مد مجزا را فراهم می کند که از لحاظ پیچیدگی و موارد کاربرد متفاوت هستند. در زیر هر کدام از مد ها به صورت خلاصه شرح داده شده اند:
-
ECB
این مد همان Electronic Codebook است و برای هر بلوک از داده مشخص و یک کلید مشخص، همواره یک متن رمزنگاری شده ثابت تولید می شود. از مد ECB برای رمزنگاری کلیدها استفاده می شود. -
CBC
این مد Cipher Block Chaining است که مد ارتقایافته ECB است. در این مد بلوک های رمزنگاری شده به هم زنجیر می شوند. برخلاف مد ECB که در آن بلوک های ورودی یکسان خروجی یکسانی داشتند و ممکن بود منجر به افشای الگو شوند، در اینجا CBC هر بلوک را با استفاده از متن اصلی، کلید و یک مقدار سوم رمزنگاری می کند که وابسته به بلوک قبلی است و لذا تکرار رمزنگاری که به آن زنجیرسازی گفته می شود منجر به پنهان سازی الگوهای تکراری می شود. -
CFB
مد Cipher Feedback از متونی که قبلاً رمزنگاری شده اند به عنوان ورودی DES برای تولید شبه تصادفی خروجی استفاده می کند. این خروجی با متن اصلی ترکیب شده تا متن رمزنگاری شده را تولید کند. از این مد برای رمزنگاری کاراکترهای تنها استفاده می شود. -
OFB
مد Output Feedback بسیار شبیه به CFB است ولی مانند آن به زنجیر کردن متون رمزنگاری شده نمی پردازد و به جای آن یک سری پردازش دیگر بر روی متن اصلی انجام می دهد. از این مد برای رمزنگاری ارتباطات ماهواره ای استفاده می شود.
مدهای CBC و CFB تأیید
پیغام و رمزنگاری را تؤاماً انجام می دهند. تأیید پیغام جهت اطمینان از
مطابقت متن ارسال شده و متن دریافت شده است. در هنگام رمزنگاری DES بلوک
های متن به هم لینک می شوند، در مدهای CFB و CBC رمزنگاری هر بلوک وابسته
به رمزنگاری بلوک قبل از آن است. به علت وجود همین اتصال، در صورت ایجاد
تغییر حتی در یک کاراکتر، بلوک نهایی رمزنگاری شده نیز تغییر خواهد کرد.
لذا بلوک آخر به عنوان یک کد تأیید هویت کار می کند و از یک cryptographic
checksum برای آزمایش دقت انتقال و تشخیص دستکاری پیغام استفاده می شود.
کلیدهای DES ۴۰بیتی امروزه در عرض چندین ساعت توسط کامپیوترهای معمولی شکسته میشوند و بنابراین نباید برای محافظت از اطلاعات مهم و با مدت اعتبار طولانی استفاده شود. کلید ۵۶ بیتی عموما توسط سختافزار یا شبکههای بخصوصی شکسته میشوند.
کلیدهای DES ۴۰بیتی امروزه در عرض چندین ساعت توسط کامپیوترهای معمولی شکسته میشوند و بنابراین نباید برای محافظت از اطلاعات مهم و با مدت اعتبار طولانی استفاده شود. کلید ۵۶ بیتی عموما توسط سختافزار یا شبکههای بخصوصی شکسته میشوند.
استاندارد پیشرفته رمزنگاری یا AES چیست؟
مؤسسه NIST سالها با
گروههای رمزنگاری همکاری کرد تا استاندارد رمزنگاری پیشرفته ای را تدوین
نماید. هدف کلی توسعه استانداردی بود که توانایی محافظت از اطلاعات حساس را
برای حداقل یک دهه دارا باشد. مسابقات بسیاری انجام شد تا الگوریتمی که
باید پایه استاندارد رمزنگاری پیشرفته (AES) باشد، معین گردد. بالاخره در
سال 1999، بین پنج الگوریتمی که به فاینال رسیدند، الگوریتم Rijndael
انتخاب شد که توسط Joan Daemon و Vincent Rijmen نوشته شده بود. الگوریتم
هایی که به فاینال راه پیدا کرده بودند عبارتند از: MARS، RC6، Rijndael،
Serpent و Twofish. استاندارد FIPS-197 در همین رابطه تهیه شده است و
الگوریتم مذکور را به عنوان یک رمزنگاری متقارن تعریف می کند که سازمان های
دولتی آمریکا باید با استفاده از آن، اطلاعات حساس را رمزنگاری کنند. از
آنجایی که اثبات قابل اعتماد بودن الگوریتم مذکور کار بسیار دشواری بود،
بسیاری از کشورها و ملیت های دیگر نیز به پروژه AES پیوستند و به آزمایش
این الگوریتم پرداختند و از آنجایی که مشکلی در این مورد پیدا نشد،
الگوریتم مذکور روز به روز قابلیت اعتماد بیشتری را کسب کرد.
طرز کار AES
الگوریتم Rijndael بایت به
بایت کار می کند و ورودی اصلی را با کلید رمزنگاری در یک ماتریس 4×4 جفت می
کند. کلید، به طریقی تقسیم یا برنامه ریزی شده است که بتواند در مراحل
مختلف تکرار به تدریج تزریق شود. اولین قسمت کلید قبل از شروع پروسه 10
مرحله ای تزریق می شود. در هر کدام از این مراحل، بایتها جابجا می شوند،
ردیف ها شیفت پیدا می کنند و ستونها ترکیب می شوند.
-
SubBytes
در پروسه جابجایی، بایت های متن ورودی در یک جعبه جابجایی به نام S-box قرار می گیرند که یک ماتریس 16×16 است. هر بایت در یک تقاطع سطر و ستون این ماتریس جا می گیرد. برای پیدا کردن جای هر بایت اولین عدد صحیح مبنای 16 (nibble) در یک بایت متن اصلی گرفته شده و از آن برای مشخص کردن سطر S-box استفاده می شود و سپس از دومین nibble برای مشخص کردن ستون استفاده می شود. کاراکتری که در تقاطع سطر و ستون انتخاب شده ذخیره می گردد به عنوان SubByte برای متن اصلی شناخته می شود. این پروسه برای هر 16 بایت در ماتریس تکرار می شود.
-
شیفت ردیف و ترکیب ستونها
بایت هایی که باید رمزنگاری شوند، توسط جایگذاری تعویض می شوند وسپس ردیف ها شیفت پیدا می کنند. برای مثال اولین ردیف دست نخورده باقی می ماند، ردیف دوم یک محل به راست جابجا می شود، سومین ردیف دو محل جابجا می شود و آخرین ردیف نیز سه محل جابجا می شود. این پروسه توسط یک فاز ترکیب ستونها دنبال می شود که در آن هر ستون از ماتریس در یک ماتریس دیگر ضرب می شود تا موقعیت ستون تغییر پیدا کند.
-
کلیدهای Round
در مرحله بعدی یک کلید round به هر ستون اضافه می شود. این کلید در واقع یک تکه کوچک از یک کلید محرمانه است که برای مراحل بعدی رمزنگاری تزریق می شود. -
تکرار
این تبدیل ها 9 بار دیگر تکرار می شوند. در تکرار آخر ترکیب ستون ها وجود ندارد و با اضافه کردن کلید round متن رمزنگاری شده به دست می آید. کلید نیز به نوبه خود شیفت پیدا می کند، گرد می شود و به خودش اضافه می شود.