*cough cough*

Thursday, May 22, 2014

অসম্ভবকে সম্ভব করাই অনন্তর কাজঃ Secure Hash Algorithm (SHA) ভাঙতে পারবেন?

বর্তমান যুগে ড্যাটা এনক্রিপশন অনেক বড় ব্যাপার। সাধারণত পাসওয়ার্ড, লগিন ইনফরমেশন, প্রাইভেট ম্যাসেজ, ইমেইল সবকিছুই এনক্রিপ্টেড হয়ে আরেকজনের কাছে পৌঁছায়, তারপর নির্দিষ্ট এলগরিদম ব্যবহার করে ডিক্রিপ্ট করা হয়। ফলে মাঝখান থেকে কেউ সেই ডাটা পেয়ে গেলেও ডিক্রিপ্ট করা সম্ভব হয় না। আসলে ক্রিপটোলজি অনেক মজার একটা জিনিস, আজকে 'SHA' এনক্রিপশন নিয়ে কিছু বলা যাক। SHA মানে হল Secure Hash Algorithm. এর ডিজাইনার হল  USA এর National Security Agency (NSA). SHA সিরিজের চারটা ভার্সন আছে যেগুলোর এনক্রিপশন এলগরিদম একটা অপরটা থেকে ভিন্ন।
সেগুলো হল SHA-0, SHA-1, SHA-2 এবং SHA-3। এগুলো আনব্রেকেবল দাবি উঠলেও SHA-0 ব্রেক হয়ে যায়। ফলে এর পরের ভার্সন গুলো ডেভেলপ করা হয়। বর্তমানে সবচেয়ে বেশি ব্যবহ্রত হ্যাশ হল SHA-1। (SHA 1 - Wiki) এই হ্যাশ ফাংশনটার/গুলোর বিশেষত্ব হল এটা একটা One-way hash. আপনি এটা দিয়ে এনক্রিপ্ট করতে পারবেন ঠিক, কিন্তু সরাসরি ডিক্রিপ্ট করা সম্ভব না। মানে এটার কোন রিভার্স ফাংশন নেই। যেমনঃ আমি লিখলাম "Bangladesh" এটা যদি SHA 1 দ্বারা এনক্রিপ্ট করি তাহলে হ্যাশ টা হয় "fa6c3752cd00f7f1277fd7e5604ab8d2edaf26b8" কিন্তু আপনি চাইলে হ্যাশ কোডটা আর ডিক্রিপ্ট করতে পারবেন না, ফলে কোডটার মানে কি আর বের করা জীবনেও সম্ভব না (এই লেখা পর্যন্ত)। এখন প্রশ্ন করবেন, যেহেতু ডিক্রিপ্ট-ই করা সম্ভব না সেখানে এটা দিয়ে এনক্রিপ্ট করেই বা লাভ কি? আসলে সরাসরি ডিক্রিপ্ট করা না গেলেও এটা বিভিন্ন ডাটা মডিফিকেশন বা পাসওয়ার্ড চেক করতে অনবদ্য এক জিনিস! কেমনে? এন্ড্রয়েডের প্যাটার্ন পাসওয়ার্ড দিয়েই বুঝাই।
এন্ড্রয়েডে আমরা যে প্যাটার্ন পাসওয়ার্ড দিই আসলে সেগুলো কয়েকটা সংখ্যা হিসেবে নেয়। মনে করেন প্রথম ডট মানে 0,ডানে দ্বিতীয় ডট মানে 1, তারপরের ডট মানে 2, আবার নিচে বাম থেকে 3 এভাবে শেষ ডট হল 8.
ধরি প্যাটার্ন অনুসারে আপনার কোড হল 123456. এখন এন্ড্রয়েড এই পাসওয়ার্ড কখনো সরাসরি সেইভ করে না, এই জায়গায় এন্ড্রয়েড পাসওয়ার্ড SHA-1 দিয়ে এনক্রিপ্ট করে ফেলে (যেটা gesture.key ফাইলে সেইভ থাকে) ধরি 123456 এর হ্যাশ সেইভ করলো 7c4a8d09ca3762af61e59520943dc26494f8941b এবার আপনি প্যাটার্ন সিকোয়েন্স দিলেন 123457, খেয়াল করেন শুধু একটা ডিজিট গোলমাল। এটার হ্যাশ 908f704ccaadfd86a74407d234c7bde30f2744fe কেমনে কি?!? এক ডিজিটের পরিবর্তনে হ্যাশকোড দুইটার কোন মিলই নাই! জ্বি! হ্যাশকোড হল এমনই এক আনপ্রেডিক্টেবল এলগরিদম! এন্ড্রয়েড বলবে ধুর, কি ছাতা মাথা পাসওয়ার্ড দিসেন, মিল নাই ভাই, Wrong Pattern! 123456 বাদে যা ই চেষ্টা করেন জীবনেও হবেনা! শুধু 123456 দিয়েই সেই হ্যাশ টা পাওয়া যাবে যেটা আনলক করবে! :P মূল সুবিধাটা হল আপনি যদি আরেকজনের মোবাইল থেকে gesture.key বের করে হ্যাশ কোড টা পান তাইলেও কোন লাভ নাই, কারণ আপনি জানেনই না এটা কিসের হ্যাশ আর রিভার্স ফাংশন ও নাই যে হ্যাশ ব্রেক করবে। :P অর্থাৎ এটা অনেক অনেক সিকিউর।
যদিও আপনি যদি 0123 থেকে 012345678 পর্যন্ত সম্ভাব্য সব প্যাটার্ন কোড এর হ্যাশ আগে বের করে রাখেন, তারপর ছোট একটা প্রোগ্রাম বানিয়ে হ্যাশ ম্যাচ করান তাইলে পাওয়ার সম্ভাবনা আছে (এটা নিয়ে পরে একটা পোস্ট দিব :D) এভাবে যদি a,b,c,d সহ পাসওয়ার্ড দেয়া হয় তাইলে তো .... :v
SHA1 এর আরেক সুবিধা হল ডাটা মডিফিকেশন চেক। মনে করেন আপনি কোন এপ্লিকেশন / সোর্স কোড কোন হোস্টে আপ্লোড করলেন। আপনার সব ডাটা অনুসারে একটা SHA 1 কোড পাবেন। এখন কেউ যদি ইলিগ্যালি আপনার ডাটা মডিফাই/হ্যাক করে তাইলে SHA 1 চেঞ্জ হয়ে যাবে, এমনকি একটা বাড়তি ডট দিলেও! দুইটার SHA 1 না মিললে তখন প্রয়োজনীয় ব্যবস্থা নেয়া হয়। তাই খুব সহজেই এটা দিয়ে ডাটা মডিফিকেশন চেক করা সম্ভব যেটা অসম্ভব সিকিউরিটির বিষয়।
এগুলা জেনে আপনার কি লাভ হইল? :P বহুত লাভ, আপনি এখন এটা নিয়ে গুগল করবেন, মাথায় খালি SHA ঘুরবে, কয়েকটা স্ট্রিং এর SHA বানাবেন। মোটামুটি কয়েক ঘন্টা দৌঁড়ের উপর থাকবেন আমি যেমন ছিলাম। অনেক কিছুই জানবেন আসলে।

0 comments:

Post a Comment

Text Widget

Copyright © Blog of Everything! | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com