পাঠ ৪৯ · ৬০-এর মধ্যে · মডিউল ১০
Home / Courses / Cybersecurity & Ethical Hacking / চেইন অফ কাস্টডি

ডিজিটাল ফরেনসিক্স — চেইন অফ কাস্টডি

Digital forensics — chain of custody
৮ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • ডিজিটাল ফরেনসিক্স কী এবং কেন "আইনগত গ্রহণযোগ্যতা" এর কেন্দ্রীয় লক্ষ্য
  • চেইন অফ কাস্টডি কী এবং কেন এতে একটি ফাঁকও প্রমাণকে অকার্যকর করে দিতে পারে
  • ফরেনসিক ইমেজিং — কেন সবসময় একটি কপিতে কাজ করা হয়, মূলে নয়
  • L01-এর হ্যাশিং প্যাটার্ন পুনরায় ব্যবহার করে প্রমাণের অখণ্ডতা প্রতিটি ধাপে যাচাই করা

১ · ডিজিটাল ফরেনসিক্স ও আইনগত গ্রহণযোগ্যতা

ডিজিটাল ফরেনসিক্সDigital Forensicsডিজিটাল প্রমাণ (ফাইল, লগ, মেমরি ডাম্প, ডিস্ক ইমেজ) এমনভাবে সংরক্ষণ, সংগ্রহ ও বিশ্লেষণ করার বিদ্যা, যাতে তা আইনগত প্রক্রিয়ায় (আদালত বা আভ্যন্তরীণ তদন্তে) গ্রহণযোগ্য থাকে। একটি সিকিউরিটি ঘটনার পর — বিশেষত যদি আইন প্রয়োগকারী সংস্থা বা আদালত জড়িত হতে পারে — শুধু "কী ঘটেছিল" জানাই যথেষ্ট নয়। প্রমাণটি যেভাবে সংগ্রহ করা হয়েছে তা প্রমাণ করতে হবে যে এটি নির্ভরযোগ্য ও অপরিবর্তিত।

২ · চেইন অফ কাস্টডি — কেন একটি ফাঁকও যথেষ্ট ক্ষতি করতে পারে

চেইন অফ কাস্টডিChain of Custodyএকটি প্রমাণ কে, কখন হাতে নিয়েছে, কী কাজ করেছে, এবং কার কাছে হস্তান্তর করেছে তার একটি সম্পূর্ণ, অখণ্ড, ডকুমেন্টেড রেকর্ড। হলো একটি প্রমাণের জীবনচক্রের প্রতিটি হাত বদলের ডকুমেন্টেড রেকর্ড। যদি এই রেকর্ডে কোথাও একটি ফাঁক থাকে (কে হাতে নিয়েছিল তা অজানা, বা কতক্ষণ কারও কাছে ছিল তা রেকর্ড করা হয়নি) — তাহলে প্রমাণ করা অসম্ভব হয়ে যায় যে সেই সময়ে প্রমাণটি পরিবর্তিত হয়নি। ফলাফল: প্রমাণটি আদালতে অগ্রহণযোগ্য হয়ে যেতে পারে, এমনকি যদি তা প্রকৃতপক্ষে অপরিবর্তিতই থেকে থাকে।

গুরুত্বপূর্ণ সতর্কতা · আইনগত বাস্তবতা

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

৩ · ফরেনসিক ইমেজিং — সবসময় একটি কপিতে কাজ করুন, মূলে নয়

একটি মূল নীতি: মূল প্রমাণ (যেমন একটি হার্ড ড্রাইভ) কখনো সরাসরি বিশ্লেষণ করা হয় না। বরং একটি write-blocker হার্ডওয়্যার/সফটওয়্যার ব্যবহার করে একটি বিট-ফর-বিট কপি ("forensic image") তৈরি করা হয়, যাতে নিশ্চিত করা যায় মূল ডেটাতে কোনো পরিবর্তন ঘটেনি। এরপর সেই ইমেজের একটি হ্যাশ কম্পিউট করে রাখা হয় — ঠিক L01-এর integrity-checking ধারণার মতোই — যাতে পরে যেকোনো সময় প্রমাণ করা যায় ইমেজটি সেই মূল মুহূর্ত থেকে অপরিবর্তিত আছে।

৪ · কোড দিয়ে চেইন অফ কাস্টডি যাচাই — L01-এর হ্যাশিং প্যাটার্নের সম্প্রসারণ

নিচের কোড সেলটি সম্পূর্ণ নিরাপদ ও ইন-মেমরি — এটি L01-এ শেখা hashlib.sha256 প্যাটার্নকে একটি ফরেনসিক কাস্টডি লগে প্রয়োগ করে। প্রতিটি কাস্টডি এন্ট্রিতে সেই মুহূর্তের প্রমাণের একটি চেকসাম রেকর্ড করা হয়, এবং verify_chain() ফাংশন প্রতিটি ধাপের চেকসাম মূল প্রমাণের চেকসামের সাথে মিলিয়ে দেখে। প্রথমে একটি ক্লিন চেইন (প্রমাণ কখনো পরিবর্তিত হয়নি) এবং তারপর একটি ব্রোকেন চেইন (একটি ধাপে প্রমাণ পরিবর্তিত হয়ে গেছে) দেখানো হয়েছে।

Python
import hashlib

def compute_checksum(evidence):
    return hashlib.sha256(evidence.encode()).hexdigest()

def add_custody_entry(log, handler, timestamp, action, evidence_at_this_step):
    entry = {
        "handler": handler,
        "timestamp": timestamp,
        "action": action,
        "checksum": compute_checksum(evidence_at_this_step),
    }
    log.append(entry)
    return log

def verify_chain(log, original_evidence):
    original_checksum = compute_checksum(original_evidence)
    for step_num, entry in enumerate(log, start=1):
        if entry["checksum"] != original_checksum:
            return False, (
                f"চেইন ভাঙা — ধাপ {step_num} ({entry['handler']}, "
                f"'{entry['action']}')-এ চেকসাম মিলছে না"
            )
    return True, "চেইন অক্ষত — সবগুলো ধাপে চেকসাম মূল প্রমাণের সাথে মিলেছে"

# ----- দৃশ্য ১: ক্লিন চেইন (প্রমাণ কখনো পরিবর্তিত হয়নি) -----
original_evidence = "disk_image::case_2031::sector_dump_v1"

clean_log = []
add_custody_entry(clean_log, "অফিসার A", 1001, "সংগ্রহ (Collection)", original_evidence)
add_custody_entry(clean_log, "ফরেনসিক ল্যাব B", 1050, "ইমেজিং (Imaging)", original_evidence)
add_custody_entry(clean_log, "অ্যানালিস্ট C", 1120, "বিশ্লেষণ (Analysis)", original_evidence)

ok, message = verify_chain(clean_log, original_evidence)
print("ক্লিন চেইন যাচাই:", ok)
print("  ->", message)

print()

# ----- দৃশ্য ২: ব্রোকেন চেইন (কোনো এক ধাপে প্রমাণ পরিবর্তিত হয়েছে) -----
broken_log = []
add_custody_entry(broken_log, "অফিসার A", 1001, "সংগ্রহ (Collection)", original_evidence)

# একজন অননুমোদিত ব্যক্তির হাতে থাকার সময় প্রমাণ পরিবর্তিত হয়ে যায়
tampered_evidence = original_evidence + "_modified_byte"
add_custody_entry(broken_log, "অজানা হ্যান্ডলার", 1030, "সংরক্ষণাগার (Storage)", tampered_evidence)

add_custody_entry(broken_log, "অ্যানালিস্ট C", 1120, "বিশ্লেষণ (Analysis)", original_evidence)

ok2, message2 = verify_chain(broken_log, original_evidence)
print("ব্রোকেন চেইন যাচাই:", ok2)
print("  ->", message2)

    
লক্ষ্য করুন — ক্লিন চেইনে প্রতিটি ধাপে চেকসাম মূল প্রমাণের চেকসামের সাথে হুবহু মিলেছে, তাই যাচাই True এসেছে। ব্রোকেন চেইনে দ্বিতীয় ধাপে ("অজানা হ্যান্ডলার" প্রমাণ পরিবর্তন করার পর) সেই মুহূর্তের চেকসাম মূল প্রমাণের চেকসামের সাথে আর মেলে না — verify_chain() ঠিক সেই ধাপ চিহ্নিত করে ব্যর্থতা রিপোর্ট করে। এটিই ঠিক L01-এর avalanche effect-এর প্রয়োগ: এক বাইট পরিবর্তনও পুরো হ্যাশ বদলে দেয়, ফলে পরিবর্তন অবিলম্বে ধরা পড়ে।
মূল কথা · Key takeaway

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

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ একজন তদন্তকারী বলছেন "আমি নিশ্চিত প্রমাণটি ঠিক আছে, কারণ আমি নিজেই এটি সংগ্রহ করেছি" — কিন্তু কোনো লিখিত রেকর্ড রাখেননি। এটি কেন যথেষ্ট নয়?

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

প্র ০২ কেন ফরেনসিক বিশ্লেষকরা কখনো মূল হার্ড ড্রাইভে সরাসরি বিশ্লেষণ চালান না, বরং সবসময় একটি ইমেজ (কপি) তৈরি করেন?

যেকোনো বিশ্লেষণ প্রক্রিয়া (এমনকি শুধু একটি ফাইল খোলাও) কখনো কখনো মেটাডেটা (যেমন "শেষ অ্যাক্সেসের সময়") পরিবর্তন করে দিতে পারে। মূল প্রমাণে সরাসরি কাজ করলে সেই পরিবর্তনই প্রমাণকে প্রশ্নবিদ্ধ করে দিতে পারে। একটি write-blocked বিট-ফর-বিট কপিতে কাজ করলে মূল প্রমাণ চিরকাল অপরিবর্তিত থাকে, এবং প্রয়োজনে বারবার নতুন কপি তৈরি করেও বিশ্লেষণ পুনরাবৃত্তি করা যায়।

প্র ০৩ উপরের কোডে verify_chain() কেন প্রতিটি ধাপের চেকসাম "মূল প্রমাণের" চেকসামের সাথে তুলনা করে, পরপর দুটি ধাপের চেকসামের সাথে নয়?

লক্ষ্য হলো প্রমাণ করা যে এটি মূল অবস্থা থেকে কখনো পরিবর্তিত হয়নি, শুধু পরের ধাপ থেকে অভিন্ন থাকা নয়। যদি দুটি ধাপ একে অপরের সাথে মিলে যায় কিন্তু দুটোই মূল থেকে ভিন্ন হয় (যেমন কেউ প্রথম হস্তান্তরের আগেই পরিবর্তন করে তারপর প্রতিটি ধাপে সেই পরিবর্তিত সংস্করণই বহন করে), তাহলে পরপর-তুলনা পদ্ধতি সেই পরিবর্তন কখনো ধরতে পারবে না। মূলের সাথে সরাসরি তুলনা করাই একমাত্র নির্ভরযোগ্য পদ্ধতি।

অনুশীলন

  1. চিন্তা করুন: একটি চেইন অফ কাস্টডি লগে সময়ের ফাঁক আছে — একটি ডিস্ক ইমেজ ৩ দিনের জন্য কোনো রেকর্ড ছাড়া একটি ডেস্কে পড়ে ছিল বলে জানা যাচ্ছে। যদিও চেকসাম এখনো মূলের সাথে মিলছে, এটি কেন এখনো একটি সমস্যা?

    চেকসাম মেলা প্রমাণ করে ডেটা বর্তমানে অপরিবর্তিত, কিন্তু চেইন অফ কাস্টডির উদ্দেশ্য শুধু ডেটা অখণ্ডতা প্রমাণ করা নয় — এটি প্রমাণ করে যে প্রমাণটি সবসময় কার নিয়ন্ত্রণে ছিল তা জানা যায়। ৩ দিনের একটি অ-নথিভুক্ত ফাঁক মানে সেই সময়ে কে প্রমাণে অ্যাক্সেস পেতে পারত তা প্রমাণ করা অসম্ভব — এমনকি যদি কেউ আসলে কিছু পরিবর্তন না করেও থাকে, প্রক্রিয়াগত ফাঁকই আদালতে প্রশ্ন তুলতে পারে।

  2. পরীক্ষা করুন: উপরের ব্রোকেন চেইন উদাহরণে tampered_evidence-এর পরিবর্তনের অংশ ("_modified_byte") সরিয়ে দিয়ে আবার verify_chain() চালান। ফলাফল কী হয় এবং কেন?

    যদি tampered_evidence ঠিক original_evidence-এর সমান হয়ে যায় (কোনো পরিবর্তন ছাড়াই), তাহলে সব ধাপের চেকসাম আবার মূলের সাথে মিলে যাবে এবং verify_chain() True রিটার্ন করবে — কারণ ফাংশনটি কেবল প্রকৃত ডেটা তুলনা করে, কোনো পরিবর্তন না ঘটলে সেটিকেই ক্লিন চেইন হিসেবে সঠিকভাবে চিহ্নিত করবে। এটি দেখায় হ্যাশ-ভিত্তিক যাচাই কতটা নির্ভরযোগ্য — এটি শুধু প্রকৃত পরিবর্তনেই সাড়া দেয়, অহেতুক সন্দেহ তৈরি করে না।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
লগ অ্যানালাইসিস ও SIEM বেসিকস