2010-06-21 18 views
16

का उपयोग करके आश्चर्यजनक रूप से पर्याप्त है कि बाउंसी कैसल के हल्के एपीआई का उपयोग करने के बारे में वेब पर बहुत कम जानकारी है। थोड़ी देर के लिए चारों ओर देखने के बाद मैं एक साथ एक बुनियादी उदाहरण डाल करने में सक्षम था:लाउंजेट कैसल आरएसए कीपैयर पीढ़ी लाइटवेट एपीआई

RSAKeyPairGenerator generator = new RSAKeyPairGenerator(); 
generator.init(new RSAKeyGenerationParameters 
    (
     new BigInteger("10001", 16),//publicExponent 
     SecureRandom.getInstance("SHA1PRNG"),//prng 
     1024,//strength 
     80//certainty 
    )); 

AsymmetricCipherKeyPair keyPair = generator.generateKeyPair(); 

मैं आरएसए की बुनियादी समझ और गणित है कि पर्दे के पीछे होता है, तो मैं समझता हूँ कि क्या publicExponent और strength हैं। मुझे लगता है कि publicExponentphi(pq) के एक कॉप्रिम को संदर्भित करता है और जो भी मैं इकट्ठा करता हूं उससे छोटा हो सकता है (जैसे 3) जब तक उचित पैडिंग का उपयोग किया जाता है। हालांकि, मुझे नहीं पता कि certainty का अर्थ है (कुछ जगह का उल्लेख है कि यह एक प्रतिशत का उल्लेख कर सकता है लेकिन मैं निश्चित होना चाहता हूं)। SecureRandom का उपयोग आत्म-व्याख्यात्मक है। documentation of RSAKeyGenerationParameters पूरी तरह से बेकार है (वहां कोई आश्चर्य नहीं है)। मेरा एकमात्र अनुमान यह है कि जेनरेट की गई कुंजी की सटीकता के साथ इसका कुछ संबंध है, लेकिन फिर मैं निश्चित होना चाहता हूं। तो मेरा सवाल यह है कि certainty और publicExponent के लिए उचित मूल्य क्या हैं?

पीएस कृपया उत्तर न दें "यह संदर्भ पर निर्भर करता है - आप कितनी सुरक्षित जानकारी चाहते हैं"। अन्यथा निर्दिष्ट किए जाने तक उच्चतम सुरक्षा (यानि 4096-बिट आरएसए कुंजी या अधिक) मानना ​​बहुत सुरक्षित है ... मैं उन स्रोतों के लिंक की भी सराहना करता हूं जो बाउंसी कैसल के लाइटवेट एपीआई के उपयोग का अच्छा उदाहरण देते हैं (मैं नहीं हूं सभी जेसीए कार्यान्वयन या उससे संबंधित किसी भी उदाहरण में रुचि रखते हैं)।

उत्तर

9

आप दोनों के लिए सही मान का उपयोग कर रहे हैं।

सार्वजनिक एक्सप्लेंटेंट Fermat Number होना चाहिए। 0x10001 (एफ 4) वर्तमान अनुशंसित मूल्य है। 3 (एफ 1) भी सुरक्षित होने के लिए जाना जाता है।

आरएसए कुंजी उत्पादन के लिए प्रमुख संख्या की आवश्यकता है। हालांकि, पूर्ण प्रधान संख्याएं उत्पन्न करना असंभव है। किसी भी अन्य क्रिप्टो पुस्तकालयों की तरह, बीसी संभावित प्राइम संख्याओं का उपयोग करता है। निश्चितता इंगित करती है कि आप कितनी निश्चित संख्या चाहते हैं कि यह संख्या प्रमुख हो। 80 से ऊपर कुछ भी महत्वपूर्ण पीढ़ी को धीमा कर देगा।

कृपया ध्यान दें कि आरएसए एल्गोरिदम अभी भी असंभव घटना में काम करता है कि प्राइम नंबर वास्तविक प्रधान नहीं है क्योंकि बीसी सापेक्ष प्राथमिकता के लिए जांच करता है।

+0

यह देखते हुए कि 'संभावित प्राइम' का बिंदु यह है कि आप इसे कारक नहीं बना सकते हैं, आप कैसे जांच सकते हैं कि यह अपेक्षाकृत प्रमुख है या नहीं? सापेक्ष प्राथमिकता सिर्फ एक और संभाव्य जांच की जांच नहीं है? – Jherico

+0

जीसीडी की गणना करके सापेक्ष प्राथमिकता आसानी से जांच की जा सकती है। यदि यह 1 है, 2 संख्या सापेक्ष प्रधान हैं। –

+0

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

8

मैं अपने स्रोत कोड में तल्लीन "कुछ" होना जरूरी हैं, लेकिन मुझे विश्वास है कि certainty पैरामीटर BigInteger निर्माता है, जो कहते हैं, "संभावना है कि नए BigInteger अभाज्य संख्या होगा का प्रतिनिधित्व करता है के लिए सीधे पारित हो जाता है से अधिक (1 - 1/2 निश्चितता)। इस कन्स्ट्रक्टर का निष्पादन समय इस पैरामीटर के मान के समान है। "

तो, 80 के मूल्य के साथ, 2 में 1 से कम मौका है कि यह संख्या प्रमुख नहीं होगी। टिप्पणी से पता चलता है कि प्राइम नंबर पीढ़ी का समय इस पैरामीटर के संबंध में रैखिक है, लेकिन आपको यह सुनिश्चित करने के लिए परीक्षण करना चाहिए कि क्या आप इसे बढ़ाना चुनते हैं। आपके द्वारा उपयोग किए जा रहे प्रमुख आकार के अनुरूप एक मान का उपयोग करना समझ में आ सकता है। उदाहरण के लिए, एनआईएसटी का कहना है कि एक 1024-बिट आरएसए कुंजी 80-बिट सममित कुंजी के रूप में मजबूत है। 2048-बिट आरएसए कुंजी के लिए, आप 112 बिट्स (समतुल्य ताकत सममित कुंजी आकार) की निश्चितता का उपयोग करना चाहेंगे, और इसी तरह।

ऐसा लगता है कि आप विशेष मामलों में सार्वजनिक एक्सपोनेंट के रूप में 3 का उपयोग करने की भेद्यता से अवगत हैं। मूल्य 65537 अब लगभग सार्वभौमिक रूप से उपयोग किया जाता है।

+2

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

+0

@ थॉमस: सार्वजनिक एक्सपोनेंट के मूल्य को 65537 पर सेट करने के संबंध में, मुझे बहुत संदेह था। यह 65537 से भी अधिक हो सकता है, है ना? कोई प्राइम करेगा? – Andrey

+2

@ यमशा: सार्वजनिक एक्सपोनेंट कोई भी मूल्य हो सकता है जो पी -1 और क्यू -1 के लिए _relatively prim_ है (जहां पी और क्यू आरएसए मॉड्यूलस के प्रमुख कारक हैं)। आरएसए कुंजी जेनरेटर प्रदान किए गए सार्वजनिक एक्सपोनेंट को पैरामीटर के रूप में उपयोग करता है, और उपयुक्त पी और क्यू का चयन करता है। यह मूल्य भी मानता है। कोई विषम पूर्णांक (1 को छोड़कर) सार्वजनिक एक्सपोनेंट के रूप में उपयोग किया जा सकता है; एक प्राइम का उपयोग केवल कुंजी जनरेटर के लिए थोड़ा आसान बनाता है। सार्वजनिक कुंजी संचालन की लागत सार्वजनिक एक्सपोनेंट के आकार के साथ बढ़ जाती है, इसलिए आप शायद इसे छोटा रखना चाहते हैं। –

3

एक अच्छा संदर्भ FIPS PUB 186-3 है। विशेष रूप से, परिशिष्ट बी सेक्शन 3 में कई सुरक्षा पैरामीटर हैं, साथ ही साथ प्राइम पीढ़ी एल्गोरिदम भी हैं।certainty मिलर-राबिन प्राथमिकता परीक्षण के पुनरावृत्तियों की संख्या है।

2

See this answer on crypto.stackexchange.com अधिक जानकारी के लिए कि निश्चितता के आपके मूल्य की गणना कैसे की जानी चाहिए।

पाउलो Ebermann के जवाब का पूर्वावलोकन करें: एक्स बिट्स की

निश्चितता का मतलब है कि संभावना है कि कुछ (इस मामले प्रधानमंत्री पी जा रहा है में) नहीं सच होने से 2-एक्स छोटा होता है। यह समान संभावना है कि पर यादृच्छिक एक्स-बिट मान सही ढंग से अनुमान लगाने के लिए, इसलिए नाम का प्रयास करें।

एक्स का चयन कैसे करें? हम चाहते हैं कि पी (और क्यू) प्राइम की संभावना कम न हो, इस बिंदु में विफलता संभावना प्रणाली को तोड़ने के अन्य तरीकों से बड़ी नहीं है - सममित कुंजी का अनुमान लगाने, मॉड्यूलस इत्यादि का अनुमान लगाने आदि।

तो यहां सममित और असममित कुंजी आकारों की एक पत्राचार तालिका मदद करनी चाहिए। http://www.keylength.com/ वही प्राइम निश्चितता चुनें क्योंकि आप अपने सार्वजनिक कुंजी उपयोग के साथ सममित कुंजी आकार चुनेंगे।

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