در ، یک نوع میباشد که در آن مهاجم در تلاش است تا با تحلیل های رمز نگاری، یک سیستم رمزنگاری بسازد.در هر کامپیوتر هر عمل منطقی نیاز به زمان برای اجرا شدن دارد و این زمان میتواند بر اساس ورودی متفاوت باشد. با اندازه‌گیری دقیق زمان هر عملیات، مهاجم میتواند به صورت معکوس عمل کرده و به ورودی دسترسی پیدا کند. 
 اطلاعات یک سیستم میتواند به وسیله  اندازه گیری زمان مورد نیاز برای پاسخ به درخواست‌ها فاش شود. میزان کمکی که این اطلاعات به مهاجم می‌کند، بستگی به متغیرهای فراوانی دارد. طراحی سیستم رمزنگاری، پردازنده‌ای که سیستم را اجرا می‌کند، الگوریتم‌های مورد استفاده، جزئیات پیاده‌سازی، اقدامات متقابل حمله زمان‌بندی، میزان دقت اندازه‌گیری زمان از این موارد بشمار میروند. 
 حمله‌های زمانبندی معمولاً در فاز طراحی نادیده گرفته میشوند، زیرا این حمله‌ها به نحوه پیاده سازی بستگی دارند و معمولاً به طور ناخواسته توسط ابزارهای  ( compiler optimization ) ایجاد میشوند. پیشگیری از حمله‌های زمانبندی شامل طراحی توابع با زمان ثابت و بررسی و آزمایش دقیق کد اجرایی نهایی میباشد. 
 حمله زمانبندی نمونه‌ی یک حمله است که در آن ویژگی‌های رفتاری وابسته به داده در یک را به جای خواص ریاضیاتی الگوریتم، به کار میگیرد. 
 اکثر الگوریتم‌های رمزنگاری میتوانند به گونه‌ای پیاده‌سازی شوند که در آن، وابستگی زمانی داده کاهش داده و یا حذف شود. بعنوان مثال پیاده سازی‌ای را در نظر بگیرید که در آن هر زیربرنامه‌ای در زمان x ثانیه پاسخ خواهد داد، که x بیشترین زمان ممکن برای پاسخ دادن به هر ورودی مجاز برای آن زیربرنامه میباشد. در اینگونه پیاده‌سازی زمانبندی الگوریتم، هیچ گونه اطلاعاتی در مورد داده‌های فراهم شده را فاش نمی‌سازد. نکته منفی این پیاده‌سازی این است که پیچیدگی زمانی اجرای همه‌ی دستورها در بدترین حالت قرار میگیرد که باعث کاهش کارایی توابع خواهد شد. 
 حملات زمانی در نمونه‌های زیادی کاربردی هستند: 
 
 زمان مورد نیاز برای اجرای الگوریتم که در به کار رفته، به طور خطی به تعداد یک های به کار رفته در کلید وابستگی دارد. در حالی که تعداد یک های بکار رفته، به تنهایی اطلاعات کافی‌ای برای راحت‌تر ساختن دستیابی به کلید به ما نمی‌دهد، اجرا های تکرار شده به‌وسیله همان کلید یکسان و ورودی های متفاوت میتوانند نمونه های خوبی برای تحلیل های مرتبط با همبستگی آماری از اطلاعات زمانی باشند که برای بازیابی کامل کلید حتی در هنگام مواجهه با یک مهاجم مجهول مؤثر خواهند بود. اندازه‌گیری زمان مشاهده شده معمولاً حاوی نویز هستند (از طریق تاخیر موجود در شبکه یا منبع، یا زمان دسترسی به حافظه مختلف و یا از طریق تکنیک های که برای خطاهای انتقال استفاده میشود). با این وجود، حملات زمانبندی در مقابل شماری از الگوریتم های رمزنگاری کاربردی می‌باشد، الگوریتم هایی مانند ، و . 
 در سال ۲۰۰۳ میلادی و یک حمله زمانبندی بر اساس شبکه به یک که از برخوردار بود را تدارک دیدند که اساس این حمله، آسیب پذیری های مختلفی است که با بهینه سازی دارد، میباشد. اندازه واقعی شبکه در آزمایش آن‌ها کوچک بود اما حمله‌ی آن‌ها تنها در چند ساعت موفق به دستیابی به کلید سری سرور شد. این اتفاق منجر شد تا در پیاده سازی لایه سوکت های امن، از تکنیک استفاده شود. در اینجا، منظور از استفاده از نابینایی ، از بین بردن همبستگی بین کلید و زمان رمزگذاری است. 
 برخی از نسخه های ، از پیاده سازی نسبتاً پر هزینه‌ای برای توابع کتابخوانه crypt برخوردار میباشند تا یک رشته رمز ۱۱ حرفی را با استفاده از یک رمز ۸ حرفی تولید کنند. در سخت افزارهای قدیمی تر، این عملیات به طور محسوسی و عمداً زمان زیادی برای اجرا نیاز داشت، به طوری که برای انجام برخی عملیات ها به دو یا سه ثانیه زمان نیاز بود. برنامه مربوط به در نسخه های اولیه یونیکس‌ها تنها زمانی از توابع crypt استفاده میکردند که نام ورودی توسط سیستم شناخته میشد. که این روند، اطلاعاتی مربوط به معتبر بودن نام ورودی را از طریق زمانبندی فاش میکرد، حتی زمانی که رمز کاربری اشتباه وارد میشد این اتفاق می‌افتاد. در این شرایط، مهاجم میتوانست با بکار گیری این اطلاعات فاش شده و اعمال ، یک لیست از نام‌هایی که معتبر بودند تولید کند و در ادامه به وسیله ترکیب کردن این اسامی با مجموعه‌ای عظیم از کلمات عبور که بیشتر از بقیه استفاده شده بودند، تلاش برای دسترسی به سیستم کند. بدون داشتن هیچگونه اطلاعاتی مبنی بر معتبر بودن یا نبودن نام کاربری، زمان مورد نیاز برای اجرای چنین حمله‌ای بسیار افزایش خواهد یافت و عملاً آن را بلا استفاده میکند. در نسخه‌های بعدی یونیکس، مشکل نشتی چنین اطلاعاتی رفع شده و این کار با اجرای توابع crypt بر روی همه‌ی نام کاربری های ورودی، با صرف نظر از معتبر بودن یا نبودن نام ورودی، انجام میشود. 
 دو پروسه‌ی ایزوله و امن دیگر که بر روی یک سیستم به همراه و یا اجرا میشوند میتوانند به وسیله بروز عمدی خطا در و در یک پروسه ارتباط برقرار کنند و سپس تغییرات حاصل را در زمان دسترسی را مورد مشاهده و بررسی قرار دهد. به همین صورت اگر یک برنامه مورد تائید باشد اما اگر caching و یا paging آن توسط شاخه شاخه (منشعب ) تحت تاثیر واقع شده باشد، این امکان وجود دارد که یک اپلیکیشن دیگری بتواند مقادیر داده های را در مقایسه با شرایط شاخه تعین کند و این کار را به وسیله مشاهده و بررسی تغیرات در زمان دسترسی انجام میدهد. در نمونه‌های فراوانی، این روش اجازه بازیابی بیت های را میدهد. 
 در سال ۲۰۱۷ حمله های و تولید کنندگان پردازنده ( مانند Intel, AMD, ARM و )را مجبور ساخت، تا پردازنده‌های خود را بازطراحی کنند. تا اوایل ۲۰۱۸ تقریباً تمام سیستم‌های کامپیوتری در دنیا توسط spectre تحت تاثیر واقع شده بودند، که این امر آن را قدرتمند ترین نمونه از حمله زمانبندی در طول تاریخ میسازد. 
 
کدهای زیر نمایانگر یک مقایسه کننده معمول رشته هستند و روش کار آن ها به گونه‌ایست که به محض مشاهد تفاوت در رشته ها متوقف میشوند. بعنوان مثلاً برای مقایسه دو رشته ABCDE و ABxDE، بعد از سه باز طی کردن حلقه، تابع متوقف میشود. برای مقایسه، کد زیر در زمان ثابت اجرا میشود و تمام کاراکتر ها بررسی میشوند و از استفاده میشود. حملات زمانبندی زمانی که مهاجم دانش نسبت به پیاده‌سازی داخلی سخت افزار و سیستم رمز نگاری داشته باشد راحت تر قابل اجرا خواهند بود. از آن‌جایی که امنیت رمزنگاری هیچ‌گاه نباید به میزان مبهم بودن چیزی وابسته باشد (امنیت را از طریق گمنامی، به طور خاص، ماکسیم شانون و اصل )، میزان مقاومت در برابر حمله زمانبندی هم نباید به این موضوع بستگی داشته باشد. حملات رمزنگاری و دیگر حملات کانال جانبی، میتوانند برای تشخیص و احتمالاً یک الگوریتم رمزنگاری در برخی دستگاه‌ها استفاده شوند.
{"title": "حمله زمانبندی", "link": "https://fa.wikipedia.org//w/index.php?title=%D8%AD%D9%85%D9%84%D9%87_%D8%B2%D9%85%D8%A7%D9%86%D8%A8%D9%86%D8%AF%DB%8C&oldid=34188187", "language": "fa"}