في علوم التشفير، يمثل هجوم التوقيت هجومًا على قناة جانبية يحاول فيه المهاجم اختراق نظام تشفير عن طريق تحليل الوقت المستغرق لتنفيذ خوارزميات التشفير. كل عملية منطقية في الكمبيوتر تستغرق وقتًا للتنفيذ، ويمكن أن يختلف الوقت بناءً على المدخلات؛ مع قياسات دقيقة للوقت لكل عملية، يمكن للمهاجم العمل بعمليات عكسية وفي الإتجاه الخلفي من عمليات الإدخال.

يمكن أن تتسرب المعلومات من النظام من خلال قياس الوقت المستغرق للرد على استفسارات معينة. يعتمد مقدار هذه المعلومات التي يمكن أن تساعد المهاجم على معرفة العديد من المتغيرات النظامية مثل: تصميم نظام التشفير، وحدة المعالجة المركزية التي تدير النظام، الخوارزميات المستخدمة، تفاصيل التنفيذ المتنوعة، إجراءات توقيت الهجوم، دقة قياسات التوقيت، إلخ.

غالبًا ما يتم التغاضي عن هجمات التوقيت في مرحلة التصميم لأنها تعتمد على التنفيذ ويمكن تقديمها عن غير قصد مع تحسينات برنامج التحويل البرمجي. يتضمن تجنب هجمات التوقيت تصميم وظائف وقت ثابت واختبار دقيق للكود القابل للتنفيذ النهائي.

المفهوم
هجوم التوقيت هو مثال على الهجوم الذي يستغل الخصائص السلوكية المعتمدة على البيانات لتنفيذ الخوارزمية بدلاً من الخصائص الرياضية الأخرى للخوارزميات.

يمكن تنفيذ العديد من خوارزميات التشفير (أو حجبها بواسطة وكيل) بطريقة تقلل أو تقضي على معلومات التوقيت التي تعتمد على البيانات: ضع في اعتبارك عملية تنفيذ يتم من خلالها إرجاع كل مكالمة إلى روتين فرعي دائمًا في ثوانٍ بقيمة (x) بالضبط، حيث يكون x هو الحد الأقصى للوقت على الإطلاق، حيث سيأخذ لتنفيذ هذا الروتين على كل المدخلات المسموح بها. في مثل هذا التطبيق، لا يسرب توقيت الخوارزمية أي معلومات حول البيانات المقدمة لهذا الاحتجاج. الجانب السلبي لهذا النهج هو أن الوقت المستخدم لجميع عمليات التنفيذ يصبح وقت أداء الدالة والعملية الأسوأ.

هجمات التوقيت هي في كثير من الحالات عمليات يمكن النظر إليها على أنها:

يمكن تطبيق هجمات التوقيت على أي خوارزمية بها تباين توقيت معتمد على البيانات. ستعرض البرامج التي يتم تشغيلها على وحدة المعالجة المركزية مع ذاكرة تخزين مؤقت للبيانات اختلافات توقيت تعتمد على البيانات نتيجة ظهور الذاكرة في ذاكرة التخزين المؤقت. قد يكون لبعض العمليات، مثل عمليات الضرب، وقت تنفيذ متباين حسب المدخلات. تعد إزالة التبعيات الزمنية أمرًا صعبًا في بعض الخوارزميات التي تستخدم عمليات منخفضة المستوى تظهر عليها كثيرًا وقت تنفيذ متنوع.
قد يكون العثور على الأسرار من خلال معلومات التوقيت أسهل كثيرًا من استخدام تحليل الشفرة لأزواج النص المشفر المعروفة. في بعض الأحيان يتم دمج معلومات التوقيت مع تحليل الشفرات لزيادة معدل تسرب المعلومات.

أمثلة
يعتمد وقت التنفيذ لخوارزمية المربعات والضرب المستخدمة في الأسية المعيارية خطيًا على عدد البتات '1' في المفتاح. على الرغم من أن عدد البتات "1" وحدها لا يكاد يكون معلومات كافية لجعل العثور على المفتاح أمرًا سهلاً، حيث يمكن استخدام عمليات التنفيذ المتكررة باستخدام نفس المفتاح ومدخلات مختلفة لإجراء تحليل الارتباط الإحصائي لمعلومات التوقيت لاستعادة المفتاح تمامًا، حتى من خلال المهاجم الغير نشط. غالبًا ما تتضمن قياسات التوقيت الملاحظة ضوضاء (من مصادر مثل اختفاء الشبكة، أو اختلافات الوصول إلى محرك الأقراص من الوصول إلى المصادر، وتقنيات تصحيح الأخطاء المستخدمة في الاسترداد من أخطاء الإرسال). ومع ذلك، تعتبر هجمات التوقيت عملية ضد عدد من خوارزميات التشفير، بما في ذلك RSA وElGamal وخوارزمية التوقيع الرقمي.

في عام 2003، أظهر Boneh و Brumley هجومًا عمليًا قائمًا على الشبكة على خوادم الويب التي تدعم SSL ، استنادًا إلى ثغرة أمنية مختلفة تتعلق باستخدام RSA مع تحسينات في نظرية «النظرية الباقية الصينية». كانت المسافة الفعلية للشبكة صغيرة في تجاربها، لكن الهجوم نجح في استعادة مفتاح الخادم الخاص في غضون ساعات. أدى هذا العرض التوضيحي إلى نشر واستخدام تقنيات التعمية/التشفير على نطاق واسع في تطبيقات SSL. في هذا السياق، تهدف عمليات التشفير/التعمية إلى إزالة الارتباطات بين المفتاح ووقت التشفير.

بعض إصدارات يونكس تستخدم عمليات تنفيذ مكلفة نسبياً، على سبيل المثال عند استخدام دوال التجزئة (مثل دالة crypt) لكلمات مرور مكونة من 8 أحرف إلى 11 حرفاً. وعلى الأجهزة القديمة، استغرق هذا الحساب وقتًا طويلاً ومتعمدًا: يصل إلى ثانيتين أو ثلاث ثوانٍ في بعض الحالات. قام برنامج تسجيل الدخول في الإصدارات القديمة من Unix بتنفيذ وظيفة ودالة crypt فقط عندما تم التعرف على اسم تسجيل الدخول من قبل النظام. هذا يُعتبر بمثابة «تسرب المعلومات» خلال توقيت معين يدور حول صحة اسم تسجيل الدخول. حتى عندما كانت كلمة المرور غير صحيحة كان تسرب المعلومات المسبق موجود أيضاً كقيمة توقيتية. يمكن للمهاجم استغلال مثل هذه التسريبات من خلال تطبيق هجوم «القوة الغاشمة/العمياء» أولاً لإنتاج قائمة بأسماء تسجيل الدخول المعروفة بأنها صالحة، ثم محاولة الوصول عن طريق الجمع بين هذه الأسماء فقط مع مجموعة كبيرة من كلمات المرور المعروفة بالاستخدام المتكرر. بدون أي معلومات حول صحة أسماء تسجيل الدخول، فإن الوقت اللازم لتنفيذ مثل هذا النهج سيزيد بأوامر مهمة من الحجم الثقيل، مما يجعله عديم الفائدة بشكل فعال. قامت الإصدارات الأحدث من Unix بإصلاح هذا التسرب من خلال تنفيذ وظيفة التشفير دائمًا، بغض النظر عن صلاحية اسم تسجيل الدخول.

يمكن إجراء عمليتين منفصلتين بشكل آمن يتم تشغيلهما على نظام واحد مع ذاكرة التخزين المؤقت أو الذاكرة الظاهرية عن طريق التسبب المتعمد في أخطاء الصفحة و / أو تفويت ذاكرة التخزين المؤقت في عملية واحدة، ثم مراقبة التغييرات الناتجة في أوقات الوصول من جهة أخرى. وبالمثل، إذا كان أحد التطبيقات موثوقًا به، ولكن تخزين الصفحات في عمليات التخزين المؤقت متأثرة بمنطق التفريع، فقد يكون من الممكن للتطبيق الثاني تحديد قيم البيانات مقارنة بحالة الفرع من خلال مراقبة تغييرات وقت الوصول؛ وفي الأمثلة القصوى، يمكن أن يسمح هذا باسترداد البتات الخاصة بمفتاح التشفير.

تعتمد هجمات Meltdown وSpecter لعام 2017 التي أجبرت مصنعي وحدة المعالجة المركزية (بما في ذلك Intel و AMD و ARM و IBM) على إعادة تصميم وحدات المعالجة المركزية الخاصة بهم على هجمات التوقيت. اعتبارًا من أوائل عام 2018، تُأثر هجمات Specter تقريبًا بكل نظام كمبيوتر في العالم، مما يجعلها أقوى مثال على توقيت الهجوم وعلى مدار التاريخ.

توضح التعليمات البرمجية التالية لـ Visual Basic مقارنة سلسلة غير آمنة نموذجية والتي تتوقف عن الاختبار بمجرد عدم تطابق حرف. على سبيل المثال، عند مقارنة "ABCDE" بـ "ABxDE"، فإن الدالة ستعود بالتوقف بعد تكرار 3 دورات: Function InsecureCompare(StrA As String, StrB As String, length As Integer) As Boolean
Dim result As Boolean
For i = 1 To length
If Mid(StrA, i, 1) <> Mid(StrB, i, 1) Then Exit For
Next
result = (i > length)
InsecureCompare = result
End Function بالمقارنة، يتم تشغيل الإصدار التالي في وقت ثابت عن طريق اختبار جميع الأحرف واستخدام عمليات bitwise للاختبار دون القفزات الشرطية: Function SecureCompare(StrA As String, StrB As String, length As Integer) As Boolean
Dim result As Boolean
For i = 1 To length
result = result Or (Asc(Mid(StrA, i, 1)) Xor Asc(Mid(StrB, i, 1)))
Next
SecureCompare = Not result
End Function
هجوم التوقيت