আমি এটিকে কিছুটা আলাদাভাবে সরবরাহ করব।
আমি সর্বদা নুনযুক্ত পাসওয়ার্ড হ্যাশের সাথে লবণ মিশ্রিত করি।
উদাহরণস্বরূপ, আমি পাসওয়ার্ডের সল্ট-হ্যাশের আগে লবণের প্রথম অর্ধেক এবং পাসওয়ার্ডের সল্ট-হ্যাশের পরে লবণের শেষ অংশ অর্ধেক রেখে দেব। অ্যাপ্লিকেশনটি এই নকশা সম্পর্কে সচেতন তাই এটি এই ডেটাটি আনতে পারে এবং লবণ এবং সল্ট-পাসওয়ার্ড হ্যাশ পেতে পারে।
এই পদ্ধতির জন্য আমার যুক্তি:
যদি পাসওয়ার্ড / হ্যাশ ডেটা আপোস করা হয় এবং কোনও আক্রমণকারীর হাতে পড়ে, আক্রমণকারীটি ডেটা দেখার থেকে লবণের কী তা জানবে না। এইভাবে আক্রমণকারী কোনও পাসওয়ার্ড যা হ্যাশের সাথে মিলে যায় তা ব্যবহারিকভাবে আক্রমণাত্মক আক্রমণ করতে পারে না, যেহেতু সে হ্যাশটি শুরু করতে জানে না এবং তথ্যের কোন অংশটি লবণের অংশ, তা জানার উপায় নেই বা বা সল্টেড-পাসওয়ার্ড হ্যাশের অংশগুলি ( যদি না সে আপনার অ্যাপ্লিকেশনটির প্রমাণীকরণের যুক্তি জানে )।
যদি সল্টেড-পাসওয়ার্ড হ্যাশটি যেমন রয়েছে তেমন সংরক্ষণ করা হয়, তবে লবণাক্তকরণ এবং পাসওয়ার্ড হ্যাশ হিসাবে লবণযুক্ত-পাসওয়ার্ড হ্যাশের মতো একই ডেটা তৈরি করে এমন পাসওয়ার্ড পাওয়ার জন্য ব্রুট ফোর্স আক্রমণ করা যেতে পারে।
তবে উদাহরণস্বরূপ, এমনকি যদি সল্ট-পাসওয়ার্ড হ্যাশটি সংরক্ষণ করা থাকে তবে একক এলোমেলো বাইটের সাথে প্রাক-পেন্ড করা থাকে, যতক্ষণ না আক্রমণকারী এই প্রথম বাইটটি ফেলে দেওয়ার বিষয়ে অবগত না থাকে, এটিও অসুবিধা বাড়িয়ে তুলবে আক্রমণ আপনার অ্যাপ্লিকেশনটি যখন আপনার ব্যবহারকারীর অনুমোদনের জন্য ব্যবহৃত হবে তখন ডেটার প্রথম বাইটটি বাতিল করতে জানত।
এই উপসংহার ..
1) আপনার প্রমাণীকরণ অ্যাপ্লিকেশনটি সঠিক আকারে ব্যবহার করে এমন ডেটা কখনই সঞ্চয় করবেন না।
2) যদি সম্ভব হয় তবে অতিরিক্ত সুরক্ষার জন্য আপনার প্রমাণীকরণের যুক্তি গোপন রাখুন।
আরও একধাপ এগিয়ে যান ..
আপনি যদি আপনার অ্যাপ্লিকেশনটির প্রমাণীকরণের যুক্তি গোপন রাখতে না পারেন - আপনার ডেটা ডাটাবেসে কীভাবে সংরক্ষণ করা হয় তা প্রচুর লোক জানে। এবং ধরুন আপনি সল্ট-পাসওয়ার্ড হ্যাশ লবণের সাথে একসাথে মিশ্রিত, কিছু সল্টযুক্ত সল্ট-পাসওয়ার্ড হ্যাশ প্রেরণ করে রেখেছেন এবং বাকী লবণ এটি যুক্ত করে রাখবেন।
এলোমেলো লবণ উত্পাদন করার সময়, আপনি এলোমেলোভাবে সিদ্ধান্ত নিতে পারেন যে লবণের পাসওয়ার্ড হ্যাশের আগে / পরে আপনার লবণের পরিমাণ কতটুকু সংরক্ষণ করবেন।
উদাহরণস্বরূপ, আপনি 512 বাইটের এলোমেলো লবণ উত্পাদন করেন। আপনি আপনার পাসওয়ার্ডে লবণ যুক্ত করুন এবং আপনার লবণাক্ত পাসওয়ার্ডের SHA-512 হ্যাশ পাবেন। এছাড়াও আপনি একটি এলোমেলো পূর্ণসংখ্যার 200 তৈরি করেন then তারপরে আপনি লবণের প্রথম 200 বাইট সংরক্ষণ করুন, তারপরে লবণাক্ত-পাসওয়ার্ড হ্যাশ এবং তারপরে লবণের অবশিষ্ট অংশ।
কোনও ব্যবহারকারীর পাসওয়ার্ড ইনপুট প্রমাণীকরণ করার সময়, আপনার অ্যাপ্লিকেশনটি স্ট্রিংয়ের উপর দিয়ে যাবে এবং ধরে নেওয়া হবে যে ডেটাটির প্রথম 1 বাইট লবণের প্রথম 1 বাইট, তারপরে সল্টেড-হ্যাশ। এই পাস ব্যর্থ হবে। অ্যাপ্লিকেশনটি লবণের প্রথম 2 বাইট হিসাবে উপাত্তের প্রথম 2 বাইট ব্যবহার করে চালিয়ে যাবে এবং লবণের প্রথম 200 বাইট হিসাবে প্রথম 200 বাইট ব্যবহার করার পরে কোনও ইতিবাচক ফলাফল না পাওয়া পর্যন্ত পুনরাবৃত্তি করবে। যদি পাসওয়ার্ডটি ভুল হয় তবে অ্যাপ্লিকেশন কোনও অনুমতি না পাওয়া অবধি সমস্ত অনুমতি ব্যবহারের চেষ্টা চালিয়ে যাবে।
এই পদ্ধতির সুবিধা:
বর্ধিত সুরক্ষা - এমনকি আপনার প্রমাণীকরণের যুক্তিটি জানা থাকলেও সংকলনের সময় সঠিক যুক্তি অজানা। সঠিক যুক্তির জ্ঞান থাকা সত্ত্বেও, নিষ্ঠুর-আক্রমণ আক্রমণ করা কার্যত অসম্ভব। দৈর্ঘ্যের লবণের পরিমাণ আরও বাড়বে সুরক্ষা।
এই পদ্ধতির ধারণা:
যেহেতু সঠিক যুক্তিটি রান-টাইমে অনুমান করা হয়, তাই এই পদ্ধতিটি খুব সিপিইউ-নিবিড়। লবণের দৈর্ঘ্য যত বেশি হবে, এই পদ্ধতির তত বেশি সিপিইউ নিবিড় হয়ে উঠবে।
ভুল পাসওয়ার্ড প্রমাণীকরণ সর্বোচ্চ CPU ব্যয় জড়িত হবে। এটি বৈধ অনুরোধগুলির পাল্টা উত্পাদনশীল হতে পারে তবে আক্রমণকারীদের বিরুদ্ধে সুরক্ষা বাড়িয়ে তোলে।
এই পদ্ধতিটি বিভিন্ন উপায়ে প্রয়োগ করা যেতে পারে এবং ভেরিয়েবল-প্রস্থের লবণের এবং / অথবা সল্ট-পাসওয়ার্ড হ্যাশ ব্যবহার করে আরও সুরক্ষিত করা যায়।