برنامه نویسی

مدارک مرکل: یک راهنمای ساده

شما میلیون‌ها تصویر منحصربه‌فرد در گالری خود دارید که هر کدام نمایانگر بخشی از داده‌های خصوصی یا شخصی ذخیره شده در تلفن شما هستند. پس از یک حادثه، دستگاه خود را گم کردید، اما پس از ماه‌ها با ادعای دستکاری نشدن تصاویر، به شما بازگردانده شد.

تأیید صحت هر تصویر در این گالری می تواند دشوار باشد، درست است؟ چگونه می توانند ثابت کنند که تصاویر دستکاری نشده اند، یا چگونه می توانید تأیید کنید که همه چیز همانطور که باید باشد؟ آنجاست شواهد مرکل وارد عمل می شوند، زیرا آنها راه حلی برای تأیید یکپارچگی مجموعه داده های بزرگ بدون نیاز به بازرسی هر مورد به صورت جداگانه ارائه می دهند.

در این آموزش، در مورد اثبات های Merkle، نحوه ایجاد آنها با استفاده از درخت Merkle، و نحوه پیاده سازی اثبات های Merkle برای قرار دادن آدرس های ایمیل در لیست سفید با استفاده از جاوا اسکریپت آشنا خواهید شد.

برای درک اینکه چگونه اثبات‌های مرکل به تأیید صحت و یکپارچگی داده‌های شما بدون نیاز به بررسی جداگانه هر قطعه، مانند گالری تصاویر شما، همانطور که قبلاً بحث شد، کمک می‌کنند، ابتدا باید ساختاری را که زیربنای آن‌ها است، درک کنید: درخت مرکل.

درخت مرکل چیست؟

درخت مرکل که به نام درخت هش نیز شناخته می‌شود، یک ساختار درختی باینری است که برای تأیید یکپارچگی مجموعه داده‌ها به طور مؤثر استفاده می‌شود. این مفهومی بود که به نام دانشمند کامپیوتر رالف مرکل، که آن را در سال 1979 به ثبت رساند، نامگذاری شد.

این ساختار درختی دودویی دارای هر گره برگ است که یک بلوک از داده یا یک قطعه اطلاعات را نشان می دهد. گره‌های داخلی به‌جای اینکه مستقیماً داده‌ها را در بر گیرند، یک هش رمزنگاری از گره‌های فرزند خود نگه می‌دارند. درخت با هش کردن مکرر جفت گره های فرزند ساخته می شود تا زمانی که یک هش ریشه واحد به دست آید.

اجزای درخت مرکل

  تصویر درخت مرکل توسط Teemu Kanstrén

تصویر درخت مرکل توسط Teemu Kanstrén

درخت مرکل دارای سه جزء مختلف است، همانطور که در تصویر بالا ریشه مرکل، شاخه های مرکل و برگ های مرکل نشان داده شده است. بیایید نگاهی به آنچه هستند بیاندازیم.

  • ریشه مرکل از هش کردن با هم هش های کودک در زیر آن و به سمت برگ ها گرفته شده است. همانطور که در تصویر بالا نشان داده شده است، به تنهایی یک هش است که بالای درخت مرکل را نشان می‌دهد و اغلب برای ذخیره هدرهای بلوک در محتوای بلاک چین بدون دانلود کل بلوک استفاده می‌شود.

  • در درخت مرکل، ما داریم شاخه های مرکل، گره های واسط بین ریشه مرکل و برگ مرکل. هر گره شاخه ای با هش کردن هش گره های فرزند خود ایجاد می شود. این شاخه‌ها اتصالات بین برگ‌ها (محلی که داده‌ها در آن قرار دارند) و ریشه مرکل را تشکیل می‌دهند، و اطمینان از اینکه درخت مرکل را می‌توان به طور موثر طی کرد و تأیید کرد، آسان‌تر می‌شود.

  • مرکل برگ می کند گره هایی در لایه پایین درخت مرکل هستند. آنها حاوی هش از داده های ذخیره شده واقعی هستند. برگ‌ها پایه درخت مرکل هستند، زیرا هش‌های آن‌ها با هم ترکیب می‌شوند و برای تولید هش‌های گره‌های بالای آن‌ها، در نهایت به ریشه مرکل منتهی می‌شوند.

علاوه بر این، ما داریم گره های داده، یک لایه نشان می دهد که چگونه داده ها برای شروع فرآیند قبل از هش شدن در لایه بعدی (برگ های مرکل)، که برگ های مرکل است، همانطور که در تصویر نشان داده شده است، ارائه می شود.

اثبات مرکل چیست؟

اثبات Merkle روشی است که برای تأیید وجود و یکپارچگی داده های خاص در یک مجموعه داده با استفاده از درخت Merkle استفاده می شود. این شامل یک بلوک داده واحد (برگ)، یک سری هش از درخت (شاخه ها) و ریشه Merkle است.

در حالی که از اثبات Merkle برای تأیید وجود داده های خاص در یک مجموعه داده با استفاده از درخت Merkle استفاده می شود، در اینجا برخی از مناطقی وجود دارد که می توان اثبات Merkle را در آنها اعمال کرد.

  • در یک سیستم توزیع شده برای تأیید داده ها

  • پروتکل های ارتباطی امن

  • راه حل ذخیره سازی داده ها

  • ارزهای دیجیتال و بلاک چین

پیاده سازی اثبات Merkle برای قرار دادن آدرس های ایمیل در لیست سفید

بیایید یک اثبات Merkle برای قرار دادن آدرس های ایمیل در لیست سفید در این بخش پیاده سازی کنیم.

پيش نياز

  • Node.js و مدیریت بسته آن NPM، نسخه 18. تأیید کنید Node.js با اجرای دستور ترمینال زیر نصب شده است: node -v && npm -v

  • درک اولیه جاوا اسکریپت

راه اندازی و نصب پروژه

به هر دایرکتوری دلخواه خود بروید و سپس دستورات زیر را برای ایجاد یک پوشه جدید و تغییر دایرکتوری به پوشه اجرا کنید:

mkdir merkle-proof-tutorial
cd merkle-proof-tutorial
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعد، شما باید نصب کنید merkletreejs و crypto-js کتابخانه‌هایی که برای ایجاد درخت Merkle و داده‌های هش با استفاده از دستور زیر مورد نیاز هستند:

npm i merkletreejs crypto-js
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک فایل جدید ایجاد کنید proof.js راحت نام آن را هر چه می خواهید بگذارید، اما برای این آموزش، نام آن را می گذارید proof.js.

واردات کتابخانه ها

شما با استفاده از merkletreejs و crypto-js کتابخانه ها در این مثال برای ایجاد درخت مرکل و هش داده ها به ترتیب.

حرکت به proof.js فایل و قطعه کد زیر را اضافه کنید:

const { MerkleTree } = require('merkletreejs')
const SHA256 = require('crypto-js/sha256')
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فهرستی از ایمیل‌ها برای قرار گرفتن در لیست سفید ایجاد کنید

برای قرار گرفتن در لیست سفید باید لیستی از ایمیل ها ایجاد کنید. در این مثال، شما سه ایمیل اضافه می‌کنید، اما بسته به داده‌هایی که می‌خواهید با آن‌ها آزمایش کنید، می‌تواند میلیون‌ها ایمیل باشد. قطعه کد زیر را برای ایجاد یک آرایه از سه آدرس ایمیل اضافه کنید:

//...

// List of email addresses to be whitelisted
const emails = ["example1@mail.com", "example2@mail.com", "example3@mail.com"];
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایمیل ها را به هش تبدیل کنید و درخت مرکل را بسازید

در مرحله بعد، باید هر ایمیل را به هش تبدیل کنید و درخت Merkle را با استفاده از ایمیل های هش شده با قطعه کد زیر ایجاد کنید:

//...

// Convert each email into a hash
const leaves = emails.map(email => SHA256(email));

// Create the Merkle Tree using the hashed emails
const tree = new MerkleTree(leaves, SHA256);

// Get the root and convert it to a hexadecimal string
const root = tree.getRoot().toString('hex');
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اضافه کردن تابع برای تأیید ایمیل های لیست سفید

در مرحله قبل یک درخت برای آدرس ها ایجاد کردید. در مرحله بعد، باید تابعی ایجاد کنید تا ثابت کنید ایمیل بخشی از ایمیل های لیست سفید است یا خیر.

یک تابع ایجاد کنید verifyEmail:

//...

// Function to verify if an email is whitelisted
const verifyEmail = (email) => {
  // Hash the email to be verified
  const hashedEmail = SHA256(email);

  // Get the proof for the hashed email from the tree
  const proof = tree.getProof(hashedEmail);

  // Verify the proof against the root of the tree; returns true if valid, false otherwise
  const verified = tree.verify(proof, hashedEmail, root);

  // Log the result to the console
  console.log(`${email} is ${verified ? "whitelisted" : "not whitelisted"}.`);
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در قطعه کد، تابعی ایجاد کردید که تأیید می‌کند ایمیلی در لیست سفید قرار دارد یا خیر. برای انجام این کار، شما:

  • ایمیل را هش کرد تا با استفاده از SHA256 تأیید شود

  • اثبات ایمیل هش شده را با استفاده از getProof روش

  • اثبات اثبات ریشه درخت

در اینجا کد کامل به نظر می رسد:

const { MerkleTree } = require("merkletreejs");
const SHA256 = require("crypto-js/sha256");

// List of email addresses to be whitelisted
const emails = ["example1@mail.com", "example2@mail.com", "example3@mail.com"];

// Convert each email into a hash
const leaves = emails.map((email) => SHA256(email));

// Create the Merkle Tree using the hashed emails
const tree = new MerkleTree(leaves, SHA256);

// Get the root and convert it to a hexadecimal string
const root = tree.getRoot().toString("hex");

// Function to verify if an email is whitelisted
const verifyEmail = (email) => {
  // Hash the email to be verified
  const hashedEmail = SHA256(email);

  // Get the proof for the hashed email from the tree
  const proof = tree.getProof(hashedEmail);

  // Verify the proof against the root of the tree; returns true if valid, false otherwise
  const verified = tree.verify(proof, hashedEmail, root);

  // Log the result to the console
  console.log(`${email} is ${verified ? "whitelisted" : "not whitelisted"}.`);
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

عملکرد تأیید را آزمایش کنید

در این بخش، عملکرد تأیید را با یک ایمیل در لیست سفید و غیر سفید آزمایش خواهید کرد.

با تماس با آدرس ایمیل در لیست سفید تست کنید verifyEmail عملکرد داخل فایل اسکریپت

//...

verifyEmail("example2@mail.com");  // Expected output: "example2@mail.com is whitelisted."
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای اجرای اسکریپت از دستور زیر استفاده کنید:

node proof.js
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه چاپ شده روی کنسول، پاسخی را مطابق شکل زیر نشان می‌دهد که نشان می‌دهد آدرس ایمیل در لیست سفید قرار گرفته است زیرا بخشی از ایمیل‌هایی است که ما به آرایه ایمیل اضافه کرده‌ایم.

در مرحله بعد، با ایمیلی که در لیست سفید نیست تست کنید.

//...

verifyEmail("x@mail.com"); 
// Expected output: "x@mail.com is not whitelisted."
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همانطور که در زیر نشان داده شده است، باید پاسخی ببینید که نشان می دهد ایمیل در لیست سفید قرار ندارد. این به این دلیل است که بخشی از ایمیل‌های لیست سفید نبود، به این معنی که هیچ مدرکی برای نشانی ایمیل وجود ندارد که نشان دهد بخشی از درخت است.

نتیجه

در این آموزش، شما در مورد اثبات های Merkle، نحوه استفاده از آنها برای اطمینان از یکپارچگی مجموعه داده ها در برنامه ها، نحوه ایجاد آنها با استفاده از درخت Merkle، و نحوه پیاده سازی اثبات های Merkle برای لیست سفید آدرس های ایمیل با استفاده از جاوا اسکریپت آشنا شدید.

منابع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا