জাভা অ্যাপ্লিকেশন এবং ব্যবহার করা উচিত পারবেন 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
শক্তিশালী সিকিউরআরডম বাস্তবায়নের সহজলভ্যতা নিশ্চিত করার জন্য আমি ব্যবহার করার পরামর্শ দেব ।