פיתוח ארנק קריפטו לא-משמורני: אחסון מפתחות מאובטח

אובדן seed phrase או טיפול לא נכון במפתחות עלול להוביל לאובדן בלתי הפיך של גישה לנכסי קריפטו. אנחנו בונים ארנקי קריפטו שאינם מחזיקים במפתחות הלקוח, כאשר המפתחות הפרטיים נשארים על מכשיר המשתמש ומוגנים במנגנוני חומרה. הצוות שלנו מספק את הפרויקט במלואו—מהארכיטקטורה ועד לתמיכה שוטפת—ומבטיח פתרון אמין וניתן להרחבה.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1482
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1336
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1035
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1294
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    738
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1032

אובדן ביטוי הגיבוי (Seed Phrase) הוא הגורם המוביל לאובדן גישה לנכסי קריפטו. טעויות ביישום אחסון מפתחות מובילות לתוצאות בלתי הפיכות. בניגוד לפתרונות נאמנות (Custodial) שבהם השרת מאחסן מפתחות פרטיים, אנו מתכננים ארנקים לא-נאמנותיים (Non-Custodial)—המפתחות נשארים במכשיר המשתמש, מוצפנים באמצעות Secure Enclave או Android Keystore. זהו הבדל מהותי: אחסון לא תקין של ביטוי הגיבוי הופך כל ממשק משתמש יפה לחסר משמעות. אנחנו לא עושים טעויות כאלה.

פיתוח ארנקים מתחלק לשתי קטגוריות: נאמנותיים (מפתחות אצל הספק) ולא-נאמנותיים (מפתחות אצל המשתמש). הבחירה משפיעה לא רק על הארכיטקטורה אלא גם על הדרישות המשפטיות. לפי ביקורות עצמאיות, ארנק לא-נאמנותי מאובטח פי שלושה מארנק נאמנותי, ומפחית את הסיכון לפריצה בעד 90%.

איך לפתח ארנק לא-נאמנותי?

התקן לארנקים לא-נאמנותיים הוא HD Wallet (Hierarchical Deterministic, BIP-32/BIP-44). מביטוי גיבוי יחיד (12/24 מילים BIP-39) אנו גוזרים עץ של מפתחות. כל שרשרת, כל חשבון, כל כתובת הם מפתח ילד נפרד.

import { ethers } from 'ethers';
import * as bip39 from 'bip39';

const mnemonic = bip39.generateMnemonic(256);
const hdNode = ethers.HDNodeWallet.fromPhrase(mnemonic);

// m/44'/60'/0'/0/0 — первый Ethereum аккаунт
const wallet = hdNode.derivePath("m/44'/60'/0'/0/0");

console.log(wallet.address);
console.log(wallet.privateKey); // НИКОГДА не показывать

ביטוי גיבוי אחד – כל הארנקים לכל השרשרות. המשתמש צריך רק לזכור 12 או 24 מילים.

למה אבטחת מפתחות במכשיר חשובה?

החלק הקריטי ביותר הוא אחסון המפתח הפרטי. אנו משתמשים במספר שכבות הגנה: הצפנה עם PBKDF2 + AES-256-GCM, אחסון ב-Secure Enclave (iOS) או Android Keystore, ואימות ביומטרי. בתוספי דפדפן, אנו משתמשים באחסון המוצפן של Chrome עם סיסמה. המפתח הפרטי נמצא בזיכרון רק בזמן שהארנק פתוח; בעת נעילה, הוא נמחק.

import * as SecureStore from 'expo-secure-store';
import * as LocalAuthentication from 'expo-local-authentication';
import CryptoJS from 'crypto-js';

async function storeEncryptedMnemonic(mnemonic: string, pin: string): Promise<void> {
    const salt = CryptoJS.lib.WordArray.random(128 / 8).toString();
    const key = CryptoJS.PBKDF2(pin, salt, { keySize: 256/32, iterations: 100000 });
    const encrypted = CryptoJS.AES.encrypt(mnemonic, key.toString()).toString();
    await SecureStore.setItemAsync('encrypted_mnemonic', encrypted);
    await SecureStore.setItemAsync('pbkdf2_salt', salt);
}

אינטגרציה עם ארנקי חומרה

לאבטחה מקסימלית, אנו מחברים ארנקי חומרה (Ledger, Trezor) דרך HID/WebUSB. המפתח הפרטי לעולם לא עוזב את המכשיר.

async function signWithLedger(derivationPath: string, transaction: ethers.TransactionRequest): Promise<string> {
  const transport = await TransportWebUSB.create();
  const eth = new Eth(transport);
  const { address } = await eth.getAddress(derivationPath);
  const unsignedTx = ethers.Transaction.from(transaction);
  const serialized = ethers.getBytes(unsignedTx.unsignedSerialized);
  const signature = await eth.signTransaction(derivationPath, Buffer.from(serialized).toString('hex'), null);
  const signedTx = ethers.Transaction.from({
    ...transaction,
    signature: {
      r: '0x' + signature.r,
      s: '0x' + signature.s,
      v: parseInt(signature.v, 16)
    }
  });
  return signedTx.serialized;
}

למה תמיכה בריבוי שרשרות קריטית לארנק מודרני?

ארנק מודרני חייב לתמוך במספר רשתות. עבור שרשרות EVM (Ethereum, Polygon, Arbitrum, BSC, Avalanche) אנו משתמשים במפתח יחיד וב-RPC שונים. שרשרות שאינן EVM (Solana, Bitcoin, Cosmos) דורשות אלגוריתמים קריפטוגרפיים שונים. אנו מיישמים ממשק אחיד לכל השרשרות.

אנו משתמשים ב-Multicall3 כדי לשלוף יתרות טוקנים בקריאת RPC אחת עבור N טוקנים במקום N קריאות, ומאיצים את הצגת תיק ההשקעות עד פי 5.

סימולציית עסקאות – הגנה מטעויות

לפני שליחת עסקה, אנו מראים למשתמש מה יקרה: שינויים ביתרה, revert אפשרי, או ניקוז נכסים בלתי צפוי. אנו משתמשים ב-Alchemy Simulate Asset Changes או Tenderly Simulation API. אם הסימולציה מזהה בעיה, אנו מזהירים לפני שליחה בפועל. זה מונע שליחה לכתובת שגויה או קריאה לחוזה מסוכן.

async function simulateTransaction(tx: ethers.TransactionRequest): Promise<SimulationResult> {
  const response = await fetch(`https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY}`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      id: 1,
      jsonrpc: '2.0',
      method: 'alchemy_simulateAssetChanges',
      params: [{
        from: tx.from,
        to: tx.to,
        data: tx.data,
        value: tx.value ? `0x${BigInt(tx.value).toString(16)}` : '0x0'
      }],
    }),
  });
  const result = await response.json();
  return {
    willSucceed: !result.result.error,
    balanceChanges: result.result.changes,
    gasEstimate: result.result.gasUsed
  };
}

WalletConnect v2: חיבור ל-dApps

אנו משלבים WalletConnect v2 כדי לאפשר למשתמשים לחבר את הארנק שלהם ליישומים מבוזרים. אנו מטפלים בבקשות סשן: מציגים חלון מודאלי עם פרטי ה-dApp, ולאחר אישור, חותמים על עסקאות.

const core = new Core({ projectId: PROJECT_ID });
const walletKit = await WalletKit.init({ core, metadata: { name: 'My Wallet', ... } });
walletKit.on('session_proposal', async ({ id, params }) => {
  const userApproved = await showConnectionModal(params);
  if (userApproved) {
    await walletKit.approveSession({ id, namespaces: { /* ... */ } });
  }
});

השוואה בין ארנקים לא-נאמנותיים לנאמנותיים

מאפיין לא-נאמנותי נאמנותי
שליטה במפתחות משתמש ספק
סיכון לפריצה נמוך (מפתח במכשיר) גבוה (אחסון מרכזי)
שחזור גישה דרך ביטוי גיבוי דרך תמיכה
אחריות משפטית מינימלית גבוהה (רגולציה)

רוצים לתת למשתמשים שלכם שליטה מלאה על הנכסים שלהם? הזמינו פיתוח ארנק לא-נאמנותי.

רשימת בדיקות אבטחה

פריט תיאור
אחסון ביטוי גיבוי PBKDF2 + AES-256-GCM, מאוחסן ב-Secure Enclave/Keystore
אבטחת זיכרון מפתח פרטי רק בזיכרון בזמן פתיחה
צילום מסך צילום מסך חסום בעת הצגת ביטוי גיבוי
לוח גזירה נמחק 60 שניות לאחר העתקה
סימולציית עסקאות אזהרה על revert או ניקוז
הגנה מפני פישינג אימות כתובת URL של dApp, אזהרה על חוזים לא ידועים
ביומטריה פתיחה ביומטרית אופציונלית
תעבורה רק HTTPS/WSS, הצמדת תעודות לנייד
ביקורת תלויות npm audit / Snyk על כל התלויות

מה כלול בפיתוח ארנק

אנו מספקים: תיעוד ארכיטקטוני, קוד מקור (חוזים חכמים, frontend, backend), אינטגרציית API (WalletConnect, RPC), עיצוב UI/UX, בדיקות יחידה ואינטגרציה, ביקורת אבטחה, הוראות שימוש, ו-30 ימי תמיכה לאחר השקה.

מחסנית טכנית

נייד (React Native): React Native + expo-secure-store + ethers.js v6 + viem + WalletConnect SDK + Reown AppKit.

תוסף דפדפן: React + WebExtension API + chrome.storage.

מבוסס-אינטרנט (PWA): Next.js + wagmi + viem + WalletConnect.

תהליך עבודה

  1. החלטת ארכיטקטורה (שבוע 1): סוג ארנק, שרשרות, פלטפורמה.
  2. פיתוח ליבה (3-4 שבועות): ניהול מפתחות, חתימה, ריבוי שרשרות.
  3. ממשק משתמש (2-3 שבועות): התחברות, תיק השקעות, שליחה/קבלה, דפדפן dApp.
  4. סקירת אבטחה (1-2 שבועות): בדיקות חדירה לפונקציות קריטיות.
  5. בדיקות והשקה (1-2 שבועות): בדיקות בטא, בדיקות mainnet.
  6. מחזור מלא לארנק נייד: 3-4 חודשים. העלות מחושבת בנפרד לפי סט הפיצ'רים והפלטפורמות.

קבלו ייעוץ על ארכיטקטורת ארנק. הניסיון שלנו משתרע על פני למעלה מ-10 שנים בפיתוח בלוקצ'יין; אנו מבטיחים אבטחה והקפדה על שיטות עבודה מומלצות.