2009-05-06 4 views
6

मैं एक ऐसी स्क्रिप्ट तैयार कर रहा हूं जो नामों और ईमेल पते की एक सूची लेता है और हमारे विभाग की सुरक्षित वेबसाइट के लिए पंजीकरण करने के लिए उन्हें आमंत्रित करने वाला एक ईमेल भेजता है। नाम और ईमेल की सूची एक ही साइट पर सार्वजनिक सामना पृष्ठ पर उपलब्ध है। मुझे उन्हें एक अद्वितीय टोकन देने का एक तरीका चाहिए जो उन्हें पहचानने के लिए पृष्ठ पर ईमेल में एक लिंक का पालन करते समय उनकी पहचान करेगा। खाता बनाने और अपना प्रारंभिक पासवर्ड सेट करने के लिए उपयोगकर्ता केवल टोकन का उपयोग करेगा।पूर्व-साझा पहचानकर्ता के बिना उपयोगकर्ताओं को प्रमाणीकृत करने के लिए रणनीतियां

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

+1

आपकी अपडेट की गई समस्या वास्तव में कोई अलग, अवधारणात्मक नहीं है। आपको बस इतना करना है कि "उपयोगकर्ता नाम" के बजाय ईमेल पता का उपयोग करें जिसे मैंने अपने उत्तर में संदर्भित किया था। तो यादृच्छिक रूप से एक टोकन उत्पन्न करें, इसे कहीं भी ईमेल पते से लिंक करें, और ईमेल में लिंक में उनके ईमेल और टोकन दोनों शामिल हैं ताकि आप लुकअप कर सकें। –

उत्तर

3

इसे विशेष रूप से हैश होने की आवश्यकता क्यों है? बस नए उपयोगकर्ता के उपयोगकर्ता नाम को लिंक के हिस्से के रूप में रखें, और यादृच्छिक रूप से अपनी इच्छित लंबाई के प्रमाणीकरण टोकन जेनरेट करें, और डेटाबेस में संग्रहीत करें, जो उनके उपयोगकर्ता नाम से लिंक हो, जब तक वे प्रमाणीकृत न हों।

http://domain.com/confirm.php?user=Chad&t=AB14CD05 

अगर कोई टकराव नहीं है यह वास्तव में कोई फर्क नहीं पड़ता, यह काफी कम जोखिम घटना वैसे भी:

तो लिंक वे ईमेल में प्राप्त की तरह कुछ है। वैसे भी क्या गलत हो सकता है, कोई और ... उनके लिए उनके ईमेल पते की पुष्टि कर सकता है? आप किसके बारे में चिंतित हैं? शायद अगर आप पूरी प्रक्रिया को थोड़ा और विस्तार से समझाते हैं, तो मैं आपकी आवश्यकताओं को बेहतर समझूंगा।

+0

मुझे लगता है कि मुझे प्रश्न बदलने की जरूरत है। आपका अधिकार, मुझे अपनी जरूरतों को पूरा करने के लिए हैश बनाने का सबसे अच्छा तरीका नहीं ढूंढना चाहिए, लेकिन मुझे यह पूछना चाहिए कि प्रमाणीकरण की समग्र समस्या का समाधान क्या होगा जब केवल अर्ध-निजी पहचानकर्ता टोकन को आमंत्रित करता हूं जिसे मैं आमंत्रित करता हूं ईमेल। क्या मुझे अपना प्रश्न संशोधित करना चाहिए या क्या मुझे एक नया पोस्ट करना चाहिए? –

9

कई अलग हैंश एल्गोरिदम हैं। आप यह देखने के लिए इस लिंक को देख सकते हैं कि कोई आपके लिए बेहतर काम करेगा, क्योंकि आपको सुरक्षित हैश की आवश्यकता नहीं है। आप यह देखने के लिए भी देख सकते हैं कि एसएसएल lib 8 अक्षर एमडी 4 हैश उत्पन्न करेगा।

http://www.partow.net/programming/hashfunctions/#top

1

बाहर चेक gperf

जीएनयू gperf एक आदर्श हैश फ़ंक्शन जेनरेटर है। तारों की एक दी गई सूची के लिए, यह इनपुट स्ट्रिंग पर के आधार पर मान को देखने के लिए सी या सी ++ कोड के रूप में हैश फ़ंक्शन और हैश तालिका उत्पन्न करता है। हैश फ़ंक्शन सही है, जिसका अर्थ है कि हैश तालिका में कोई टकराव नहीं है, और हैश टेबल लुकअप को केवल एक स्ट्रिंग तुलना की आवश्यकता है।

और यह भी CMPH - C Minimal Perfect Hashing Library

के प्रश्न अतः संबंधित कई हैं:

+0

उत्तर के लिए धन्यवाद, ऐसा लगता है कि मैं गलत सवाल पूछ रहा था। –

+0

जो भी अभी डाउनवॉट किया गया है, 'बदला' डाउनवोट –

2

क्यों नहीं बस एक यादृच्छिक 64-बिट संख्या उपयोगकर्ता की आईडी के साथ भेजने के लिए आवंटित। 64-बिट संख्या लें, इसे 5-बिट भाग में विभाजित करें, और 32-वर्ण वर्णमाला में इंडेक्स में प्रत्येक 5-बिट खंड का उपयोग करें: 23456789ABCDEFGHJKLMNPQRSTUVWXYZ (आसानी से 01IO को छोड़कर)। 64-बिट संख्या और 5-बिट/कोड (अंतिम को छोड़कर) के साथ आपको उपयोगकर्ता की पहचान करने के लिए उपयोग करने के लिए 13 वर्ण स्लग मिलता है। यदि आप चाहें तो 5 वर्णों के 3 समूह देने के लिए आप इसे 2 यादृच्छिक वर्णों से पैड कर सकते हैं।

लॉगिन यूआरएल की आईडी और स्लग हिस्सा बनाएं। यह सुनिश्चित करने के लिए डेटाबेस में आईडी के साथ संग्रहीत स्लग के मान की जांच करें कि वे वही हैं। मुझे लगता है कि ज्यादातर उद्देश्यों के लिए यह अनुमान लगाने में बहुत मुश्किल है कि यह अनुमान लगाने में बहुत मुश्किल है - संख्या सभी के बाद यादृच्छिक है - जो स्लग उपयोगकर्ता आईडी के साथ जाता है।एक क्रिप्टोग्राफिक रूप से मजबूत यादृच्छिक संख्या जेनरेटर का उपयोग करके, मुझे लगता है कि यह बेहद असंभव होगा कि आपको अपने किसी भी उपयोगकर्ता के लिए दोहराना संख्या भी मिल जाएगी।

यह ऐसा दिखाई देगा:

http://example.com/activate?userid=bgates&validate=GY45M-RHQBN-32GYM 

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

+0

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

+0

यदि आपको वास्तव में "ज्ञात मानों" के आधार पर हैश का उपयोग करने की आवश्यकता है, तो आप हैश को नमक कर सकते हैं, जो अनुमान लगाने में बहुत मुश्किल बनाता है। जैसे sha1 ("6b34ff3b93d0ebd46d3e"। $ उपयोगकर्ता नाम। "8ca97cf1ae342d340f26")। बेशक, अगर नमक लीक हो जाता है, तो आप को रोक दिया जाता है। लेकिन हाँ, उपयोगकर्ता जानकारी से संबंधित एक यादृच्छिक मूल्य उत्पन्न करना बेहतर है, और उस डेटाबेस में यादृच्छिक मान संग्रहीत करना बेहतर है। – dirtside

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

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