Python ile Veritabanında Kişisel Verilerin Güvenli Şifrelenmesi

0 Yanıt 2 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Giriş ve Temel Kavramlar

Günümüzde kişisel verilerin korunması, GDPR ve KVKK gibi yasal düzenlemelerle zorunlu hale geldi. Bu kapsamda, veritabanında saklanan hassas bilgiler, sadece yetkili kişiler tarafından erişilebilir olmalı ve yetkisiz erişime karşı güçlü koruma sağlanmalı. Python ile bu koruma seviyesini artırmak için en yaygın yöntem, veriyi şifrelemek ve sadece yetkili anahtarlarla çözmek.

Veri şifreleme işlemi, iki ana kategoriye ayrılır: simetrik ve asimetrik şifreleme. Bu örnekte, simetrik şifreleme algoritması olan AES (Advanced Encryption Standard) kullanacağız çünkü performans açısından daha uygun ve yaygın.

AES ile Kişisel Verilerin Şifrelenmesi

Python'da AES şifreleme yapmak için en popüler kütüphane, cryptography. Bu kütüphane, hem güvenli hem de kullanımı kolaydır.

Öncelikle, şifreleme anahtarını güvenli bir biçimde saklamalı ve anahtarın gizliliğine dikkat etmeliyiz. Anahtar, genellikle 256 bitlik (32 byte) rastgele bir dizidir ve güvenlik açısından asla kod içerisinde sabit olarak tutulmamalıdır.

Örnek kodda, aşağıdaki adımları takip edeceğiz:
  • Anahtar üretimi
  • Verinin uygun biçimde padding edilerek bloklara bölünmesi
  • CBC mod ile şifreleme ve IV (Initialization Vector) kullanımı
  • Şifreli verinin veritabanına kaydedilmesi ve çözme işlemi

    Kod örneği:

    [code]import os
    from cryptography.hazmat.primitives import padding, hashes
    from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
    from cryptography.hazmat.backends import default_backend

    Güvenli anahtar ve IV üretimi
    def generate_key():
    return os.urandom(32) # 256 bitlik anahtar

    def generate_iv():
    return os.urandom(16) # 128 bitlik IV

    Şifreleme fonksiyonu
    def encrypt_data(key, plaintext):
    iv = generate_iv()
    padder = padding.PKCS7(128).padder()
    padded_data = padder.update(plaintext.encode()) + padder.finalize()
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    encryptor = cipher.encryptor()
    ciphertext = encryptor.update(padded_data) + encryptor.finalize()
    return iv + ciphertext # IV ile birlikte sakla

    Çözme fonksiyonu
    def decrypt_data(key, iv_ciphertext):
    iv = iv_ciphertext[:16]
    ciphertext = iv_ciphertext[16:]
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    decryptor = cipher.decryptor()
    padded_plaintext = decryptor.update(ciphertext) + decryptor.finalize()
    unpadder = padding.PKCS7(128).unpadder()
    plaintext = unpadder.update(padded_plaintext) + unpadder.finalize()
    return plaintext.decode()

    Kullanım örneği
    Güvenli bir ortamda anahtar saklamalı, burada örnek amaçlı oluşturuluyor
    key = generate_key()

    Veri şifreleme
    plaintext = "Kişisel Veri: Ahmet Yılmaz, 1985, İstanbul"
    encrypted = encrypt_data(key, plaintext)

    Veritabanına kaydetme (encrypted)

    Veri çözme
    decrypted = decrypt_data(key, encrypted)

    Sonuç: decrypted, orijinal veri ile aynı olmalı.

    Bu yöntemle, veritabanına kaydedilen kişisel bilgiler, sadece şifre çözme anahtarına sahip olan kişiler tarafından erişilebilir olur. Ayrıca, anahtar güvenli bir ortamda saklanmalı ve erişim kontrolü sağlanmalıdır. Bu sayede, hem yasal mevzuata uygunluk hem de veri bütünlüğü sağlanmış olur.
  • Yanıt vermek için giriş yapmış olmalısınız.

    Bu konuyu görüntüleyen kullanıcılar (Toplam: 2, Üyeler: 2, Misafirler: 0)
    Toplam: 2 (üyeler: 2, misafirler: 0)
    0 alıntı seçildi