জাভা.সিকিউরিটি.ইজিডি বিকল্পটি কীসের জন্য?


22

যে প্রকল্পে আমি কাজ করছি, অ্যাপ্লিকেশনটি এর অনুরূপ একটি কমান্ড ব্যবহার করে চালু করা হয়েছে:

java -Djava.security.egd=file:/dev/urandom -jar app.jar

আমি এর java.security.egdআগে এই বিকল্পটি কখনই দেখিনি । কিছুটা অনুসন্ধান করলে মনে হচ্ছে জাভা অ্যাপ্লিকেশনটিতে এলোমেলো সংখ্যা জেনারেশন কনফিগার করতে ব্যবহৃত হয়েছে।

এটা কি ঠিক? কখন প্রয়োগ করার কথা?

উত্তর:


29

জাভা অ্যাপ্লিকেশন এবং ব্যবহার করা উচিত পারবেন java.security.SecureRandom বর্গ একটা ক্রিপ্টোগ্রাফি শক্তিশালী সিউডো-রেণ্ডম সংখ্যা উত্পাদক (ব্যবহার করে ক্রিপ্টোগ্রাফি শক্তিশালী র্যান্ডম মান উত্পাদন করতে CSPRNG )। Java.util.Random বর্গের স্ট্যান্ডার্ড জেডিকে বাস্তবায়নগুলি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী বলে বিবেচিত হয় না।

ইউনিক্স-এর মতো অপারেটিং সিস্টেমগুলিতে /dev/randomএকটি বিশেষ ফাইল রয়েছে যা ডিভাইস ড্রাইভার এবং অন্যান্য উত্স থেকে সংগৃহীত পরিবেশগত শব্দকে অ্যাক্সেস করে সিউডো এলোমেলো নম্বর দেয় numbers তবে অনুরোধের চেয়ে কম এনট্রপি পাওয়া গেলে এটি ব্লক করে ; /dev/urandomসাধারণত সিউডোরেন্ডম সংখ্যা জেনারেটর বীজ বুট থেকে এনট্রপি দিয়ে পুরোপুরি আরম্ভ করা হয় না তা কখনও থামায় না। এখনও একটি তৃতীয় বিশেষ ফাইল রয়েছে, /dev/arandomযা বীজটিকে সুরক্ষিতভাবে পর্যাপ্ত এনট্রপি দিয়ে শুরু না করা পর্যন্ত বুট করার পরে অবরুদ্ধ করে এবং এরপরে আর কখনও অবরুদ্ধ হয় না।

ডিফল্টরূপে, JVM SecureRandom বর্গটি ব্যবহার করে বীজ বর্ধিত করে /dev/random, তাই আপনার জাভা কোডটি অপ্রত্যাশিতভাবে ব্লক করতে পারে-Djava.security.egd=file:/dev/./urandomজাভা প্রক্রিয়া শুরু করতে ব্যবহৃত কমান্ড লাইন অনুরোধের বিকল্পটি JVM কে /dev/urandomপরিবর্তে ব্যবহার করতে বলে ।

অতিরিক্ত /./মনে হয় JVM কে SHA1PRNG অ্যালগরিদম ব্যবহার করে যা পিআরএনজি (সিউডো র্যান্ডম নম্বর জেনারেটর) এর ভিত্তি হিসাবে SHA-1 ব্যবহার করে। /dev/urandomনির্দিষ্ট করার সময় এটি ব্যবহৃত নেটিপিআরএনজি অ্যালগরিদমের চেয়ে শক্তিশালী ।

অবশেষে, একটি মিথ আছে যা /dev/urandomছদ্ম র্যান্ডম সংখ্যা জেনারেটর, একটি পিআরএনজি, যখন /dev/randomএকটি "সত্য" র্যান্ডম সংখ্যার জেনারেটর । এই কেবল সত্য নয়, উভয় /dev/randomএবং /dev/urandomএকই CSPRNG (ক্রিপ্টোগ্রাফি নিরাপদ সিউডোরান্ডম সংখ্যা উত্পাদক) দ্বারা খাওয়ানো হয়। কিছু অনুমান অনুসারে কেবল যখন তাদের নিজ নিজ পুলটি এন্ট্রপির বাইরে চলে যায় তখনই আচরণগুলি পৃথক: /dev/randomব্লক, যখন /dev/urandomনা থাকে।

এনট্রপি কম চলছে কি? এটা কোন ব্যাপার না।

দেখা যাচ্ছে যে আমাদের প্রচুর ক্রিপ্টোগ্রাফিক বিল্ডিং ব্লকগুলির জন্য "এলোমেলোভাবে অনুসন্ধান করা" হ'ল মৌলিক প্রয়োজনীয়তা। এবং যদি আপনি কোনও ক্রিপ্টোগ্রাফিক হ্যাশ আউটপুট নেন তবে এটি এলোমেলো স্ট্রিং থেকে পৃথক হতে হবে যাতে সাইফাররা এটি গ্রহণ করবে। এটি SHA1PRNG অ্যালগরিদম ব্যবহার করার কারণ, কারণ এটি একটি বীজের সাথে হ্যাশ ফাংশন এবং একটি কাউন্টার ব্যবহার করে।

কখন প্রয়োগ করার কথা?

সর্বদা, আমি বলব।

সূত্র:
https://gist.github.com/svrc/5a8accc57219b9548fe1
https://www.2uo.de/myths-about-urandom


সম্পাদনা 04/2020:

একটি মন্তব্যে জাভা 8- এ SecureRandom শ্রেণির আচরণের পরিবর্তনের উল্লেখ রয়েছে ।

এসএএএআর 1 পিএনএনজি এবং নেটিভপিআরএনজি জাভা.সিকিউরিটি ফাইলে সিকিউরর্যান্ডম বীজ উত্সের বৈশিষ্ট্যগুলিকে যথাযথভাবে সম্মান করার জন্য ঠিক করা হয়েছিল। (ফাইল: /// দেব / ইউরানডম এবং ফাইল: / dev /./ ইউরানডম ব্যবহার করে অস্পষ্টভাবে কাজ করার দরকার নেই))

এটি উপরের উত্স বিভাগে রেফারেন্সযুক্ত পরীক্ষাগুলি দ্বারা ইতিমধ্যে চিহ্নিত করা হয়েছিল। অতিরিক্ত জাভা 8 এ সিকিউরআরনম/./ দ্বারা ব্যবহৃত অ্যালগরিদমটি নেটিভআরপিআরএনজি থেকে এসএএআর 1 পিএনএনজিতে পরিবর্তন করতে প্রয়োজন।

তবে আমার কাছে এমন কিছু সংবাদ আছে যা আমি ভাগ করতে চাই। হিসাবে প্রতি JEP-273 , জাভা 9 যেহেতু SecureRandom বর্গ কার্যকরী তিন নির্ণায়ক এলোমেলো বিট জেনারেটর (DRBG) মেকানিজম বর্ণিত , NIST 800-90Ar1 । এই প্রক্রিয়াগুলি SHA-512 এবং AES-256 হিসাবে শক্তিশালী হিসাবে আধুনিক অ্যালগরিদমগুলি প্রয়োগ করে।

জেডিকে দুই ধরণের সিকিওরর্যান্ডম বাস্তবায়ন ছিল:

  • একটি হ'ল প্ল্যাটফর্ম নির্ভর এবং দেশীয় কল বা ওএস ডিভাইসের উপর নির্ভর করে যেমন /dev/{u}randomইউনিক্সে পড়া বা উইন্ডোজে ক্রিপ্টোএপিআই ব্যবহার করা। লিনাক্স এবং উইন্ডোজের সর্বশেষতম প্রকাশনা ইতিমধ্যে ডিআরবিজি সমর্থন করে, তবে পুরানো রিলিজ এবং এমবেডেড সিস্টেমগুলি এটি নাও পারে
  • অন্য ধরণের একটি খাঁটি জাভা বাস্তবায়ন যা একটি পুরানো SHA1- ভিত্তিক আরএনজি বাস্তবায়ন ব্যবহার করে, যা অনুমোদিত ডিআরবিজি পদ্ধতি দ্বারা ব্যবহৃত অ্যালগরিদমের মতো শক্তিশালী নয়।

ইতিমধ্যে জাভা 13 সুরক্ষা বিকাশকারী গাইড এখনও পড়ে

লিনাক্স এবং ম্যাকোজে, জাভা.সিকিউরিটিতে যদি এনট্রপি সংগ্রহের ডিভাইসটি সেট করা থাকে file:/dev/urandomবা হয় file:/dev/random, তবে নেটিভপিআরএনজি SHA1PRNG এর কাছে অগ্রাধিকার দেওয়া হয়। অন্যথায়, SHA1PRNG পছন্দ করা হয়।

নতুন ডিআরবিজি প্রক্রিয়াগুলি কীভাবে পূর্ববর্তী পিআরএনজিগুলির সাথে একসাথে খেলতে পারে তা স্পষ্ট করার জন্য, আমি অ্যাডাপ্টপেনজেডিডি (13.0.2 + 8) দিয়ে ম্যাকোস (ডারউইন) নিয়ে কিছু পরীক্ষা চালাই। ফলাফল এখানে:

ফাইল: / ডিভ / র্যান্ডম
সরবরাহকারীর জন্য পছন্দক্রমের ক্রম:

SecureRandom.NativePRNG
SecureRandom.DRBG
SecureRandom.SHA1PRNG

ফাইল: / ডিভ / ইউরানডম
সরবরাহকারীদের পছন্দের আদেশ:

SecureRandom.NativePRNG
SecureRandom.DRBG
SecureRandom.SHA1PRNG

ফাইল: / dev /./ ইউরেনডম
সরবরাহকারীদের পছন্দের আদেশ:

SecureRandom.DRBG
SecureRandom.SHA1PRNG
SecureRandom.NativePRNG

উপসংহার:

কোডটি অপ্রত্যাশিতভাবে অবরুদ্ধ হওয়া এড়িয়ে চলাকালীন প্ল্যাটফর্মটি নির্বিশেষে -Djava.security.egd=file:/dev/./urandomশক্তিশালী সিকিউরআরডম বাস্তবায়নের সহজলভ্যতা নিশ্চিত করার জন্য আমি ব্যবহার করার পরামর্শ দেব ।


1
জাভা 8-র হিসাবে, ফাইলের নামের অতিরিক্ত। / এর "অস্পষ্ট কর্মসূচী" এর আর প্রয়োজন হয় না, তাই আপনি কেবল "/ dev / urandom" ব্যবহার করতে পারেন, দেখুন: ডকস.ওরাকল.com
কামাল

উত্তরটি আপডেট করার জন্য ধন্যবাদ (বিশেষত জাভা 9 এবং 13 এর পরিবর্তনগুলি সম্পর্কে)। আমার বোধগম্যতা অনুসারে, জাভা 8-তে "এনট্রপি সংগ্রহের ডিভাইস" / dev / urandom বা /dev/./urandom এ সেট করার ফলে ঠিক একই ফলাফল পাওয়া উচিত, অন্যথায় এই সিদ্ধান্তটি কার্যকর হবে না। একটি ওএস দৃষ্টিকোণ থেকে, সেই একই অভিন্ন ফাইলের দিকে নির্দেশ করে, যাতে এটি জাভাকে প্রভাবিত না করে (এটি ফিক্সের আগে করেছিল, তবে এটি একটি বাগ ছিল, উদ্দেশ্যযুক্ত বৈশিষ্ট্য নয়)। সুতরাং আপনার বিবৃতিটি "পিআরএনজি নির্বাচনকে প্রভাবিত করার জন্য অতিরিক্ত /.// প্রয়োজন" " জাভা ৮-এর মতো আর সত্য হওয়া উচিত নয়
কমল

আপনার মন্তব্যের জন্য কমলকে ধন্যবাদ। আমার পূর্ববর্তী বাক্য "PRNG নির্বাচন" যথেষ্ট পরিষ্কার ছিল না। আমি এটি স্পষ্ট করতে পুনরায় প্রতিক্রিয়া জানিয়েছি আমি ব্যবহৃত অ্যালগরিদম সম্পর্কে কথা বলছি: নেটিভআরপিআরএনজি বা এসএএআর 1 পিএনএনজি। ব্যবহারের /dev/urandomনির্বাচন NativePRNG দ্বারা প্রতিপালিত /dev/urandomথাকাকালীন /dev/./urandomআপ SHA1PRNG অকার্যকর (এছাড়াও দ্বারা প্রতিপালিত /dev/urandom) যখন যখন জাভা 8. ব্যবহার জাভা 9 অগ্রে থেকে, DRBG অগ্রগণ্য /dev/./urandomউৎস উল্লেখ করা হয়।
ডাবলটার

1

আপনি যদি জেডিকে 8 বা ততোধিক উচ্চতর ব্যবহার করে থাকেন তবে এটি আর প্রয়োজন হয় না

সমস্যাটি জাভা দ্বারা স্থির করা হয়েছে এবং এখানে কয়েকটি লিঙ্ক রয়েছে

রূপরেখা

এসএএএআর 1 পিএনএনজি এবং নেটিভপিআরএনজি জাভা.সিকিউরিটি ফাইলে সিকিউরর্যান্ডম বীজ উত্সের বৈশিষ্ট্যগুলিকে যথাযথভাবে সম্মান করার জন্য ঠিক করা হয়েছিল। (ফাইল: /// দেব / ইউরানডম এবং ফাইল: / dev /./ ইউরানডম ব্যবহার করে অস্পষ্টভাবে কাজ করার দরকার নেই))

আরও তথ্যের জন্য (পৃষ্ঠায় এলোমেলো জন্য অনুসন্ধান করুন):

https://docs.oracle.com/javase/8/docs/technotes/guides/security/enhancements-8.html

https://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html


আমি বিশ্বাস করি না এটি সঠিক। ব্যাকগ্রাউন্ডের জন্য: tersesystems.com/blog/2015/12/17/… জাভা 8-র ফিক্সগুলি কেবলমাত্র বলেছে যে তারা এখন জাভা.সিকিউরিটি ফাইলে সিকিওররেন্ডম বীজ উত্স বৈশিষ্ট্যকে সম্মান করে। তবে ডিফল্টরূপে যা এখনও রয়েছে: সুরক্ষিত.সোর্স = ফাইল: / ডেভ / এলোমেলো "অস্পষ্ট কাজকর্ম" ফাইলের নামে অতিরিক্ত ./ কে বোঝায়, এছাড়াও স্বীকৃত (এবং সর্বাধিক ভোট দেওয়া) উত্তর দ্বারা উল্লিখিত হয়েছে।
কামাল

"অস্পষ্ট কর্মক্ষেত্র" কেবলমাত্র নির্দিষ্ট পরিস্থিতিতে প্রয়োজন ছিল , দেখুন: বাগস.জাভা
কামাল

@ কমল আপনি যে লিঙ্কগুলি পোস্ট করেছেন সেগুলি জাভা 6 এবং তার আগের কথা বোঝায়
ভেনু মাধব

ঠিক এটিই, এটি জাভা ৮-এ ঠিক করা হয়েছিল বাগ রিপোর্ট অনুসারে জাভা ১.৪.২ এবং to এর পরে "অস্পষ্ট কাজ" (ফাইলের নামের সাথে অতিরিক্ত যোগ করা / যোগ করা) দরকার ছিল। আমি ধরে নিচ্ছি জাভা in-তেও, অন্যথায় এটি জাভা ৮-এ ঠিক করা হিসাবে উল্লেখ করা হবে না তবে / ডি / র্যান্ডমের পরিবর্তে / ডিভ / ইউরেন্ডম সেট করা এখনও প্রয়োজন, আপনি যদি কোনও ব্লকিং-ডিভাইস ব্যবহার করতে চান তবে।
কামাল

0

এটি লিনাক্স /dev/randomএবং /dev/urandomএলোমেলো নম্বর জেনারেটরের পার্থক্যের সাথে সম্পর্কিত ।

এই লিঙ্ক থেকে নেওয়া

জাভা বাগ 6202721 বলেছে যে জাভা.সিকিউরিটি.সিকিউরআরন্ডম / ডি / ইউরেনডামের পরিবর্তে / ডেভ / র্যান্ডম ব্যবহার করে যদিও / ডিভ / ইউরানডম নির্দিষ্ট করা হয়েছে কারণ (সময় 2004) / দেব / ইউরানডম সঠিকভাবে কাজ করছে না। বাগটি এখন কখনও বিপরীত হয়নি যে / dev / ইউরানডম বেশ ভালভাবে কাজ করে। অতএব, আপনি / dev / এলোমেলো পরিবর্তে SHA1PRNG ব্যবহার জোর করতে /dev/./urandom ব্যবহার করে সেটিংসটিকে অস্পষ্ট করে এটিকে জাল করতে হবে।

আপনার প্রশ্নের উত্তর দিতে

কখন প্রয়োগ করার কথা?

উপরের লিঙ্কটির উপর ভিত্তি করে, এটি জাভা সংস্করণ 5 এবং এর পরে অনুসরণযোগ্য যা 2004 এ লিনাক্স সিস্টেমে / dev / urandom নিয়ে সমস্যা হয়েছিল।


সেই নিবন্ধটিতে সম্ভবত একটি টাইপো রয়েছে, কারণ জাভা বাগ 6202721 আসলে বলেছে "/ dev / urandom বেছে নেওয়া হলে এটি একটি সমস্যা কারণ / dev / এলোমেলোভাবে সঠিকভাবে কাজ করছে না।" সুতরাং আপনার উপসংহার "/ dev / urandom এর সাথে সমস্যার ফলে এসেছে" ভুল। ডিফল্ট (/ dev / এলোমেলো) এর পরিবর্তে / dev / urandom বাছাই করার জন্য ব্যাখ্যার জন্য গৃহীত উত্তর দেখুন। বেশিরভাগ ক্ষেত্রে এটি একটি ভাল ধারণা।
কামাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.