الگوریتم رمز نگاری جریانی
**میکی** یا **MICKEY**، مخفف عبارت **Mutual Irregular Clocking Keystream generator**، یک الگوریتم رمز نگاری جریانی است که توسط استیو ببیج و متیو داد، ساخته شده‌است.

رمز نگاری به گونه ای طراحی شده‌است که درسیستم‌های سخت‌افزاری با منبع محدود مورد استفاده قرار می‌گیرد و یکی از سه رمزنگاری بود که درقسمت دوم (طراحی سخت‌افزار بامنابع محدود) مسابقهٔ Estram قبول شد.

توضیحات:

رمزهای جریانی بعد از مدتی به دلایلی کنار گذاشته شدند از جملهٔ این موارد می‌توان به:

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

اشاره کرد.

رمزهای جریانی اما در دو کاربر همچنان استفاده می‌شوند:

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

مسابقهٔ Estram شامل دو بخش مسابقاتی بود که برای دو کاربر ذکر شدهٔ رمزهای جریانی طراحی شده بود. در بخش اول که برای کاربردهای نرم‌افزاری با سرعت بالا بود salsa20/12 , rabbit ,HC-128 و در بخش دوم که مربوط به سخت‌افزارها با منابع محدود بودند Grain v1 , MICKEY v2 , trivium کاندید شدند.

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

رمزهای جریانی
-------------

رمزهای جریانی دسته ای از رمز نگاری‌های متقارن هستند که:

ملزومات این نوع رمز نگاری شامل کلید، مقدار اولیه یا IV و تولیدکنندهٔ عدد تصادفی می باشدکه منجر به تولید دنبالهٔ کلید اجرایی می‌شوند. به این صورت که با استفاده از کلید و مقدار اولیه، دنباله ای از بیت‌های شبه تصادفی تولید می‌شود که به ان دنبالهٔ کلید اجرایی گفته می‌شود.

ساختار
------

رمز یک کلید ۸۰ بیتی و یک بردار اولیه با طول متغیر(۰ تا ۸۰ بیت) را به یک دنباله کلید اجرایی باحداکثر طول ۲۴۰ بیت نگاشت می‌کند.

نحوهٔ عملکرد الگوریتم میکی ۲٫۰
------------------------------

۲ ورودی دارد:۸۰ بیت کلید مخفی(k) و مقدار اولیه با طولی بین ۰ تا ۸۰ بیت

خروجی(z) :دنباله کلید اجرایی

متن اصلی با دنباله کلید xor شده و متن رمز شده را ایجاد می‌کند. در هر مرحله یک بیت از رجیسترهای s و r ایجاد می‌شوند که s غیر خطی و r خطی است.

(CLOCK\_R (R , INPUT \_BIT \_R , CONTROL \_BIT \_R

0-99 r مقدار قبل از خوردن کلاک و 99-r′ ۰ مقدار بعد از خوردن کلاک است:

```
FEEDBACK _BIT = r99 ⊕ INPUT _BIT _R
For 0 ≤ i ≤ 99 r'i=ri-1 , r'0=0
For 0 ≤ i ≤ 99 , if i ∈RTAPS , ri ′ = ri ′ ⊕ FEEDBACK _ BIT
If CONTROL _ BIT _ R = 1
For 0 ≤ i ≤ 99 , r ′i = r ′i⊕ ri
```

(CLOCK\_S (S , INPUT\_BIT \_S , CONTROL \_BIT \_S

0-99 s مقدار قبل از خوردن کلاک و 99-s′ ۰ مقدار بعد از خوردن کلاک و 99-s^ ۰ متغیرهای واسطه برای ساده‌سازی است:

```
FEEDBACK _BIT = s 99 ⊕ INPUT _BIT _S
For 1 ≤ i ≤ 98 s^i= si-1 ((si ⊕comp0 i). (si+1 ⊕comp1 i)) ;s^0=0
If CONTROL _BIT _S = 0
 (For 1 ≤ i ≤ 99 s’i= s^i ⊕(fp0 i. FEEDBACK _BIT
If instead CONTROL _BIT _S = 1
 (For 1 ≤ i ≤ 99 s’i= s^i ⊕(fp1 i. FEEDBACK _BIT
```

(CLOCK\_KG (R, S, MIXING = FALSE, INPUT\_BIT

```
CONTROL BIT R = s34 ⊕ r67
CONTROL BIT S = s 67⊕ r33
If MIXING =TRUE , then INPUT BIT R = INPUT BIT ⊕ s50 ; if instead
MIXING = FALSE , then INPUT _BIT _R = INPUT _BIT
INPUT _BIT _S = INPUT _BIT
CLOCK_R (R , INPUT _BIT _R , CONTROL _BIT _R)
CLOCK_S (S , INPUT _BIT _S , CONTROL _BIT _S)
```

بارگذاری کردن و مقدار دهی به کلید:

رجیسترهای s و r را مقدار دهی اولیه می‌کنیم.

```
Load in IV .For 0 ≤ i ≤ IVLENGTH – 1
 CLOCK_KG (R , S , MIXING =TRUE , i INPUT_BIT = iv)
Load in K. For 0 ≤ i ≤ 79
 CLOCK_KG (R , S , MIXING =TRUE , INPUT_BIT = ki)
Preclock. For 0 ≤ i ≤ 99
 CLOCK_KG (R , S , MIXING =TRUE , INPUT_BIT = 0)
```

تولید دنباله کلید اجرایی:

```
For 0 ≤ i ≤ L − 1
 Zi=r0 ⊕ s0
 CLOCK_KG (R , S , MIXING = FALSE , INPUT_BIT = 0)
```

تولید دنباله کلید اجرایی
------------------------

تولیدکنندهٔ دنباله کلید اجرایی از دو رجیستر s وr (هرکدام ۱۰۰ بیت) تشکیل شده‌است. رجیسترها به روش غیر خطی با استفاده از متغیرهای کنترل به روز رسانی می‌شوند. متغیرهای کنترل شامل:

INPUT BIT R، INPUT BIT S، CONTROL BIT R، CONTROL BIT S می‌شود.

همان‌طور که قبلاً گفته شد هر پیاده‌سازی از این نوع رمزنگاری شامل فلیپ فلاپ به عنوان رجیسترهای s و r و ۴ متغیر کترلی است.

علاوه بر اینها ،۷ فلیپ فلاپ به عنوان شمارندهٔ رجیستر برای نگهداری تعداد دورها در مرحله Preclock باید وجود داشته باشد.

مرحلهٔ تولید دنباله کلید اجرایی در میکی ۲٫۰ قبل از۳ مرحله انجام می‌شود. (مراحل IV LOADING , KEY LOADING, PRECLOCK). در ابتدا رجیسترهای R, S به حالت کلی صفر تنظیم می‌شوند.

تفاوت با Trivium
----------------

بر خلاف Trivium, میکی 2.0 اجازهٔ بارگذاری مستقیم کلید و بیتهای مقدار اولیه را در رجیستر حالت نمی‌دهد. همان‌طور که قبلاً ذکر شد در ابتدا رجیسترهای R و S با صفر مقدار دهی می‌شوند و سپس مقدار اولیه با طول متغیر و کلید ۸۰ بیتی برای به روز رسانی حالت توسط روتین CLOCK\_KG استفاده می‌شود.

scan chain
----------

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

Scan\_in و scan\_out ورودی و خروجی زنجیره را تعریف می‌کنند. در حالت اسکن کامل، معمولاً هر ورودی فقط یک زنجیره را هدایت می‌کند و یک خروجی را نیز مشاهده می‌کند.

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

سیگنال ساعت که برای کنترل تمام FFها در زنجیره در مرحله shift و مرحله capture استفاده می‌شود. یک الگوی دلخواه را می‌توان وارد زنجیره فلیپ فلاپ‌ها کرد و وضعیت هر نوع فلیپ فلاپ قابل خواندن است.

حفاظت در Scan Chain
-------------------

میکی ۲٫۰ می‌تواند توسط ساختار زنجیرهٔ XOR محافظت شود. حمله کننده مزایای زیر را به دست می‌آورد:

* الگوریتم میکی ۲٫۰ را می‌شناسد.
* می‌تواند از بردار اولیه به دلخواه خود استفاده کند.
* کلید مخفی است.
* بر طبق دلخواه خود می‌تواند بردارهای SCAN-IN و SCAN-OUT را امتحان کند.

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

اقدامات متقابل برای میکی ۲٫۰
----------------------------

روش Flipped-Scan برای محافظت از CHAIN SCAN پیش از این پیشنهاد شده بود که شامل قرار دادن گیت اینورتر در نقاط تصادفی در زنجیره اسکن بود.

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

نشان داده شده‌است که اگر همه فلیپ فلاپ‌ها در زنجیره اسکن در ابتدا RESET باشند، می‌توان موقعیت‌های اینورتر را با انتقال ۰ → ۱ و ۰ → ۱در وکتور اسکن شده کاملاً مشخص کرد. به عنوان جایگزین اقدام متقابل مبتنی بر زنجیرهٔ XOR ارائه شده‌است. این روش شامل قرار دادن دروازه XOR در نقاط تصادفی از زنجیره است. امنیت، دوباره از این واقعیت ناشی می‌شود که یک دشمن نمی‌تواند تعداد و موقعیت‌های دروازه XOR را حدس بزند.

استفاده در DFT
--------------

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

Cryptanalysis
-------------

از سال ۲۰۱۳ ،DFA) DFA نوعی حملهٔ کانال جانبی است برای آشکار کردن حالات داخلی) علیه میکی ۲٫۰ توسط Subhadeep Banik و Subhamoy Maitra گزارش شده‌است.

واژگان
------

**رمزنگاری قالبی**:نوعی از رمز نگاری متقارن است که در ان بلوکی به اندازهٔ N و کلیدی به طول K رمز گشایی و رمزگذاری انجام می‌شود.

**رمزنگاری جریانی**:نوعی از رمز نگاری متقارن است کهدر ان پردازش پیام به صورت بیت به بیت انجام می‌شود.

**DFA**: نوعی حملهٔ کانال جانبی است که برای آشکار کردن حالات داخلی سیستم به کار برده می‌شود.

**کلید**: به اطلاعاتی گفته می‌شود که با استفاده از آن بتوان cipher text (متنی که cipher شده) را به plain text تبدیل کرد. (یا برعکس) به عبارت ساده یک متن رمزگذاری‌شده توسط یک کلید با الگوریتم مناسب، به متن ساده تبدیل می‌شود.

منابع
-----

1. ↑  "MICKEY (Portfolio Profile 2)". Archived from the original on 1 July 2012. Retrieved 5 October 2011.
2. ↑  "eSTREAM Portfolio Stream Ciphers -- IP Status". Retrieved 5 October 2011.
3. ↑  S.Banik (2013). "Improved Scan-Chain Based Attacks and Related Countermeasures". *Improved Scan-chain based attacks*. Lecture Notes in Computer Science. Vol. 8250. Springer. p. 78. doi:10.1007/978-3-319-03515-4\_6. ISBN 978-3-319-03514-7. Mickey
4. ↑  B. Gierlichs; L. Batina; C. Clavier; T. Eisenbarth; A. Gouget; H. Handschuh (2008). "Side Channel Attacks".
5. ↑  Banik, Subhadeep; Maitra, Subhamoy; Sarkar, Santanu (2013). "A Differential Fault Attack on MICKEY 2.0". `{{cite journal}}`: Cite journal requires `|journal=` (help)

جستارهای پیوسته
---------------

* الگوریتم TRIVIUM
* Differential fault analysis
* درباره ی میکی بیشتر بدانید

پیوند به بیرون
--------------

* eStream صفحه میکی
* دیفرانسیل گسل حمله میکی ۲٫۰
* اسکن-زنجیره ای مبتنی بر حملات
* سخت‌افزار اجرای
* FPGA پیاده‌سازی