SHA-3 অ্যালগরিদমের প্রধান বাস্তবায়নের সাথে লাইব্রেরিতে দুর্বলতা

XKCP প্যাকেজে (এক্সটেন্ডেড কেকাক কোড প্যাকেজ) দেওয়া SHA-3 (Keccak) ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন বাস্তবায়নে একটি দুর্বলতা (CVE-2022-37454) চিহ্নিত করা হয়েছে, যা কিছু প্রক্রিয়াকরণের সময় বাফার ওভারফ্লো হতে পারে। ফরম্যাট করা তথ্য। সমস্যাটি SHA-3 এর একটি নির্দিষ্ট বাস্তবায়নের কোডে একটি বাগ দ্বারা সৃষ্ট, এবং অ্যালগরিদমের একটি দুর্বলতার কারণে নয়৷ XKCP প্যাকেজটিকে SHA-3-এর অফিসিয়াল বাস্তবায়ন হিসাবে চিহ্নিত করা হয়, কেকাক ডেভেলপমেন্ট টিমের ইনপুট নিয়ে তৈরি করা হয় এবং বিভিন্ন প্রোগ্রামিং ভাষায় SHA-3 ফাংশনের ভিত্তি হিসাবে ব্যবহৃত হয় (যেমন, পাইথন হ্যাশলিবে XKCP কোড ব্যবহার করা হয় মডিউল, রুবি ডাইজেস্ট প্যাকেজ sha3 এবং PHP হ্যাশ_* ফাংশন)।

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

এটি এখনও স্পষ্ট নয় যে দুর্বলতা বিদ্যমান অ্যাপ্লিকেশনগুলিকে অনুশীলনে কতটা প্রভাবিত করে, যেহেতু সমস্যাটি কোডে নিজেকে প্রকাশ করার জন্য, ব্লকগুলিতে সাইক্লিক হ্যাশ গণনা ব্যবহার করতে হবে এবং প্রক্রিয়াকৃত ব্লকগুলির মধ্যে একটির আকার প্রায় 4 জিবি হতে হবে (অন্তত 2^32 - 200 বাইট) একবারে ইনপুট ডেটা প্রক্রিয়া করার সময় (অনুক্রমিকভাবে অংশগুলিতে হ্যাশ গণনা না করে), সমস্যাটি প্রদর্শিত হয় না। সুরক্ষার সহজ পদ্ধতি হিসাবে, হ্যাশ গণনার একটি পুনরাবৃত্তিতে জড়িত ডেটার সর্বাধিক আকার সীমাবদ্ধ করার প্রস্তাব করা হয়েছে।

ইনপুট ডেটার ব্লক প্রসেসিংয়ে একটি ত্রুটির কারণে দুর্বলতা সৃষ্টি হয়। "int" টাইপের সাথে মানগুলির ভুল তুলনা করার কারণে, মুলতুবি থাকা ডেটার ভুল আকার নির্ধারণ করা হয়, যা বরাদ্দকৃত বাফারের বাইরে লেজের দিকে পরিচালিত করে। বিশেষ করে, তুলনাটি "partialBlock + instance->byteIOIndex" অভিব্যক্তিটি ব্যবহার করেছে, যা উপাদান অংশের বড় মানের জন্য পূর্ণসংখ্যা ওভারফ্লো করেছে। উপরন্তু, কোডে একটি ভুল টাইপ কাস্ট "(আনসাইন করা int)(dataByteLen - i)" ছিল, যা 64-বিট সাইজ_টি টাইপের সিস্টেমে ওভারফ্লো সৃষ্টি করেছিল।

উদাহরণ কোড যা ওভারফ্লো ঘটায়: hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

উত্স: opennet.ru

একটি মন্তব্য জুড়ুন