আপনার পাসওয়ার্ড সল্টিং: সেরা অভ্যাস?


162

আমি সবসময় কৌতূহলী ছিলাম ... হ্যাশিংয়ের জন্য পাসওয়ার্ড সল্ট করার সময় কোনটি ভাল: উপসর্গ, বা পোস্টফিক্স? কেন? নাকি এতক্ষণ আপনি লবণের মত ব্যাপার?

ব্যাখ্যা করার জন্য: আমরা সকলেই (আশাবাদী) জানি যে ডাটাবেসে স্টোরেজ করার জন্য পাসওয়ার্ডের হ্যাশ করার আগে আমাদের একটি পাসওয়ার্ড নুন করা উচিত [ সম্পাদনা করুন: যাতে আপনি সম্প্রতি জেফ আতউডের কী হয়েছিল তার মতো বিষয়গুলি এড়াতে পারেন ]। সাধারণত এটি হ্যাশিং অ্যালগরিদমের মাধ্যমে পাসওয়ার্ডের সাথে পাসওয়ার্ডের সাথে লবণের সাথে সংযোগ স্থাপন করে। তবে উদাহরণগুলি পৃথক হয় ... কিছু উদাহরণ পাসওয়ার্ডের আগে লবণের জন্য প্রস্তুত করে। কিছু উদাহরণ পাসওয়ার্ডের পরে লবণ যুক্ত করে । এমনকী আমি এমন কিছু লোক দেখেছি যারা লবণের মাঝে রাখার চেষ্টা করে।

তাহলে কোনটি আরও ভাল পদ্ধতি এবং কেন? এমন কোনও পদ্ধতি আছে যা হ্যাশের সংঘর্ষের সম্ভাবনা হ্রাস করে? আমার গুগলিং এই বিষয়টিতে একটি বিশুদ্ধ বিশ্লেষণ করেনি।

সম্পাদনা করুন: দুর্দান্ত উত্তরগুলি ভাবেন! আমি দুঃখিত আমি কেবল একটি উত্তর বাছাই করতে পারে। :)



1
@ জ্যাককো: দুর্দান্ত ইনপুট। ধন্যবাদ!
র‌্যান্ডলফো

3
সেরা অনুশীলন হ'ল একটি ক্রিপ্টোগ্রাফিক ফাংশন ব্যবহার করা যা আপনার জন্য সল্টিং করে PBKDF2 (স্ট্যান্ডার্ড), বিসিক্রিপ্ট বা এমনকি স্ক্রিপ্ট ব্যবহার করে। এটি নির্দেশ করার জন্য স্টিফেনকে ধন্যবাদ।
মার্টেন বোদেউয়েস

1
খুব সুন্দর সমস্ত স্ট্যান্ডার্ড পাসওয়ার্ড হ্যাশিং নির্মাণগুলি লবণ এবং পাসওয়ার্ডের সংমিশ্রনের যত্ন নেয়, সুতরাং আপনার এই সম্পর্কে চিন্তা করা উচিত নয়। আপনি যদি কোনও মানক পাসওয়ার্ড হ্যাশ ব্যবহার না করেন তবে একটিতে স্থানান্তর করুন।
কোডসইনচাউস

1
@ ওমু বাজে প্রস্তাবনা। 1) SHA-1 এর একক পুনরাবৃত্তি খুব দ্রুত, আপনার কমপক্ষে 10000 ব্যবহার করা উচিত, এমনকি এটি বেশ দুর্বল। 2) ডিফল্ট লবণ খুব ছোট। 8 বাইট সর্বনিম্ন এবং 16 সুপারিশ করা হয়।
কোডসইনচওস

উত্তর:


111

উপসর্গ বা প্রত্যয়টি অপ্রাসঙ্গিক, এটি কেবল পাসওয়ার্ডে কিছু এনট্রপি এবং দৈর্ঘ্য যোগ করার বিষয়ে।

আপনার এই তিনটি বিষয় বিবেচনা করা উচিত:

  1. আপনার সঞ্চয়কৃত প্রতিটি পাসওয়ার্ডের জন্য লবণটি আলাদা হতে হবে। (এটি বেশ সাধারণ ভুল বোঝাবুঝি))
  2. একটি ক্রিপ্টোগ্রাফিক নিরাপদে র্যান্ডম নম্বর জেনারেটর ব্যবহার করুন।
  3. একটি দীর্ঘ পর্যাপ্ত লবণ চয়ন করুন। জন্মদিনের সমস্যাটি নিয়ে ভাবুন।

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


4
আমি একটি পুরানো প্রশ্নের একটি লিঙ্ক যুক্ত করেছি, এই উত্তরগুলি পড়ুন। মূলত, পাসওয়ার্ড প্রতি আলাদা এলোমেলো লবণ ব্যবহার না করে আপনি একটি অপ্রয়োজনীয় সুরক্ষা ঝুঁকি নিচ্ছেন, ভবিষ্যতে এটি আসল সমস্যা হতে পারে।
জর্জি স্কলি

39
সাইট-প্রশস্ত এলোমেলো লবণ খারাপ, যেহেতু কোনও আক্রমণকারী রেইনবো টেবিলগুলিকে প্রাক্কলিত করতে পারে এবং আপনার পুরো ব্যবহারকারীর ডাটাবেস ধরে ফেলতে পারে। আপনি যদি এটি বুঝতে না পারেন তবে দয়া করে লগইন / সুরক্ষা ব্যবস্থা লিখবেন না :) - আপনাকে প্রতি ব্যবহারকারী সল্ট দরকার।
23:50 এ 20

3
হ্যাঁ, প্রতি ব্যবহারকারী নুন। আদর্শভাবে, প্রতি ব্যবহারকারীর পুনরাবৃত্তিগুলি সঞ্চিত রয়েছে (যাতে আপনি সময়ের সাথে সাথে পুনরাবৃত্তিগুলির সংখ্যা বাড়িয়ে নিতে পারেন)। যে কোনও শালীন কাঠামোতে এটি অন্তর্নির্মিত থাকবে। (.NET- এ পাসওয়ার্ড ডেরাইভবাইট রয়েছে যা আপনার জন্য সমস্ত কিছু পরিচালনা করবে))
মাইকেলজিজি

2
আপনি যদি কোনও ধরণের সুরক্ষা ব্যবস্থা ডিজাইন করেন তবে এটি ব্র্যান্ডইড প্রতি ব্যবহারকারী নুন ব্যবহার করছে না। আপনার সাইটটি অতি আকর্ষণীয় নাও হতে পারে তবে একাধিক সাইটে একই পাসওয়ার্ড ব্যবহার করা ব্যবহারকারীদের বিবেচনা করুন ... ডাটাবেসটিকে নিরাপদে রাখার চেষ্টা করা ব্যর্থ হতে থাকে :)
স্নেমারচ

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

27

আমি মনে করি এটি সমস্ত শব্দার্থক। খুব নির্দিষ্ট হুমকির মডেল বাদে আগে বা পরে রাখার বিষয়টি বিবেচ্য নয়।

এটি যে সত্যই এটি রেনবো টেবিলকে পরাস্ত করার কথা।

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

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

আমি যেমনটা বলেছিলাম. এটা শব্দার্থক। প্রতি পাসওয়ার্ডে একটি আলাদা লবণ, একটি লম্বা লবণ বাছাই করুন এবং এতে চিহ্ন এবং ASCII কোডের মতো বিজোড় অক্ষর অন্তর্ভুক্ত করুন: ¤¡ ¤¡


@ একবোন, অভিশাপ! সে আমার 'পাসওয়ার্ডসাল্ট' এর লবণ আবিষ্কার করেছে!
স্যামুয়েল

6
@ সামুয়েল: আমি আপনাদের বলছি না, তবে আমরা আমাদের লবণের জন্য '12345' ব্যবহার করি। :)
র্যান্ডলফো

@ একবোন বৈধ আমি সত্যই "ক্যারেক্টার ওয়াইয়ের দৈর্ঘ্যের X এর নীচে সমস্ত লব" হিসাবে "সাধারণ" বোঝাতাম যেখানে এক্স, ওয়াই যুক্তিসঙ্গত; 20 টি অক্ষর এবং বর্ণমালা উপরের / ছোট হাতের বলুন। দৈর্ঘ্যের Z এর অধীনে সমস্ত হেক্সাডেসিমাল স্ট্রিংগুলি বলা বাহুল্য (160 বলুন) যেহেতু আমি মনে করি হ্যাশ হ্যাশগুলির একটি রংধনু টেবিলটি কার্যকর হবে ..
টম রিটার

1
@ র্যান্ডলফো: আরে, এটাই আমার নুন! বাধা কী?
অ্যাড্রিয়েন

এবং নিশ্চিত করুন যে লবণটি অনুমানযোগ্য / এলোমেলো: স্ট্যাকওভারফ্লো.com
জ্যাকো

18

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

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

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


1
শেষ অনুচ্ছেদ সম্পর্কে: আক্রমণকারী কীভাবে তুলনা করতে ব্যর্থ হয়েছে তার সঠিক সংখ্যা সম্পর্কে কোনও তথ্য পেতে পারে? এটি কোনও অর্থ দেয় না ..
হ্যালোইনলভ

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

9

এটি কোনও পার্থক্য করা উচিত নয়। আপনি যেখানেই লবণ রাখবেন হ্যাশ সহজেই অনুমানযোগ্য হবে না। ইচ্ছাকৃতভাবে অ-রৈখিক হওয়ার কারণে হ্যাশের সংঘর্ষগুলি বিরল এবং অবিশ্বাস্য উভয়ই। যদি এটি সুরক্ষাটিতে কোনও পার্থক্য তৈরি করে, তবে এটি হ্যাশিংয়ের সাথে কোনও সমস্যার পরামর্শ দেয়, স্যালটিং নয় not


1
হ্যাশের সংঘর্ষগুলি হ্যাশের আকারের উপর নির্ভর করে। ধন্যবাদ জন্মদিনের সমস্যার সংঘর্ষগুলি বেশ সম্ভবত।
জর্জি স্কলি

2
আপনি যদি ফলাফলটি কেটে ফেলেন তবেই। যাইহোক, আমি এখনও এই পয়েন্টটির সাথে দাঁড়িয়ে আছি যে লবণ যেখানে রয়েছে তাতে কোনও তাত্পর্য হবে না, কারণ হ্যাশটির বিন্দুটি ইনপুট এবং আউটপুটটির মধ্যে সম্পর্ককে কোনও নিদর্শন ধারণ করে না।
ফিল এইচ

7

যদি কোনও ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত হ্যাশ ব্যবহার করে থাকেন তবে আপনি প্রাক- বা পোস্টফিক্স তা গুরুত্বপূর্ণ নয়; হ্যাশিংয়ের একটি বিষয় হ'ল সোর্স ডেটাতে একক বিট পরিবর্তন (যেখানেই হোক না কেন) আলাদা হ্যাশ তৈরি করা উচিত।

কী গুরুত্বপূর্ণ তা হ'ল দীর্ঘ সল্ট ব্যবহার করা, সেগুলি একটি সঠিক ক্রিপ্টোগ্রাফিক পিআরএনজি দিয়ে তৈরি করা এবং প্রতি ব্যবহারকারী সল্টযুক্ত। আপনার ডাটাবেসের মধ্যে ব্যবহারকারী অনুসারে সল্ট সংরক্ষণ করছে না না ঠিক কোন সুরক্ষা সমস্যা, ব্যবহার করে একটি সাইট-ব্যাপী হ্যাশ হয়


2
ভুল আনউসার: আক্রমণকারী অনেক ঘন ঘন ব্যবহৃত পাসওয়ার্ডগুলির জন্য এমডি (পাস) প্রাক্পম্পিউট করতে পারে এবং তারপরে এমডি (পাস + লবণ) খুব সস্তার সাথে গণনা করতে পারে কারণ বার্তাটি ডাইজেস্টটি বর্ধিত উপায়ে কাজ করে যাতে স্ট্রিমিং সমর্থন করে।
এরওয়ান লেগ্রান্ড

5

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

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

@ Onebyone.livejournal.com:

আক্রমণকারীটির 'রেনবো টেবিল' রয়েছে অভিধানের শব্দের হ্যাশগুলিতে নয়, হ্যাশের গণনা চূড়ান্ত করার ঠিক আগে হ্যাশ গণনার অবস্থার।

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

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

তবুও পাসওয়ার্ড হ্যাশিং অ্যালগরিদমগুলি যেমন পিবিকেডিএফ তাদের হ্যাশ ফাংশনটি একাধিকবার রচনা করে (পিবিকেডিএফ -২ কে ন্যূনতম 1000 বার পুনরাবৃত্তি করার জন্য সুপারিশ করা হয়, প্রতিটি পুনরাবৃত্তি এসএইএ -1 একবার দুবার প্রয়োগ করে) এই আক্রমণটিকে দ্বিগুণ ব্যবহারিক করে তোলে।


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

4

প্ল্যাটফর্মটির সরবরাহকারী থাকলে বিসিক্রিপ হ্যাশ । আমি পছন্দ করি আপনি কীভাবে লবণের তৈরি সম্পর্কে চিন্তা করবেন না এবং আপনি চাইলে এগুলি আরও শক্তিশালী করতে পারেন।


3
আমি জানি যতটা বৈষম্য, বিসিক্রিপ হ্যাশ যেমন সল্টিং প্রয়োজন, অন্য কোনও হ্যাশিং স্কিমের মতো।
জ্যাকো

2

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.