Table of Contents
יישומי אינטרנט מודרניים להתמודד עם כמויות עצומות של נתונים רגישים - מזהים אישיים, עסקאות פיננסיות, רשומות בריאות ומידע עסקי קנייני.ללא הצפנה נאותה, כי נתונים פגיעים ליירוט, שינוי וגניבה במהלך שידור. JavaScript, זמן רב מוגבל לאינטראקציות מבוססות דפדפן, עכשיו מציע כלים בוגרים, לקריאה ייצור עבור יישום הצפנה חזקה ואבטחת ערוצי תקשורת.זה מספק הליכה מקיפה ומעשית של JavaScript לשימוש בנתונים לתקשורת מאובטחת, אלגוריתמים מאובטחים, יישומים אבטחה, אלגוריתמים מאובטחים, יישומים טובים יותר, יישומים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים אבטחה, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים אבטחה, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים מאובטחים, אלגוריתמים
מידע על קידוד Data Fundamentals
הצפנה היא תהליך של הפיכת טקסט ברור לקריאה להקשר בלתי קריא באמצעות אלגוריתם ומפתח סודי.רק צדדים מורשים מחזיקים מפתח קידוד הנכון יכולים להפוך את השינוי ולאושש את הנתונים המקוריים.הכוח של מערכת הצפנה תלוי בתכונות המתמטיות של האלגוריתם, אורך המפתח וקוראמיות, ואת האבטחה של שיטות ניהול מפתח.
Cryptography מבחין בין שתי קטגוריות רחבות של הצפנה:
- (FLT:0) הצפנה סימפונית (FLT:1) - משתמשת מפתח משותף אחד עבור הצפנה ופענוח.זה מהיר ויעיל עבור נתונים מרובים, אבל המפתח חייב להיות משוחזר באופן מאובטח בין הצדדים: AES, Cha20.
- (FLT:0) הצפנה אסימטרית של ההרחבה:1 - משתמשת בזוג מפתח פרטי-ציבורי.המפתח הציבורי מצפין נתונים; רק המפתח הפרטי המתאים יכול לפענח את זה.זה מבטל את הצורך בסוד משותף אבל הוא איטי חישובי: RSA, ECC (אלפטוגרפיה סלולארית).
בנוסף, הפונקציה חד-משמעית (FLT:0) היא פונקציה חד-צדדית המייצרת עיכולה בגודל קבוע מהנתונים.לא הצפנה (לא ניתן להפוך אותה), אך חיוני לבדיקת יושרה, אחסון סיסמאות וחתימות דיגיטליות.
הצפנה בדפדפן לעומת Node.js
JavaScript פועל בשתי סביבות עיקריות: הדפדפן ו- Node.js (server-side) כל סביבה מספקת ממשקים מקומיים שונים:
- (FLT:0)BrowserveFLT:1 - The FPLT:2Web Crypto APIsFLT 3: הוא ממשק הקול הסטנדרטי, הקריפטוגרפיאלי.הוא תומך ב-AES-CBC, AES-GCM, RSA-OAEP, ECDH, ופעולות רבות אחרות.ה- API נועד להיות מאובטח על ידי ברירת מחדל, באמצעות ספק הקריפטוגרפי של מערכת ההצפנה במקום אלגוריתמים של JavaScript-OAEP.
- (ב) ויקרא י"א): "ה' (ב')" (ב')"ב' (ב')"ב[[1924]], [[1924]], [[1924]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]] ו[[1924]]]]]]]]]]]]]]]], [[1924]]]]]], [[1924]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]], [[[[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]], [[[[1924]], [[[[1924]]]], [[[[1924]]]]]]]] [[[[[[1924]]]]
(ב) ספריות של צד שלישי כגון: (FLT:0)CryptoJemvesFLT) 1:1, (FLT:2libsodium.jsph; 3) ו-FLT:4ForgeFLT:5 יכול להוסיף ממשקי API מקומיים, אבל מפתחים צריכים מעדיף יישום Native בכל הזדמנות למנוע אלגוריתמים עניים או מחוסנים.
קידוד משותף אלגוריתמים ב- JavaScript
AES (הופנה מהדף Advanced Encryption Standard)
AES הוא ה- סימטרי ה- cipher המשמש ברחבי העולם.זה פועל על 128 סיביות בלוקים תומך גדלים מרכזיים של 128, 192, או 256 ביטים.המצבים הנפוצים ביותר עבור JavaScript הם:
- (FLT:0)AES-GearCMFLT:1 (Galois/Counter Mode) - מספק הצפנה אותנטית; הוא מצפין ומייצר תג אימות המזהיר את השימוש ברוב המקרים.
- (FLT:0)AES-CBCFLT:1 (Cipher Block chaining) - דורש וקטור ראשוניזציה (IV) ו- ⁇ .It אינו מספק שלמות על ידי עצמו, כך שיש לשלב אותו עם HMAC או להשתמש בו בפרוטוקול שמוסיפה אימות.
דוגמה לשימוש ב- Web Crypto API (browser) כדי להצפין עם AES-GCM:
async function encryptAESGCM(data, key) {
const iv = crypto.getRandomValues(new Uint8Array(12));
const encoded = new TextEncoder().encode(data);
const encrypted = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv },
key,
encoded
);
return { iv, ciphertext: new Uint8Array(encrypted) };
}
// Generate a 256‑bit AES key
const key = await crypto.subtle.generateKey(
{ name: 'AES-GCM', length: 256 },
true,
['encrypt', 'decrypt']
);
RSA (Rivest-Shamir-Adleman)
RSA הוא אלגוריתם סימטרי המשמש בדרך כלל עבור חילופי מפתח וחתימות דיגיטליות.ב- JavaScript, הוא זמין באמצעות Web Crypto API (browser) ואת Node.jsFLT:5 מודול RSA-OAEP (Optimal A הצפנה קידוד סימטרי פדלינג) הוא תוכנית הצפנה המומלצת, כפי שהוא כולל ⁇ אקראית כדי להגן מפני התקפות טקסט נבחר.
RSA הוא הרבה יותר איטי מאשר הצפנה סימטרית והוא מוגבל בגודל של נתונים זה יכול להצפין (המידע לגודל המפתח) בפועל, RSA משמש כדי להצפין מפתח AES (הצפנה היברידית), ולאחר מכן AES מצפין את המטען בפועל.
SHA-256/ SHA-3 (Secure האש אלגורית)
אלגוריתמים של האש אינם הצפנה, אך הם הכרחיים לתקשורת בטוחה. SHA-256 הוא הישבן הנפוץ ביותר באבטחת האינטרנט המודרנית (למשל, עבור תעודות TLS, HMAC, וסיסמה יש עם מלח).הממשק של Web Crypto מספק FLT:6 עבור SHA-256, SHA-256, SHA-256, SHA-512 Note, ש- SHA-A-A הוא deprecated להתקפות.
אליפטי קרב Cryptography (ECC)
ECC מציעה אבטחה שווה ערך RSA עם הרבה מפתחות קצרים יותר, מה שהופך אותו אידיאלי עבור יישומים ניידים ובעלי ביצועים גבוהים.הממשק ה- Web Crypto תומך ECDH (Elliptic Curve Diffie-Hellman) עבור הסכם מפתח ו- ECDSA (Elliptic Curve Digital Signature Algorithm) עבור חתימה. Nodejs's's's's's's's's's's 7th 7th תומך גם הם מעוקלולים אלה (למשל P256 256 256 256 256 , P.
יישום הצפנה ב- JavaScript: מדריך מעשי
להלן דוגמאות של העתק-ו-paste הן לדפדפן והן ל- Node.js. Alwaysמעדיפים את ממשק API של Web Crypto או Node.jsFLT:8 מודול על גבי ספריות של צד שלישי כאשר הם ניתנים לביקורת וביצוע פעולות הצפנה בזיכרון מאובטח של המערכת.
דפדפן: הצפנה סימפונית עם AES-GCM (Web Crypto API)
// Encrypt a message with a given password
async function encryptWithPassword(password, plaintext) {
// Derive a key from the password using PBKDF2
const encoder = new TextEncoder();
const salt = crypto.getRandomValues(new Uint8Array(16));
const keyMaterial = await crypto.subtle.importKey(
'raw',
encoder.encode(password),
'PBKDF2',
false,
['deriveKey']
);
const key = await crypto.subtle.deriveKey(
{
name: 'PBKDF2',
salt,
iterations: 600000, // OWASP recommended min
hash: 'SHA-256'
},
keyMaterial,
{ name: 'AES-GCM', length: 256 },
false,
['encrypt']
);
// Encrypt
const iv = crypto.getRandomValues(new Uint8Array(12));
const encrypted = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv },
key,
encoder.encode(plaintext)
);
// Return salt, iv, ciphertext as base64 for transport
return {
salt: btoa(String.fromCharCode(...salt)),
iv: btoa(String.fromCharCode(...iv)),
ciphertext: btoa(String.fromCharCode(...new Uint8Array(encrypted)))
};
}
// Decrypt
async function decryptWithPassword(password, { salt, iv, ciphertext }) {
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const saltBytes = Uint8Array.from(atob(salt), c => c.charCodeAt(0));
const ivBytes = Uint8Array.from(atob(iv), c => c.charCodeAt(0));
const data = Uint8Array.from(atob(ciphertext), c => c.charCodeAt(0));
const keyMaterial = await crypto.subtle.importKey(
'raw',
encoder.encode(password),
'PBKDF2',
false,
['deriveKey']
);
const key = await crypto.subtle.deriveKey(
{
name: 'PBKDF2',
salt: saltBytes,
iterations: 600000,
hash: 'SHA-256'
},
keyMaterial,
{ name: 'AES-GCM', length: 256 },
false,
['decrypt']
);
const decrypted = await crypto.subtle.decrypt(
{ name: 'AES-GCM', iv: ivBytes },
key,
data
);
return decoder.decode(decrypted);
}
Node.js: AES-256-GCM עם מודול ההצפנה
const crypto = require('crypto');
function encrypt(text, key) {
const iv = crypto.randomBytes(12);
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
const authTag = cipher.getAuthTag().toString('hex');
return { iv: iv.toString('hex'), encrypted, authTag };
}
function decrypt(encryptedData, key) {
const decipher = crypto.createDecipheriv(
'aes-256-gcm',
key,
Buffer.from(encryptedData.iv, 'hex')
);
decipher.setAuthTag(Buffer.from(encryptedData.authTag, 'hex'));
let decrypted = decipher.update(encryptedData.encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
// Usage: generate a 256‑bit key
const key = crypto.randomBytes(32);
const message = 'This is secret.';
const ciphertext = encrypt(message, key);
console.log(ciphertext);
console.log('Decrypted:', decrypt(ciphertext, key));
שיטות תקשורת מאובטחות
הצפנה לבדה אינה מבטיחה תקשורת בטוחה.יש לשלב את התרגילים הבאים לתוך זרימת הנתונים כולה:
השתמש תמיד ב-HTTPS עם TLS 1.2 או גבוה יותר
[ה] אין זה אופציונלי להצפין את כל השיחה HTTP, למנוע ניכויים והתקפות של האדם-בקרבה.לקבוע את השרת שלך להשתמש ב-HTTP:0TLS 1.2IRLT 1 או ;2TLS 1.3FLT 3 ו- פיזור קובצי צופן חלשים.
2.הפעלת ניהול מפתח תקין
- לעולם אל תקשו קוד קשיח בקוד בצד הלקוח. השתמש במשתנה הסביבה או בקמרונות מאובטחים (למשל, HashiCorp Vault, AWS Secrets Manager) בשרת.
- מפתחות רוטט באופן קבוע ובאופן מיידי מבטלים מפתחות פגומים.
- השתמש בפונקציות של שינוי מפתח (PBKDF2, scrypt, ארגונום2) עבור הצפנה מבוססת סיסמה. Web Crypto API ו- Node.js שניהם תומכים PBKDF2.
- כאשר החלפת מפתחות, השתמש בפרוטוקול הסכם מפתח מאובטח כגון ECDH או RSA-OAEP, ומשלב עם צעד אישור מפתח.
3. Authentication and Authorization
הצפנה מגינה על נתונים במעבר, אך המערכת חייבת גם לאמת את זהותה. השתמש באימות מבוסס אסימונים (JWT, OAuth 2.0) ולהבטיח אסימוניות מועברות רק על פני HTTPS.עבור APIs, נדרשת גישה מקבילה בתוקף לכל בקשה וליישם תקופות חיים קצרות עם אסימוני רענון.
הגנה מפני התקפות אינטרנט נפוצות
- (FLT:0Cross-Site Scripting (XSS)IRLT) 1:1 - התוקף יכול להזריק תסריטים שגנבים נתונים מוצפנים או מפתחות. השתמש ב- Content Security Headers, לברוח קלט משתמשים ולעולם לא לסמוך על כך (FLT:11).
- (FLT:0Cross-Site Request Forgery (CSRFIR)FLT:1 - השתמש ב- Anti-CSRFkenkens או באותה אתר עוגיות כדי למנוע בקשות מזויפות.
- (ב) ויקרא י"א: "וַיֹּאמֶר עַמֶר עַמֶר עַל הָאָרֶץ" (בראשית כ"ד, ט).
- (FLT:0)Man-in-the-MidleveFLT:1) - Enforce HSTS (HTTP Strict Transport Security) וחשב תעודה מסמנת עבור יישומים ביטחוניים גבוהים.
אימות כל האינקוויטים והשימוש בהשוואות ב-Time
כאשר השוואת תגי אימות, או סיסמאות, תמיד להשתמש בפונקציה של זמן קבוע למניעת התקפות תזמון. Node.js מספק FLT:15; עבור הדפדפן, אתה יכול ליישם השוואה קבועה או להשתמש בספריה כמו FLT:16.
נושאים מתקדמים: חתימה דיגיטלית, הצפנה היברידית, ותעודה Pinning
חתימה דיגיטלית
חתימות דיגיטליות מספקות לא-repudiation והוכחה לאותנטיות של הודעה. השתמש ב-ECDSA (עם עקומת P-256) או RSA-PSS בדפדפן, ה- API של Web Crypto תומך ב-FLT:17 ו-FLT 18 פעולות.
// Generate signing key pair
const keyPair = await crypto.subtle.generateKey(
{ name: 'ECDSA', namedCurve: 'P-256' },
true,
['sign', 'verify']
);
// Sign a message
const data = new TextEncoder().encode('Important contract');
const signature = await crypto.subtle.sign(
{ name: 'ECDSA', hash: 'SHA-256' },
keyPair.privateKey,
data
);
הצפנה היברידית עבור תשלומים גדולים
הצפנה אסימטרית אינה יכולה להתמודד עם נתונים גדולים ביעילות.הגישה הסטנדרטית היא הצפנה היברידית:
- יצירת מפתח סימטרי אקראי (למשל 256-bit AES).
- מוצפן מפתח סימטרי עם מפתח RSA הציבורי של הנמען (RSA-OAEP).
- מוצפן את המסר האמיתי עם AES-GCM באמצעות מפתח סימטרי.
- להזיז את המפתח הסימטרי המוצפן ואת ה-ciphertext (עם IV ותגות אות).
הנמען מפענח את המפתח הסימטרי עם המפתח הפרטי שלהם, ואז מפענח את המסר עם AES-GCM.
תעודת Pinning
כדי להגן עוד מפני רשויות תעודה פגום, אתה יכול לקבוע את תעודת השרת הצפויה או את מפתחה הציבורי יש לעשות זאת באמצעות ראש FLT:20 (המוגדר אך עדיין בשימוש בהקשרים מסוימים) או באמצעות ראש הממשלה (Certificate Transparency).
מלכודות נפוצות וכיצד להימנע מהם
- (FLT:0) שימוש ב- IV חלש או Nonceph:1) - ה- IV חייב להיות אקראי וייחודי עבור כל פעולת הצפנה עם אותו מפתח.
- (בקיצור:0) עיבוד cryptocurrencies מותאם אישית של קריפטוגרפיה (FLT:1) לעולם אל תכתבו את אלגוריתם ההצפנה שלכם. השתמש בסטנדרט, יישום מפלטפורמה או ספריות אמינות.
- (FLT:0) הפעלת מפתחות בעוגיות או אחסון מקומי של אחסון 1LT) - אחסון בדפדפן נגיש ל- JavaScript ולכן להתקפות XSS. עבור הצפנה בצד הלקוח, שקול באמצעות Web Crypto API של API של 2.
- (FLT:0) אישור אימות סימולFLT:1 - הצפנה ללא תג אימות (למשל, באמצעות AES-CBC ללא HMAC) מאפשרת לתוקפים לשנות את ה-ciphertext שלא ניתן ללקות.
- (FLT:0) אבחון התקפות של ערוצים צד 1) – בסביבות אבטחה גבוהה, להיות מודע לתזמון, לשחיפה ולהתקפות ניתוח כוח.
מסקנה
(JavaScript) מסוגל ליישם הצפנה חזקה ואבטחת תקשורת כאשר נעשה שימוש נכון.הממשק של Web Crypto ו- Node.jsFLT:23 מודול לספק דחיסות ייצור, פונקציות הצפנה נורמטיביות למעקב אחר תקני התעשייה.על ידי שילוב הצפנה סימטרית וסימטרית עם שיטות הטובות ביותר כגון HTTPS, ניהול מפתח נכון, השוואות קבועות, ואימות, ניתן לבנות יישומי אינטרנט שמגנים על ידי משתמשים ממספר איומים של מוצפנים: F2FV: LT2s: LT2F2 פתוח ועדכונים של אבטחה נוכחיים: