Modül 4: Kriptografi, OTA Güvenliği ve Secure Boot

Konular

İlerleme0%

Hafta 13: Simetrik ve Asimetrik Şifreleme

Hafta 13: Kriptografi Temelleri

🎯 Öğrenme Hedefleri

Bu haftanın sonunda:

  • Simetrik şifreleme (AES) uygulayabileceksiniz
  • Asimetrik şifreleme (RSA, ECC) anlayacaksınız
  • Otomotiv kriptografi uygulamalarını kavrayacaksınız

1. Simetrik Şifreleme (AES)

#!/usr/bin/env python3
"""
AES Şifreleme - Otomotiv Uygulaması
"""

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import os

class AESCrypto:
    """AES-GCM şifreleme sınıfı."""
    
    def __init__(self, key: bytes = None):
        self.key = key or os.urandom(32)  # AES-256
    
    def encrypt(self, plaintext: bytes) -> tuple:
        """AES-GCM ile şifrele."""
        nonce = os.urandom(12)  # 96-bit nonce
        cipher = Cipher(
            algorithms.AES(self.key),
            modes.GCM(nonce),
            backend=default_backend()
        )
        encryptor = cipher.encryptor()
        ciphertext = encryptor.update(plaintext) + encryptor.finalize()
        return nonce, ciphertext, encryptor.tag
    
    def decrypt(self, nonce: bytes, ciphertext: bytes, tag: bytes) -> bytes:
        """AES-GCM ile çöz."""
        cipher = Cipher(
            algorithms.AES(self.key),
            modes.GCM(nonce, tag),
            backend=default_backend()
        )
        decryptor = cipher.decryptor()
        return decryptor.update(ciphertext) + decryptor.finalize()

# Demo
if __name__ == "__main__":
    print("🔐 AES-256-GCM Demo")
    print("=" * 50)
    
    crypto = AESCrypto()
    
    # Firmware verisi simülasyonu
    firmware_chunk = b"ECU_FIRMWARE_V2.4.1_BUILD_20260224"
    
    # Şifrele
    nonce, ciphertext, tag = crypto.encrypt(firmware_chunk)
    print(f"Plaintext: {firmware_chunk}")
    print(f"Ciphertext: {ciphertext.hex()[:40]}...")
    print(f"Tag: {tag.hex()}")
    
    # Çöz
    decrypted = crypto.decrypt(nonce, ciphertext, tag)
    print(f"Decrypted: {decrypted}")
    print(f"
✅ Başarılı: {firmware_chunk == decrypted}")

2. Asimetrik Şifreleme (RSA/ECC)

#!/usr/bin/env python3
"""
RSA ve ECC - Dijital İmzalar
"""

from cryptography.hazmat.primitives.asymmetric import rsa, ec, padding
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.backends import default_backend

class RSACrypto:
    """RSA imzalama."""
    
    def __init__(self, key_size: int = 2048):
        self.private_key = rsa.generate_private_key(
            public_exponent=65537,
            key_size=key_size,
            backend=default_backend()
        )
        self.public_key = self.private_key.public_key()
    
    def sign(self, data: bytes) -> bytes:
        """Veriyi imzala."""
        return self.private_key.sign(
            data,
            padding.PSS(
                mgf=padding.MGF1(hashes.SHA256()),
                salt_length=padding.PSS.MAX_LENGTH
            ),
            hashes.SHA256()
        )
    
    def verify(self, data: bytes, signature: bytes) -> bool:
        """Imzayı doğrula."""
        try:
            self.public_key.verify(
                signature, data,
                padding.PSS(
                    mgf=padding.MGF1(hashes.SHA256()),
                    salt_length=padding.PSS.MAX_LENGTH
                ),
                hashes.SHA256()
            )
            return True
        except Exception:
            return False

class ECCCrypto:
    """ECDSA imzalama (daha hızlı, kısa anahtar)."""
    
    def __init__(self):
        self.private_key = ec.generate_private_key(
            ec.SECP256R1(),  # P-256 curve
            default_backend()
        )
        self.public_key = self.private_key.public_key()
    
    def sign(self, data: bytes) -> bytes:
        return self.private_key.sign(data, ec.ECDSA(hashes.SHA256()))
    
    def verify(self, data: bytes, signature: bytes) -> bool:
        try:
            self.public_key.verify(signature, data, ec.ECDSA(hashes.SHA256()))
            return True
        except Exception:
            return False

# Demo
if __name__ == "__main__":
    print("🔑 RSA vs ECDSA Karşılaştırma")
    print("=" * 50)
    
    firmware = b"FIRMWARE_HASH_" + os.urandom(32)
    
    # RSA
    import time
    rsa_crypto = RSACrypto(2048)
    start = time.time()
    rsa_sig = rsa_crypto.sign(firmware)
    rsa_time = time.time() - start
    print(f"RSA-2048 imza: {len(rsa_sig)} bytes, {rsa_time*1000:.2f}ms")
    
    # ECDSA
    ecc_crypto = ECCCrypto()
    start = time.time()
    ecc_sig = ecc_crypto.sign(firmware)
    ecc_time = time.time() - start
    print(f"ECDSA P-256 imza: {len(ecc_sig)} bytes, {ecc_time*1000:.2f}ms")
    
    print(f"
✅ ECDSA {len(rsa_sig)//len(ecc_sig)}x daha kısa imza üretir")

📚 Kaynaklar