मेरी टीम को कुछ सर्वर साइड कोड (जावा में) सौंपे गए जो यादृच्छिक टोकन उत्पन्न करते हैं और मेरे पास उसी के बारे में एक प्रश्न है -
इन टोकन का उद्देश्य काफी संवेदनशील है - सत्र आईडी, पासवर्ड रीसेट लिंक आदि के लिए उपयोग किया जाता है। टोकन एक "लंबा" है, इसलिए यह 64 बिट लंबा है।
कोड वर्तमान में java.util.Randomइन टोकन को उत्पन्न करने के लिए वर्ग का उपयोग करता है । प्रलेखन के लिए java.util.Randomस्पष्ट रूप से निम्नलिखित:
Java.util.Random के उदाहरण क्रिप्टोग्राफिक रूप से सुरक्षित नहीं हैं। सुरक्षा-संवेदनशील अनुप्रयोगों द्वारा उपयोग के लिए एक क्रिप्टोग्राफिक रूप से सुरक्षित छद्म यादृच्छिक संख्या जनरेटर प्राप्त करने के लिए SecureRandom का उपयोग करने के बजाय विचार करें।
हालाँकि, वर्तमान में जिस तरह से कोड का उपयोग किया जा रहा है java.util.Randomवह यह है - यह java.security.SecureRandomक्लास को इंस्टेंटिअट्स करता है और फिर क्लास को SecureRandom.nextLong()इंस्टेंट करने के लिए उपयोग किए जाने वाले बीज को प्राप्त करने के लिए विधि का उपयोग करता है java.util.Random। तब यह java.util.Random.nextLong()टोकन उत्पन्न करने के लिए विधि का उपयोग करता है ।
तो अब मेरा सवाल है - क्या यह अभी भी असुरक्षित है कि java.util.Randomबीज का उपयोग किया जा रहा है java.security.SecureRandom? क्या मुझे कोड को संशोधित करने की आवश्यकता है ताकि यह java.security.SecureRandomटोकन उत्पन्न करने के लिए विशेष रूप से उपयोग करे ?
वर्तमान Randomमें स्टार्टअप पर कोड सीड एक बार
Randomएक बार स्टार्टअप पर बीज कर देता है , या क्या यह हर टोकन के लिए एक नया बीज देता है? उम्मीद है, यह एक बेवकूफ सवाल है, लेकिन मुझे लगा कि मैं जाँच करूँगा।
longया doubleमूल्यों का उत्पादन नहीं करेगा ।