رمز قالبی: تفاوت میان نسخهها
بدون خلاصۀ ویرایش |
بدون خلاصۀ ویرایش |
||
خط ۲: | خط ۲: | ||
تابع رمزنگاری برای قالبهای n بيتی متن رمزشده، و قالبهای n بيتی متن اصلی همراه با کليد ثابت(k)، يک تابع يک به يک و پوشا است. یعنی اگر تابع [[رمزگذاری]](E) را تحت کنترل کليد (k) به يک قالب از متن اصلی(M) اعمال کنيم، يک قالب از متن رمزشده(c) بدست میآيد. حال اگر تابع رمزگشایی(D) را تحت کنترل همان کليد(k) به اين قالب متن رمز شده(c) اعمال کنيم، متن اصلی(M) دوباره بازيابی میشود: |
تابع رمزنگاری برای قالبهای n بيتی متن رمزشده، و قالبهای n بيتی متن اصلی همراه با کليد ثابت(k)، يک تابع يک به يک و پوشا است. یعنی اگر تابع [[رمزگذاری]](E) را تحت کنترل کليد (k) به يک قالب از متن اصلی(M) اعمال کنيم، يک قالب از متن رمزشده(c) بدست میآيد. حال اگر تابع رمزگشایی(D) را تحت کنترل همان کليد(k) به اين قالب متن رمز شده(c) اعمال کنيم، متن اصلی(M) دوباره بازيابی میشود: |
||
{{چپچین}} |
|||
E(D(M)) = M. |
E(D(M)) = M. |
||
{{پایان چپچین}} |
|||
همچنين اگر تابع [[رمزگشایی]](D) را تحت کنترل کليد (k) به يک قالب از متن رمزشده(C) اعمال کنيم، يک قالب از متن اصلی(M) بدست میآيد. حال اگر تابع رمزگذاری(E) را تحت کنترل همان کليد(k) به اين قالب متن اصلی(M) اعمال کنيم، متن رمزشده(C) دوباره بازيابی میشود: |
همچنين اگر تابع [[رمزگشایی]](D) را تحت کنترل کليد (k) به يک قالب از متن رمزشده(C) اعمال کنيم، يک قالب از متن اصلی(M) بدست میآيد. حال اگر تابع رمزگذاری(E) را تحت کنترل همان کليد(k) به اين قالب متن اصلی(M) اعمال کنيم، متن رمزشده(C) دوباره بازيابی میشود: |
||
{{چپچین}} |
|||
D(E(C)) = C .<ref> |
D(E(C)) = C .<ref> A. Menezes, P. van Oorschot and S. Vanstone, “Handbook of Applied Cryptography”, 1997,PP 191-282. http://www.cacr.math.uwaterloo.ca/hac</ref> |
||
{{پایان چپچین}} |
|||
==ساختارهاي مختلف رمزهاي بلوكي== |
==ساختارهاي مختلف رمزهاي بلوكي== |
||
خط ۲۹: | خط ۲۹: | ||
از رمزهای بلوکی معروف مبتنی بر شبکه شبکه جابجايی- جانشينی میتوان رمزهای زير را نام برد: |
از رمزهای بلوکی معروف مبتنی بر شبکه شبکه جابجايی- جانشينی میتوان رمزهای زير را نام برد: |
||
{{چپچین}} |
|||
AES، ABC، 3way، Akelarre ، Anubis، ARIA، BaseKing، BEAR and LION، CRYPTON |
AES، ABC، 3way، Akelarre ، Anubis، ARIA، BaseKing، BEAR and LION، CRYPTON |
||
{{پایان چپچین}} |
|||
==ساختار مبتنی بر شبکه فيستل== |
==ساختار مبتنی بر شبکه فيستل== |
||
در اين ساختار برای رمزگذاری، ابتدا متن اصلی به دو قسمت تقسيم میشود. سپس بر روی قسمت سمت راست ساختار، با استفاده از تابع F عمليات رمزگذاری صورت گرفته، خروجی تابع F (يا به نحوی تغيير يافته آن) با قسمت سمت راست XOR میشود. سپس برای دور بعدی مکان دو قسمت سمت راست و چپ با يکديگر جابجا میشوند: |
در اين ساختار برای رمزگذاری، ابتدا متن اصلی به دو قسمت تقسيم میشود. سپس بر روی قسمت سمت راست ساختار، با استفاده از تابع F عمليات رمزگذاری صورت گرفته، خروجی تابع F (يا به نحوی تغيير يافته آن) با قسمت سمت راست XOR میشود. سپس برای دور بعدی مکان دو قسمت سمت راست و چپ با يکديگر جابجا میشوند: |
||
{{چپچین}} |
|||
R_(i+1) = L_i ⊕ F(R_i,K_i) |
R_(i+1) = L_i ⊕ F(R_i,K_i) |
||
L_(i+1) = R_i |
L_(i+1) = R_i |
||
{{پایان چپچین}} |
|||
نحوة رمزگشايی نيز مانند نحوة رمزگذاری است با اين تفاوت که در رمزگشايی نحوه اعمال زيرکليد، برعکس حالت رمزگذاری است. در اين ساختار برای رمزگشايی نيز مانند حالت رمزگذاری ابتدا متن رمزشده به دو قسمت تقسيم میشود، سپس بر روی قسمت سمت راست ساختار با استفاده از تابع F، عمليات رمزگشايی صورت گرفته، خروجی تابع F (يـا بـه نحوی تغيير يافته آن) بـا قسمت سمت راست XOR میشود. سپس برای دور بعدی مکان دو قسمت سمت راست و چپ با يکديگر جابجا میشود: |
نحوة رمزگشايی نيز مانند نحوة رمزگذاری است با اين تفاوت که در رمزگشايی نحوه اعمال زيرکليد، برعکس حالت رمزگذاری است. در اين ساختار برای رمزگشايی نيز مانند حالت رمزگذاری ابتدا متن رمزشده به دو قسمت تقسيم میشود، سپس بر روی قسمت سمت راست ساختار با استفاده از تابع F، عمليات رمزگشايی صورت گرفته، خروجی تابع F (يـا بـه نحوی تغيير يافته آن) بـا قسمت سمت راست XOR میشود. سپس برای دور بعدی مکان دو قسمت سمت راست و چپ با يکديگر جابجا میشود: |
||
{{چپچین}} |
|||
R_i = L_(i+1) |
|||
L_i = R_(i+1) ⊕ F(L_(i+1),K_i) |
|||
{{پایان چپچین}} |
|||
L_i = R_(i+1) ⊕ F(L_(i+1),K_i) |
|||
تفاوت اين ساختار بــا ساختار مبتنی بــر شبکه جابجايی- جانشينی اين است که، تابع F در اين ساختار لزوماً معکوس پذير نيست. همچنين اين ساختار برای رمزگذاری و يا رمزگشايی به دو قسمت تقسيم شده است، در حالی که در ساختار جابجايی- جانشينی برای رمزگذاری و يا رمزگشايی نيازی به تقسيمبندی متن اصلی نيست. |
تفاوت اين ساختار بــا ساختار مبتنی بــر شبکه جابجايی- جانشينی اين است که، تابع F در اين ساختار لزوماً معکوس پذير نيست. همچنين اين ساختار برای رمزگذاری و يا رمزگشايی به دو قسمت تقسيم شده است، در حالی که در ساختار جابجايی- جانشينی برای رمزگذاری و يا رمزگشايی نيازی به تقسيمبندی متن اصلی نيست. |
||
از رمزهای بلوکی معروف مبتنی بر شبکه فيستل میتوان رمزهای زير را نام برد: |
از رمزهای بلوکی معروف مبتنی بر شبکه فيستل میتوان رمزهای زير را نام برد: |
||
{{چپچین}} |
|||
DES،Blowfish ،Camellia , CAST-128 ،FEAL ،ICE، KASUMI ،LOKI97 ، Lucifer ، MARS، MAGENTA، MISTY1، RC5، TEA، Triple DES، Twofish. |
DES،Blowfish ،Camellia , CAST-128 ،FEAL ،ICE، KASUMI ،LOKI97 ، Lucifer ، MARS، MAGENTA، MISTY1، RC5، TEA، Triple DES، Twofish. |
||
{{پایان چپچین}} |
|||
==حالات مختلف کاری رمزهای بلوکی== |
==حالات مختلف کاری رمزهای بلوکی== |
نسخهٔ ۸ دسامبر ۲۰۱۱، ساعت ۲۰:۳۹
رمز قالبی نوعی رمز کليد متقارن است که در آن ابتدا بيتهای متن اصلی به بلوکهايی مجزا تقسيمبندی میشود، سپس الگوريتم رمزگذاری روی هر بلوک اعمال میگردد. طبق تعريف رياضی، رمز قالبی تابعی است که n بيت متن اصلی را تحت کنترل کليد K، به n بيت متن رمزشده تبديل میکند و نيز n بيت متـن رمزشده را تحت کنترل کليـد K، به n بيت متـن اصلی تبديل میکند . قالبهای متن اصلی و متن رمزشده تعداد بيت یکسانی دارند. اندازه قالب را با n يا b نمایش میدهند، که همان تعداد بيتهای آن قالب است.
تابع رمزنگاری برای قالبهای n بيتی متن رمزشده، و قالبهای n بيتی متن اصلی همراه با کليد ثابت(k)، يک تابع يک به يک و پوشا است. یعنی اگر تابع رمزگذاری(E) را تحت کنترل کليد (k) به يک قالب از متن اصلی(M) اعمال کنيم، يک قالب از متن رمزشده(c) بدست میآيد. حال اگر تابع رمزگشایی(D) را تحت کنترل همان کليد(k) به اين قالب متن رمز شده(c) اعمال کنيم، متن اصلی(M) دوباره بازيابی میشود:
E(D(M)) = M.
همچنين اگر تابع رمزگشایی(D) را تحت کنترل کليد (k) به يک قالب از متن رمزشده(C) اعمال کنيم، يک قالب از متن اصلی(M) بدست میآيد. حال اگر تابع رمزگذاری(E) را تحت کنترل همان کليد(k) به اين قالب متن اصلی(M) اعمال کنيم، متن رمزشده(C) دوباره بازيابی میشود:
D(E(C)) = C .[۱]
ساختارهاي مختلف رمزهاي بلوكي
رمزهاي بلوكي، دو ساختار كلي دارند:
ساختار مبتني بر شبكه فيستل: مانند رمز DES.
ساختار مبتني بر شبكه جابجايي- جانشيني: مانند رمز AES.
البته همه رمزهاي بلوكي لزوماً از اين دو ساختار تبعيت نميكنند، بلكه رمزهاي بلوكي ديگري نيز هستند كه ساختارهاي منحصر بفردي دارند؛ مانند الگوریتم رمز Keeloq که رمز بلوکی مبتنی بر ساختار NLFSR (شیفترحیسترهای غیرخطی) است. [۲]
ساختار مبتني بر شبكه جابجايي - جانشيني
اين ساختار از دو اصل در هم پيچيدگي و انتشار شانون تبعيت ميكند . با استفاده از در هم پيچيدگي،رابطه بين بيتهاي كليد و بيتهاي متن رمزشده، غيرخطي و پيچيده ميگردد. با استفاده از انتشار، افزونگي موجود در متن اصلي پس از رمزكردن در متن رمز شده پخش ميشود.
در اين ساختار از شبكه هاي جابجايي- جانشيني بصورت متوالي در چند دور استفاده ميگردد. در هر دور، بیتهای کلید دور با بیتهای متن اصلی XOR میشود. همچنین S_BOXها بیتهای یک بلوک از متن اصلی را با بیتهای دیگر جایگزین کرده P_BOXها بیتهای خروجی از S_BOXهای یک دور را با یکدیگر جابجا می کنند. درواقع درهمپیچیدگی توسط S_BOX و انتشار توسط P_BOX انجام میگیرد. در دور آخر جابجایی بیتی صورت نمیگیرد.نحوه رمزگشایی نیز ماندد رمزگذاری است با این تفاوت که در رمزگشایی نحوه اعمال زیرکلید برعکس رمزگذاری است.
اگر يک بيت از متن اصلی تغيير کند، بواسطه S_BOXها چندين بيت از خروجی تغيير خواهد نمود. سپس اين تغييرات توسط P_BOXها در S_BOXهای بعدی منتشر خواهد شد. در يک سيستم رمز بلوکی خوب، P_BOXها بيتهای مربوط به خروجی يک S_BOX را بطور کامل در S_BOXهای بعدی پراکنده میسازد. بدين ترتيب با تغيير يک بيت از متن اصلی، احتمال اين که يک بيت خاص از متن رمزشده تغيير کند، 0.5 است. به اين خاصيت، خاصيت بهمنی میگويند.
از رمزهای بلوکی معروف مبتنی بر شبکه شبکه جابجايی- جانشينی میتوان رمزهای زير را نام برد:
AES، ABC، 3way، Akelarre ، Anubis، ARIA، BaseKing، BEAR and LION، CRYPTON
ساختار مبتنی بر شبکه فيستل
در اين ساختار برای رمزگذاری، ابتدا متن اصلی به دو قسمت تقسيم میشود. سپس بر روی قسمت سمت راست ساختار، با استفاده از تابع F عمليات رمزگذاری صورت گرفته، خروجی تابع F (يا به نحوی تغيير يافته آن) با قسمت سمت راست XOR میشود. سپس برای دور بعدی مکان دو قسمت سمت راست و چپ با يکديگر جابجا میشوند:
R_(i+1) = L_i ⊕ F(R_i,K_i)
L_(i+1) = R_i
نحوة رمزگشايی نيز مانند نحوة رمزگذاری است با اين تفاوت که در رمزگشايی نحوه اعمال زيرکليد، برعکس حالت رمزگذاری است. در اين ساختار برای رمزگشايی نيز مانند حالت رمزگذاری ابتدا متن رمزشده به دو قسمت تقسيم میشود، سپس بر روی قسمت سمت راست ساختار با استفاده از تابع F، عمليات رمزگشايی صورت گرفته، خروجی تابع F (يـا بـه نحوی تغيير يافته آن) بـا قسمت سمت راست XOR میشود. سپس برای دور بعدی مکان دو قسمت سمت راست و چپ با يکديگر جابجا میشود:
R_i = L_(i+1)
L_i = R_(i+1) ⊕ F(L_(i+1),K_i)
تفاوت اين ساختار بــا ساختار مبتنی بــر شبکه جابجايی- جانشينی اين است که، تابع F در اين ساختار لزوماً معکوس پذير نيست. همچنين اين ساختار برای رمزگذاری و يا رمزگشايی به دو قسمت تقسيم شده است، در حالی که در ساختار جابجايی- جانشينی برای رمزگذاری و يا رمزگشايی نيازی به تقسيمبندی متن اصلی نيست.
از رمزهای بلوکی معروف مبتنی بر شبکه فيستل میتوان رمزهای زير را نام برد:
DES،Blowfish ،Camellia , CAST-128 ،FEAL ،ICE، KASUMI ،LOKI97 ، Lucifer ، MARS، MAGENTA، MISTY1، RC5، TEA، Triple DES، Twofish.
حالات مختلف کاری رمزهای بلوکی
برای استفاده از رمزهای بلوکی، بسته به نوع نياز از حالات مختلفی استفاده می¬کنيم. هر حالت مزايا و معايب خود را دارد. هيچ حالتی را نمیتوان يافت که کليه مزايا را داشته باشد، و هيچ مشکلی نداشته باشد. بر اين اساس، با توجه به نوع نياز و نيز محدوديتهايی چون سرعت، حافظه، تعداد بيتهای متن اصلی، اندازة برد سختافزاری و يا ميزان هزينة مورد نياز برای عمل رمزنگاری و يا رمزگشايی و ... ، از حالت بهينه استفاده میکنيم[6].
بر طبق استاندارد NIST ، رمزهای قالبی از لحاظ کاربردی 3 حالت دارند:
رمزهای قالبی مورد استفاده برای محرمانگی: که 6 حالت دارد.
فهرست داده الکترونيکی.
زنجيره بلوک-رمز.
فيدبک رمز.
فيدبک خروجی.
شمارنده.
رمز پيچشی با تنظيم افزونگی متن رمزشده.
رمزهای بلوکی مورد استفاده برای اعتبار پيام: که شامل يک حالت است.
رمز مبتنی بر کد اعتبار پيام.
رمزهای بلوکی مورد استفاده برای اعتبار پيام و محرمانگی: که 2 حالت دارد.
شمارنده با حالات زنجيره بلوک_رمز- کد اعتبار پيام.
حالت گالوا/ شمارنده.
حالات «زنجيرة بلوک رمز»، «فيدبک خروجی»، و «فيدبک رمز» علاوه بر متن اصلی و کليد رمز، به يک بردار مقدار اوليه نيز بعنوان ورودی نياز دارند. اين بردار مقدار اوليه برای هر حالت اجرايی از عمليات رمزنگاری و رمزگشايی، بعنوان اولين بلوک ورودی به تابع رمز استفاده میشوند. لزومی ندارد بردار مقدار اوليه را مخفی نگه داريم، اما اين بردار در حالت کلی، نبايد از طريق خود الگوريتم رمزنگاری و يا رمزگشايی، قابل تعيين و يا قابل پيشگويی باشد. البته در حالت «فيدبک خروجی» چنانچه بردار مقدار اوليه غيرقابل پيشگويی باشد، در امنيت سيستم رمز، مشکلی بوجود نمیآيد. بنابراين برای هر قسمت از متن رمزشدة ارسالی، بايد بردار مقدار اوليه يا اطلاعاتی که برای محاسبة آن مورد نياز است، در دسترس باشد؛ زيرا ما برای هر قسمت از متن رمزشدة ارسالی برای ايجاد محرمانگی، به يک بردار مقدار اوليه يکتا نياز داريم. برای کلیه حالات، بلوکها يا بندهای متن اصلی به بلوکها يا بندهای متن رمز شده متناظر، با طول بيتی يکسان تبديل میشوند.
منابع
- ↑ A. Menezes, P. van Oorschot and S. Vanstone, “Handbook of Applied Cryptography”, 1997,PP 191-282. http://www.cacr.math.uwaterloo.ca/hac
- ↑ sidechannelattack