মূল কন্টেন্টে যান

কীভাবে শূন্য-জ্ঞান প্রমাণ ব্যবহার করে ইথেরিয়ামে গোপনীয়তা অ্যাপ তৈরি করবেন

শূন্য-জ্ঞান প্রমাণ
গোপনীয়তা
ফিলিপ ক্রাউস
EF Builder Growth
12 মে, 2026
7 মিনিট পড়ার সময়

ডিজাইনের দিক থেকে ইথেরিয়াম সম্পূর্ণভাবে পাবলিক। যেকোনো ব্লক এক্সপ্লোরার ব্যবহার করে যে কেউ প্রতিটি ঠিকানা, ব্যালেন্স, ট্রানজ্যাকশন, কন্ট্রাক্ট কল এবং ইভেন্ট দেখতে পারে। আপনি যখন যাচাইযোগ্যতা চান তখন এই স্বচ্ছতা কার্যকর। কিন্তু এটি একটি সমস্যা হয়ে দাঁড়ায় যখন ব্যবহারকারীদের প্রতিটি কাজকে একই ওয়ালেটের সাথে যুক্ত না করে ভোট দিতে, দাবি করতে, উত্তোলন করতে বা মেম্বারশিপ প্রমাণ করতে হয়।

বেনামী মেম্বারশিপ হলো একটি পুনরায় ব্যবহারযোগ্য প্যাটার্ন যা ইথেরিয়ামে একটি বড় শ্রেণীর গোপনীয়তা অ্যাপকে চালিত করে। লোকেরা প্রথমে নিবন্ধন করে, তারপর পরে তারা কোন সদস্য তা প্রকাশ না করেই প্রমাণ করে যে তারা গ্রুপটির অন্তর্ভুক্ত। একটি শূন্য-জ্ঞান প্রমাণ হলো নিবন্ধন ওয়ালেট এবং কাজ করা ওয়ালেটের মধ্যে একটি সেতু, এবং এই সেতুটি প্রকাশ করে না যে কে এটি পার হয়েছে।

আশেপাশের প্রোডাক্ট পরিবর্তিত হয়, কিন্তু গোপনীয়তার মূল কাঠামো একই থাকে।

প্যাটার্নটি, বেনামী ভোটের মাধ্যমে ব্যাখ্যা করা হয়েছে

প্যাটার্নটির তিনটি অংশ রয়েছে। একটি কমিটমেন্ট প্রতিটি সদস্যকে নিবন্ধন করে। একটি মার্কেল ট্রি সেই কমিটমেন্টগুলোকে একটি ভিড়ে পরিণত করে। একটি প্রমাণ এবং একটি নালিফায়ার (nullifier) একজন সদস্যকে কে কাজ করেছে তা প্রকাশ না করেই একবার কাজ করার সুযোগ দেয়।

প্রথম ধাপ: নিবন্ধন করা

প্রতিটি ভোটার অফচেইনে দুটি ব্যক্তিগত মান তৈরি করে, গোপন মান (secret) এবং নালিফায়ার। ভোটার সেই মানগুলোকে একটি পাবলিক কমিটমেন্টে হ্যাশ করে, তারপর সেই কমিটমেন্টটি অনচেইনে নিবন্ধন করে।

কমিটমেন্ট হলো পাবলিক নিবন্ধন রেকর্ড। গোপন মান এবং নালিফায়ার হলো ব্যক্তিগত নোট যা ভোটারের পরে প্রয়োজন হয়। নোটটি হারিয়ে ফেললে ভোটার মেম্বারশিপ প্রমাণ করতে পারবে না। এটি ফাঁস হয়ে গেলে অন্য কেউ ব্যবহারকারীর জায়গায় ভোট দিতে পারে।

যেহেতু কমিটমেন্ট একটি হ্যাশ, তাই পর্যবেক্ষকরা এর ভেতরের ব্যক্তিগত মানগুলো পুনরুদ্ধার করতে পারে না। কমিটমেন্টটি বলে যে "কেউ নিবন্ধন করেছে" কিন্তু পরে কে সেই নিবন্ধনটি ব্যবহার করবে তা প্রকাশ করে না।

দ্বিতীয় ধাপ: ভিড় তৈরি করা

আরও ভোটার নিবন্ধন করার সাথে সাথে, অ্যাপটি তাদের কমিটমেন্টগুলোকে একটি মার্কেল ট্রিতে সংগ্রহ করে। একটি মার্কেল ট্রি মানগুলোর একটি দীর্ঘ তালিকাকে একটি একক হ্যাশে সংকুচিত করে, যাকে রুট বলা হয়। তালিকার যেকোনো মান পরিবর্তন করলে হ্যাশটিও পরিবর্তিত হয়, তাই রুটটি পুরো সেটের একটি টেম্পার-এভিডেন্ট (বিকৃতি-প্রমাণ) সারাংশ হিসেবে কাজ করে।

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

তৃতীয় ধাপ: বেনামে কাজ করা

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

প্রমাণটি যাচাইকারী কন্ট্রাক্টকে বিশ্বাস করায় যে স্টেটমেন্টটি সত্য। এটি গোপন মান, নালিফায়ার বা কোন কমিটমেন্ট ব্যবহার করা হয়েছিল তা প্রকাশ করে না।

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

পুনরায় ব্যবহারযোগ্য গেট

সেই একই প্রমাণ-এবং-নালিফায়ার জোড়া ভোটের বাইরেও কাজ করে। ভোটের গল্পটি সরিয়ে ফেললে আপনার কাছে যা থাকে তা হলো স্মার্ট কন্ট্রাক্ট ফাংশনগুলোর জন্য একটি গোপনীয়তা গেট।

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

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

কোথায় কী চলে

ব্যক্তিগত কাজ সাধারণত অফচেইনে ঘটে। ব্যবহারকারী নোটটি সংরক্ষণ করে, এবং একটি ক্লায়েন্ট অ্যাপ সাক্ষী তৈরি করে এবং প্রমাণ তৈরি করতে প্রমাণকারী চালায়। একটি ইনডেক্সার কমিটমেন্ট এবং মার্কেল রুটগুলো ট্র্যাক করে। একটি বান্ডলার ব্যবহারকারী অপারেশন অনচেইনে প্রচার করে এবং একটি ERC-4337 পেমাস্টার গ্যাস স্পনসর করে, যাতে একটি নতুন ওয়ালেটের প্রথমে ব্যবহারকারীর পরিচিত ওয়ালেট থেকে ETH-এর প্রয়োজন না হয়।

পাবলিক এনফোর্সমেন্ট অনচেইনে ঘটে। যাচাইকারী কন্ট্রাক্ট প্রমাণটি পরীক্ষা করে। অ্যাপ কন্ট্রাক্ট বৈধ রুট এবং অব্যবহৃত নালিফায়ারগুলো পরীক্ষা করে, নালিফায়ার হ্যাশ সংরক্ষণ করে এবং পাবলিক কাজটি চালায়।

সংবেদনশীল UX হলো নোট হ্যান্ডলিং। গোপন মান এবং নালিফায়ারকে কী-এর মতো বিবেচনা করুন। সেগুলোকে অ্যানালিটিক্স, লগ, URL, ত্রুটি প্রতিবেদন বা সাধারণ সার্ভার-সাইড টেলিমেট্রিতে রাখবেন না। একবার নোটটি ফাঁস হয়ে গেলে, প্রমাণটি যত শক্তিশালীই হোক না কেন, গোপনীয়তা নষ্ট হয়ে যায়।

টুলিংগুলো উন্নত হয়েছে

আপনাকে অন্তর্নিহিত ক্রিপ্টোগ্রাফি হাতে কোড করতে হবে না। একটি সাধারণ উপায় হলো একটি উচ্চ-স্তরের জিরো-নলেজ ভাষায় সার্কিটটি লেখা, একটি Solidity যাচাইকারী তৈরি করা এবং অ্যাপ কন্ট্রাক্ট থেকে সেই যাচাইকারীকে কল করা।

সঠিক স্ট্যাকটি কাজের ওপর নির্ভর করে। snarkjs-এর সাথে Circom হলো অ্যাপ-স্তরের সার্কিটগুলোর জন্য একটি দীর্ঘ-প্রতিষ্ঠিত উপায়। Barretenberg-এর সাথে Noir হলো একটি নতুন ডেভেলপার-বান্ধব উপায়। Halo2 এবং gnark হলো নিম্ন-স্তরের সার্কিট লাইব্রেরি। RISC Zero বা SP1-এর মতো zkVM-গুলো সাধারণ প্রোগ্রামগুলোকে প্রমাণ করে, তবে একটি ছোট কাস্টম সার্কিটের চেয়ে এগুলো প্রমাণ করা বেশি ব্যয়বহুল হতে পারে।

বেনামী মেম্বারশিপের জন্য, নিজের সার্কিট লেখার আগে একটি বিদ্যমান প্রোটোকল ব্যবহার করুন। Semaphore গ্রুপ মেম্বারশিপ এবং নালিফায়ার-ভিত্তিক ডাবল-ব্যবহার প্রতিরোধকে কন্ট্রাক্ট এবং JavaScript লাইব্রেরিতে প্যাকেজ করে। ব্যক্তিগত ভোট এবং গভর্ন্যান্সের জন্য, MACI হলো বিশেষায়িত উপায় কারণ এটি অ্যান্টি-কলিউশন (যোগসাজশ-বিরোধী) বৈশিষ্ট্য যুক্ত করে। পরিপক্ক প্রোটোকলগুলো প্রায়শই নতুন সার্কিটগুলোর চেয়ে বেশি নিরাপদ হয়।

প্রমাণটিই যথেষ্ট নয়

এমনকি একটি নিখুঁত প্রমাণও ব্যর্থ হয় যদি ওয়ালেট ফ্লো লিংকটি ফাঁস করে দেয়। ওয়ালেট A থেকে নিবন্ধন করুন এবং পরে ওয়ালেট A থেকে কাজ করুন, এবং যে কেউ পর্যবেক্ষণ করে ট্রানজ্যাকশনগুলোকে সংযুক্ত করতে পারে। কাজ করার ঠিক আগে ওয়ালেট A থেকে ওয়ালেট B-তে ফান্ড পাঠান, এবং সেই ফান্ডিং ট্রানজ্যাকশনটি একই সমস্যা তৈরি করে।

এ কারণেই বান্ডলার এবং পেমাস্টারগুলো গুরুত্বপূর্ণ। কাজ করা ওয়ালেটটি নতুন হওয়া উচিত, এবং ব্যবহারকারী যে ওয়ালেটটিকে কাজ থেকে আলাদা করার চেষ্টা করছে সেখান থেকে এর ETH পাওয়ার প্রয়োজন হওয়া উচিত নয়।

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

পাবলিক ইনপুটগুলো হলো আরেকটি জায়গা যেখানে গোপনীয়তা অ্যাপগুলো ব্যর্থ হয়। সার্কিটে পাবলিক হিসেবে চিহ্নিত, ইভেন্ট হিসেবে নির্গত, কল ডেটায় অন্তর্ভুক্ত বা কন্ট্রাক্ট দ্বারা সংরক্ষিত যেকোনো কিছু দৃশ্যমান। একটি Solidity কন্ট্রাক্টে অ্যাক্সেস কন্ট্রোলের মতোই সতর্কতার সাথে পাবলিক ইনপুটগুলো পর্যালোচনা করুন।

এটি বিল্ডারদের জন্য কী পরিবর্তন আনে

ইথেরিয়ামে গোপনীয়তা এখন বাস্তবায়নযোগ্য। বিল্ডাররা অংশগুলোকে একত্রিত করে বাস্তব অ্যাপ্লিকেশন তৈরি করতে পারে। স্ট্যাকটি হলো ব্যক্তিগত স্টেটমেন্টের জন্য একটি সার্কিট, প্রমাণ পরীক্ষার জন্য একটি যাচাইকারী, পাবলিক নিয়মগুলোর জন্য একটি অ্যাপ কন্ট্রাক্ট, মার্কেল ডেটার জন্য একটি ইনডেক্সার এবং আনলিংকযোগ্য সাবমিশন ও গ্যাস স্পনসরশিপের জন্য একটি বান্ডলার ও পেমাস্টার।

কঠিন অংশগুলো হলো প্রোডাক্ট ডিজাইন, কী ম্যানেজমেন্ট, মেটাডেটা হাইজিন, অডিট এবং বেনামী সেট বৃদ্ধি করা। এগুলোর যেকোনো একটি ভুল হলে প্রমাণের দেওয়া গোপনীয়তা নষ্ট হয়ে যায়।

আরও পড়ুন

  1. শূন্য-জ্ঞান প্রমাণ (ethereum.org) (একটি নতুন ট্যাবে খোলে)
  2. Semaphore ডকুমেন্টেশন (একটি নতুন ট্যাবে খোলে)
  3. MACI ডকুমেন্টেশন (একটি নতুন ট্যাবে খোলে)
  4. Circom ডকুমেন্টেশন (একটি নতুন ট্যাবে খোলে)
  5. Noir ডকুমেন্টেশন (একটি নতুন ট্যাবে খোলে)
  6. Halo2 বই (একটি নতুন ট্যাবে খোলে)
  7. gnark ডকুমেন্টেশন (একটি নতুন ট্যাবে খোলে)
  8. RISC Zero ডকুমেন্টেশন (একটি নতুন ট্যাবে খোলে)
  9. SP1 ডকুমেন্টেশন (একটি নতুন ট্যাবে খোলে)
  10. EIP-4337: এন্ট্রি পয়েন্ট কন্ট্রাক্টের মাধ্যমে অ্যাকাউন্ট বিমূর্তকরণ (একটি নতুন ট্যাবে খোলে)