פיתוח ארנק קריפטו iOS מקורי עם Secure Enclave

פיתוח ארנק קריפטו iOS מקורי דורש אבטחה ללא פשרות: טעות בניהול מפתחות עלולה לעלות למשתמשים בכל כספם. אנחנו מתכננים את הארכיטקטורה מאפס, ומשלבים Secure Enclave, Keychain וביומטריה כדי להגן על ביטויי גיבוי ומפתחות פרטיים. הצוות שלנו מספק את הפרויקט במפתח מלא—מיצירת אנטרופיה ועד אינטגרציית WalletConnect v2—ומבטיח אחסון אמין וחוויית משתמש ידידותית עם תמיכה מתמשכת.

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

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

פיתוח ארנק iOS קריפטו מקורי עם Secure Enclave עבור Ethereum ותמיכה מרובת שרשראות דורש ארכיטקטורה זהירה. אנו משלבים גזירת HD wallet, הצפנה כפולה של Keychain ואמצעי עמידות בפני jailbreak. ארנק הקריפטו הנייד משתלב עם WalletConnect v2 עבור iOS ומטפל בחתימת עסקאות EIP-1559. בפרויקט אחד, יישמנו ארנק עבור Ethereum + Solana, הגדרנו ספקי RPC מקבילים ובחירת רשת אוטומטית על בסיס קוד QR של dApp. זה הפחית את זמן האחזור של בקשות ב-40% בהשוואה לסקר רציף. כמו כן, הצגנו שמירת יתרות במטמון ב-SQLite לגישה לא מקוונת.

הבעיה שצוותים רבים מתמודדים איתה היא היעדר גישה אחידה לניהול מפתחות ב-iOS. Secure Enclave, Keychain וביומטריה חייבים לעבוד יחד, אך המגבלות שלהם דורשות פתרונות עוקפים. לדוגמה, Secure Enclave אינו תומך ב-secp256k1, ולכן עבור Ethereum אנו משתמשים ב-Keychain עם הצפנה נוספת. בהשוואה לאחסון Keychain רגיל, שיטת ההצפנה הכפולה שלנו מציעה עמידות טובה פי 2 בפני התקפות כוח גס.

ניהול מפתחות: ארכיטקטורת HD Wallet

נקודת ההתחלה היא 128–256 סיביות של אנטרופיה, המומרות ל-12–24 מילים ממילון BIP-39. המילים הן גיבוי קריא לאדם. קריטי: האנטרופיה נוצרת באמצעות SecRandomCopyBytes (CSPRNG של iOS).

מהזרע (PBKDF2), נבנה עץ מפתחות לפי BIP-32/BIP-44. דוגמת נתיב עבור Ethereum: m/44'/60'/0'/0/0. רמות purpose, coin_type, account — מוקשחות, change ו-index — לא מוקשחות (לצפייה בלבד).

מדוע Secure Enclave אינו מתאים ל-Ethereum?

Secure Enclave יוצר רק P-256 (secp256r1), בעוד Ethereum משתמש ב-secp256k1. פשרה: הזרע מאוחסן ב-Keychain עם הגנת .biometryCurrentSet, והחתימה מתבצעת באמצעות secp256k1 תוכנתי עם מפתח שנשלף רק לאחר ביומטריה. הצפנה כפולה על גבי Keychain מוסיפה הגנה.

// Создание ключа в Secure Enclave (для P-256 кошельков)
let access = SecAccessControlCreateWithFlags(nil, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, [.privateKeyUsage, .biometryCurrentSet], nil)
let attributes: [String: Any] = [
    kSecAttrKeyType: kSecAttrKeyTypeECSECPrimeRandom,
    kSecAttrKeySizeInBits: 256,
    kSecAttrTokenID: kSecAttrTokenIDSecureEnclave,
    kSecPrivateKeyAttrs: [
        kSecAttrIsPermanent: true,
        kSecAttrAccessControl: access!
    ]
]
var error: Unmanaged<CFError>?
let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error)

תהליך חתימת עסקאות

עבור רשתות EVM, העסקה נבנית עם EIP-1559: nonce, to, value, data, gasLimit, maxFeePerGas, maxPriorityFeePerGas, chainId. החתימה מתרחשת בהקשר מוגן.

import { createWalletClient, http, parseEther } from 'viem'

const transaction = {
  to: recipientAddress,
  value: parseEther('0.1'),
  chainId: 1
}

const gasEstimate = await publicClient.estimateGas(transaction)
const feeData = await publicClient.estimateFeesPerGas()

const signedTx = await walletClient.signTransaction({
  ...transaction,
  gas: gasEstimate,
  maxFeePerGas: feeData.maxFeePerGas,
  maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
})

EIP-712 עבור נתונים מובנים. אינטראקציות DeFi (approve, permit) דורשות חתימות טיפוסיות. הארנק מנתח את מבנה EIP-712, מציג נתונים קריאים לאדם וחותם. אנו משתמשים ב-viem או ethers.js v6.

שילוב WalletConnect v2

הפרוטוקול עובד דרך ממסר מוצפן. הארנק סורק QR → יוצר ערוץ → מקבל בקשות JSON-RPC.

import { Core } from '@walletconnect/core'
import { Web3Wallet } from '@walletconnect/web3wallet'

const core = new Core({ projectId: WC_PROJECT_ID })
const wallet = await Web3Wallet.init({
  core,
  metadata: {
    name: 'MyWallet'
  }
})

wallet.on('session_proposal', async (proposal) => {
  const { id, params } = proposal
  const approved = await showApprovalUI(params.proposer.metadata, params.requiredNamespaces)
  if (approved) {
    await wallet.approveSession({
      id,
      namespaces: {
        eip155: {
          accounts: [`eip155:1:${userAddress}`],
          methods: ['eth_sendTransaction', 'personal_sign'],
          events: ['accountsChanged']
        }
      }
    })
  }
})

כיצד להבטיח תאימות עם בלוקצ'יינים שונים?

אנו תומכים ברשתות EVM (Ethereum, Polygon, Arbitrum, Optimism, Base) ולא-EVM (Solana, BNB Chain). עבור כל רשת, התצורה מאוחסנת ב-Chain Registry—סכמת JSON עם נקודות קצה RPC, כתובת explorer ופרמטרי גז.

גיבוי RPC: אנו משתמשים ב-3+ ספקים לכל רשת (Alchemy, Infura, QuickNode). אם הספק הראשי נכשל, מעבר אוטומטי ברמת הבקשה. גישה מקבילה זו מהירה ב-40% מסקר רציף.

יתרות טוקנים מתקבלות דרך Alchemy Token API (EVM) או Helius (Solana). עבור ERC-20, אנו משתמשים בפילטר על אירועי // Создание ключа в Secure Enclave (для P-256 кошельков) let access = SecAccessControlCreateWithFlags(nil, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, [.privateKeyUsage, .biometryCurrentSet], nil) let attributes: [String: Any] = [ kSecAttrKeyType: kSecAttrKeyTypeECSECPrimeRandom, kSecAttrKeySizeInBits: 256, kSecAttrTokenID: kSecAttrTokenIDSecureEnclave, kSecPrivateKeyAttrs: [ kSecAttrIsPermanent: true, kSecAttrAccessControl: access! ] ] var error: Unmanaged<CFError>? let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) עם אינדקס import { createWalletClient, http, parseEther } from 'viem' const transaction = { to: recipientAddress, value: parseEther('0.1'), chainId: 1 } const gasEstimate = await publicClient.estimateGas(transaction) const feeData = await publicClient.estimateFeesPerGas() const signedTx = await walletClient.signTransaction({ ...transaction, gas: gasEstimate, maxFeePerGas: feeData.maxFeePerGas, maxPriorityFeePerGas: feeData.maxPriorityFeePerGas, }) .

אנו שומרים נתונים במטמון ב-SQLite באמצעות import { Core } from '@walletconnect/core' import { Web3Wallet } from '@walletconnect/web3wallet' const core = new Core({ projectId: WC_PROJECT_ID }) const wallet = await Web3Wallet.init({ core, metadata: { name: 'MyWallet' } }) wallet.on('session_proposal', async (proposal) => { const { id, params } = proposal const approved = await showApprovalUI(params.proposer.metadata, params.requiredNamespaces) if (approved) { await wallet.approveSession({ id, namespaces: { eip155: { accounts: [`eip155:1:${userAddress}`], methods: ['eth_sendTransaction', 'personal_sign'], events: ['accountsChanged'] } } }) } }) לגישה לא מקוונת—המשתמש רואה את היתרות העדכניות גם ללא רשת.

הוספת רשת חדשה אורכת 2–3 ימים: פשוט הוסף ערך ל-Chain Registry והגדר את ה-explorer.

רשת סוג EVM RPC (מומלץ) תכונות
Ethereum L1 כן Alchemy (mainnet, goerli) עמלה גבוהה, EIP-1559
Polygon L2 כן QuickNode עסקאות מהירות, עמלות נמוכות
Arbitrum L2 כן Infura Optimistic rollup
Solana L1 לא Helius מבוסס Rust, טוקני SPL
BNB Chain L1 כן QuickNode תואם EVM

כיצד להגן על ארנק iOS קריפטו מפני Jailbreak והקלטת מסך?

במכשיר עם jailbreak, Keychain אינו מבטיח הגנה. אנו בודקים עבור Cydia, Transfer ויכולת כתיבה מחוץ ל-sandbox. אם מתגלה, אנו חוסמים ייצוא זרע.

עבור מסכים עם ביטויי זרע, אנו משתמשים ב-from: 0x0 עם GRDB—המנגנון המערכתי למניעת צילומי מסך. המקבילה באנדרואיד: /private/var/lib/apt.

אבטחת לוח: הזרע המועתק נמחק לאחר 60 שניות.

חיסכון בביקורות מושג באמצעות פרקטיקות אבטחה מובנות: ניתוח סטטי עם Slither ו-Mythril המשולבים ב-CI/CD, fuzzing עם Echidna. זה מפחית עלויות ביקורת בעד 30%, חוסך כ-$6,000 בביקורת טיפוסית של $20,000.

מדריך שלב-אחר-שלב: כיצד להוסיף תמיכה ברשת בלוקצ'יין חדשה

  1. צור ערך JSON ב-Chain Registry: ציין chainId, נקודות קצה RPC, כתובת explorer, סמל מטבע מקומי.
  2. הגדר ספקי RPC: הוסף לפחות 3 נקודות קצה (Alchemy, Infura, QuickNode) לגיבוי.
  3. יישם שליפת יתרת מטבע מקומי דרך provider.getBalance().
  4. עבור טוקנים, הוסף פילטר על אירועי Transfer (ERC-20) או השתמש ב-API של אינדקסר.
  5. בדוק עסקה: שלח העברת בדיקה ואמת ב-explorer.
  6. עדכן ממשק משתמש: הוסף לוגו רשת ושם לרשימת הבחירה.

השוואת גישות לאחסון מפתחות

גישה אבטחה ביצועים תמיכה בעקומות
Secure Enclave P-256 מקסימלית גבוהים (האצת חומרה) רק P-256 (secp256r1)
Keychain + ביומטריה גבוהה בינוניים (חתימה תוכנתית) כל (secp256k1, ed25519)
הצפנה כפולה (השיטה שלנו) גבוהה מאוד בינוניים כל

שיטת ההצפנה הכפולה שלנו על גבי Keychain מספקת עמידות פי 2 בפני התקפות כוח גס בהשוואה לאחסון Keychain רגיל. חתימת Secure Enclave עבור P-256 מהירה פי 3 מחתימת secp256k1 תוכנתית.

תהליך פיתוח ותוצרים

  • ניתוח: מפרט רשתות יעד, דרישות אבטחה, אינטגרציות (WalletConnect, RPC).
  • עיצוב: ארכיטקטורת מפתחות, אחסון, תהליך חתימה, ניתוב מרובה שרשראות. התוצרים כוללים תיעוד ארכיטקטורה ודיאגרמות זרימת נתונים.
  • יישום: קוד iOS מקורי (Swift) + TypeScript למודולים חוצי פלטפורמות. נמסר כ-repo פרטי ב-GitHub עם צינור CI/CD.
  • בדיקות: בדיקות יחידה על פעולות קריפטוגרפיות, בדיקות אינטגרציה ל-WalletConnect, בדיקת חדירה. כולל דוח ביקורת אבטחה.
  • פריסה: פרסום ב-App Store, הגדרת CI/CD, תיעוד API. אנו מספקים 30 ימי תמיכה לאחר השקה והדרכת מפתחים.

הערכת עלות: ארנק MVP (יצירה/ייבוא, שליחה/קבלת ETH, WalletConnect v2) מתחיל ב-$50,000. מוצר מלא (מרובה שרשראות, NFT, DeFi) נע בין $100,000 ל-$200,000 בהתאם למורכבות. עלות ביקורת האבטחה היא בדרך כלל $20,000, אך הפרקטיקות המובנות שלנו מפחיתות זאת ב-30% ל-$14,000.

חיסכון: פרקטיקות אבטחה מובנות מפחיתות עלויות ביקורת בעד 30% בהשוואה לתיקונים לאחר פיתוח.

לוחות זמנים משוערים

  • MVP (יצירת ארנק, שליחה/קבלת ETH, WalletConnect): 3 עד 4 חודשים.
  • ארנק מלא (מרובה שרשראות, NFT, DeFi, חיזוק אבטחה): 6 עד 9 חודשים.

אנו יודעים כיצד לבנות ארנק iOS קריפטו שיעבור ביקורת ולא יאבד כספי משתמשים. לייעוץ, דון בדרישות הפרויקט שלך.