کاسومی
کاسومی یک رمزگذاری قطعه‌ای است که در سامانه جهانی مخابرات سیار، جی‌اس‌ام، سرویس بسته امواج رادیویی تلفن همراه استفاده می‌شود. در سامانه جهانی مخابرات سیار، کاسومی به عنوان الگوریتم‌های رازداری و یکپارچگی داده‌ها به ترتیب به نام‌های و به کار رفته‌است. در جی‌اس‌ام، کاسومی در تولیدکنندهٔ جریان‌کلید برای A5/3 به کار رفته‌است. در سرویس بسته امواج رادیویی، کاسومی در تولیدکنندهٔ جریان‌کلید برای GEA3 به کار رفته‌است.
کاسومی برای پروژه مشارکتی نسل سوم شبکه تلفن همراه طراحی شده بود تا به وسیلهٔ گروهی از متخصصان الگوریتم‌های امنیتی (بخشی از سازمان استانداردهای اروپایی به نام نهاد استانداردهای مخابراتی اروپا) در سامانه امنیتی سامانه جهانی مخابرات سیار به کار رود.
به خاطر برنامهٔ فشرده برای استانداردسازی 3GPP، گروه SAGE پیشنهاد گروه فنی مخصوص 3GPP را در مورد بخش امنیتی 3G قبول کرد. پیشنهاد به این صورت بود که برای بخش امنیتی، به جای توسعه یک الگوریتم رمزگذاری جدید، از یک الگوریتم موجود که مورد ارزیابی قرار گرفته بود، استفاده شود. آن‌ها برای این کار، الگوریتم را که توسعه‌یافته بود و توسط میتسوبیشی الکتریک، ثبت‌شده بود را انتخاب کردند. اصل الگوریتم برای پیاده‌سازی راحت‌تر توسط سخت‌افزار و فراهم‌کردن دیگر مجموعه نیازمندی‌های لازم برای امنیت ارتباطی تلفن‌های همراه 3G، مقداری تغییر کرد.
اسم کوسامی که بعد از نام اصلی الگوریتم به علت معادل ژاپنی برای انتخاب شد. (به هیراگانا معادل かすみ و به روماجی معادل "kasumi" است)
در ژانویه ۲۰۱۰، اوردانکلمن ، ناتان‌کلر و ادی شامیر یک مقاله‌ای را منتشر نمودند که در آن نشان‌داده شده بود که می‌توان الگوریتم کوسامی را با یک حمله کلیدهای مرتبط و منابع محاسباتی خیلی مدرن، شکست. البته این حمله در برابر MYSTY1 بی‌اثر بود.
کاسومی یک الگوریتم است که به صورت خاص در تکنولوژی‌های 3GPP تعریف‌شده‌است. کاسومی یک رمزگذاری قطعه‌ای با کلیدی به طول ۱۲۸ بیت، ورودی و خروجی ۶۴ بیتی است. هستهٔ اصلی کاسومی یک شبکهٔ فایستل با ۸ دور می‌باشد. توابع هر دور شبکهٔ فایستل، تبدیلات شبکه‌ای برگشت هستند. در هر دور، تابع مربوط به دور از یک زیرکلید ۱۶ بیتی که از طریق کلید ۱۲۸ بیتی اصلی الگوریتم و توسط یک زمان‌بند کلید ثابت تولیدشده است، استفاده می‌کند.
کلید اصلی ۱۲۸ بیتی به اسم formula_1، به ۸ زیرکلید ۱۶ بیتی formula_2 تقسیم می‌شود:
formula_3
همچنین در کنار کلید اصلی، یک کلید تغییریافته به اسم formula_4 استفاده می‌شود که به روش مشابه، به ۸ زیرکلید ۱۶ بیتی formula_5 تقسیم می‌شود. این کلید تغییریافته به وسیلهٔ یای‌انحصاری کلید اصلی formula_1 با عدد formula_7 به دست می‌آید.
این زیرکلیدهای هر دور، به وسیلهٔ چرخش بیتی به سمت چپ با مقداری مشخص یا از طریق کلیدهای تغییریافته (بدون تغییر) محاسبه می‌شوند.
کلیدهای ۸ دو به صورت زیر هستند:
formula_8
زیراندیس‌های به کار رفته در فرمول‌های بالا به صورت گردشی است، یعنی اگر یک زیراندیس به صورت formula_9 از عدد ۸ بزرگتر شد، باید ۸ تا از آن کم شود تا مقدار واقعی اندیس محاسبه شود.
الگوریتم کاسومی یک کلید ۶۴ بیتی را به صورت ۲ بخش ۳۲ بیتی در قالب بخش چپ (formula_10) و بخش راست (formula_11) پردازش می‌کند. ورودی الگوریتم کاسومی، الحاق سمت چپ و راست از اولین دور می‌باشد:
formula_12
در هر دور، بخش سمت راست (formula_11) با خروجی تابع دور، یای‌انحصاری می‌شود و بعد از آن، جای دو بخش سمت چپ و راست تغییر می‌کند. (در تابع زیر، formula_14 همان کلیدهای دور formula_15ام محسوب می‌شوند)
formula_16
تابع دور برای دورهای زوج و فرد متفاوت می‌باشد. با این حال، در هر دور، تابع دور یک تابع از دو بخش formula_17 و formula_18 است. برای دورهای فرد، تابع دور به صورت زیر است:
formula_19
و برای دورهای زوج، تابع دور به صورت زیر است:
formula_20.
خروجی الگوریتم، الحاق بخش‌های خروجی دور آخر می‌باشد.
formula_21
هر دو تابع formula_22 و formula_23 ورودی ۳۲ بیتی خود را به دو بخش ۱۶ بیتی تبدیل می‌کنند. تابع formula_22 یک تابع تغییر بیت‌ها به صورت بازگشت‌پذیر است در حالی که تابع formula_23 یک شبکه فایستل ۳ دوره بازگشت‌ناپذیر است.
ورودی ۳۲ بیتی (formula_27) تابع formula_28، به دو بخش ۱۶ بیتی تقسیم می‌شود: formula_29
بخش سمت چپ ورودی (formula_30) با کلید دور formula_31، به صورت بیتی عطف منطقی می‌شود و سپس به اندازهٔ یکی بیت، به سمت چپ چرخش داده می‌شود. خروجی آن، با سمت راست ورودی (formula_32)، یای‌انحصاری می‌شود تا سمت راست خروجی (formula_33) تولید شود:
formula_34
سپس خروجی قبلی (formula_33) با کلید دور formula_36 فصل منطقی می‌شود و سپس به اندازهٔ یک بیت به سمت چپ، چرخش پیدا می‌کند. سپس خروجی آن، با سمت چپ ورودی (formula_30) یای‌انحصاری می‌شود تا سمت چپ خروجی (formula_38) تولید شود:
formula_39
در نهایت خروجی، الحاق دو بخش سمت چپ و راست می‌باشد: formula_40
ورودی ۳۲ بیتی (formula_27) تابع formula_43، به دو بخش ۱۶ بیتی تقسیم می‌شود: formula_44
سپس در درون ۳ دور از شبکهٔ فایستل عبور می‌کند.
در هر یک از سه دور شبکهٔ فایستل (دارای اندیس‌های ۱ و ۲ و ۳) سمت چپ تغییر می‌کند تا سمت راست دور بعدی را بسازد و سمت راست، به عنوان سمپ چپ دور بعدی استفاده می‌شود.
formula_45
در نهایت خروجی تابع به صورت روبرو خواهد بود: formula_46
تابع formula_47 یک شبکه فایستل غیرمعمولی است.
ورودی ۱۶ بیتی (formula_27) تابع formula_50 به دو بخش به صورت روبرو تقسیم می‌شود: formula_44
طول بخش formula_52 به اندازهٔ ۹ بیت و طول بخش formula_53، ۷ بیت است.
بیت‌های موجود در بخش چپ (formula_52) ابتدا توسط یک جعبهٔ جایگزینی (به نام formula_55) مخلوط شده و نتیجه با گسترش‌یافتهٔ بخش راست (formula_53) با بیت صفر، فصل منطقی می‌شود تا بخش سمت راست جدید (formula_57) تولید شود:
formula_58
بیت‌های موجود در بخش راست (formula_53) با یک جعبهٔ جایگزینی ۷ بیتی (به نام formula_60) مخلوط شده و سپس نتیجهٔ آن با هفت بیت کم‌ارزش (formula_61) سمت راست جدید (formula_57)، فصل منطقی می‌شود تا ۷ بیت جدید سمت چپ (formula_63) تولید شود:
formula_64
در این‌جا کلمهٔ میانی formula_65 با کلید دور formula_66 فصل منطقی می‌شود تا formula_67 تولید شود که در آن formula_68 به طول ۷ بیت و formula_69 به طول ۹ بیت است:
formula_70
بیت‌های موجود در بخش راست (formula_69) ابتدا توسط یک جعبهٔ جایگزینی (به نام formula_55) مخلوط شده و نتیجه با گسترش‌یافتهٔ بخش راست (formula_68) با بیت صفر، فصل منطقی می‌شود تا بخش سمت راست جدید (formula_74) تولید شود:
formula_75
بیت‌های موجود در بخش چپ (formula_68) با یک جعبهٔ جایگزینی ۷ بیتی (به نام formula_60) مخلوط شده و سپس نتیجهٔ آن با هفت بیت کم‌ارزش (formula_61) سمت راست جدید (formula_74)، فصل منطقی می‌شود تا ۷ بیت جدید سمت چپ (formula_80) تولید شود:
formula_81
در نهایت خروجی تابع از الحاق دو بخش نهایی چپ و راست تولید می‌شود: formula_82
جعبه‌های جایگزنی به نام‌های S7 و S9 هر دو توسط عملیات عطف منطقی و یای انحصاری و جدول‌ها تعریف می‌شوند. عملیاتی منطقی برای پیاده‌سازی سخت‌افزاری استفاده می‌شوند ولی امروزه اکثراً برای نمایش آن از جدول‌ها استفاده می‌شوند.
جدول جایگزینی S7 به صورت زیر تعریف‌شده‌است: int S7[128] = {
جدول جایگزینی S9 به صورت زیر تعریف‌شده‌است: int S9[512] = {
در سال ۲۰۰۱، یک حلمه دیفرانسیلی غیرممکن برای ۶ دور کاسومی توسط Kühn معرفی شد.
در سال ۲۰۰۳، الادبارکن ، الی‌بیهام و ناتان‌کلر یک حملهٔ مرد میانی را در برابر پروتکل جی‌اس‌ام معرفی کردند که مانع از رمزگذاری A5/3 شده و سبب شکستن پروتکل شد. اما این روش به رمزگذاری A5/3 حمله نکرد. نسخهٔ کامل این مقاله بعدها رد سال ۲۰۰۶ منتشر شد.
در سال ۲۰۰۵، الی‌بیهام ، یک محقق اسرائیلی، اردانکلمن و ناتن‌کلر یک مقاله در مورد حمله بومرنگ برای کاسومی منتشر نمود که می‌تواند خیلی سریع‌تر از حمله جستجوی فراگیر ۸ دور کاسومی را بشکند. این حمله به 2 متن آشکار که هر کدام توسط ۴ کلید مرتبط به هم، رمز شده‌اند نیاز دارد و دارای پیچیدگی زمانی برابر با 2 عمل رمزگذاری کاسومی است. اگر چه این یک حمله کاربردی نیست، اما اعتبار برخی از اثبات‌ها را در مورد امنیت رمزگذاری پروتکل 3GPP را که بر اساس امنیت از پیش تعیین‌شدهٔ کاسومی بود، بی‌ارزش کرد.
در سال ۲۰۱۰، دانلکمن و کلر و شمیر یک حملهٔ جدید را منتشر نمودند که یک شنونده اجازه می‌داد تا بتواند کلید کامل A5/3 را توسط حملهٔ کلیدهای مرتبط بدست آورد. مدت زمان و پیچیدگی فضای حمله آن قدر کم بود که حتی نویسندگان معتقد بودند که با یک کامپیوتر اینتل کور ۲ و حتی استفاده از پیاده‌سازی‌های غیر بهینهٔ کاسومی، آن را می‌توان در ۲ ساعت شکست. نویسندگان اشاره کرده بودند که شاید حمله برای روش A5/3 که در سامانه‌های 3G استفاده شده‌است، قابل استفاده نباشد. دلیل اصلی آن‌ها این بود که 3GPP تضمین کرده بود که تغییرات آن‌ها در الگوریتم MISTY، به صورت جدی امنیت الگوریتم را تحت تأثیر قرار نداده‌است.