2010-06-12 13 views
9

tornado .web मॉड्यूल में वहाँ एक समारोह _time_independent_equals कहा जाता है:यह '_time_independent_equals` का क्या अर्थ है?

def _time_independent_equals(a, b): 
    if len(a) != len(b): 
     return False 
    result = 0 
    for x, y in zip(a, b): 
     result |= ord(x)^ord(y) 
    return result == 0 

यह इस प्रकार सुरक्षित कुकी हस्ताक्षर तुलना करने के लिए प्रयोग किया जाता है, और नाम।

लेकिन इस फ़ंक्शन के कार्यान्वयन के संबंध में, क्या यह a==b कहने का एक जटिल तरीका है?

उत्तर

18

वह फ़ंक्शन स्ट्रिंग की तुलना नहीं करता है, यह हमेशा निष्पादित करने के लिए समान समय लेता है।

यह सुरक्षा कार्यों के लिए उपयोगी है जैसे पासवर्ड की तुलना करना। यदि फ़ंक्शन पहले मिस्चैचिंग बाइट पर लौटा, तो हमलावर सभी संभावित बाइट्स को आजमा सकता है और पता है कि जो सबसे लंबा समय लेता है वह एक मैच है। फिर वे सभी संभव दूसरे बाइट्स को आजमा सकते हैं और जानते हैं कि जो सबसे लंबा समय लेता है वह एक मैच है। यह तब तक दोहराया जा सकता है जब तक कि पूरी स्ट्रिंग को कम नहीं किया जाता है। (हकीकत में आपको नेटवर्क में यादृच्छिक देरी से निपटने के लिए बहुत अधिक औसत करना है, लेकिन यदि आप धीरज रखते हैं तो यह काम करता है।)

संबंधित मुद्दे