مولد الانكماش
في علم التشفير ، يُعدّ مولد الأرقام المتناقصة شكلاً من أشكال مولدات الأرقام شبه العشوائية المصممة للاستخدام في تشفير التدفق . وقد نُشر في مؤتمر Crypto عام 1993 من قِبل دون كوبرسميث ، وهوجو كراوتشيك، ويشاي منصور . [ 1 ]
يستخدم مولد التناقص مسجلين إزاحة خطيين بتغذية راجعة . أحدهما، يُسمى تسلسل A ، يُولّد بتات الإخراج، بينما يتحكم الآخر، يُسمى تسلسل S ، في إخراجها. يتم توقيت كل من A و S ؛ إذا كانت قيمة بت S تساوي 1، فسيتم إخراج بت A ؛ وإذا كانت قيمة بت S تساوي 0، فسيتم تجاهل بت A ، ولن يتم إخراج أي شيء، وسيتم توقيت المسجلين مرة أخرى. من عيوب هذا التصميم أن معدل إخراج المولد يتغير بشكل غير منتظم، وبطريقة تُشير إلى حالة S ؛ ويمكن التغلب على هذه المشكلة بتخزين الإخراج مؤقتًا. لا يضمن التسلسل العشوائي المُولّد بواسطة مسجل الإزاحة الخطي بتغذية راجعة عدم القدرة على التنبؤ في الأنظمة الآمنة، وقد تم اقتراح طرق مختلفة لتحسين عشوائيته [ 2 ].
على الرغم من هذه البساطة، لا توجد حاليًا هجمات معروفة أفضل من البحث الشامل عندما تكون كثيرات الحدود التغذية الراجعة سرية. أما إذا كانت كثيرات الحدود التغذية الراجعة معروفة، فإن أفضل هجوم معروف يتطلب أقل من A × S بت من المخرجات. [ 3 ]
أحد أنواعها هو المولد الذي يتقلص ذاتيًا .
تطبيق بلغة بايثون
يستخدم هذا المثال نظامي غالوا LFRS لإنتاج دفق بتات شبه عشوائي. يمكن استخدام كود بايثون لتشفير وفك تشفير ملف أو أي دفق بايتات.
#!/usr/bin/env python3استيراد sys---------------------------------------------------------------------------- تبدأ وظائف Crypto4o من هنا ----------------------------------------------------------------------------class GLFSR : """مسجل إزاحة خطي ذو تغذية راجعة من نوع غالوا."""def __init__ ( self , polynom , initial_value ): print "استخدام متعدد الحدود 0x %X ، القيمة الابتدائية: 0x %X ." % ( polynom , initial_value )self.polynom = polynom | 1 self.data = initial_value tmp = polynom self.mask = 1بينما tmp لا يساوي صفرًا : إذا كان tmp & self.mask لا يساوي صفرًا : tmp ^ = self.maskإذا كانت قيمة tmp تساوي 0 : توقفقناع الذات << = 1دالة next_state ( self ): self . data <<= 1القيمة المرجعية = 0إذا كانت قيمة ` self.data` و` self.mask` لا تساوي صفرًا ، فإن قيمة `retval` تساوي 1. ثم يتم تطبيق عملية ` self.polynom` على البيانات .إرجاع القيمة المرتجعةclass SPRNG : def __init__ ( self , polynom_d , init_value_d , polynom_c , init_value_c ) : print " GLFSR D0: " , self.glfsr_d = GLFSR ( polynom_d , init_value_d ) print " GLFSR C0: " , self.glfsr_c = GLFSR ( polynom_c , init_value_c )دالة next_byte ( self ): byte = 0 bitpos = 7بينما صحيح : bit_d = self.glfsr_d.next_state ( ) bit_c = self.glfsr_c.next_state ( )إذا كان bit_c != 0 : bit_r = bit_d byte |= bit_r << bitposbitpos -= 1إذا كان bitpos < 0 : توقفبايت الإرجاع---------------------------------------------------------------------------- تنتهي وظائف Crypto4o هنا ----------------------------------------------------------------------------def main ( ): prng = SPRNG ( int ( sys.argv [ 3 ] , 16 ), int ( sys.argv [ 4 ] , 16 ) , int ( sys.argv [ 5 ] , 16 ) , int ( sys.argv [ 6 ] , 16 ) , )باستخدام الدالة ` with open ( sys.argv [ 1 ], "rb" ) as f , open ( sys.argv [ 2 ] , " wb " ) as g : while True : input_ch = f.read ( 1 ) `إذا كانت قيمة input_ch تساوي "" : توقفrandom_ch = prng.next_byte ( ) & 0xFF g.write ( chr ( ord ( input_ch ) ^ random_ch ) )إذا كان __name__ يساوي "__main__" : main ()انظر أيضاً
- FISH ، وهي خوارزمية تشفير متدفقة (غير آمنة) تعتمد على مبدأ المولد المتقلص
- مولد الخطوات المتناوبة ، وهو نوع مشابه من تشفير التدفق
مراجع
- ↑ د. كوبرسميث، هـ. كراوتشيك، وي. منصور، " المولد المتقلص "، في CRYPTO '93: وقائع المؤتمر الدولي السنوي الثالث عشر لعلم التشفير حول التطورات في علم التشفير، (نيويورك، نيويورك، الولايات المتحدة الأمريكية)، الصفحات 22-39، Springer-Verlag New York, Inc.، 1994
- ↑ Poorghanad, A. et al. توليد أرقام عشوائية زائفة عالية الجودة باستخدام الأساليب التطورية IEEE ، DOI: 10.1109/CIS.2008.220.
- ↑ كاباليرو-جيل، ب. وآخرون. استراتيجية هجوم جديدة للمولد المتقلص مجلة البحث والممارسة في تكنولوجيا المعلومات ، المجلد 1، الصفحات 331-335، ديسمبر 2008.
- تشفيرات التدفق
- مولدات الأرقام شبه العشوائية
