आप Proof-of-work system खोज रहे हैं।
सबसे लोकप्रिय एल्गोरिदम Hashcash (Wikipedia पर भी) लगता है, जिसका उपयोग बिटकॉइन के लिए अन्य चीजों के साथ किया जाता है। बुनियादी विचार क्लाइंट प्रोग्राम से हैश को एक निश्चित संख्या में अग्रणी शून्य के साथ ढूंढना है, जो एक समस्या है जिसे उन्हें ब्रूट फोर्स के साथ हल करना है।
असल में, यह इस तरह काम करता है: क्लाइंट के पास कुछ प्रकार का टोकन है। ईमेल के लिए, यह आमतौर पर प्राप्तकर्ता का ईमेल पता और आज की तारीख है। तो यह ऐसा दिखाई दे सकता:
[email protected]:04102011
ग्राहक अब इस के सामने डाल करने के लिए एक यादृच्छिक स्ट्रिंग को खोजने के लिए है:
[email protected]:04202011
ऐसी है कि इस बात का हैश प्रमुख 0s का एक समूह है। (मेरा उदाहरण काम नहीं करेगा क्योंकि मैंने अभी एक संख्या बनाई है।)
फिर, आपके पक्ष में, आपको बस इस यादृच्छिक इनपुट को लेना होगा और यह जांचने के लिए एकल हैश चलाएं, यह जांचने के लिए कि क्या यह शुरू होता है 0s का एक गुच्छा। यह बहुत तेज ऑपरेशन है।
कारण क्लाइंट सही हैश ढूंढने पर उचित मात्रा में CPU समय व्यतीत करना है कि यह एक क्रूर-बल समस्या है। केवल एक ही जानना है कि यह एक यादृच्छिक स्ट्रिंग चुनना है, इसका परीक्षण करना है, और यदि यह काम नहीं करता है, तो दूसरा चुनें।
बेशक, चूंकि आप ईमेल नहीं कर रहे हैं, तो आप शायद ईमेल पते और तारीख के बजाय किसी प्रकार के एक अलग टोकन का उपयोग करना चाहेंगे। हालांकि, आपके मामले में, यह आसान है: आप केवल एक यादृच्छिक स्ट्रिंग सर्वर-साइड बना सकते हैं और इसे क्लाइंट को पास कर सकते हैं।
इस विशेष एल्गोरिदम का एक लाभ यह है कि कठिनाई को समायोजित करना बहुत आसान है: बस बदलें कि आप कितने प्रमुख शून्य चाहते हैं। आपको जितनी अधिक ज़ीरो चाहिए, उतना ही वह ग्राहक ले जाएगा; हालांकि, सत्यापन अभी भी आपके अंत में एक ही समय लेता है।
ब्रश को सरल हैश को मजबूर करने के बारे में कैसे?एक यादृच्छिक मूल्य सर्वर पक्ष उत्पन्न करें, इसे हैश करें और इसे ब्रूट बल के लिए क्लाइंट को पास करें। – user1937198
या एक बड़ा पूर्णांक कारक बनाना, इतना बड़ा है कि कारक में समय लगता है। –