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.
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:
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.
