ডাটাবেসে পাসওয়ার্ড সংরক্ষণের সর্বোত্তম উপায় [বন্ধ]


474

আমি এমন একটি প্রকল্পে কাজ করছি যার প্রমাণীকরণ থাকতে হবে (ব্যবহারকারীর নাম এবং পাসওয়ার্ড)

এটি একটি ডাটাবেসের সাথেও সংযোগ স্থাপন করে, তাই আমি অনুভব করেছি যে আমি সেখানে ব্যবহারকারীর নাম এবং পাসওয়ার্ড সংরক্ষণ করব। যাইহোক, ডাটাবেসে বসে একটি টেবিলের মধ্যে কেবল একটি পাঠ্য ক্ষেত্র হিসাবে পাসওয়ার্ড থাকা ভাল ধারণা নয় বলে মনে হয়।

আমি সি # ব্যবহার করছি এবং ২০০৮ এক্সপ্রেস সার্ভারে সংযোগ করছি। এই ধরণের ডেটা সংরক্ষণের সর্বোত্তম উপায় কী হতে পারে (যতটা সম্ভব উদাহরণ সহ) কেউ পরামর্শ দিতে পারেন?

পিএস আমি এই ধারণাটির জন্য উন্মুক্ত যে কোনও ভাল কারণ যদি সরবরাহ করা যায় তবে এই তথ্যটি ডাটাবেসে সংরক্ষণ করা হবে না


1
আপনি যা করেন না কেন, আপনি যদি এনক্রিপশন সহ যান তবে কোডটিতে কীটি আগের পোস্টার হিসাবে উল্লিখিত হিসাবে সংরক্ষণ করবেন না। এটা ঠিক খারাপ অনুশীলন।
উডি

12
'ঠিক কীভাবে পাসওয়ার্ড করবেন?' একটি গুরুত্বপূর্ণ প্রশ্ন। এটি একটি কঠিন সমস্যা এবং ভুলগুলির মারাত্মক পরিণতি রয়েছে (টেসকো এবং লিংকডইনের কী হয়েছিল তা মনে করুন)। আমি মনে করি এই প্রশ্নটি প্রোগ্রামারগুলিতে
কর্নেল প্যানিক

2
মানদণ্ডে আটকে থাকা আরও ভাল - en.wikedia.org/wiki/PBKDF2 দেখুন আপনাকে কেবলমাত্র আপনার ভাষায় একটি বাস্তবায়ন খুঁজে পেতে হবে
বরিস ট্রেউখভ

5
এই প্রশ্নের সুরক্ষা সুরক্ষা ফোরামে ব্যাপকভাবে উত্তর দেওয়া হয়েছে: security.stackexchange.com/questions/211/…
gioele

উত্তর:


405

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

সুতরাং, আপনি যখন এটির বিষয়ে ভাবছেন এটি একটি ভাল বিষয় এবং এটি একটি ভাল প্রশ্ন, এটি আসলে এই প্রশ্নের সদৃশ (অন্তত):

সল্টিং বিটের উপরে আরও কিছুটা স্পষ্ট করার জন্য, কেবল একটি পাসওয়ার্ড হ্যাশ করা এবং সংরক্ষণ করা যে বিপদটি হ'ল যদি কোনও দোষকর্তা আপনার ডাটাবেসটি ধরে রাখেন তবে তারা "ডিক্রিপ্ট" করতে সক্ষম হতে রংধনু টেবিল হিসাবে পরিচিত যা ব্যবহার করতে পারেন পাসওয়ার্ড (কমপক্ষে যারা রেনবো টেবিলটিতে প্রদর্শিত হবে)। এটি ঘুরে দেখার জন্য, বিকাশকারীরা পাসওয়ার্ডগুলিতে একটি লবণ যুক্ত করে যা সঠিকভাবে করা হয়ে গেলে, রংধনু আক্রমণকে সহজভাবে অক্ষম করে তোলে। মনে রাখবেন যে একটি সাধারণ ভুল ধারণাটি হ'ল সমস্ত পাসওয়ার্ডে কেবল একই অনন্য এবং দীর্ঘ স্ট্রিং যুক্ত করা; যদিও এটি ভয়াবহ নয় , প্রতিটি পাসওয়ার্ডে অনন্য লবণ যুক্ত করা ভাল। আরও পড়ুন।


39
আমি ডেটাবেজে পাসওয়ার্ডটি অন্য কোথাও সঞ্চয় করার বিপরীতে বোঝাতে চাইছি। এই বাক্যটিকে প্রসঙ্গের বাইরে নিয়ে যাওয়া দেখে মনে হয় যে আমি সরল পাসওয়ার্ডগুলি সংরক্ষণ করার পক্ষে সমর্থন করছি, আপনি যদি বাকীটি পড়ে থাকেন তবে আমি অবশ্যই তা করি না।
পাওলো বার্গান্টিনো

13
শুধু আমি যা বলেছিলাম তা-ই নয়, আমি তাকে পোস্টের আধিক্যে পরিচালিত করেছি যাতে লবণের বিষয়ে এবং এরকম আরও আলোচনা করা হয় ...
পাওলো বার্গান্টিনো

1
@ পাওলো বার্গান্টিনো: আপনি কি নিশ্চিত যে আপনার পোস্টে টাইপো নেই? এতে বলা হয়েছে "বেশিরভাগ ক্ষেত্রে আপনি মুখোমুখি হয়ে যাচ্ছেন (এবং আমি সত্যই কোনও পাল্টা উদাহরণের কথা ভাবতে পারি না) ডাটাবেসে পাসওয়ার্ড সংরক্ষণ করা সঠিক কাজ proper" ??? এটি আপনার মন্তব্যের বিরোধিতা বলে মনে হচ্ছে
মিচ হুইট

3
পাওলো যা বলেছিলেন তা সরাসরি তার বিরোধিতা করে। একটি পাসওয়ার্ডের সল্ট হ্যাশ একটি পাসওয়ার্ড নয়। ডাটাবেসে পাসওয়ার্ডের একটি সল্ট হ্যাশ সংরক্ষণ করা ডেটাবেসে পাসওয়ার্ড সংরক্ষণ করে না। উত্তরের বডিটি পুরোপুরি উপযুক্ত, তবে এর প্রথম বাক্যটি অত্যন্ত বিভ্রান্তিকর।
রবার্ট রসনি

39
@ রবার্ট: এটি ক্ষুদ্র ক্ষুদ্র শব্দার্থবিদ্যার খেলাটি বিপজ্জনকভাবে নিকটে চলেছে, তবে আমি তা সত্ত্বেও ঠিক করব ...
পাওলো বার্গান্টিনো

54

পটভূমি আপনি কখনও ... সত্যই ... ব্যবহারকারীর পাসওয়ার্ড জানতে হবে না। আপনি কেবলমাত্র একজন আগত ব্যবহারকারী কোনও অ্যাকাউন্টের পাসওয়ার্ড জানেন তা যাচাই করতে চান।

হ্যাশ ইট: স্টোর ব্যবহারকারীর পাসওয়ার্ডগুলি শক্তিশালী হ্যাশ ফাংশনের মাধ্যমে হ্যাশ (একমুখী এনক্রিপশন)। "সি # এনক্রিপ্ট পাসওয়ার্ড" এর জন্য অনুসন্ধান অনেক উদাহরণ দেয়।

হ্যাশ ফাংশনটি কী উত্পাদন করে তার ধারণার জন্য অনলাইন SHA1 হ্যাশ স্রষ্টাকে দেখুন (তবে SHA1 কে হ্যাশ ফাংশন হিসাবে ব্যবহার করবেন না, SHA256 এর মতো শক্তিশালী কিছু ব্যবহার করুন)।

এখন, একটি হ্যাশ পাসওয়ার্ডের অর্থ হল যে আপনি (এবং ডাটাবেস চোর) সেই হ্যাশটিকে মূল পাসওয়ার্ডের মধ্যে ফেরত দিতে সক্ষম হবেন না।

এটি কীভাবে ব্যবহার করবেন: তবে, আপনি বলছেন, আমি কীভাবে ডেটাবেজে সজ্জিত এই জঞ্জাল পাসওয়ার্ডটি ব্যবহার করব?

যখন ব্যবহারকারী লগ ইন করে, তারা আপনাকে ব্যবহারকারীর নাম এবং পাসওয়ার্ড হস্তান্তর করবে (এর মূল পাঠ্যে) আপনি কেবলমাত্র হ্যাশ কোড একই হ্যাশ কোডটি ব্যবহার করেন যা সঞ্চিত সংস্করণটি পেতে টাইপড পাসওয়ার্ডটি হ্যাশ করে।

সুতরাং, দুটি হ্যাশ পাসওয়ার্ডের তুলনা করুন (ব্যবহারকারীর জন্য ডেটাবেস হ্যাশ এবং টাইপ-ইন এবং হ্যাশ পাসওয়ার্ড)। আসল ব্যবহারকারীরা তাদের পাসওয়ার্ডগুলির সাথে তুলনা করে "তারা কী কী" মিলছে "তার টাইপটি" পাসওয়ার্ড "দিয়েছিলেন কিনা তা আপনি বলতে পারেন।

অতিরিক্ত creditণ:

প্রশ্ন: আমার কাছে যদি আপনার ডাটাবেস থাকে, তবে আমি কীভাবে কেবল জন দ্য রিপারের মতো ক্র্যাকার নিতে পারি এবং আপনার সঞ্চিত, হ্যাশ পাসওয়ার্ডগুলির সাথে ম্যাচ না পাওয়া পর্যন্ত হ্যাশগুলি তৈরি করা শুরু করতে পারি? (যেহেতু ব্যবহারকারীরা সংক্ষিপ্ত, অভিধানের শব্দগুলি যেভাবেই বেছে নিন ... এটি সহজ হওয়া উচিত)

উত্তর: হ্যাঁ ... হ্যাঁ তারা পারে।

সুতরাং, আপনার নিজের পাসওয়ার্ডগুলি 'নুন' দেওয়া উচিত। লবণের উইকিপিডিয়া নিবন্ধটি দেখুন

দেখুন "কিভাবে লবণ দিয়ে হ্যাশ ডেটাতে" সি # উদাহরণস্বরূপ


14
একটি জিনিস বাদে খুব ভাল পোস্ট: এমডি 5 এবং শ 1 উভয়ই ভেঙে গেছে। আপনার সম্ভবত একটি শক্তিশালী অ্যালগরিদম যেমন SHA2 পরিবারের সাথে যেতে হবে।
পাওলো বার্গান্টিনো

3
ধন্যবাদ পাওলো - আপনি সঠিক বলেছেন। SHA2 এর ব্যবহার MD5 এবং SHA1 ব্যবহারের মতো সহজ, দয়া করে শক্তিশালী হ্যাশ অ্যালগরিদম ব্যবহার করুন।
joj

5
SHA-1 ভাঙা হয়নি। তবে ব্রুস স্নিয়েয়ারকে প্যারাফেজ করতে: হাঁটাচলা করুন, দৌড়াবেন না, SHA-2 এ যান।
ইয়ান বয়ড

2
"সুতরাং, আপনার নিজের পাসওয়ার্ডগুলিকে 'নুন' দেওয়া উচিত ..." তবে লবণটি সাধারণত পাসওয়ার্ডের পাশাপাশি ডাটাবেসে সংরক্ষণ করা হয়, তবে কীভাবে এই সাহায্য করবে? আক্রমণকারীকে কেবল অভিধান অভিধান আক্রমণ বাক্সে যার বিরুদ্ধে তিনি পরীক্ষা করছেন তাতে লবণ যুক্ত করতে হবে। এটির চেয়ে আরও নিরাপদ কীভাবে এটি সদৃশ পাসওয়ার্ড প্রকাশ করবে না?
trusktr

4
@ জোয়েজ "আপনার কখনই ... সত্যিই ... ব্যবহারকারীর পাসওয়ার্ড জানতে হবে" - এটি একটি খুব স্বল্প দৃষ্টিকোণ অনুমান। অনেক ধরণের অ্যাপ্লিকেশন রয়েছে যেখানে পুনরুদ্ধার করা যায় এমন উপায়ে পাসওয়ার্ড থাকা সত্যই প্রয়োজনীয়। উদাহরণস্বরূপ, এমন একটি অ্যাপ্লিকেশন যা সঞ্চিত শংসাপত্রগুলির সাথে অন্য সিস্টেমে ঘন ঘন লগইন করা প্রয়োজন, ব্যবহারকারীর সরবরাহ ও আপডেট করা হয়।
ফ্রান্সিসকো জারাবোজো

29

একটি চা-কড়া সল্টেড হ্যাশ হিসাবে, Sha-512 এর মতো সুরক্ষিত অ্যালগরিদম ব্যবহার করে।


6
আমার মতে, পাসওয়ার্ডগুলি সংরক্ষণ করার জন্য আপনার সর্বদা ধীর অ্যালগরিদমগুলি (যেমন ব্লোফিশের মতো) ব্যবহার করা উচিত। এই কাজের মধ্যে থাকবেন অনেক ভালো উত্তর security.stackexchange.com/questions/211/... । কেবল এটি এখানে রাখুন, কারণ এই পৃষ্ঠাটি অনুসন্ধান ফলাফলগুলিতে এখনও উচ্চ প্রদর্শিত হবে।
ডায়নম

2
পাসওয়ার্ড স্টোরেজ করার জন্য এই পরামর্শ অনুসরণ করে এটি খারাপভাবে ভুল করবে be
mlissner

27

সর্বোত্তম সুরক্ষা অনুশীলন হ'ল পাসওয়ার্ডটি একেবারে সংরক্ষণ করা (এমনকি এনক্রিপ্ট করাও নয়), তবে এনক্রিপ্ট করা পাসওয়ার্ডের সল্টেড হ্যাশ (প্রতি পাসওয়ার্ডের জন্য একটি স্বতন্ত্র লবণের সাথে) সংরক্ষণ করা।

এইভাবে (বাস্তবিকভাবে) একটি সরলখর পাসওয়ার্ড পুনরুদ্ধার করা অসম্ভব।


11
ওয়েইন, হ্যাশ গণনা করার আগে নুন দিয়ে, রেইনবো টেবিলটি কার্যকরভাবে পরাজিত হয়, তবে লবণের পরিমাণ যথেষ্ট পরিমাণে থাকে।
মাইক রোজেনব্লুম

11
@ ওয়াইন হার্টম্যান: না তাই না। যদি লবণের মান উন্মুক্ত হয়, তবে আপনাকে অবশ্যই সেই নির্দিষ্ট লবণের মানের জন্য একটি নতুন রেইনবো টেবিল তৈরি করতে হবে। একটি রংধনু টেবিলের বিন্দু হ্যাশ মান আগে থেকেই গণনা করা হয়। এবং কারও কাছে তার নির্দিষ্ট লবণের জন্য একটি রংধনু টেবিল থাকবে না।
ইয়ান বয়ড

10

আমি রেনবো টেবিলের সাথে যথেষ্ট পরিমাণে নিবন্ধগুলি পড়ার পুরোপুরি পরামর্শ দেব : নিরাপদ পাসওয়ার্ড স্কিমগুলি সম্পর্কে আপনার কী জানতে হবে [মৃত লিঙ্ক, ইন্টারনেট সংরক্ষণাগারে অনুলিপি ] এবং কীভাবে নিরাপদে একটি পাসওয়ার্ড সংরক্ষণ করবেন

প্রচুর কোডার, আমার নিজের অন্তর্ভুক্ত, তারা সুরক্ষা এবং হ্যাশিং বুঝতে পারে বলে মনে করে। দুঃখের বিষয় আমাদের মধ্যে বেশিরভাগ মানুষই তা করেন না।


1
@ জোহন দেখে মনে হচ্ছে লিঙ্কটি এখন ভাঙা যা লজ্জাজনক। এখানে একটি বিকল্প কোডাহলে.com
how-

6

আপনি ব্যবহারকারীর নাম এবং পাসওয়ার্ডের প্রয়োজনীয়তার কথা উল্লেখ করার সাথে সাথে আমি কিছুটা অফ-টপিক হতে পারি এবং বিষয়টি সম্পর্কে আমার বোঝার বিষয়টি প্রশংসনীয়ভাবে সেরা নয় তবে ওপেনআইডি কি বিবেচনা করার মতো কিছু?

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

যদি প্রশ্নে থাকা আবেদনটি নিখুঁতভাবে অভ্যন্তরীণ ব্যবহারের জন্য হয় তবে এটি উপযুক্ত নাও হতে পারে

আরপিএক্স একটি অ্যাপ্লিকেশনে ওপেনআইডি সমর্থনকে সংহত করার একটি দুর্দান্ত সহজ উপায় সরবরাহ করে।


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

3

আপনার দৃশ্যে, আপনি এপ নেট সদস্যতার দিকে নজর রাখতে পারেন, ডাটাবেসে হ্যাশ স্ট্রিং হিসাবে ব্যবহারকারীর পাসওয়ার্ড সংরক্ষণ করা ভাল অনুশীলন। আপনি হ্যাশ ইনকামিং পাসওয়ার্ডটি ডেটাবেজে থাকা একটির সাথে তুলনা করে প্রমাণীকরণ করতে পারবেন।

সবকিছু এই উদ্দেশ্যে নির্মিত হয়েছে, এপ নেট সদস্যতা দেখুন check


1

আপনার যদি হ্যাশটিকে বিপরীত করতে সক্ষম না হয় তবে আমি পাসওয়ার্ডটি MD5 / SHA1 করব। ব্যবহারকারীরা লগইন করার সময় আপনি প্রদত্ত পাসওয়ার্ডটি এনক্রিপ্ট করতে পারেন এবং এটি হ্যাশের সাথে তুলনা করতে পারেন। হ্যাশ সংঘর্ষগুলি এই ক্ষেত্রে প্রায় অসম্ভব, যদি না কেউ ডাটাবেসে অ্যাক্সেস না পেয়ে এবং একটি হ্যাশ না দেখে তাদের ইতিমধ্যে সংঘর্ষ হয়।


2
আমি হ্যাশিংয়ের জন্য এমডি 5 ব্যবহার করব না - এটি মূলত ভেঙে গেছে mscs.dal.ca/~selinger/md5collision
zebrabox

3
আসলে, এটি ভাঙ্গা না। তারা কী করতে পারে তা হল দুটি ভিন্ন ফাইলের জন্য একই হ্যাশ মান। তারা কী করতে পারে না তা হ'ল এমডি 5 রিভার্স করুন এবং একটি কাজের পাসওয়ার্ড পান।
waiwai933

2
আচ্ছা, সেটাও কি তখন ভেঙে যাবে না? আপনি কেবলমাত্র অন্যান্য পাসওয়ার্ড প্রবেশ করান যা একই হ্যাশ উত্পন্ন করে এবং আপনি ভিতরে। এটির সমাধানের উপায়টি হ্যাশিংয়ের আগে পাসওয়ার্ডে লবণ দেওয়া থাকলে।
mjuarez

2
@ এমজুয়ারেজ যদি আপনি পাসওয়ার্ডে একটি লবণ যোগ করেন তবে আপনি এমডি 5 ব্যবহারের সাথে সংঘর্ষের বিষয়টি বিবেচনা করে না কারণ আপনি অন্য পাসওয়ার্ডটি ব্যবহার করতে পারবেন না
WiiMaxx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.