SecureRandom থ্রেড কি নিরাপদ?


103

SecureRandomথ্রেড কি নিরাপদ? এটি, এটি সূচনা করার পরে, পরবর্তী র্যান্ডম সংখ্যায় অ্যাক্সেস করে থ্রেড নিরাপদে থাকতে পারে? উত্স কোডটি পরীক্ষা করে দেখা যাচ্ছে যে এটি এটি প্রদর্শিত হবে এবং এই বাগ রিপোর্টটি থ্রেড নিরাপদ হিসাবে এর নথিভুক্তির অভাবকে জাভাদোক সমস্যা বলে মনে করছে। কেউ কি নিশ্চিত করেছেন যে এটি আসলে থ্রেডে নিরাপদ?

উত্তর:


108

হ্যাঁ, তাই এটি প্রসারিত হয় Random, যার সর্বদা একটি ডি থ্যাক্ট থ্রেডসেফ বাস্তবায়ন ছিল এবং জাভা 7 থেকে স্পষ্টভাবে থ্রেডসফটি গ্যারান্টি দেয়।

যদি অনেকগুলি থ্রেড একক ব্যবহার করে SecureRandom, তবে বিতর্ক হতে পারে যা কার্য সম্পাদনকে আঘাত করে। অন্যদিকে, কোনও SecureRandomউদাহরণ শুরু করা তুলনামূলকভাবে ধীর হতে পারে। কোনও গ্লোবাল আরএনজি ভাগ করা ভাল, বা প্রতিটি থ্রেডের জন্য একটি নতুন তৈরি করা আপনার আবেদনের উপর নির্ভর করবে। ThreadLocalRandomবর্গ যে সমর্থন একটি সমাধান প্রদান একটি প্যাটার্ন হিসাবে ব্যবহার করা যেতে পারে SecureRandom


3
আপডেটের জন্য ধন্যবাদ. অদ্ভুতভাবে, বাগটি "সংশোধন করবে না" হিসাবে চিহ্নিত হিসাবে চিহ্নিত রয়েছে। তবে তারা যাইহোক এটি স্থির করে। ওহ ভাল, আমি তাদের বাগ ডাটাবেসের আকারকে হিংসা করি না।
ইশাই

4
SecureRandomএটিকে আরম্ভ করা কেবল ধীর হতে পারে না, তবে এনট্রপি হারিয়ে যাওয়ার কারণে
ঝুলতে পারে

8
দয়া করে মনে রাখবেন যে থ্রেডলোক্যালর্যান্ডম ক্র্যাক করা খুব সহজ, সুতরাং আপনি যদি বিশ্বের কাছে উত্পন্ন মানটি উন্মোচন করার পরিকল্পনা করেন তবে সিকিউরআরডম ব্যবহার করুন jazzy.id.au/default/2010/09/20/…
ওয়ালভ

2
আমি এখানে একটি অঙ্গ নেভিগেশন যেতে যাচ্ছি এবং এই উত্তর ভুল আছে। থ্রেড সুরক্ষার গ্যারান্টিযুক্ত র্যান্ডমের জন্য চুক্তিটি সাবক্লাসে বাধ্যতামূলক নয়। অবশ্যই র্যান্ডম ডকুমেন্টেড অন্যান্য সমস্ত সম্পত্তি সাবক্লাসে বাধ্যতামূলক নয়, তাই থ্রেড-সুরক্ষা কেন ধরে নেওয়া উচিত তা আমি দেখছি না।
রাষ্ট্রপতি জেমস কে পোলক

2
@ জেমসকপলক সুপারটাইপের কোনও সম্পত্তি সংরক্ষণে ব্যর্থতা পরিবর্তনের নীতি লঙ্ঘন করবে।
এরিকসন

11

এর বর্তমান বাস্তবায়ন SecureRandomথ্রেড নিরাপদ, বিশেষত দুটি রূপান্তর পদ্ধতি nextBytes(bytes[])এবং setSeed(byte[])সিঙ্ক্রোনাইজ করা হয়েছে।

ঠিক আছে, যতদূর আমি বলতে সক্ষম হয়েছি, সমস্ত মিউটেশন পদ্ধতি অবশেষে methods দুটি পদ্ধতির মাধ্যমে প্রবর্তিত হয় এবং এটি নিশ্চিত করতে SecureRandomকয়েকটি পদ্ধতিকে ওভাররাইড Randomকরে। যা কাজ করে তবে ভবিষ্যতে বাস্তবায়ন পরিবর্তিত হলে ভঙ্গুর হতে পারে।

SecureRandomপ্রথমে ম্যানুয়ালি সিঙ্ক্রোনাইজ করা ভাল সমাধান । এর অর্থ প্রতিটি কল স্ট্যাক একই জিনিসটিতে দুটি লক অর্জন করবে, তবে এটি আধুনিক জেভিএমগুলিতে সাধারণত খুব সস্তা। এটি হ'ল সুস্পষ্টভাবে নিজেকে সিঙ্ক্রোনাইজ করার ক্ষেত্রে খুব বেশি ক্ষতি হয় না। উদাহরণ স্বরূপ:

    SecureRandom rnd = ...;

    byte[] b = new byte[NRANDOM_BYTES];
    synchronized (rnd) {
        rnd.nextBytes(b);
    }

3
কমপক্ষে জেডিকে 10-এ, সিকিউরআরন্ডম কোনও সরবরাহকারীর উপর ভিত্তি করে তৈরি করা হয় এবং সরবরাহকারী থ্রেড নিরাপদ কিনা তা পরীক্ষা করে থাকে, কেবলমাত্র তা না হলে সিঙ্ক্রোনাইজ করা হয় নেক্সটবাইটে।
এনএফজি

java.security.SecureRandom#nextBytesজাভা 8 এ সিঙ্ক্রোনাইজ করা হয় না। আপনি দয়া করে জাভা সংস্করণে কোন সিঙ্ক্রোনাইজড পেয়েছেন তা নির্দিষ্ট করতে পারেন #nextBytes?
জাইমে হাবলুটজেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.