אינטליגנציה של נתונים גנרטיביים

כיצד ארנק Kraken מתמודד עם אתגרים באבטחת קריפטו ניידת

תאריך:

אנו מאמינים כי ארנק הקריפטו הנייד המאובטח ביותר הוא כזה שמתגבר על האילוצים המובנים של מערכת ההפעלה הניידת שלו. לדוגמה, ב-iOS, CryptoKit של אפל אינו תומך ב- secp256k1 עקומה אליפטית, תקן לביטקוין, Ethereum ורבים אחרים של בלוקצ'יין.

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

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

Despite the inability to perform the signing on the secure elements directly, which would offer increased protection, we have committed to providing an open-source mobile crypto wallet that prioritizes security, transparency and user control.

ארכיטקטורת האבטחה שלנו מיועדת ל:

  • תמיכה במספר בלוקצ'יין
  • צור מפתחות פרטיים עם אנטרופיה גבוהה, מדד של חוסר חיזוי שמחזק את האבטחה
  • מנף קריפטוגרפיה שנבדקה קרב כדי להצפין בצורה מאובטחת את המפתחות הפרטיים של המשתמשים, תוך ניצול חומרת האבטחה של טלפונים ניידים ותכונות האבטחה של מערכת ההפעלה
  • הצע אבטחה משופרת עם סיסמה שנוצרת על ידי משתמש עבור משתמשים מתקדמים המעוניינים ברמת הצפנה נוספת (בנוסף להגנת מחזיק מפתחות מערכת ההפעלה עבור מפתח הפענוח)
  • צור בסיס איתן לשילוב עתידי של סוגי ניהול מפתח חדשים, כגון ארנקי חומרה ומערכות מבוססות מניין MPC

היתרון בקוד פתוח

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

ללא קוד קוד פתוח, ארנק Kraken ידרוש כמות גדולה של אמון ללא שקיפות. זה ייתן ללקוחות פחות הגנה; לא יכולת לאמת, לשנות או להפעיל את הלקוח בעצמך אם תרצה בכך. "אל תאמין, תוודא!" זה לא רק עיקרון בתעשייה, זה אחד מהעקרונות המנחים שלנו.

מקורות פתוחים התוכנה שלנו ממלאת שתי מטרות בסיסיות שהצבנו בהתחלה עבור מוצר זה: מזעור אמון שניתן לאימות וניתן לביקורת:

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

יצירת מפתחות וייבוא ​​מפתחות

ל-React Native, אמנם כלי רב עוצמה, אין מודול קריפטו מובנה. כדי לנווט סביב זה השתמשנו ביישום pure-js (crypto-browserify) של מודול ההצפנה של NodeJS. שיטת crypto.randomBytes() - אשר יוצרת את הבתים האקראיים בפועל שאנו דורשים במהלך יצירת המפתח - מטופלת על ידי להגיב-ילידים-קבל-ערכים-אקראיים polyfill.

React-native-get-random-values ​​משתמש בקוד מקורי כדי להשתמש ב-Cryptography Secure Pseudorandom Number Generator (CSPRNG) הזמין במכשיר כדי ליצור מספרים אקראיים. כמעט בכל המכשירים המודרניים, מחולל המספרים האקראיים הזה מגובה על ידי מחולל מספרים אקראיים מאובטח בחומרה.

במהלך אתחול הארנק, אנו שואבים אנטרופיה מה-CSPRNG וממירים אותה לזרע מנמוני באמצעות חבילות npm מבוססות היטב (BIP32, BIP39).

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

ניהול מפתח 

ארנק Kraken מחזיק בשני ערכים סודיים - ה-Seed וה-Mnemonic - ומספר רב של ערכים לא סודיים (אך עדיין פרטיים) כגון כתובות ארנק, שמות ארנק ותיאורים של עסקאות.

חומר מפתח פרטי (זרע/מנמוני) מאוחסן במחזיק מפתחות (ב-iOS) וב-Keystore (באנדרואיד). חומר מפתח ציבורי ונתונים לא רגישים (מפתחות ציבוריים מורחבים, כתובות ותיאורים) מאוחסנים במסד הנתונים המוצפן של האפליקציה (באמצעות תְחוּם).

ישנם מספר בקרות אבטחה המגנות על הנתונים:

  • נעילת אפליקציה: מחרוזת של 64 בתים שנוצרה באופן אקראי המאוחסנת במחזיק מפתחות או בחנות מפתחות. הגישה לסוד מוגנת באמצעות דרישות נוכחות משתמש - אימות ביומטרי או קוד סיסמה.
  • סיסמה: מסופק על ידי המשתמש ולא נשמר במכשיר. במקום זאת, המשתמש חייב לספק את הסיסמה באופן ידני בכל פעם שמתבקש על ידי האפליקציה. הארנק קובע אם הסיסמה נחוצה על ידי עיון בשני דגלים (is_storage_encrypted and is_seed_encrypted) המאוחסנים ב-Keychain או Keystore. האלגוריתם Argon2 משמש כפונקציית גזירת מפתח.
  • הצפנת מסד נתונים: מסד הנתונים (Realm) משמש לאחסון נתונים לא סודיים. הנתונים מוצפנים עם מפתח אקראי של 64 בתים.
  • מנגנון נעילה: הזנת סיסמה שגויה מפעילה עיכובים לפני שניתן לבצע ניסיונות סיסמה עוקבים. מנגנון זה מרתיע למעשה התקפות סיסמאות בכוח גס. מידע לגבי פרמטרי נעילה, כגון מספר הניסיונות ומשך העיכובים, נשמר בצורה מאובטחת במחזיק מפתחות או בחנות המפתחות.

ה-Seed, המנמוניק ומפתח ההצפנה של מסד הנתונים מאוחסנים תמיד בצורה מוצפנת

  • כאשר לא מופעלות הגנות: מפתח ההצפנה ה-Seed, Mnemonic ו-Realm מאוחסנים ישירות במחזיק מפתחות או ב-Keystore ללא בקרת גישה של נוכחות משתמש.
  • כאשר נעילת האפליקציה מופעלת: המנמוניק והזרע מוצפנים תחילה בסוד נעילת האפליקציה ולאחר מכן מאוחסנים בצורה מאובטחת במחזיק מפתחות או בחנות המפתחות. מפתח ההצפנה של Realm מאוחסן ישירות במחזיק המפתחות או במאגר המפתחות.
  • כאשר הגנת סיסמה מופעלת: ה-Mnemonic וה-seed מוצפנים עם הסיסמה, בעוד שמפתח ההצפנה של Realm מוצפן עם הסיסמה רק אם is_storage_encrypted הוגדר כ-true.
  • כאשר גם נעילת האפליקציה וגם הגנת הסיסמה מופעלות: הזיכרון והזרע מוצפנים גם עם סיסמה (ראשונה) וגם עם נעילת אפליקציה (שנייה). מפתח ההצפנה של Realm מוצפן רק עם הסיסמה ורק אם is_storage_encrypted הוגדר כ-true.

שימוש מפתח

ה-Seed/Mnemonic מאוחסן במחזיק מפתחות או ב-Keystore וממלא תפקיד מכריע בפעולות קריפטוגרפיות. כאשר יש צורך ליצור כתובת ארנק חדשה או לחתום על עסקה, אנו שואבים את המידע הדרוש, כגון המפתח הפרטי, מהסיד הזה.

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

  • חתימה על עסקה (שליחת אסימונים)
  • חתימת נתונים של WalletConnect (טיפול בבקשות הפעלה)
  • הוספת ארנק חדש
  • הפעלת רשתות testnet (הוספת ארנקי testnet)
  • מציג את המנמונית
  • אימות המנמונית
  • הפעלה והשבתה של נעילת אפליקציה
  • הפעלה והשבתה של הסיסמה

אימות ביומטרי נוסף מתבצע עבור הפונקציות הבאות:

  • הפעלת נעילת אפליקציה
  • מחיקת כל הנתונים
  • מחיקת ארנק (חשבון)
  • הפעלה או השבתה של סיסמה (בנוסף לאחזור נעילת האפליקציה)
  • פתיחת האפליקציה
  • העברת היישום לקדמת הבמה
  • הצגת מפתחות ציבוריים מורחבים
  • התחברות לאפליקציה מבוזרת (dApp)

בנוסף, ייתכן שתידרש הסיסמה לפתיחת האפליקציה. מחזיק מפתחות וחנות מפתחות משמשים תמיד דרך ה מגיב-מקורי-מחזיק מפתחות עֲטִיפָה:

  • העטיפה מייצרת מפתח חדש במחזיק מפתחות או בחנות המפתחות לכל פריט
  • העטיפה אחראית להעביר את דגלי התצורה הנכונים עבור מחזיק מפתחות ומפתחות
  • הארנק תמיד מבקש מהעטיפה להגדיר את הדגלים כך שיש לבטל את נעילת המכשיר כדי לגשת למפתח
  • בדיקת נוכחות משתמש (ביומטרי) מוגדרת להיות מבוססת זמן, והבדיקה תקפה למשך 5 שניות; בדיקת נוכחות המשתמש לא מתבצעת בכל גישה

אלגוריתם ההצפנה זהה עבור כל הפריטים:

  • המפתח נגזר עם Argon2id מסוד מנורמל NFC
  • המלח עבור Argon2id הוא המזהה הייחודי של המכשיר
  • מצב ההצפנה הוא AES-GCM
  • וקטור האתחול (IV) עבור AES הוא 16 בתים אקראיים
  • תג האישור עבור AES נדרש להיות באורך 16 בתים

חתימה על עסקה

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

הדמיית עסקה

אנו משתמשים בשירותי API חיצוניים (כגון Blowfish ואחרים) כדי לבדוק את רמות ה"חומרה" האפשריות שעסקה יכולה להביא למשתמש (ציון סיכון). זה עובר ממסך חסימה מלא עבור עסקאות זדוניות אפשריות (או חתימת הודעות) לאזהרות על רמות הזהירות השונות שהמשתמש צריך להיות לפני חתימה או אישור עסקה. 

אמצעים אחרים כוללים:

  • אימות כתובת כדי לוודא שאינך שולח לכתובת שגויה
  • כתובות שתמיד גלויות בשלמותן כדי לוודא שהמשתמש אינו ממוקד להתקפות ספציפיות סביב הרכב הכתובות
  • אימות רשת ואזהרות כדי לוודא שהמשתמש לא שולח לרשת הלא נכונה
  • בדיקות שפיות עמלות כדי לוודא שהמשתמש לא משלם יותר מדי עבור עסקה

פרטיות ברשת

כדי להגן על הפרטיות והנתונים האישיים של המשתמשים באופן שבו נתונים אלה אינם דולפים בבקשות רשת - במיוחד לשירותי צד שלישי - פיתחנו שער API לבקשות פרוקסי. פרוקסי זה מאפשר לנו לא להעביר בקשות משתמשים לשירותי צד שלישי ואינו חושף את ה-IP של לקוח לספקים חיצוניים או ציבוריים. 

שירות backend זה הוא בעצם API לשאילתת נתוני בלוקצ'יין ציבוריים. בתוך ארכיטקטורת אבטחת הארנק, המטרה שלו היא להכיל את הפונקציונליות הזו מאחורי API משותף בכל הבלוקצ'יין, כך ש-Kraken Wallet לא יצטרך ליישם התנהגויות ספציפיות לבלוקצ'יין עבור שאילתות נתונים.

שירות backend זה מגדיר את ה-API המשותף הזה. בסופו של דבר הוא מעביר בקשות לגורמים אחרים שמהם הוא שואב את הנתונים בפועל. זה לא מדד בלוקצ'יין בעצמו וגם לא שומר על מצב.

הנחות אבטחה

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

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

פונקציונליות נוספת

  • האפליקציה פועלת על פי העיקרון של אחסון רק את המינימום הנתונים הדרושים לה על מנת להפעיל את הארנק
  • לא נעשה שימוש בערכות פיתוח תוכנה (SDK) של צד שלישי בניתוח או דיווח על קריסות בלקוח
    • עם המאמצים שלנו לא להדליף שום מידע לצדדים שלישיים, זה לא הגיוני לכלול מעקב אחר נתונים נוסף - מה שאומר שלא תמצא שום תוכנת ניתוח או דוחות קריסה בלקוח
  • אין עדכונים באוויר (מחוץ לזרימת העדכון הרגילה של AppStore/Play Store) מותרים או מיושמים בבסיס הקוד
    • המשתמש יכול לצפות לתוכנה מהודרת שלא ניתן לעדכן ללא הסכמתו להצטרף
  • רשימת אסימונים ומערכת מוניטין
    • על מנת לעזור למשתמשים לנהל את האסימונים שלהם, הטמענו מערכת רשימה ומוניטין המבוססת על הנכסים שסופקו על ידי Kraken וצדדים שלישיים אחרים
  • ספאם של NFTs
    • מאמץ ראשוני שאנו מתכננים להמשיך ולשפר הוא זיהוי התקפות ספאם וספאם, שבו דואר זבל נשמר אוטומטית בתיקיית המשתמש

ביקורת אבטחה חיצונית

The security of our self-custody wallet was rigorously evaluated through an audit conducted by שביל של סיביות, a well-regarded security auditing firm in the industry. This audit encompassed a detailed examination of our codebase and client architecture, aimed at identifying and addressing potential security vulnerabilities.

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

מתן עדיפות לאבטחה, שקיפות ובקרת משתמשים

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

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

ספוט_ימג

המודיעין האחרון

ספוט_ימג

דבר איתנו

שלום שם! איך אני יכול לעזור לך?