লিনাক্স কীভাবে জানতে পারে যে নতুন পাসওয়ার্ডটি আগেরটির মতো?


145

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

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


30
1 ম বন্ধ: সরল পাঠ? কোন। যদি (!) সংরক্ষণ করে আপনি হ্যাশ সংরক্ষণ করুন এবং হ্যাশগুলির সাথে তুলনা করুন। লিনাক্সে যদিও এটি নতুন পাসওয়ার্ড সহ বর্তমান পাসওয়ার্ড পরীক্ষা করে। পাসওয়ার্ড পরিবর্তন করার সময় উভয়ই সরবরাহকারীর দ্বারা সরবরাহ করা হয়।
রিঞ্জউইন্ড

42
@ রিনজউইন্ড তবে হ্যাশগুলির সাথে তুলনা করা কার্যকর হবে না কারণ একটি চরিত্রের পার্থক্যের ফলে সম্পূর্ণ আলাদা হ্যাশ হওয়া উচিত
২:01

17
আরও দেখুন ফেসবুক কি সরল-পাঠ্য পাসওয়ার্ড সংরক্ষণ করে? পুরানো পাসওয়ার্ডের হ্যাশ এবং নতুন পাসওয়ার্ডের প্লেটেক্সট (পুরানো কোনও প্লেটেক্সট নয়) প্রদত্ত অন্যান্য উপায়গুলির জন্য সুরক্ষা সম্পর্কিত তথ্যের উপর ।
বব

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

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

উত্তর:


156

যেহেতু আপনাকে ব্যবহার করার সময় পুরানো এবং নতুন পাসওয়ার্ড উভয়ই সরবরাহ passwdকরতে হবে, সেগুলি ড্রাইভে কোথাও লিখে না রেখে এগুলি সহজেই সরলরেখায়, স্মৃতিতে তুলনা করা যেতে পারে।

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

এটি পিএএম সিস্টেমের একটি বৈশিষ্ট্য যা passwdসরঞ্জামটির পটভূমিতে ব্যবহৃত হয় । পিএএম আধুনিক লিনাক্স বিতরণ ব্যবহার করে।

আরও সুনির্দিষ্টভাবে, pam_cracklibপিএএম এর জন্য একটি মডিউল যা বিভিন্ন দুর্বলতার ভিত্তিতে পাসওয়ার্ডগুলি প্রত্যাখ্যান করতে দেয় যা এগুলি খুব দুর্বল করে তোলে।

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

আরও দেখুন র manpage।pam_cracklib


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

27
কর্পোরেট পাসওয়ার্ডের বিধিগুলি হ'ল আরও বিঘ্নজনক হ'ল যদি আপনি সর্বশেষ চারটির মধ্যে একটির মতো বা অনুরূপ পাসওয়ার্ড ব্যবহার করেন তবে আপনাকে সতর্ক করে।
নিক টি

4
@ নিকটি কীভাবে এটি (অগত্যা) ঝামেলা করছে - তারা কি কেবল আপনার শেষ 4 টি হ্যাশ সংরক্ষণ করতে পারে না, তবে সেইগুলির প্রত্যেকটিকে আপনার প্রস্তাবিত নতুনের সাথে এই প্রশ্নের মতো একইভাবে তুলনা করতে পারে?
নিমিনেম

1
@neminem "... বা অনুরূপ"
নিক টি

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

46

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

অন্যান্য প্ল্যাটফর্মের জন্য, যেখানে পিএএম ব্যবহার করা হয় না, "খুব অনুরূপ" বার্তা আসে যখন: "... অর্ধেকেরও বেশি চরিত্রগুলি আলাদা আলাদা ...." (বিশদগুলির জন্য নীচে দেখুন)

এই বিবৃতিটি আপনার নিজের থেকে আরও পরীক্ষা করতে, উত্স-কোডটি পরীক্ষা করা সম্ভব। এখানে কিভাবে।

"পাসডাব্লুড" প্রোগ্রামটি পাসডাব্লুড প্যাকেজে অন্তর্ভুক্ত রয়েছে:

verzulli@iMac:~$ which passwd
/usr/bin/passwd
verzulli@iMac:~$ dpkg -S /usr/bin/passwd
passwd: /usr/bin/passwd

আমরা যেমন ওপেন সোর্স প্রযুক্তিগুলির সাথে কাজ করছি, আমাদের উত্স কোডে সীমাহীন অ্যাক্সেস রয়েছে। এটি পাওয়া যেমন সহজ:

verzulli@iMac:/usr/local/src/passwd$ apt-get source passwd

এর পরে কোডের প্রাসঙ্গিক খণ্ডটি পাওয়া সহজ:

verzulli@iMac:/usr/local/src/passwd$ grep -i -r 'too similar' .
[...]
./shadow-4.1.5.1/NEWS:- new password is not "too similar" if it is long enough
./shadow-4.1.5.1/libmisc/obscure.c:     msg = _("too similar");

"Obscure.c" এ একটি দ্রুত চেক এটিকে জানায় (আমি কেবল কোডের প্রাসঙ্গিক টুকরোটি কাটা-পেস্ট করছি):

static const char *password_check (
    const char *old,
    const char *new,
    const struct passwd *pwdp)
{
    const char *msg = NULL;
    char *oldmono, *newmono, *wrapped;

    if (strcmp (new, old) == 0) {
            return _("no change");
    }
    [...]
    if (palindrome (oldmono, newmono)) {
            msg = _("a palindrome");
    } else if (strcmp (oldmono, newmono) == 0) {
            msg = _("case changes only");
    } else if (similar (oldmono, newmono)) {
            msg = _("too similar");
    } else if (simple (old, new)) {
            msg = _("too simple");
    } else if (strstr (wrapped, newmono) != NULL) {
            msg = _("rotated");
    } else {
    }
    [...]
    return msg;
}

সুতরাং, এখন, আমরা জানি যে একটি "অনুরূপ" ফাংশন রয়েছে যা পুরানো-ও নতুন-এক চেকের উপর ভিত্তি করে উভয় একই হয় কিনা। এখানে স্নিপেট:

/*
 * more than half of the characters are different ones.
 */
static bool similar (const char *old, const char *new)
{
    int i, j;

    /*
     * XXX - sometimes this fails when changing from a simple password
     * to a really long one (MD5).  For now, I just return success if
     * the new password is long enough.  Please feel free to suggest
     * something better...  --marekm
     */
    if (strlen (new) >= 8) {
            return false;
    }

    for (i = j = 0; ('\0' != new[i]) && ('\0' != old[i]); i++) {
            if (strchr (new, old[i]) != NULL) {
                    j++;
            }
    }

    if (i >= j * 2) {
            return false;
    }

    return true;
}

আমি সি কোড পর্যালোচনা করি নি। আমি ফাংশন সংজ্ঞার ঠিক আগে মন্তব্যে বিশ্বাসের মধ্যে নিজেকে সীমাবদ্ধ করেছি :-)


পিএএম এবং নন-প্যাম সচেতন প্ল্যাটফর্মগুলির মধ্যে পার্থক্যটি "obscure.c" ফাইলটিতে সংজ্ঞায়িত করা হয়েছে যা এর মতো কাঠামোগত রয়েছে:

#include <config.h>
#ifndef USE_PAM
[...lots of things, including all the above...]
#else                           /* !USE_PAM */
extern int errno;               /* warning: ANSI C forbids an empty source file */
#endif                          /* !USE_PAM */

9
এটি একটি দীর্ঘ উত্তর যা পাসওয়ার্ডগুলি হ্যাশ হওয়ার সাথে সাথে কীভাবে এটি পুরানো পাসওয়ার্ডের সাথে তুলনা করতে পারে তার প্রশ্নের সরাসরি উত্তর বলে মনে হয় না।
জেমসডলিন

10
@jamesdlin: যেমন মূল প্রশ্ন Rinzwind মন্তব্যে বলেছেন, হ্যাশ না না এ ব্যাপারে কোনো ভূমিকা পালন: আপনি যখন পাসওয়ার্ড পরিবর্তন করার জন্য "passwd কোন" কমান্ড ইস্যু, আপনি উভয় 'পুরানো' এবং "নতুন" পাসওয়ার্ড করতে হয়। সুতরাং উভয় পাসওয়ার্ড একবারে তুলনা / চেক করতে "পাসডাব্লুড" কোডটিতে কোনও সমস্যা নেই (পরিষ্কার আকারে; হ্যাশ নয়)।
দামিয়ানো ভেরজুলি

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

7
@ দামানোভেরজুলি এবং যেটি passwdপুরানো এবং নতুন পাসওয়ার্ড উভয়ের জন্য জিজ্ঞাসা করেছে সেটাই উত্তর । এই উত্তর বাকি অপ্রস্তুত।
জেমসডলিন

3
+1 এবং অত্যন্ত প্রাসঙ্গিক এবং আকর্ষণীয় উত্তরের জন্য! এটি দেখতে সুন্দর লাগল যে পাসওয়ার্ডের তুলনা করে প্রকৃত কোডটি আসলে প্লেটেক্সটে কাজ করে এবং প্রত্যাশা অনুযায়ী, হ্যাশের উপর নয় on
নিকো

36

উত্তরটি আপনার ভাবার চেয়ে অনেক সহজ। আসলে, এটি প্রায় যাদু হিসাবে যোগ্যতা অর্জন করে, কারণ একবার আপনি কৌশলটি ব্যাখ্যা করার পরে তা চলে গেছে:

$ passwd
Current Password:
New Password:
Repeat New Password:

Password changed successfully

এটি আপনার নতুন পাসওয়ার্ডটি একই রকম জানে ... কারণ আপনি পুরানোটি টাইপ করেছেন মাত্র এক মুহুর্তের মধ্যে।


2
"... বা মিছরি।"
নিক টি

1
বোকা খরগোশ, ট্রিক্স বাচ্চাদের জন্য!
আইজিডাক্ট

1
এটি যখন আপনার অতীত এন পাসওয়ার্ডগুলি জানে তখন এটি ব্যাখ্যা করে না :) "পাসওয়ার্ডটি খুব সম্প্রতি ব্যবহৃত হয়েছে", যা কর্পোরেট পরিবেশে একই কয়েকটি পাসওয়ার্ড অদলবদল করতে বাধা দেয়।
জুহা আনটিনেন

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

7

যদিও অন্যান্য উত্তরগুলি সঠিক, তবে এটি উল্লেখ করার মতো হতে পারে যে এটি কাজ করার জন্য আপনাকে পুরানো পাসওয়ার্ড সরবরাহ করার দরকার নেই!

প্রকৃতপক্ষে, আপনি যে নতুন পাসওয়ার্ড সরবরাহ করেছেন সেটির অনুরূপ একটি গুচ্ছ পাসওয়ার্ড তৈরি করতে পারে, সেগুলিকে হ্যাশ করতে পারে এবং তারপরে এই হ্যাশগুলির কোনওটি পুরানোটির সাথে মিলে যায় কিনা তা পরীক্ষা করতে পারে। যদি এটি হয় তবে নতুন পাসওয়ার্ডটি পুরানোটির মতোই বিচার করা হবে! :)


2
যদিও এটি সত্যিই এই কীর্তিটি অর্জনের একটি মাধ্যম (এবং অনেক ওয়েবসাইট ব্যবহার করে), যা ঘটছে না এটি এই ঘটনায় ঘটছে।
ব্রায়ান এস

এটা একটা ঝরঝরে কৌশল! আরও কিছুটা কম্পিউটারের নিবিড়, তবে চতুর!
আম্মোন

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

@ হাইড যে মানদণ্ডের উপর নির্ভর করে কেউ ভাবতে পারে। আমার পক্ষে পাসওয়ার্ড একই রকম হয় যদি সর্বোচ্চ 3 টি অক্ষর যুক্ত / সরানো / পরিবর্তিত হত। সুতরাং প্রতিটি অক্ষরের জন্য 62 টি হ্যাশ (এবং এটি যদি আমরা কেবলমাত্র বর্ণানুক্রমিক ব্যবহার করি) পাসওয়ার্ডের দৈর্ঘ্য ( n) থেকে 3 এর বার সংমিশ্রণ 62 * (n!)/(6 * (n - 3)!)যা 12 অক্ষরের দীর্ঘ পাসওয়ার্ডের জন্য 13540 সমান। তবে কেউ যদি আলাদা কিছু নিয়ে সমীকরণটি অকেজো বলে মনে করেন তবে কেন বিরক্ত করবেন?
কিল্লাহ

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

5

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

remember=NPAM এ এইভাবে কাজ করে (সঞ্চিত /etc/security/opasswd)। তবে উইন্ডোজ এবং অন্যান্য ইউনিক্স বিক্রেতারাও অনুরূপ ফাংশন সরবরাহ করে।

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