প্রতিটি ইঞ্জিনিয়ারিং টিম শেষমেশ একই নিষিদ্ধ জিনিসটা চায়: টেস্ট করার জন্য প্রোডাকশন ডেটাবেসের একটা কপি। আসল ডেটায় থাকে সেই আকৃতি, প্রান্তিক ঘটনা আর অদ্ভুত বণ্টন, যা কৃত্রিম ডেটা কখনও ধরতে পারে না। আইনগতভাবে বললে, এটা আবার তেজস্ক্রিয়ও। কোনো গ্রাহকের নাম, কার্ড নম্বর বা মেডিকেল রেকর্ড যে মুহূর্তে কোনো স্টেজিং পরিবেশে বা কোনো ডেভেলপারের ল্যাপটপে গিয়ে পড়ে, সেই মুহূর্তেই আপনি ঘটতে-চলা একটা লঙ্ঘন তৈরি করে ফেললেন, আর আপনি কোথায় কাজ করছেন তার উপর নির্ভর করে GDPR, HIPAA বা PCI DSS-এর একটা লঙ্ঘনও।

CodeVeil-এর অস্তিত্ব সেই টানাপোড়েন মেটানোর জন্য। এটি আসল ডেটা নেয় আর এমন ডেটা তৈরি করে যা ঠিক তার মতোই আচরণ করে — একই ফরম্যাট, একই সম্পর্ক, একই পরিসংখ্যানগত আকৃতি — কিন্তু যাতে আসল স্পর্শকাতর মানগুলোর একটিও থাকে না। এই লেখাটি সেই সব ফাঁদে না পড়ে এটা কীভাবে করা যায় তা নিয়ে, যে ফাঁদগুলো সরল মাস্কিংকে অকেজো করে দেয়।

মুছে ফেলার চেয়ে মাস্কিং কেন ভালো

সহজ পন্থাটা হলো স্রেফ স্পর্শকাতর ফিল্ডগুলো ছেঁটে ফেলা: ইমেইল null করে দাও, কার্ড নম্বর ফাঁকা করো, নাম মুছে দাও। এটাই আবার সেই পন্থা যা পরের ধাপের সবকিছু ভেঙে দেয়।

আপনি যদি একটা ইমেইল কলাম null করেন, তবে ইমেইল যাচাই, পার্স বা তার উপর join করা প্রতিটি কোড-পথ এখন আপনার টেস্ট পরিবেশে প্রোডাকশনের চেয়ে ভিন্নভাবে আচরণ করবে। আপনার টেস্টগুলো এমন ডেটার বিরুদ্ধে পাস করে যা বাস্তবে ঘটতেই পারে না। যে বাগগুলো ধরতে চেয়েছিলেন, সেগুলো লুকিয়ে থাকে ঠিক সেই ফিল্ডগুলোতে যেগুলো আপনি ধ্বংস করে ফেলেছেন।

মাস্কিং নেয় ভিন্ন এক অবস্থান: ডেটার অর্থ ছাড়া বাকি সবকিছু অক্ষুণ্ণ রাখো। একটি মাস্ক করা ইমেইল এখনও সিনট্যাক্স অনুযায়ী বৈধ, অনন্য, সঠিক ফরম্যাটের একটি ইমেইল — এটা স্রেফ কারও নয়। যে টেস্ট ডেটায় আপনি ভরসা করতে পারেন আর যে টেস্ট ডেটা আপনাকে মিথ্যা বলে, এই দুইয়ের তফাত সেখানেই।

ফরম্যাট-সংরক্ষণকারী অস্পষ্টকরণ

মূল কৌশলটি হলো ফরম্যাট-সংরক্ষণকারী মাস্কিং। একটা প্রোগ্রাম যত স্তরেই পরিদর্শন করুক না কেন, আউটপুট দেখতে ইনপুটের মতোই, তাই পরের ধাপের কিছুই তফাত ধরতে পারে না।

  • একটি ক্রেডিট কার্ড নম্বরকে বদলে দেওয়া হয় ভিন্ন একটি নম্বর দিয়ে, যা এখনও একটি Luhn চেকসাম পাস করে আর ইস্যুকারীর প্রিফিক্স রাখে, ফলে পেমেন্ট-কোডের পথগুলো অভিন্নভাবে আচরণ করে।
  • একটি ফোন নম্বর তার দেশ ও এরিয়া কোডের গঠন ধরে রাখে।
  • একটি জাতীয় পরিচয়পত্র তার দৈর্ঘ্য, চেক ডিজিট আর ভেতরের ফরম্যাট নিয়ম ধরে রাখে।
  • একটি জন্মতারিখ একটি নির্দিষ্ট সীমার মধ্যে সরে যায়, ফলে বয়স বাস্তবসম্মত থাকে আর কোহর্ট অ্যানালিটিক্স ভেঙে পড়ে না।

রেফারেনশিয়াল ইন্টেগ্রিটি হলো সেই অংশ যাকে মানুষ কম গুরুত্ব দেয়। একজন গ্রাহকের ID যদি একটি orders টেবিল, একটি payments টেবিল আর একটি support-tickets টেবিলে থাকে, তবে মাস্কিংকে তিন জায়গাতেই তা একই নতুন মান দিয়ে বদলাতে হবে, নইলে আপনার join ভেঙে যাবে। CodeVeil মাস্ক করে নির্ধারিতভাবে: একই ইনপুট, একই কি-এর অধীনে, সবসময় একই আউটপুট তৈরি করে। এর মানে customer_9f3a যেখানেই দেখা যাক, একই মাস্ক করা টোকেনে পরিণত হয়, আর আপনার স্কিমার প্রতিটি foreign-key সম্পর্ক এই প্রক্রিয়ার পরও অটুট থাকে।

যখন আপনার সত্যিই মূলটা পুনরুদ্ধার দরকার হয় — একটা সাপোর্ট এসকালেশন, একটা আইনি অনুরোধ — তখন রিভার্সিবল টোকেনাইজেশন পাওয়া যায়। ম্যাপিংটি রাখা হয় ম্যানেজড কি-এর অধীনে, ফলে যারা এটা করার জন্য অনুমোদিত তাদের জন্য পুনরুদ্ধার সম্ভব, আর যারা কেবল মাস্ক করা কপিটা রাখে তাদের সবার জন্য অসম্ভব।

ব্যাচ API

একটি রেকর্ড মাস্ক করা সহজ। দশ কোটি মাস্ক করা একটি ইঞ্জিনিয়ারিং সমস্যা, আর এটাই ঠিক করে দেয় বাস্তবে একটি টুল ব্যবহারযোগ্য কি না।

CodeVeil-এর ব্যাচ API প্রতি রিকোয়েস্টে সর্বোচ্চ ১০,০০০ রেকর্ড গ্রহণ করে। জবটি গোটা সেটের উপর একই নির্ধারিত রূপান্তর চালায়, যা একটিমাত্র যৌক্তিক ডেটাসেট হাজার হাজার রিকোয়েস্টে ভাগ হয়ে গেলেও রেফারেনশিয়াল ইন্টেগ্রিটি সঙ্গতিপূর্ণ রাখে — আউটপুট ঠিক করে কি, রিকোয়েস্টের সীমানা নয়।

একটি সাধারণ পাইপলাইন কল দেখতে এমন:

curl -X POST https://api.codeveil.com/v1/mask/batch \
  -H "Authorization: Bearer $CODEVEIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "schema": "customers",
    "records": [
      { "id": "c_1042", "email": "[email protected]", "card": "4539511234567890" },
      { "id": "c_1043", "email": "[email protected]",   "card": "4485119876543210" }
    ],
    "rules": {
      "email": "email_preserve_domain",
      "card":  "luhn_preserve_prefix",
      "id":    "tokenize_deterministic"
    }
  }'

প্রতিটি ফিল্ড তার উপর প্রযোজ্য নিয়মটির নাম বলে দেয়, ফলে একটি স্কিমা সংজ্ঞাই প্রতিটি রান চালায়। যেসব টিম আদৌ কোনো ডেটা পাইপলাইন চায় না, তাদের জন্য PostgreSQL, MySQL, MongoDB আর S3-এর সরাসরি কানেক্টর উৎস থেকে পড়ে, জায়গায় বা কোনো গন্তব্যে মাস্ক করে, আর ফলাফল লেখে — মাঝে কোনো glue কোড নেই।

সম্মতি একটি ডিজাইন-বাধ্যবাধকতা, বৈশিষ্ট্য নয়

GDPR আর HIPAA-কে শেষে জুড়ে দেওয়ার একটা চেকলিস্ট হিসেবে দেখতে লোভ হয়। বাস্তবে সম্মতি শুরু থেকেই স্থাপত্যকে গড়ে তোলে।

  • ডেটা মিনিমাইজেশন (GDPR অনুচ্ছেদ ৫) হলো গোটা ভিত্তি: মাস্ক করা ডেটা ব্যক্তিগত ডেটা নয়, তাই তা নিয়ন্ত্রণের অনেকটা পরিধির বাইরে পড়ে। এটা কেবল তখনই সত্য, যখন যারা ডেটা রাখে তাদের জন্য মাস্কিং অপরিবর্তনীয় — আর সেজন্যই টোকেনাইজেশনের কি মাস্ক করা আউটপুট থেকে আলাদাভাবে থাকে।
  • HIPAA ডি-আইডেন্টিফিকেশন-এর একটা নির্দিষ্ট মানদণ্ড আছে: ১৮ শ্রেণির শনাক্তকারী সরিয়ে বা রূপান্তরিত করা। CodeVeil সেই শ্রেণিগুলোর সঙ্গে ম্যাপ করা নিয়ম-টেমপ্লেট নিয়ে আসে, যাতে একটি স্বাস্থ্য ডেটাসেট আসল মানদণ্ডের বিরুদ্ধে ডি-আইডেন্টিফাই করা যায়, তার একটা আন্দাজের বিরুদ্ধে নয়।
  • অডিট ট্রেইল গুরুত্বপূর্ণ, কারণ "আমরা এটা মাস্ক করেছি" এমন একটা দাবি যা হয়তো আপনাকে প্রমাণ করতে হবে। প্রতিটি ব্যাচ জব লিপিবদ্ধ করে কী চলল, কোন স্কিমার বিরুদ্ধে, কোন নিয়মের অধীনে, ফলে আপনার হাতে একটা প্রতিশ্রুতির বদলে থাকে একটা অডিট-প্রস্তুত রেকর্ড।

এখানে সূক্ষ্ম ব্যর্থতার ধরনটি হলো এমন মাস্কিং যা কারিগরিভাবে অনুমান করে উল্টানো যায়। আপনি যদি প্রতিটি জন্মতারিখ ঠিক ৩০ দিন সরিয়ে দেন, তবে যে একটি আসল মান জানে সে গোটা কলামটি আন-মাস্ক করে ফেলতে পারে। CodeVeil-এর রূপান্তরগুলো কি-ভিত্তিক ও অ-রৈখিক, বিশেষভাবে সেই দরজা বন্ধ করার জন্যই — বাস্তবতা অজ্ঞাতনামতার দামে আসতে পারে না।

এটা কোথায় খাপ খায়

CodeVeil থেকে সবচেয়ে বেশি সুবিধা যারা পায়, তারা সেই সব টিম যারা যন্ত্রণাটা টের পেয়েছে: যে QA লিড-এর বাস্তবসম্মত ডেটা দরকার কিন্তু প্রোডাকশন ছোঁয়া বারণ, যে প্ল্যাটফর্ম টিম একটি সম্মতিসম্পন্ন অ্যানালিটিক্স ওয়্যারহাউস বানাচ্ছে, যে কোম্পানি একটি SOC 2 অডিটের জন্য প্রস্তুতি নিতে গিয়ে আবিষ্কার করছে যে কত PII এমন সব জায়গায় ফাঁস হয়েছে যেখানে থাকার কথা নয়।

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