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');
    }
}