Py (شفرة)
Py هي خوارزمية تشفير متدفقة قُدِّمت إلى مسابقة eSTREAM بواسطة إيلي بيهام وجينيفر سيبري . تُعدّ من أسرع الخوارزميات المرشحة لمسابقة eSTREAM، حيث تبلغ سرعتها حوالي 2.6 دورة لكل بايت على بعض المنصات. تتشابه بنيتها إلى حدٍّ ما مع خوارزمية RC4 ، ولكنها تضيف مصفوفة من 260 كلمة، كل كلمة منها 32 بت، يتم فهرستها باستخدام تبديل للبايتات، وتُنتج 64 بت في كل جولة.
يؤكد المؤلفون أن الاسم يُنطق "رو"، في إشارة إلى أصل الشفرة الأسترالي، وذلك بقراءة الأحرف "Py" كأحرف سيريلية (Ру) بدلاً من الأحرف اللاتينية. ويُفهم من هذا النطق الغريب نوعًا ما أنه ردهم، على سبيل المزاح، على اسم "رينديل" الذي يصعب نطقه، والذي أُطلق على الشفرة التي اعتُمدت كمعيار التشفير المتقدم .
- تضمن الاقتراح الأصلي المقدم في أبريل 2005 التشفير Py، ونسخة مبسطة منه Py6. تعمل النسخة الأخيرة على تقليل حجم بعض الجداول الداخلية، مما يوفر تكلفة جدولة مفاتيح أقل بكثير، على حساب تقليل الحد الأقصى لطول الإخراج.
- في يونيو 2006، وصف المؤلفون برنامج Pypy (وهو اسمٌ مُربكٌ بعض الشيء، يُنطق "Pyroo" لأنه نصف حروف سيريلية) بأنه نسخةٌ اختياريةٌ أقوى. يُحذف هذا البرنامج إحدى الكلمات المُخرَجة من كل تكرار لبرنامج Py، وبالتالي يعمل بسرعةٍ تُقارب 0.6 ضعف سرعة Py.
- في يناير 2007، تم تغيير خوارزمية جدولة المفاتيح، مما أدى إلى ظهور نسخ مُعدّلة هي TPy وTPypy وTPy6. وبالتحديد، بقيت المرحلة الأولى (المعتمدة على المفتاح) دون تغيير، بينما تم تصحيح خطأ في المرحلة الثانية (إعداد متجه التهيئة). أما دوال الجولات المستخدمة لإنتاج المخرجات فهي متطابقة.
- في مؤتمر إندوكريبت 2007 ، اقترح غوثام سيكار وسوراديوتي بول وبارت برينيل خوارزميتي تشفير جديدتين ، RCR-32 و RCR-64، استنادًا إلى مبادئ تصميم Pypy وPy على التوالي. تستبدل هاتان الخوارزميتان عملية التدوير المتغيرة في Py بعملية تدوير ثابتة، مما يقضي على ثغرة أمنية ويزيد من سرعة التشفير بشكل طفيف. يُستخدم جدول مفاتيح TPy دون تعديل.
الهجمات على عائلة Py
اعتبارًا من عام 2006أفضل هجوم تحليلي للشفرات على لغة بايثون (من قبل هونغجون وو وبارت برينيل ) يمكنه في بعض الظروف (مثل عندما يكون متجه التهيئة أطول بكثير من المفتاح) استعادة المفتاح باستخدام تدفقات مفاتيح جزئية لـ 224 متجه تهيئة مختار..
في سيناريو أكثر تعقيدًا من وجهة نظر المهاجم، حيث لا يتوفر سوى نص عادي معروف (بدلاً من نص عادي مُختار)، يوجد هجوم مميز على سلسلة المفاتيح (من قِبل بول كراولي ) يتطلب حوالي 272 بايت من المخرجات ووقتًا مماثلاً. يُعد هذا تحسينًا على هجوم قدمه غوثام سيكار وسوراديوتي بول وبارت برينيل ، والذي يتطلب 288 بايت. لا يزال هناك جدل حول ما إذا كانت هذه الهجمات تُشكل خرقًا نظريًا للغة بايثون. عندما يدّعي المهاجمون أنه يمكن تنفيذ الهجمات المذكورة أعلاه بعبء عمل أقل من البحث الشامل وفقًا لمواصفات تصميم بايثون، وبالتالي، فهي تُشكل خرقًا نظريًا واضحًا للتشفير، يستبعد المصممون هذه الهجمات لأن حدود أمان بايثون تحد من إجمالي مخرجات أي مهاجم إلى 264 بايت فقط عبر جميع سلاسل المفاتيح في أي مكان. يتضمن تنقيح حديث لورقة بول وبرينيل وسيكار مناقشة مفصلة لهذه القضية في القسم 9. لا توجد شكوك حول شرعية هجوم وو وبرينيل.
تم اختيار لغة بايثون كمرشح محوري للمرحلة الثانية من الملف التعريفي الأول (البرمجيات) من قبل مشروع eSTREAMلكنهم لم يتقدموا إلى المرحلة الثالثة بسبب هجوم وو وبرينيل المختار الرابع..
في يناير 2007، اقترح مصممو لغة بايثون ثلاث خوارزميات تشفير جديدة، هي TPy وTPypy وTPy6، للتغلب على الهجمات المذكورة سابقًا. مع ذلك، لا تزال خوارزمية TPy عرضةً لهجمات التمييز المذكورة أعلاه، والتي نفذها بول وآخرون (بتعقيد 2 ^88 ) وكراولي (بتعقيد 2 ^72 )، وهي هجمات لا تعتمد على جدول المفاتيح. يُعدّ هجوم سيكار وآخرون، وهو هجوم تمييز بتعقيد بيانات 2^ 281 ، أفضل هجوم تم التوصل إليه حتى الآن على خوارزمية TPypy، والتي يُعتقد أنها الأقوى بين خوارزميات بايثون. ويكون هذا الهجوم فعالًا فقط إذا كان طول مفتاح TPypy أكبر من 281 بت.
لإزالة الهجمات على خوارزميتي TPy وTPypy، قدّم كلٌّ من سيكار وبول وبرينيل في مؤتمر إندوكريبت 2007 مقترحاتٍ لخوارزميتي تشفير جديدتين هما RCR -32 و RCR-64 . وحتى الآن ، لم تُسجّل أيّ هجماتٍ ضدّ هاتين الخوارزميتين .
دوال التقريب
تعتمد لغة بايثون على فكرة "المصفوفات المنزلقة": حيث تُفهرس المصفوفات نسبةً إلى مؤشر بداية، يتقدم بمقدار كلمة واحدة في كل دورة. وعند توفر فهرسة باقي القسمة (في الأجهزة، والعديد من معالجات الإشارات الرقمية )، يمكن تنفيذها كمخازن مؤقتة دائرية . أما في البرمجيات، فيُفضل تنفيذها كمصفوفات كبيرة. وعند الوصول إلى نهاية المصفوفة، تُنسخ الأجزاء العاملة إلى البداية، وتستمر العمليات.
تحتوي مصفوفة P ذات 256 بايت على تبديل مكون من 256 إدخال (يظهر كل بايت مرة واحدة بالضبط)، بينما تحتوي مصفوفة Y على 260 كلمة من 32 بت.
#include <stdint.h>#define ROTL32(x, s) ((x)<<(s) | (x)>>(32-(s)))uint8_t * P ; // P[0] إلى P[255] نشطةuint32_t * Y ; // Y[-3] إلى Y[256] نشطةuint32_t s ;uint32_t * output ;بينما ( الكلمات_الناتجة-- ) {int i = Y [ 185 ] % 256 ;P [ 256 ] = P [ i ]; // هذا يبدل فعليًا بين P[0] و P[i]P [ i ] = P [ 0 ]; // ثم يتم نسخ P[0] إلى P[256]P ++ ; // القيمة السابقة P[1] هي P[0] الجديدة، والقيمة المكتوبة للتو P[256] هي P[255] الجديدةs += Y [ P [ 72 ]] - Y [ P [ 239 ]];s = ROTL32 ( s , ( P [ 116 ] + 18 ) % 32 );* output ++ = ( ROTL32 ( s , 25 ) ^ Y [ 256 ]) + Y [ P [ 26 ]]; // تم حذف هذا السطر من Pypy و TPypy* output ++ = ( s ^ Y [ -1 ] ) + Y [ P [ 208 ]];Y [ 257 ] = ( ROTL32 ( s , 14 ) ^ Y [ -3 ] ) + Y [ P [ 153 ]];Y ++ ; // القيمة السابقة P[-2] هي P[-3] الجديدة، والقيمة المكتوبة للتو P[257] هي P[256] الجديدة}عندما يكون إخراج البايت مطلوبًا، يحدد بايثون أن كلمات الإخراج يتم تحويلها بنظام little-endian.
تم حذف السطر 17 من Pypy و Tpypy و RCR-32.
RCR-32 و RCR-64 متطابقان مع ما سبق، باستثناء أن السطر 15 تم تغييره إلى دوران ثابت لليسار بمقدار 19 بت.
يتمتع بايثون 6 بنفس البنية، ولكن تم تقصير مصفوفات P و Y إلى 64 بايت و 68 كلمة على التوالي. يبلغ طول عناصر P ستة بتات فقط، وهو توفير يمكن استغلاله في أجهزة مخصصة. يتم تعديل الإزاحات المختلفة في المصفوفة P[]، Y[]مما يجعل الحلقة الداخلية:
بينما ( الكلمات_الناتجة-- ) {int i = Y [ 43 ] % 64 ;P [ 64 ] = P [ i ];P [ i ] = P [ 0 ];P ++ ;s += Y [ P [ 18 ]] - Y [ P [ 57 ]];s = ROTL32 ( s , ( P [ 26 ] + 18 ) % 32 );* output ++ = ( ROTL32 ( s , 25 ) ^ Y [ 64 ]) + Y [ P [ 8 ]];* output ++ = ( s ^ Y [ -1 ]) + Y [ P [ 21 ]];Y [ 65 ] = ( ROTL32 ( s , 14 ) ^ Y [ -3 ]) + Y [ P [ 48 ]];Y ++ ;}روابط خارجية
- إيلي بيهام ، جينيفر سيبري ، مواصفات بايثون ( بوستسكريبت )
- إيلي بيهام ، جينيفر سيبري ، تعديل إعداد متجه التهيئة لعائلة تشفيرات التدفق Py - التشفيرات TPy وTPypy وTPy6
- صفحة eStream على بايثون
- بول كراولي ، تحليل الشفرات في لغة بايثون
- سوراديوتي بول ، بارت برينيل ، جوثام سيكار ، تمييز الهجمات على تيار التشفير Py ، FSE 2006.
- Gautham Sekar , Souradyuti Paul , Bart Preneel , نقاط الضعف في خوارزميات توليد البتات العشوائية الزائفة لتشفيرات التدفق TPypy و TPy , تقرير IACR-ePrint.
- Souradyuti Paul , Bart Preneel , On the (In)security of Stream Ciphers Based on Arrays and Modular Addition (Full Version) , Asicrypt 2006.
- Gautham Sekar , Souradyuti Paul , Bart Preneel , Related-key Attacks on the Py-family of Ciphers and an approach to Repair the Weaknesses , Indocrypt 2007.
- صفحة Rijndael - "الأسئلة الشائعة حول Rijndael" - تمت محاكاتها بشكل ساخر في الملحق ب من مواصفات Py.
- تشفيرات التدفق
