حمله لایه گذاری اوراکل

در رمزنگاری ، **حمله لایه گذاری اوراکل** یک حمله ایی است که از صحت لایه گذاری یک پیام رمزنگاری شده استفاده می‌کند ،  تا متن رمزی را رمزگشایی کند.

در رمزنگاری، معمولا پیام های با متن ساده و با طول متغیر باید فاصله گذاری شوند (بزرگ تر شوند) تا بتوانند با اصول رمزگذاری اولیه  سازگار شوند. اين حمله به یک "لایه گذاری اوراکل" وابسته است که بتواند آزادانه به رشته های درباره اینکه آیا متن به درستی فاصله گذاری (لایه گذاری) شده است یا نه، جواب بدهد. حملات Padding Oracle بیشتر با رمزگشایی حالت CBC که در رمزهای بلوکی استفاده می شود، مرتبط هستند.حالت های لایه گذاری (فاصله گذاری) برای الگوریتم های نامتقارن ,مانند OAEP هم ممکن است نسبت به این حملات آسیب پذیر باشند. 

## رمزنگاری متقارن
در رمزنگاری متقارن، حمله اوراکل padding ("لایه گذاری اوراکل") را می‌توان در حالت عملیات CBC وارد كرد ، جایی که « اوراکل » (معمولاً یک سرور است)  اطلاعات را در  خصوص اینکه آیا فاصله گذاری (لایه‌بندی) یک متن رمزنگاری شده صحیح است یا نه  نشر میکند. این اطلاعات می‌تواند به حمله کننده ها این امکان را بدهد که متن را از طریق اوراکل با استفاده کردن از کلید اوراکل رمزگشایی و حتی بعضی مواقع رمزگذاری کنند،حتي بدون دانستن کلید رمزگذاری.

### حمله "لایه گذاری اوراکل" بر روی رمزگذاری CBC
پیاده سازی مرسوم و معمول در رمزگشایی CBC در رمز های بلوکی این است که ، تمام بلوک های متن رمز شده را رمزگشایی کنیم ، فاصله گذاری (لایه گذاری) را تایید کنیم ، لایه گذاری (فاصله گذاری) PKCS7 را حذف کنیم و متن ساده پیام را برگردانیم. اگر سرور ارور " فاصله گذاری(لایه گذاری) نامعتبر " به جای یک ارور عمومی "رمزگشایی انجام نشد"(«invalid padding») داد ، حمله کننده می‌تواند از سرور به عنوان یک "لایه گذاری (فاصله گذاری) اوراکل" استفاده کند تا پیام را رمزگشایی یا حتی بعضی مواقع رمزگذاری کند

فرمول ریاضی رمزگشایی CBC به صورت زير است ː

: P_i = D_K(C_i) \oplus C_{i-1},
: C_0 = IV.

همانطور که در بالا نشان داده شده است، رمزگشایی CBC هر بلوک متن ساده را با بلوک قبلی خودش XOR می کند.كه در نتیجه، یک تغییر و تبدیل تک بایتی در بلوک C_1 یک تغییر متناظر را به یک بایت در داخل  P_2 انجام خواهد داد .

### رمزگذاری پیام ها با حمله "لایه گذاری اوراکل" (CBC-R)
CBC-R  یک طرح اوراکل رمزگشایی را به یک اوراکل رمزگذاری تبدیل می‌کند و اين در درجه اول در برابر "لایه گذاری اوراکل" نشان داده می‌شود.

با استفاده از CBC-R,  padding oracle attack می‌تواند یک بردار اولیه و يك بلوک متن رمزي را برای هر متن ساده اي را ایجاد کند:

* هر متن رمزی  **P <sub>i</sub> = PODecrypt( C <sub>i</sub> ) XOR C <sub>i-1 را رمزگشایی كنيد</sub>** ،
* بلوک رمز قبلی **C <sub>x-1 را</sub>** آزادانه انتخاب کنید،
* متن رمز/متن ساده معتبر **C <sub>x-1</sub> = P <sub>x</sub> XOR PODecrypt( C <sub>i</sub> )** را تولید کنید.

حمله CBC-R در مقابل یک نمونه طرح رمزگذاری که ، متن رمزی (با استفاده از  پیام کد احراز هویت پیام (message authentication code) یا همانند ان) را پیش از رمزگشایی تصدیق می کند، کار نخواهد کرد.

## حملات با استفاده از لایه گذاری اوراکل
اولین حمله اصلی در سال 2002 توسط Serge Vaudenay.

منتشر شد. نمونه های دیگری از حمله بعدا در برابر SSL  و IPSec شناخته شدند.   این همچنین برای چند فریم  شبکه,  مانند JavaServer Faces ، Ruby on Rails  و ASP ارائه شد. NET    و نرم افزار های دیگر همچون،  سرویس گیرنده بازی مشتري Steam .  در سال 2012 نشان داده شد که اين در برابر برخی از دستگاه های امنیتی سخت تر کارآمد است. 

درحالی که این حملات اولیه بیشتر توسط پیاده‌کننده‌های TLS پس از اعلام عمومی آن برطرف شد، یک گونه جدید به نام ، حمله سیزده خوش شانسي  Lucky Thirteen attack ، که در سال 2013 منتشر شد، که از یک زمانبندی کانال جانبی استفاده کرد تا دوباره نقاط آسیب پذیر را حتی در پیاده سازی هایی که قبلا درست شده بودند باز کند. در اوایل 2014, این حمله دیگر به عنوان یک خط جدی و مرگبار در کارهای واقعی بحساب نمی‌آید اگرچه هنوز در تئوری قابل اجراست( نسبت سیگنال به نویز را مطالعه کنید ) دربرابر دسته خاصی از ماشینها.  فعال ترین حوزه توسعه دربرابر حمله به پروتکل (دستور عمل) رمزنگاری برای ایمن کردن ترافیک اینترنت حمله های حملات کاهش رتبه(downgrade attack) ، مانند حملات Logjam  و  RSA/FREAK  بودند که مشتری را فریب می دهند تا از دستورای رمزنگاری هایی استفاده کنند که برای سازگاری با مشتریان قدیمی ارائه شده است و  ایمنی کمتری دارند ، درحالی که روش های ایمن تری نیز وجود دارند . یک حمله به اسم  POODLE  ( در اواخر 2014) هر دو حمله کاهش (down grade)(به SSL 3.0) را با یک حمله padding oracle باهم در پروتکل قدیمی و ناامن ترکیب می کند تا داده های ارسال شده را به خطر بیندازد. در اردیبهشت 2016 ،در CVE-2016-2107  معلوم شد که راه حل دربابر مشكل LUCKY THIRTEEN در openSQL , "لایه گذاری اوراکل" دیگری را معرفی کرد.

## منابع

رده:امنیت لایه انتقال
رده:حمله‌های رمزنگاری