אחסון מפתחות מאובטח ב-Secure Enclave עבור ארנק קריפטו ב-iOS

מפתחות פרטיים של ארנק קריפטו ב-iOS חשופים לסיכון אם המכשיר נפרץ או עבר jailbreak והם מאוחסנים ב-Keychain. אנחנו מפתחים אינטגרציה עם Secure Enclave — השבב המבודד של אפל, שבו המפתח נוצר וחותם על עסקאות מבלי לצאת מהסביבה המאובטחת. הצוות שלנו מספק פרויקט סוהר תוך התחשבות במגבלות P-256 ומבטיח הגנה אמינה עם תמיכה מתמשכת.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
אחסון מפתחות מאובטח ב-Secure Enclave עבור ארנק קריפטו ב-iOS
מורכב
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

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

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

אחסון מאובטח של מפתחות ב-Secure Enclave עבור ארנק קריפטו ב-iOS

בעיה אופיינית של ארנק קריפטו ב-iOS: המפתח הפרטי המאוחסן ב-Keychain עלול להיגנב אם המכשיר נפרץ או עבר Jailbreak. Secure Enclave (SE) הוא מעבד מבודד חומרתית בתוך שבב Apple SoC, המבטיח שהמפתח לעולם לא עוזב את השבב. אנו מציעים אינטגרציה עם SE להגנה מרבית. הניסיון שלנו משתרע על שנים בפיתוח iOS ובקריפטוגרפיה. אנו מיישמים הכל במפתחות מלאה: מתכנון ועד בדיקות על מכשירים פיזיים.

תיעוד רשמי של Apple: Secure Enclave הוא מודול אבטחה חומרתי המבודד מהמעבד הראשי.

כיצד Secure Enclave מגן על מפתחות פרטיים

SE יוצר ומאחסן מפתחות בתוך השבב שלו. פעולת החתימה מתבצעת בתוך SE; רק התוצאה מוחזרת החוצה. אפילו הקוד שלך אינו ניגש ישירות למפתח הפרטי. בשילוב עם kSecAttrAccessControl ודגל .biometryCurrentSet, המפתח מבוטל אוטומטית כאשר הביומטריה של המשתמש משתנה. משמעות הדבר היא שכאשר מתווספת טביעת אצבע חדשה או Face ID חדש, המפתח הישן הופך לבלתי נגיש — יש ליצור חדש. עבור ארנק קריפטו, התנהגות זו היא חובה.

מגבלות שכדאי לדעת לפני שמתחילים

Secure Enclave תומך רק ב-P-256 (secp256r1, הידוע גם כ-NIST P-256). הוא אינו תומך ב-secp256k1, המשמש את ביטקוין ואת'ריום. לכן, SE אינו מתאים לאחסון ישיר של מפתחות פרטיים של ETH/BTC. שימוש אופייני לארנק קריפטו הוא אחסון ב-SE של מפתח ההצפנה שמצפין את המפתח הפרטי secp256k1 ב-Keychain. לחלופין, ניתן להשתמש ב-SE להגנה ביומטרית על רשומת ה-Keychain באמצעות SecAccessControlCreateWithFlags.

אם האפליקציה שלך עובדת עם בלוקצ'יין המשתמש ב-P-256 (לדוגמה, כמה רשתות ארגוניות או פרוטוקול NEAR באמצעות ed25519), ניתן להשתמש ב-SE לאחסון וחתימה ישירים.

מדוע SE אינו מתאים לביטקוין ואת'ריום

ביטקוין ואת'ריום משתמשים באלגוריתם secp256k1, ש-SE אינו תומך בו. הפתרון הוא סכמת הצפנה: צור מפתח P-256 זמני ב-SE, צור מפתח secp256k1 בזיכרון, הצפן אותו עם המפתח הציבורי של SE באמצעות ECIES, ואחסן את הבלוב המוצפן ב-Keychain. בעת חתימה, פענח באמצעות SE (עם ביומטריה), השתמש במפתח secp256k1 לחתימה, ואפס את הזיכרון מיד. זה בטוח יותר מאשר Keychain רגיל, מכיוון שהמפתח לעולם לא מאוחסן בדיסק בצורה ברורה.

השוואת שיטות אחסון

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

Secure Enclave בטוח בסדרי גודל מאשר אחסון תוכנתי: המפתח מבודד פיזית, מה שמונע גניבה באמצעות ניתוח זיכרון או פריקת דיסק. גם אם המכשיר נפרץ, תוקף אינו יכול לחלץ את המפתח הפרטי ללא אימות ביומטרי.

יישום חתימה ואחסון

יצירת מפתח ב-Secure Enclave

let accessControl = SecAccessControlCreateWithFlags(
    nil,
    kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
    [.privateKeyUsage, .biometryCurrentSet],
    nil
)!
let attributes: [String: Any] = [
    kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom,
    kSecAttrKeySizeInBits as String: 256,
    kSecAttrTokenID as String: kSecAttrTokenIDSecureEnclave,
    kSecPrivateKeyAttrs as String: [
        kSecAttrIsPermanent as String: true,
        kSecAttrApplicationLabel as String: "wallet-signing-key-v1",
        kSecAttrAccessControl as String: accessControl
    ]
]
var error: Unmanaged<CFError>?
guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else {
    throw error!.takeRetainedValue()
}

let accessControl = SecAccessControlCreateWithFlags( nil, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, [.privateKeyUsage, .biometryCurrentSet], nil )! let attributes: [String: Any] = [ kSecAttrKeyType as String: kSecAttrKeyTypeECSECPrimeRandom, kSecAttrKeySizeInBits as String: 256, kSecAttrTokenID as String: kSecAttrTokenIDSecureEnclave, kSecPrivateKeyAttrs as String: [ kSecAttrIsPermanent as String: true, kSecAttrApplicationLabel as String: "wallet-signing-key-v1", kSecAttrAccessControl as String: accessControl ] ] var error: Unmanaged<CFError>? guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else { throw error!.takeRetainedValue() } היא ההוראה ליצירת מפתח ב-SE. kSecAttrTokenIDSecureEnclave מבטל את המפתח כאשר הביומטריה משתנה (טביעת אצבע חדשה או Face ID נוסף). עבור ארנק, התנהגות זו נכונה — נדרש אימות מחדש מפורש.

חתימת נתונים עם מפתח SE

let publicKey = SecKeyCopyPublicKey(privateKey)!
let algorithm: SecKeyAlgorithm = .ecdsaSignatureMessageX962SHA256
guard SecKeyIsAlgorithmSupported(privateKey, .sign, algorithm) else {
    throw WalletError.algorithmNotSupported
}
var signError: Unmanaged<CFError>?
guard let signature = SecKeyCreateSignature(
    privateKey,
    algorithm,
    dataToSign as CFData,
    &signError
) else {
    throw signError!.takeRetainedValue()
}

החתימה היא אסינכרונית מנקודת מבט של ממשק המשתמש — בזמן ש-SE מעבד את הבקשה (ואם יש צורך בביומטריה, בזמן שהמשתמש מאמת), הת'רד הראשי אינו חסום. יש למקם את כל הקריאה בתוך biometryCurrentSet או תור dispatch.

מה כלול בעבודה

  • ביקורת על סכמת אחסון המפתחות הנוכחית ואיומים.
  • תכנון הסכמה עם Secure Enclave (ישירה או עם הצפנה).
  • יישום ב-Swift 5.9+ באמצעות Swift Concurrency.
  • אינטגרציה עם ביומטריה (Face ID / Touch ID) באמצעות let publicKey = SecKeyCopyPublicKey(privateKey)! let algorithm: SecKeyAlgorithm = .ecdsaSignatureMessageX962SHA256 guard SecKeyIsAlgorithmSupported(privateKey, .sign, algorithm) else { throw WalletError.algorithmNotSupported } var signError: Unmanaged<CFError>? guard let signature = SecKeyCreateSignature( privateKey, algorithm, dataToSign as CFData, &signError ) else { throw signError!.takeRetainedValue() } .
  • בדיקות על מכשירים פיזיים (כל דגמי היעד).
  • תיעוד לתפעול והעברת מפתחות.
  • הדרכת צוות התמיכה והפיתוח.

תהליך העבודה

שלב משך תוצאה
ביקורת דרישות יום אחד קביעת הצורך ב-P-256 או סכמת הצפנה
תכנון 1-2 ימים ארכיטקטורה, אב טיפוס על מכשיר פיזי
יישום 3-7 ימים קוד Swift עם async/await, אינטגרציה ביומטרית
בדיקות 2-3 ימים תרחישים: שינוי ביומטריה, התקנה מחדש, גיבוי
תיעוד ומסירה יום אחד תיעוד, הדרכת צוות

כמה זמן לוקחת אינטגרציית SE?

לוחות הזמנים נעים בין 3 ל-14 ימים, תלוי במורכבות הסכמה. הסימולטור מספיק לרוב הפיתוח, אך בדיקות סופיות חייבות להתבצע על מכשיר.

צור קשר לייעוץ והערכת הפרויקט שלך — ננתח את הסכמה הנוכחית שלך ללא עלות ונציע את הפתרון האופטימלי. קבל הגנה אמינה לארנק הקריפטו שלך היום!