Do नहीं दुकान एक सरल SHA-1 क्रेडिट कार्ड नंबर के, यह रास्ता आसान करने के लिए दरार (विशेष रूप से के बाद से पिछले 4 अंक में जाना जाता है) होगा। हमारी कंपनी में भी यही समस्या थी: यहां हमने इसे हल किया है।
पहले समाधान
- प्रत्येक क्रेडिट कार्ड के लिए, हम अंतिम 4 अंक, समाप्ति तिथि, एक लंबे यादृच्छिक नमक (50 बाइट्स लंबे), और सीसी संख्या के नमकीन हैश की दुकान। हम bcrypt हैश एल्गोरिदम का उपयोग करते हैं क्योंकि यह बहुत सुरक्षित है और जैसा कि आप चाहें सीपीयू-गहन के रूप में देखा जा सकता है। हमने इसे बहुत महंगा (हमारे सर्वर पर लगभग 1 सेकंड प्रति हैश) के रूप में ट्यून किया है। लेकिन मुझे लगता है कि आप इसके बजाय SHA-256 का उपयोग कर सकते हैं और जितनी बार आवश्यक हो उतनी बार पुन: प्रयास कर सकते हैं।
- जब कोई नया सीसी नंबर दर्ज किया जाता है, तो हम सभी मौजूदा सीसी संख्याओं को ढूंढकर शुरू करते हैं जो समान 4 अंकों के साथ समाप्त होते हैं और समान समाप्ति तिथि होती है। फिर, प्रत्येक मिलान सीसी के लिए, हम जांचते हैं कि इसके संग्रहित नमकीन हैश नमक वाले हैश से मेल खाता है और उसके नए सीसी नंबर से गणना की जाती है। दूसरे शब्दों में, हम जांचते हैं कि
hash(stored_CC1_salt+CC2)==stored_CC1_hash
है या नहीं।
चूंकि हमारे पास हमारे डेटाबेस में लगभग 100k क्रेडिट कार्ड हैं, इसलिए हमें लगभग 10 हैंश की गणना करने की आवश्यकता है, इसलिए हमें परिणाम लगभग 10 सेकंड मिलते हैं। हमारे मामले में, यह ठीक है, लेकिन आप थोड़ा सा bcrypt ट्यून करना चाहते हैं। दुर्भाग्यवश, यदि आप करते हैं, तो यह समाधान कम सुरक्षित होगा। दूसरी तरफ, यदि आप बीसीआरपीटी को और भी सीपीयू-गहन होने के लिए ट्यून करते हैं, तो सीसी संख्याओं से मेल खाने में अधिक समय लगेगा।
हालांकि मुझे विश्वास है कि इस समाधान रास्ता बस सीसी संख्या का एक अनसाल्टेड हैश भंडारण की तुलना में बेहतर है, यह एक बहुत प्रेरित समुद्री डाकू एक क्रेडिट तोड़ने के लिए (जो डेटाबेस की एक प्रति प्राप्त करने के लिए प्रबंधन) पर रोक नहीं लगेगी 2 से 5 साल के औसत समय में कार्ड। तो यदि आपके पास अपने डेटाबेस में 100k क्रेडिट कार्ड हैं, और यदि समुद्री डाकू में सीपीयू के है, तो वह हर दिन कुछ क्रेडिट कार्ड नंबर पुनर्प्राप्त कर सकता है!
इससे मुझे विश्वास होता है कि आपको हैश की गणना नहीं करनी चाहिए: आपको इसे किसी और को सौंपना होगा। यह दूसरा समाधान है (हम इस दूसरे समाधान में माइग्रेट करने की प्रक्रिया में हैं)।
दूसरा समाधान
आप अपने भुगतान प्रदाता आपके क्रेडिट कार्ड के लिए उपनाम उत्पन्न की है।
प्रत्येक क्रेडिट कार्ड के लिए
- , तो आप बस जो भी आप (उदाहरण के लिए पिछले 4 अंक & समाप्ति की तारीख) स्टोर करने के लिए प्लस एक क्रेडिट कार्ड नंबर उर्फ चाहते दुकान।
- जब कोई नया क्रेडिट कार्ड नंबर दर्ज किया जाता है, तो आप अपने भुगतान प्रदाता से संपर्क करते हैं और इसे सीसी नंबर देते हैं (या आप ग्राहक को भुगतान प्रदाता को रीडायरेक्ट करते हैं, और वह सीसी नंबर सीधे भुगतान प्रदाता की वेबसाइट पर प्रवेश करता है)। बदले में, आपको क्रेडिट कार्ड उपनाम मिलता है! बस। बेशक आपको यह सुनिश्चित करना चाहिए कि आपका भुगतान प्रदाता इस विकल्प को प्रदान करता है, और जेनरेट किया गया उपनाम वास्तव में सुरक्षित है (उदाहरण के लिए, सुनिश्चित करें कि वे क्रेडिट कार्ड नंबर पर केवल SHA-1 की गणना नहीं करते हैं!)। अब समुद्री डाकू संख्या को पुनर्प्राप्त करना चाहते हैं तो समुद्री डाकू को आपके सिस्टम प्रदाता के सिस्टम प्लस को अपने भुगतान प्रदाता की प्रणाली को तोड़ना है।
यह आसान है, यह तेज़ है, यह सुरक्षित है (ठीक है, कम से कम यदि आपका भुगतान प्रदाता है)। मुझे एकमात्र समस्या यह है कि यह आपको अपने भुगतान प्रदाता से जोड़ता है।
उम्मीद है कि इससे मदद मिलती है।
मैं सहमत हूं। ध्यान रखें कि यह क्रेडिट कार्ड को ओ (एन) ऑपरेशन पंजीकृत करता है जहां एन पंजीकृत कार्ड की मौजूदा संख्या है। प्लस हैशिंग एक काफी महंगी ऑपरेशन है। – Johan