একটি জিনিস যা আমি এখানে উল্লেখ করতে দেখিনি, যদিও এটি মার্কাস অ্যাডামসের উত্তরের একটি সম্প্রসারণ, তা হ'ল সময়সীমার আক্রমণ হওয়ার সম্ভাবনা থাকলে ব্যবহারকারীকে সনাক্ত এবং প্রমাণ করার জন্য আপনার একক টুকরো তথ্য ব্যবহার করা উচিত নয় , যা করতে পারে একটি স্ট্রিং তুলনা কতদূর পেয়েছে অনুমান করতে প্রতিক্রিয়া সময়ে পার্থক্যগুলি ব্যবহার করুন।
আপনি যদি এমন কোনও সিস্টেম ব্যবহার করেন যা ব্যবহারকারী বা শংসাপত্র অনুসন্ধান করার জন্য একটি "কী" ব্যবহার করে, সেই তথ্যটির টুকরোটি হাজার হাজার অনুরোধগুলি প্রেরণ করে এবং আপনার ডাটাবেসের সন্ধান করতে যে সময় লাগে তা পরীক্ষা করে (বা না সন্ধান) একটি রেকর্ড। এটি বিশেষত সত্য যদি "কী" কীটির এক-মুখী হ্যাশের পরিবর্তে সরলরেখায় সংরক্ষণ করা হয়। আপনি যদি ব্যবহারকারীর কীটি আবার ব্যবহারকারীর কাছে প্রদর্শন করতে সক্ষম হন তবে আপনি একটি সাধারণ প্লেটেক্সট বা সিমেট্রিক্যালি-এনক্রিপ্টযুক্ত ব্যবহারকারীর কীগুলি সংরক্ষণ করতে চান।
দ্বিতীয় টুকরো তথ্য বা "গোপন" রাখার মাধ্যমে আপনি প্রথমে "কী" ব্যবহার করে ব্যবহারকারীর বা শংসাপত্রটি সন্ধান করতে পারেন যা কোনও সময় আক্রমণে ঝুঁকিপূর্ণ হতে পারে, তারপরে একটি মান নির্ধারণের জন্য সময়-সুরক্ষার তুলনা ফাংশনটি ব্যবহার করুন গোপন".
পাইথনের সেই ফাংশনটি বাস্তবায়ন করা হল:
https://github.com/python/cpython/blob/cd8295ff758891f21084a6a5ad3403d35dda38f7/odules/_operator.c#L727
এবং এটি hmac
লিবে (এবং সম্ভবত অন্যরা) প্রকাশ করা হয়েছে:
https://docs.python.org/3/library/hmac.html#hmac.compare_digest
এখানে একটি বিষয় লক্ষণীয় যে আমি মনে করি না যে এই ধরণের আক্রমণটি অনুসন্ধানের আগে হ্যাশ করা বা এনক্রিপ্ট করা মানগুলিতে কাজ করবে, কারণ যে মানগুলি তুলনা করা হচ্ছে তা প্রতিবার ইনপুট স্ট্রিংয়ের একটি অক্ষর এলোমেলোভাবে পরিবর্তিত হয়। আমি এখানে এটির একটি ভাল ব্যাখ্যা পেয়েছি ।
এরপরে এপিআই কীগুলি সংরক্ষণের সমাধানগুলি হ'ল:
- একটি পৃথক কী এবং গোপন ব্যবহার করুন, রেকর্ডটি সন্ধানের জন্য কীটি ব্যবহার করুন এবং গোপনীয়তাটি পরীক্ষা করতে একটি সময়-নিরাপদ তুলনা ব্যবহার করুন। এটি আপনাকে ব্যবহারকারীকে আবার কোনও ব্যবহারকারীর কাছে কী এবং গোপনীয়তা দেখাতে দেয়।
- একটি পৃথক কী এবং গোপন ব্যবহার করুন, গোপনে প্রতিসাম্য, ডিস্ট্রিমেন্টিক এনক্রিপশন ব্যবহার করুন এবং এনক্রিপ্ট করা গোপনগুলির একটি সাধারণ তুলনা করুন। এটি আপনাকে ব্যবহারকারীকে আবার কী এবং গোপনীয়তা দেখাতে দেয় এবং সময়-নিরাপদ তুলনা কার্যকর করতে বাঁচাতে পারে।
- একটি পৃথক কী এবং গোপন ব্যবহার করুন, গোপনটি প্রদর্শন করুন, হ্যাশ করুন এবং এটি সংরক্ষণ করুন, তারপরে হ্যাশ গোপনের একটি সাধারণ তুলনা করুন। এটি দ্বি-মুখী এনক্রিপশন ব্যবহার করার প্রয়োজনীয়তা সরিয়ে দেয় এবং সিস্টেমটি আপস করা থাকলে আপনার গোপন সুরক্ষিত করার অতিরিক্ত সুবিধা রয়েছে। এর খারাপ দিক রয়েছে যা আপনি আবার ব্যবহারকারীর কাছে গোপনীয়তা দেখাতে পারবেন না।
- একটি একক কী ব্যবহার করুন , এটি একবার ব্যবহারকারীর কাছে প্রদর্শন করুন, এটি হ্যাশ করুন, তারপরে হ্যাশড বা এনক্রিপ্ট করা কীটির সাধারণ অনুসন্ধান করুন। এটি একটি একক কী ব্যবহার করে তবে এটি ব্যবহারকারীর কাছে আবার দেখাতে সক্ষম নয়। সিস্টেমটি আপস করা থাকলে কীগুলি সুরক্ষিত রাখার সুবিধা রয়েছে।
- একটি সিঙ্গল কী ব্যবহার করুন , এটি একবার ব্যবহারকারীর কাছে দেখান, এটিকে এনক্রিপ্ট করুন এবং এনক্রিপ্ট করা গোপনের একটি সাধারণ অনুসন্ধান করুন। ব্যবহারকারীর কাছে আবার প্রদর্শিত হতে পারে, তবে কীগুলি অরক্ষিত হওয়াতে যদি তারা সিস্টেম আপস করে থাকে।
এর মধ্যে আমি মনে করি যে 3 সুরক্ষা এবং সুবিধার সর্বোত্তম ভারসাম্য। কীগুলি জারি করার সময় আমি বহু ওয়েবসাইটে এটি প্রয়োগ করা দেখেছি।
এছাড়াও, আমি এই উত্তরটির সমালোচনা করার জন্য যে কোনও প্রকৃত সুরক্ষা বিশেষজ্ঞকে আমন্ত্রণ জানাই। আমি এটি অন্য আলোচনার পয়েন্ট হিসাবে এখানে পেতে চেয়েছিলেন।