Cryptographic Failures (Kriptografik Hatalar)
Genel Bakış
Bu güvenlik açığı, hassas verilerin yeterince güçlü şifreleme yöntemleriyle korunmamasından kaynaklanır. Yani, verilerin şifrelenmeden saklanması veya zayıf şifreleme algoritmalarının kullanılması durumunda ortaya çıkar.
Yaygın Örnekler
1. Weak Encryption (Zayıf Şifreleme)
Örnek: Eski veya güvensiz şifreleme algoritmalarının kullanılması.
// Kötü örnek
const crypto = require('crypto');
const encrypted = crypto.createCipher('des', key)
.update(data)
.final('hex');
// İyi örnek
const crypto = require('crypto');
const algorithm = 'aes-256-gcm';
const key = crypto.scryptSync(password, 'salt', 32);
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv(algorithm, key, iv);
const encrypted = Buffer.concat([
cipher.update(data, 'utf8'),
cipher.final()
]);
2. Plaintext Storage (Düz Metin Saklama)
Örnek: Hassas verilerin şifrelenmeden saklanması.
// Kötü örnek
function saveUserData(user) {
db.users.insert({
name: user.name,
email: user.email,
password: user.password
});
}
// İyi örnek
async function saveUserData(user) {
const hashedPassword = await bcrypt.hash(user.password, 12);
db.users.insert({
name: user.name,
email: user.email,
password: hashedPassword
});
}
Korunma Yöntemleri
- Güçlü şifreleme algoritmaları kullanın
- Güvenli anahtar yönetimi yapın
- Hassas verileri şifreleyin
- SSL/TLS kullanın
- Şifreleme anahtarlarını güvenli saklayın
Örnek Kod
Güvenli Şifreleme Örneği
const crypto = require('crypto');
class Encryption {
static async encrypt(data, key) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
const encrypted = Buffer.concat([
cipher.update(data, 'utf8'),
cipher.final()
]);
const authTag = cipher.getAuthTag();
return {
iv: iv.toString('hex'),
encrypted: encrypted.toString('hex'),
authTag: authTag.toString('hex')
};
}
static async decrypt(encrypted, key, iv, authTag) {
const decipher = crypto.createDecipheriv(
'aes-256-gcm',
key,
Buffer.from(iv, 'hex')
);
decipher.setAuthTag(Buffer.from(authTag, 'hex'));
return decipher.update(encrypted, 'hex', 'utf8') +
decipher.final('utf8');
}
}