লবণের হ্যাশ মানগুলি কোথা থেকে আসা উচিত?


12

সরল পাঠ্যে সংরক্ষণ করা যায় না এমন পাসওয়ার্ডের মতো কোনও কিছুর জন্য একটি হ্যাশ মানের সাথে লবণের মান যুক্ত করার সময়, লবণের মানগুলি আসার সর্বোত্তম জায়গা কোনটি? প্রসঙ্গে, ধরা যাক এটি কোনও ওয়েবপৃষ্ঠায় লগইনে থাকা পাসওয়ার্ডের জন্য।


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

উত্তর:


7

আমি সাধারণত created TIMESTAMPএকটি ব্যবহারকারীর টেবিলে একটি কলাম থাকি যাতে ব্যবহারকারী কখন নিবন্ধিত হয় তা আমি দেখতে পারি। আমি সল্টের জন্য অতিরিক্ত কলাম যুক্ত করতে পছন্দ করি না, তাই আমি টাইমস্ট্যাম্প কলামটি লবণের হিসাবে ব্যবহার করি:

SHA1(password + created)

আমি তখন ধরেই নিচ্ছি যে যখন ব্যবহারকারী আবার সাইন ইন করে, আপনি যাচাইকরণের জন্য পুনঃস্থাপন করবেন তখন আপনি ব্যবহারকারীর নাম ভিত্তিতে তারিখটি টানবেন?
মরগান হের্লোকার

1
@ প্রফ: হ্যাঁ, আপনার মতো একইভাবে যদি আপনার কাছে লবণের জন্য একটি নির্দিষ্ট কলাম থাকে, তবে সেই দৃষ্টিভঙ্গিতে কোনও পার্থক্য নেই।
জোনাস

7

এটা কোন ব্যাপার?

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

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

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


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

1
@ জাস্টিন: আকর্ষণীয়, হ্যাশের অংশ হিসাবে ব্যবহারকারীর নামটি আমি কখনও দেখিনি, তবে কিছুটা এনট্রপি যুক্ত করার পক্ষে এটি একটি ভাল উপায়। যদিও আমি এখনও ছদ্ম-এলোমেলো নুন ব্যবহার করতাম, কারণ এটি তৈরিতে বেশি ব্যয় হয় না।
ম্যাথিউ এম।

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

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

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

3

প্রতিবার আপনি নতুন পাসওয়ার্ড (নিবন্ধকরণ, পাসওয়ার্ড-রিসেট, পাসওয়ার্ড-আপডেট) সঞ্চয় করতে চান, একটি ভাল কৌশল হ'ল

  • নতুন লবণ উত্পন্ন
    • একটি ক্রিপ্টোগ্রাফিক-সুরক্ষিত সিউডো-র্যান্ডম নম্বর জেনারেটর ব্যবহার করুন
    • শালীন আকারের লবণ ব্যবহার করুন - ভাল মান হ'ল অন্তর্নিহিত হ্যাশ অ্যালগরিদমের ব্লক আকার (SHA-256 হতে পারে)
  • একটি নতুন পাসওয়ার্ড টোকেন উত্পন্ন
    • অন্তর্নিহিত হ্যাশ অ্যালগরিদম থেকে এইচএমএসি ফাংশন তৈরি করুন (এইচএএচ -২6 be হতে পারে) এইচএমএসি কী হিসাবে লবণের সাহায্যে ব্যবহার করুন
    • for i in (0...65536) { password = hmac(password) }
    • এইচএমএসি ফাংশনের পুনরাবৃত্ত অ্যাপ্লিকেশনগুলির ফলাফল হ'ল পাসওয়ার্ড টোকেন
  • লবণ এবং পাসওয়ার্ড টোকেন সংরক্ষণ করুন
    • মূল পাসওয়ার্ড সংরক্ষণ করবেন না
    • বিকল্প হিসাবে অন্তর্নিহিত হ্যাশ অ্যালগরিদম এবং আবিষ্কারের জন্য প্রসারিত সংরক্ষণ করুন

1

কাঠামোটি উত্তোলন করুন। .NET এ আপনি আরএনজিক্রিপ্টো সার্ভিসপ্রোভাইডার ব্যবহার করতে পারেন ...

        // If salt is not specified, generate it on the fly.
        if (saltBytes == null)
        {
            // Define min and max salt sizes.
            int minSaltSize = 4;
            int maxSaltSize = 8;

            // Generate a random number for the size of the salt.
            Random  random = new Random();
            int saltSize = random.Next(minSaltSize, maxSaltSize);

            // Allocate a byte array, which will hold the salt.
            saltBytes = new byte[saltSize];

            // Initialize a random number generator.
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

            // Fill the salt with cryptographically strong byte values.
            rng.GetNonZeroBytes(saltBytes); 
        }

অন্যান্য ফ্রেমওয়ার্কগুলিতে সমান ক্লাস থাকা উচিত যা আপনি লাভ করতে পারেন। র্যান্ডমনেস সফ্টওয়্যার অর্জন করতে প্রায়শই বার Randomউল্লিখিত হিসাবে ব্যবহারকারীকে বনাম নিয়োগ করে । এলোমেলোভাবে একটি সংজ্ঞায়িত স্থানে লবণের জন্য মাউসকে ঘুরিয়ে তোলা ট্রুক্রিপ্ট দ্বারা নিযুক্ত একটি বিকল্প। এটি আপনার নির্দিষ্ট প্রয়োজনীয়তা এবং সুরক্ষার স্তরে ফোটে; যেহেতু আপনার লবণ সহজভাবে হতে পারে !@#$%


1

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

সাধারণত জিনিসগুলি এইভাবে সংরক্ষণ করা হয়:

User
-------------------
ID
Username
PasswordHashWithSalt

উদাহরণ:

পাসওয়ার্ডহ্যাশওথসাল্ট =

A15CD9652D4F4A3FB61A2A422AEAFDF0DEA4E703 j5d58k4b56s8744q


এটি কিসের ভিত্তিতে নির্ধারণ করুন? এটি কি এমন কোনও মান থেকে আসার দরকার নেই যা স্থানে থাকবে যাতে ব্যবহারকারীর সৃষ্টির পরে আবার সাইন ইন করলে এটি পুনরায় তৈরি করা যায়?
মরগান হের্লোকার

"অ্যাসাইন" দিয়ে আমি বোঝাতে চাইছি যে ব্যবহারকারীর নাম / পাসওয়ার্ড জুড়ি (অ্যাকাউন্ট) প্রতি লবণ তৈরি করুন এবং এটি ডাটাবেসে সঞ্চয় করুন। যখন আপনাকে লগইন সম্পাদন করতে হবে, আপনি জিনিসগুলি পরীক্ষা করতে সেই সঞ্চিত লবণ ব্যবহার করেন।

1

ব্রেক্রিপ্ট ব্যবহার করুন এবং একমাত্র স্বাভাবিক হ্যাশ হিসাবে এই নিবন্ধটি পড়ুন এই দিন এবং যুগে গুরুতর সুরক্ষা নয়।

এসডিআর শূন্য জ্ঞান পাসওয়ার্ড প্রোটোকল ব্যবহার করার বিষয়ে বিবেচনা করুন যার প্রচুর পরিমাণে ওপেনসোর্স লাইব্রেরি রয়েছে এবং পেটেন্ট মুক্ত।

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

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