Modern web uygulamaları, hassas verilerin büyük miktarlarda işliyor - kişisel tanımlayıcılar, finansal işlemler, sağlık kayıtları ve özel işletme bilgileri. Doğru şifreleme olmadan, veriler iletişim kurma, değiştirme ve iletişim kurma konusunda savunmasızdır. JavaScript, JavaScript, tarayıcı tabanlı etkileşimlerin sınırlı olduğu sürece, şimdi güçlü şifreleme ve iletişim kanalları uygulamak için olgun, üretim hazır araçları sunar.
Data Encryption Fundamentals
Şifreleme, bir algoritma ve gizli anahtar kullanarak okunabilir bir şekilde okunabilir bir şekilde okunabilir bir şekilde okunabilir. Sadece doğru şifre anahtarını kullanan tarafların dönüşümleri tersine çevirebilir ve orijinal verileri geri kazanabilmeleri gerekir.Bir şifreleme sisteminin gücü, algoritmanın matematiksel özelliklerine, anahtarın uzun ve rastgeleliğe bağlıdır.
Kriptografi iki geniş şifreleme kategorisi arasında ayrım yapar:
- [FONT=0]Symmetric şifreleme - hem şifreleme hem de şifreleme için tek bir anahtar kullanır.Bu, veri için hızlı ve verimlidir, ancak anahtar taraflar arasında güvenli bir şekilde değişmelidir.
- [FONT=0]Asymmetric şifreleme - kamuya açık anahtar çifti kullanır; sadece ilgili özel anahtar onu şifreleyebilir. Bu, paylaşılan bir sır için gerekli olan ihtiyacı ortadan kaldırır, ancak hesaplamalı olarak yavaş yavaştır.
Ek olarak, USBT:0)[[[Dönetici:0))[[[Dönetici:0))) sabit bir şekilde bir uyarıyı elde eden bir işlevdir (bu, her iki veri ve gerçekliğe doğru doğru doğru doğru doğruyu doğrulamak için bir anahtar değildir.
Tarayıcıda şifreleme vs. Node.js
JavaScript iki birincil ortamda çalışır: tarayıcı ve Node.js (server-side) Her çevre farklı yerel arayüzler sağlar:
- [FONT:0]Browser[[DÜT:1] – TheİLFLT:2)Web Crypto API[[DÜDÜ:3) Sistem ana kriptografik algoritmaları kullanarak, AES-CBC, AES-GCM, RSA-OAEP, ECDH ve diğer birçok operasyon. API, sistemin ana kriptografik algoritmaları kullanarak güvenli olmak için tasarlanmıştır.
- [FONT:0) Hayır, ÂHÂNİN ÂHÂNİN ÂHÂNİN ÂHÂNİN ÂHÂNİN ÂHİRLER: ÂHİRLER ÂHİRLER ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
Üçüncü taraf kütüphaneleri, [[0)CryptoJS), [[Dönetici algoritmaların kötü uygulanması veya silinmesini mümkün kılan.[Döneticiler[Döneticiler için 3 ) ve [[Döneticiler[Döneticiler) ekleyebilirler.
JavaScript'te Common Encryption Algorithms in JavaScript
AES (Advanced Encryption Standard)
AES, dünya çapında kullanılan gerçeko symmetric cipher'dir. 128-bit bloklarda çalışır ve 128, 192 veya 256 bitleri temel boyutları destekler. JavaScript için en yaygın modlar:
- [FONT=0]AES-GCM[[Dönetici: 1.) (Galois/Counter Mode) – gerçekleştirilmiş şifreleme sağlar; tam olarak algılamayı sağlayan bir kimlik doğrulama etiketi üretir.
- [FONT=0]AES-CBC[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜye Olmayanlar İçin Tıklayınız; bu yüzden HMAC ile bir protokolle birleştirilmelidir veya kimlik doğrulamayı içeren bir protokolde kullanılmalıdır.
Web Crypto API'si (otomatik) kullanarak AES-GCM ile şifrelenmek için örnek:
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, anahtar değişim ve dijital imzalar için yaygın olarak kullanılan bir asimetrik algoritmadır. JavaScript'te, Web Crypto API (otomatik) ve Node.jsİLDÜT:5) modülü. RSA-OAEP (Optimal Asymmetric Encryption Padding) önerilen şifreleme programıdır, çünkü seçilmiş metin saldırılarına karşı korumak için rastgele ⁇ içerir.
RSA, asimetrik şifrelemeden çok daha yavaştır ve gerçek ödeme yükünü şifreleyebilir (önetici büyüklüğüne uygun). Uygulamada RSA AES anahtarı (hipbrid şifreleme) şifrelemek için kullanılır ve sonra AES gerçek ödeme yükü şifreler.
SHA256 / SHA-3 (Secure Hash Algorithms)
Algoritma algoritmaları şifrelemez, ancak güvenli iletişim için vazgeçilmezdir. SHA256, modern web güvenliğinde en yaygın kullanılandır (örneğin, TLS sertifikası için, HMAC ve şifre tuzla doludur).
Elliptic Curve Cryptography (ECC)
ECC, RSA'ya çok daha kısa anahtarlarla eşdeğer bir güvenlik sunuyor, mobil ve yüksek performanslı uygulamalar için ideal hale getiriyor. Web Crypto API ECDH (Elliptic Curve Diffie-Hellman) anahtar anlaşma ve ECDSA (Elliptic Curve Digital Signature Algoritma) imzalamak için. Node.js'in 8.
JavaScript'te Şifreleme: Pratik Bir Rehber
Aşağıda, tarayıcı ve Node.js için kopya ve benzeri örnekler tamamlandı. Web Crypto API veya Node.jsursurFLT:8) Sistemdeki kriptografik işlemleri kontrol ettikleri ve gerçekleştirdikleri gibi, mümkün olan üçüncü taraf kütüphaneleri üzerinde modül.
Tarayıcı: Symmetric Encryption with AESGCM (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 kripto Modül ile
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));
Güvenli İletişim En İyi Uygulamaları
Şifreleme tek başına güvenli iletişim garanti etmez. Aşağıdaki uygulamalar tüm veri akışına entegre edilmelidir:
1. Her zaman HTTPS'yi TLS 1.2 veya Yüksek Yüksek
HTTPS is not optional. It encrypts the entire HTTP conversation, prevent eavesdrop and man-in-the-the-media Attack. Configure your server to use the free TLS end and sertifika management.) veya [[Dönetici için, TLS 1.3) ve zayıf köşeleri devre dışı bırakmak için. Services likeFLT:4Cloudflare)
2. Implement Proper Key Management
- Müşterinin ön kodunda asla zor kod anahtarlar kullanın. - çevre değişkenleri veya güvenli tonları kullanın (örneğin, HashiCorp Vault, AWS Sır Yöneticisi) sunucuda.
- Rotate anahtarları düzenli olarak ve hemen uzlaşma anahtarları geri döndürür.
- Anahtar türleme işlevlerini kullanın (PBKDF2, şifre tabanlı şifreleme için Argon2). Web Crypto API ve Node.js Her iki destek PBKDF2.
- Değiştirilen anahtarlar, ECDH veya RSA-OAEP gibi güvenli bir anahtar anlaşma protokolü kullanın ve anahtar bir onay adımı ile bir araya gelir.
3. Kimlik ve Yetkilendirme
Şifreleme, verileri geçişte korur, ancak sistem kimlik doğrulamalıdır.Sektif doğrulama (JWT, OAuth 2.0) ve jetonların yalnızca HTTPS üzerinden iletildiğini sağlar. API'ler için, her istek için geçerli bir erişim gerektirir ve yenileme jetleri ile kısa süreli erişim gerektirir.TheFLT:0).OWASP Authentication Cheatation Cheat Sheet)
4. Ortak Web Saldırılarına Karşı Koruma
- [FONT=0]Cross-Site Senaryosu (XSS))[Köpek veri veya anahtarlar çalan senaryoları enjekte edebilir. Content Security Policy (CSP) başlıkları kullanın, kullanıcı girişinden kaçmayın ve asla güvenmeyin!
- [FONT=0)Cross-Site İstek Forgery (CSRF))[değiştir | kaynağı değiştir] – Doğrulanmış talepleri önlemek için anti-CSRF jetleri veya aynıSite kurabiyelerini kullanın.
- [FONT:0)Köyüş[[Döncükler)[[değiştir | kaynağı değiştir] veya [[Döneticileri) ► (İngilizce).
- [FONT:0]Man-inthe-Middle[DÜT:1) – Enforce HSTS (HTTP Strict Transport Security) ve yüksek güvenlik uygulamaları için sertifika pinning düşünün.
5. Tüm girişleri geçerli ve Sürekli Zaman Karşılaştırmalarını Kullanın
HMAC'leri, kimlik doğrulama etiketleri veya şifreleri karşılaştırırken, zaman zaman zaman zaman zamanlayıcı saldırılarını önlemek için sürekli bir karşılaştırma işlevi kullanabilirsiniz. Node.js providesETHFLT:15).
Gelişmiş Konular: Dijital İmzalar, Hybrid Encryption ve Sertifika Pinning
Dijital İmzalar
Dijital imzalar, bir mesajın gerçekliğini ve kanıtlamaktadır. ECDSA (küre P-256) veya RSA-PSS. tarayıcıda, Web Crypto API'si 03.03. Örnek parçaları destekler ve [[otomatik):
// 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
);
Hibrit Büyük Payloads için Şifreleme
Asymmetric şifreleme büyük verileri verimli bir şekilde ele alamaz. Standart yaklaşım karma şifrelemedir:
- rastgele bir simetrik anahtar (örneğin 256-bit AES).
- Alıcının halka açık RSA anahtarı ile simetrik anahtarı şifreleyin (RSA-OAEP).
- AES-GCM ile gerçek mesajı, simetrik anahtar kullanarak şifreleyin.
- Transmit hem şifreli hem de anahtar ve şifre ( IV ve auth etiketi ile).
Alıcı, özel anahtarlarıyla symmetric anahtarını şifreler, sonra AES-GCM ile mesajı şifreler.
Sertifika Pinning
Müteahhit sertifika otoritelerine karşı daha fazla koruma sağlamak için, beklenen sunucu belgesi veya kamu anahtarını belirleyebilirsiniz. Bu, sert pinning üzerinden sertifikayı kullanabilir (başlangıçta kullanılır), bazı bağlamda veya [[Certificate Transparency).
Ortak Pitfalls ve Them'dan Nasıl Kaçırmak
- [FONT:0] Zayıf bir IV veya nonce)) – IV, AES-GCM veya AES-CTR ile bir IV kullanarak rastgele ve benzersiz olmalıdır.
- [FONT:0] Özel kriptografi[[Dönetici:0)[Dönetici:0)Implementing custom kriptografi[[Dönetici:0)[Dönlendirme:0)) - Asla kendi şifreleme algoritmanızı yazmayın. Platformdan veya güvenilir kütüphanelerden standart, iyi değerli uygulamalar kullanın.
- [FONT:0]Storing anahtarları kurabiye veya yerel depolama)[tr| Browser depolama JavaScript'e erişilebilir ve bu nedenle XSS saldırılarına karşı.For client-side şifreleme, Think using the Web Crypto API'sASIFLT:22] to generate keys that are never exposed to JavaScript memory.
- [FONT=0)))[[Dönlendirme[Dönlendirme:0))))[[Dönlendirmeler için şifrelenmeler.
- [FONT:0] Yan kanal saldırıları göz önünde bulundurulur[Dönetici: 1) Yüksek güvenlik ortamında, zamanlama, önbellek ve güç analiz saldırılarının farkında olun. Sürekli zamanlı işlemler ve en az şubeleme bu riskleri hafifletmeye yardımcı olur.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
JavaScript, doğru şekilde kullanıldığında sağlam şifreleme ve iletişim kurma yeteneğine sahiptir. Web Crypto API ve Node.jsurFLT:23) modülü, kullanıcı verilerini birden fazla tehdit vektörden koruyan web güvenlik mekanını sürekli olarak geliştirir - doğrulayıcı ve asimetrik şifreleme ile en iyi uygulamaları birleştirerek [IDD][/FONT=0]OWASP Vakfı[Döneticileri ve giriş geçerliliğiniz, şifrelerinizi ve girişlerinizi onaylayabilirsiniz.[değiştir | kaynağı değiştir]