বিসি্রিপ্ট কি সি # তে ব্যবহার করার জন্য একটি ভাল হ্যাশিং অ্যালগরিদম? আমি এটি কোথায় খুঁজে পাব? [বন্ধ]


129

আমি পড়েছি যে পাসওয়ার্ড হ্যাশ করার সময়, অনেক প্রোগ্রামার বিসিক্রিপ অ্যালগরিদম ব্যবহার করার পরামর্শ দেন।

আমি সি # তে প্রোগ্রামিং করছি এবং ভাবছি যদি কেউ বিসিক্রিপ্টের জন্য একটি ভাল বাস্তবায়ন সম্পর্কে জানেন? আমি এই পৃষ্ঠাটি খুঁজে পেয়েছি , তবে সত্যই জানি না এটি বোগাস কিনা।

পাসওয়ার্ড হ্যাশিং স্কিমটি বেছে নেওয়ার সময় আমার কী সম্পর্কে সচেতন হওয়া উচিত? বিসিপ্রিট কি 'ভাল' বাস্তবায়ন?

উত্তর:


148

প্রথমত, কয়েকটি পদ গুরুত্বপূর্ণ যা গুরুত্বপূর্ণ:

হ্যাশিং - একটি স্ট্রিং নেওয়ার এবং এমন অক্ষরের ক্রম উত্পাদন করার কাজ যা মূল স্ট্রিংটিতে ফিরে যেতে পারে না।

প্রতিসম এনক্রিপশন - একটি স্ট্রিং গ্রহণ এবং কিছু অক্ষর আছে যা একটি অনুক্রম উত্পাদক আইন - (সাধারণত শুধু 'এনক্রিপশন' হিসেবে উল্লেখ করা হয়েছে) করতে পারেন একই এনক্রিপশন কী এটি এনক্রিপ্ট ব্যবহারের মাধ্যমে মূল স্ট্রিং ডিক্রিপ্ট করা হবে।

রেইনবো টেবিল - একটি অনুসন্ধানের টেবিল যা একটি নির্দিষ্ট হ্যাশিং অ্যালগরিদমে হ্যাশ করা অক্ষরের সমস্ত প্রকারের ধারণ করে।

লবণ - এটি পরিচিত হওয়ার আগে মূল স্ট্রিংয়ের সাথে পরিচিত একটি র্যান্ডম স্ট্রিং যুক্ত হয় app

.NET ফ্রেমওয়ার্কের জন্য, Bcrypt এখনও একটি যাচাইকৃত রেফারেন্স বাস্তবায়ন করে না। এটি গুরুত্বপূর্ণ কারণ কোনও বিদ্যমান বাস্তবায়নে গুরুতর ত্রুটি রয়েছে কিনা তা জানার উপায় নেই। আপনি নেট নেট এর জন্য বিসিক্রিপ্টের একটি বাস্তবায়ন পেতে পারেন । এটি কোনও ভাল বা খারাপ বাস্তবায়ন কিনা তা বলার জন্য ক্রিপ্টোগ্রাফি সম্পর্কে আমি পর্যাপ্ত পরিমাণে জানি না। ক্রিপ্টোগ্রাফি একটি খুব গভীর ক্ষেত্র। আপনার নিজস্ব এনক্রিপশন অ্যালগরিদম তৈরি করার চেষ্টা করবেন না । সিরিয়াসলি।

আপনি যদি নিজের পাসওয়ার্ড সুরক্ষা (দীর্ঘশ্বাস) বাস্তবায়ন করতে চলেছেন তবে আপনাকে বেশ কয়েকটি জিনিস করতে হবে:

  1. তুলনামূলকভাবে সুরক্ষিত হ্যাশ অ্যালগরিদম ব্যবহার করুন ।
  2. প্রতিটি পাসওয়ার্ড হ্যাশ হওয়ার আগে লবণ দিন।
  3. প্রতিটি পাসওয়ার্ডের জন্য একটি অনন্য এবং দীর্ঘ লবণ ব্যবহার করুন এবং পাসওয়ার্ডের সাথে লবণ সংরক্ষণ করুন।
  4. শক্ত পাসওয়ার্ড প্রয়োজন

দুর্ভাগ্যক্রমে, আপনি যদি এই সমস্ত কিছু করেও থাকেন, তবে একটি নির্ধারিত হ্যাকার এখনও পাসওয়ার্ডগুলি খুঁজে বের করতে পারত, তবে তাকে কেবল একটি দীর্ঘ সময় লাগবে। যে আপনার প্রধান শত্রু আছে: টাইম

Bcrypt অ্যালগরিদম কাজ করে কারণ এটা লাগে পাঁচ আদেশ মাত্রার আর হ্যাশ করার MD5 চেয়ে একটি পাসওয়ার্ড ; (এবং এখনও এইএস বা SHA-512 এর চেয়ে অনেক বেশি দীর্ঘ)। এটি হ্যাকারকে আপনার পাসওয়ার্ডগুলি অনুসন্ধান করার জন্য একটি রেইনবো টেবিল তৈরি করতে আরও অনেক বেশি সময় ব্যয় করতে বাধ্য করে, এতে আপনার পাসওয়ার্ড হ্যাক হওয়ার ঝুঁকিতে পড়ার সম্ভাবনা অনেক কম।

যদি আপনি নিজের পাসওয়ার্ডগুলি সল্ট এবং হ্যাশ করে থাকেন এবং প্রতিটি লবণ আলাদা হয় তবে কোনও সম্ভাব্য হ্যাকারকে লবণের প্রতিটি পরিবর্তনের জন্য একটি রংধনু টেবিল তৈরি করতে হবে , কেবল একটি সল্ট + হ্যাশ পাসওয়ার্ডের জন্য একটি রংধনু টেবিল রাখতে হবে। তার মানে আপনার যদি 1 মিলিয়ন ব্যবহারকারী থাকে তবে একজন হ্যাকারকে 1 মিলিয়ন রংধনু টেবিল তৈরি করতে হবে। আপনি যদি প্রতিটি ব্যবহারকারীর জন্য একই লবণ ব্যবহার করেন তবে হ্যাকারকে আপনার সিস্টেমটি সফলভাবে হ্যাক করতে কেবল 1 টি রংধনু টেবিল তৈরি করতে হবে।

আপনি যদি নিজের পাসওয়ার্ডগুলিকে সল্ট না করে থাকেন তবে সমস্ত আক্রমণকারীকে হ'ল সেখানে উপস্থিত প্রতিটি প্রয়োগের জন্য একটি বিদ্যমান রেইনবো টেবিলটি টেনে আনতে হবে (এইএস, এসএএএ -512, এমডি 5) এবং কেবল হ্যাশের সাথে মেলে কিনা তা দেখুন। এই ইতিমধ্যে সম্পন্ন করা হয়েছে , একটি আক্রমণকারী এই রেনবো টেবিল নিজেদের নিরূপণ করার দরকার নেই

এমনকি এই সমস্ত কিছু সহ, আপনি ভাল সুরক্ষা অনুশীলন ব্যবহার করতে হবে । যদি তারা আপনার সাইটে অন্য আক্রমণকারী ভেক্টর (এক্সএসএস, এসকিউএল ইনজেকশন, সিএসআরএফ, ইত্যাদি। ) সফলভাবে ব্যবহার করতে পারে তবে ভাল পাসওয়ার্ড সুরক্ষার বিষয়টি বিবেচনা করে না। এটি বিতর্কিত বক্তব্যের মতো শোনাচ্ছে তবে এটিকে নিয়ে ভাবেন: যদি আমি কোনও এসকিউএল ইনজেকশন আক্রমণের মাধ্যমে আপনার সমস্ত ব্যবহারকারীর তথ্য পেতে পারি বা এক্সএসএসের মাধ্যমে আপনার ব্যবহারকারীরা তাদের কুকিজ আমাকে দিতে পারি তবে আপনার পাসওয়ার্ডটি কতটা ভাল তা বিবেচ্য নয় doesn't সুরক্ষা হয়

অন্যান্য উৎস:

  1. জেফ আতউড:। নেট এনক্রিপশন সরলীকৃত (হ্যাশিংয়ের ওভারভিউয়ের জন্য দুর্দান্ত)
  2. জেফ অ্যাটউড: আমি আপনার হিসাবে সবেমাত্র লগ ইন করেছি
  3. জেফ অ্যাটউড: আপনি সম্ভবত পাসওয়ার্ডগুলি ভুলভাবে সংরক্ষণ করছেন
  4. জেফ আতউড : স্পিড হ্যাশিং

দ্রষ্টব্য: দয়া করে অন্যান্য ভাল সংস্থার প্রস্তাব দিন। আমি অবশ্যই কয়েক ডজন লেখকের এক ডজন নিবন্ধ পড়েছি, তবে জেফের মতো এই বিষয়টিতে খুব কম লেখেন। আপনি নিবন্ধগুলি যেমন খুঁজে পান তেমন সম্পাদনা করুন।


হতে পারে আপনার লবণের অনুচ্ছেদে যুক্ত করুন যে একটি লবণ অবশ্যই এলোমেলোভাবে বেছে নেওয়া উচিত
জ্যাকো

2
@ জ্যাকো গুড কল, যোগ করা হয়েছে। যদিও এটি গুরুত্বপূর্ণ নয়। আপনি কেবল লবণের জন্য লগইনের টাইমস্ট্যাম্পটি ব্যবহার করতে পারেন। পার্থক্যটি এটি দেয় যে আক্রমণকারীটিকে তার পরে প্রতিটি লবণের জন্য রংধনু টেবিলটি পুনরায় সংশোধন করতে হবে। এটাই এটিকে কঠিন করে তোলে, এলোমেলোভাবে এটি বেছে নেওয়া নয়। এলোমেলোভাবে তৈরি করা অস্পষ্টতার আরও একটি স্তর যুক্ত করবে, তবে আক্রমণকারী আপনার ডাটাবেসটি দেখতে সক্ষম হয়ে গেলে (এটিই আমাদের সমস্যাটি প্রথম স্থানে ফেলে যা সমস্যা))
জর্জ স্টকার

3
আসলেই নয়, লবণের গোপনীয়তা থাকতে হবে না, প্রতিটি উদাহরণের জন্য একমাত্র অনন্য। যেহেতু অনন্য (যেমন বিশ্বজুড়ে) সম্ভব নয়, তাই এলোমেলো পরবর্তী সেরা জিনিস। এছাড়াও, টাইমস্ট্যাম্পটি ভাল লবণ নয় কারণ পর্যাপ্ত এনট্রপি নেই।
জ্যাকো

7
আমি আপনার বক্তব্যটি নিয়ে বিষয়টি নিয়েছি "যদি তারা সফলভাবে এক্সএসএস বা এসকিউএল ইঞ্জেকশনটি ব্যবহার করতে পারে তবে ভাল পাসওয়ার্ড সুরক্ষার কোনও বিষয় নেই" " বিপরীতে, যদি তারা সফলভাবে এক্সএসএস বা এসকিউএল আপনার সাইটে ইনজেক্ট করতে পারে তবে ভাল পাসওয়ার্ড সুরক্ষা আরও গুরুত্বপূর্ণ। এখানে কীটি হ'ল গভীরতার প্রতিরক্ষা "- আপনার অ্যাপ্লিকেশনটির প্রতিটি স্তরের যতটা ব্যবহারিক ততই আপনার নিরাপত্তা জোরদার করা উচিত।
জ্যামাইক্যাক্স

2
@ জ্যাম্মাইকেস একেবারে; আমার বক্তব্যটি হারিয়ে গেছে: আপনি কেবল বলতে পারবেন না, 'আরে, আমরা আমাদের পাসওয়ার্ডগুলিতে হ্যাশ এবং নুন দিই, "আমরা ঠিক আছি"!'
জর্জ স্টকার

74

আপনার অবশ্যই নেট নেট বিসিক্রিপ্ট ব্যবহার করবেন না। অন্তর্নির্মিত নেট নেট ফ্রেমওয়ার্ক বাস্তবায়নের সাথে আপনাকে অবশ্যই পিবিকেডিএফ 2 ব্যবহার করতে হবে । এন.আই.এস.টি-এর সাথে এনআইএসটি দ্বারা প্রস্তাবিত অ্যালগরিদম হওয়ার সাথে সাথে এটি নেট ফ্রি উপলব্ধ ক্রিপ্টোগ্রাফিকভাবে যাচাই করা বাস্তবায়ন ।

স্ট্যাকআইড পূর্বে বিসিক্রিপ ব্যবহৃত হয়েছিল এবং এই কারণেই পিবিকেডিএফ 2 এ চলে গেছে:

এই কৌতূহলীদের জন্য, আমরা PBKDF2 এর সাথে পাসওয়ার্ডগুলি হ্যাশ করছি। রিলেভেন্ট কোডটি ইন্ডিয়ারেশনের কয়েকটি স্তর মাধ্যমে এখানে রয়েছে ( http://code.google.com/p/stackid/source/browse/OpenIdProvider/Current.cs#1135 )। আগের পুনরাবৃত্তিতে, আমরা বিসিক্রিপ ব্যবহার করছিলাম; এটি NET ফ্রেমওয়ার্কে নির্মিত হওয়ায় এটি PBKDF2 এ চলে গেছে, বিসিক্রিপ্টের জন্য আমাদের প্রয়োগকরণ যাচাইকরণের প্রয়োজন হবে (ছোট কোনও উদ্যোগ নেই)।

কেভিন মন্ট্রোস, মে 27, 2011

(গিটহাবের আপডেট লিঙ্ক)

সম্পাদনা: যাচাইয়ের অর্থ ক্রিপ্টোগ্রাফিক পদ নির্দ্ধিধায় বোঝা যাবে, একটি যাচাই বাস্তবায়ন মানে ক্রিপ্টোগ্রাফি প্রমাণিত হয়েছে ত্রুটি ছাড়া বাস্তবায়িত বলে মনে হয়। এর ব্যয় সহজেই 20,000 ডলার বা তারও বেশি পৌঁছাতে পারে। আমি এটি স্মরণ করি যখন আমি ওপেনএসএসএল নিয়ে গবেষণা করছিলাম এবং কোথায় পড়েছিলাম যেখানে তারা জানিয়েছিল যে তারা পুরো যাচাইকরণ প্রক্রিয়াটি সম্পন্ন করেনি তবে আপনার যদি পুরোপুরি যাচাইয়ের প্রয়োজন হয় তবে তারা আপনাকে এটির জন্য সঠিক পথটি নির্দেশ করতে পারে এবং এর সাথে সম্পর্কিত ব্যয়ের উল্লেখ করেছে। কিছু সরকারী প্রয়োজনীয়তার মধ্যে যাচাই করা এনক্রিপশন অ্যালগরিদমগুলির জন্য আদেশের অন্তর্ভুক্ত রয়েছে।

.NET- এ বিক্রিপ্ট বাস্তবায়ন যাচাই করা হয়নি। একটি যাচাই করা এনক্রিপশন বাস্তবায়ন ব্যবহার করে আপনি একেবারে নিশ্চিত হতে পারবেন না যে এতে ইচ্ছাকৃতভাবে দূষিত ত্রুটি নেই যেমন এনক্রিপ্ট হওয়া বা অনিচ্ছাকৃত প্রয়োগের ফল্টগুলি যাতে ক্রিপ্টোগ্রাফিকভাবে অনিরাপদ ডেটার ফলশ্রুতিতে প্রবেশ করে door

2014 সম্পাদনা: যাচাই করা ক্রিপ্টোগ্রাফিকাল অ্যালগরিদমগুলি ব্যবহারের অপ্রয়োজনীয়তা নিয়ে প্রশ্ন তুলেছে তার জন্য ওপেনএসএসএল-এ শোষিত হৃদরোগযুক্ত হ্যাক দ্বারা নির্মিত ধ্বংসযজ্ঞটি দেখুন । যাচাই করা হয়নি যাচাই করা বাস্তবায়ন ব্যবহারের ব্যয়। এটি সুরক্ষিত .... যতক্ষণ না আপনি খুঁজে পান যে কোনও ব্যক্তি কেবল আপনার সার্ভারের পুরো মেমরির বিষয়বস্তু পড়তে পারে।

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

এটি একটি যাচাই করা হয়নি বাস্তবায়নের সংজ্ঞা। এমনকি ক্ষুদ্রতম ত্রুটি পুরো সুরক্ষাটি পঙ্গু করতে পারে।

2015 সম্পাদনা: প্রস্তাবনা ভিত্তিক ভাষা সরানো হয়েছে এবং বিস্মৃতগুলির সাথে প্রতিস্থাপন করা হয়েছে। উত্তরাধিকারের জন্য এম্বেড করা মূল কেভিন মন্ট্রোজ মন্তব্য।


25
লিঙ্কযুক্ত মন্তব্যটি উদ্ধৃত করার জন্য: "[আমরা] এটি NET কাঠামোর মধ্যে নির্মিত হওয়ায় PBKDF2 এ চলে গিয়েছি, যেখানে বিসিক্রিপ্টের আমাদের একটি প্রয়োগকরণ যাচাই করার প্রয়োজন হবে"। দ্রষ্টব্য যে মন্তব্যটি অ্যালগরিদম আরও ভাল বলে না , কেবলমাত্র এসই দেব টিম অন্তর্নির্মিত পিবিকেডিএফ 2 বাস্তবায়নকে বাইরের লাইব্রেরির চেয়ে বেশি বিশ্বস্ত বলে বিবেচনা করে (যা শেষ পর্যন্ত রায় রায়)।
পিসকোভর

3
@ পিসকভোর আমি আমার উত্তর আপডেট করেছি। এটি এসও দলটি সুরক্ষিত বলে বিবেচনা করে তা নয় তবে অন্তর্নিহিত সুরক্ষিত বা প্রত্যাশিত সুরক্ষিতের মধ্যে রায় কল। পরবর্তীকালে যখন ক্রিপ্টোগ্রাফির কথা আসে তা অগ্রহণযোগ্য।
ক্রিস মেরিসিক

6
আমি অবাক হই যে কীভাবে সমস্ত ব্রিসিপ্ট হ্যাশ পাসওয়ার্ডগুলি নতুন হ্যাশগুলিতে স্থানান্তরিত করেছে? নতুন অ্যালগরিদম ব্যবহার করে এটি হ্যাশ করার জন্য কি তাদের কাঁচা পাসওয়ার্ডের প্রয়োজন হবে না?
ধর্মেন্দ্র কুমার 'ডেকে'

8
@ ডি কে আমি এমনকি তাদের পাসওয়ার্ড পুনরায় সেট করতে বলতে হবে বলেও মনে করি না। পরবর্তী লগ ইন (যেখানে তারা তাদের প্লেইন টেক্সট পাসওয়ার্ড সরবরাহ করে) আপনি এটি করতে পারেন আমার বিশ্বাস।
ম্যাট কোকাজ

12
এটি দুর্বল পরামর্শ এবং আমি অবাক হয়েছি এটির অনেকগুলি উত্সাহ রয়েছে। একটি বিসিআরপিট বাস্তবায়নকে একটি পরিচালিত ভাষায় যাচাই করা সি এর মধ্যে একটি সম্পূর্ণ এসএসএল প্রয়োগের মতো কিছু যাচাই করার চেয়ে অনেক তুচ্ছ, হার্টবলিড সম্পূর্ণ অপ্রাসঙ্গিক; আপনি হ্যাশ সমতা পরীক্ষা করে পিএইচপি টাইপ জোর করা সমস্যার মতো কিছু উল্লেখ করা ভাল better এছাড়াও ব্যবহারিক দিক থেকে বেশিরভাগ ক্ষেত্রে উপযুক্ত, পিবিকেডিএফ 2 একটি কেডিএফ, একটি পাসওয়ার্ড হ্যাশিং অ্যালগরিদম নয়, বিসিপ্রিপ আরও উপযুক্ত। নির্বিশেষে, আজকাল আরগন 2 ব্যবহার করা আরও বেশি অর্থবোধ করবে, যার জন্য রয়েছে একটি ভাল-পরীক্ষিত সি # লাইব্রেরি
বহুবর্ষ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.