پردهکشی
در رمزنگاری، کورکنندگی یا پردهکشی تکنیکی است که با استفاده از آن یک عامل میتواند سرویسدهی (به عنوان مثال محاسبه یک تابع) به مشتری را به صورت رمزگذاری شده بدون اطلاع از ورودی واقعی یا خروجی واقعی ارائه دهد. تکنیکهای پرده کشی همچنین برنامههایی برای جلوگیری از حملات کانال جانبی به دستگاههای رمزگذاری دارد.
بهطور دقیق تر، فرض کنیم آلیس ورودی x و اسکار تابعی از f دارد. آلیس دوست دارد اسکار (y = f(x برای او محاسبه کند بدون اینکه x یا y را برای او نشان دهد. دلیل این که آلیس میخواهد اینگونه باشد ممکن است این باشد که او عملکرد f را نمیداند یا منابع لازم برای محاسبه آن را ندارد. آلیس با رمزگذاری پیام در ورودی دیگر (E(X، پیام را «کور میکند». رمزگذاری E باید یک تابع دوسویی در فضای ورودی از f باشد، و در حالت ایدهآل یک جایگشت تصادفی باشد. اسکار f(E(X)) را به آلیس میدهد که برای بدست آوردن D(f(E(x))) = y رمزگشایی D را اعمال میکند.
همه توابع اجازه محاسبه کور را نمیدهند. در مواقع دیگر، پرده کشی باید با احتیاط انجام شود. نمونه ای از دومی امضاهای رابین - ویلیامز است. اگر پرده کشی برای پیام فرمت شده اعمال شود اما مقدار تصادفی نیازمندیهای جاکوبی را برای p و q برطرف نمیکند، میتواند به بازیابی کلید خصوصی منجر شود. نمونه ای از بازیابی کلید با این روش را که توسط evgeny Sidorov کشف شده را میتوانید در CVE-templatestyles مشاهد کنید
متداولترین کاربرد تکنیک کورکنندگی، امضای کور است. در یک پروتکل امضای کور، امضاکننده دیجیتالی پیامی را امضا میکند بدون اینکه بتواند محتوای آن را یاد بگیرد.
پد یکبار مصرف (OTP) یکی از کاربردهای کورکنندگی برای مشکلات ارتباطی امن است. آلیس دوست دارد پیامی را برای باب بطور پنهانی بفرستد، اما همه ارتباطات آنها توسط اسکار قابل خواندن است؛ بنابراین، آلیس پس از کور کردن آن با یک کلید مخفی یا OTP که با باب به اشتراک میگذارد، پیام را ارسال میکند. باب بعد از دریافت پیام، عملیات کورکنندگی را به صورت معکوس انجام میدهد. در این مثال، تابع f همان تابع همانی و E و D هر دو نوع عمل XOR هستند.
کور کنندگی همچنین میتواند برای جلوگیری از حملات کانال جانبی در برنامههای رمزگذاری نامتقارن استفاده شود. حملات کانال جانبی به وسیله اندازهگیری چیز دیگری غیر از نتیجه الگوریتم، به عنوان مثال، مصرف توان، زمان محاسبه یا انتشار فرکانس رادیویی توسط یک دستگاه، به یک مهاجم اجازه میدهد اطلاعات مربوط به ورودی یک عملیات رمزنگاری را بازیابی کند. معمولاً این حملات بستگی به دانش مهاجم از رفتار ویژگیهای الگوریتم دارد. در این حالت، کورکنندگی منجر به تغییر ورودی الگوریتم به حالتی غیرقابل پیشبینی میشود. بسته به ویژگیهای تابع کورکننده، این روش میتواند از فاش شدن تمام یا بخشی از اطلاعات مفید جلوگیری کند. توجه داشته باشید که امنیت به میزان مقاومت توابع کورکننده در برابر حملات کانال جانبی نیز بستگی دارد.
به عنوان مثال، در RSA کورکنندگی شامل محاسبه عملیاتهای کورکنندگی E(x) = (xr)e mod N، که در آن r یک عدد صحیح تصادفی بین ۱ تا N است و نسبت به N اول است (یعنی gcd(r,N) = ۱)، همچنین x متن اصلی و e توان عمومی RSA و N باقی مانده RSA است. طبق معمول، تابع رمزگشایی f(z) = zd mod N اعمال میشود و بدین ترتیب داریم f(E(x)) = (xr)ed mod N = xr mod N. سرانجام با استفاده از تابع D(z) = zr−1 mod N معکوس عملیات کورکنندگی انجام میشود. همانطور که انتظار میرفت ضرب xr mod N با r−1 mod N مقدار x را آشکار میسازد. هنگام رمزگشایی به این روش، طرف مقابل که قادر به اندازهگیری مدت زمان استفاده از این عملیات است، قادر به استفاده از این اطلاعات نخواهد بود زیرا او مقدار ثابت r را نمیداند و از این رو هیچ اطلاعی از ورودی واقعی برای RSA ابتدایی ندارد.