İçeriğe atla
HexaTransfer
Bloga dön
Sifreleme ve guvenlik

Dosyalar için dijital imzalar: özgünlük ve kaynak kanıtlama

Dijital imzaların dosya özgünlüğünü nasıl doğruladığını ve kurcalamayı nasıl önlediğini öğrenin.

Dijital imza, belirli bir kişi veya kuruluşun bir dosyayı oluşturduğunu ve dosyanın o tarihten bu yana değişmediğini kanıtlayan kriptografik bir ispattır. Teknik olarak dosyayı SHA-256 ile hashler, ardından RSA-PSS, ECDSA veya Ed25519 kullanarak hash'i özel anahtarınızla "imzalarsınız". Açık anahtarınıza sahip olan herkes imzayı doğrulayabilir — doğrulanırsa dosyayı sizin yazdığınızı ve imzaladığınızla birebir aynı olduğunu bilirler. İmzalar; macOS'un uygulama güncellemelerini doğrulamak için, Git'in commit yazarlığı için (git commit -S) ve PGP'nin imzalı e-postalar için kullandığı mekanizmadır. Şifrelemenin tek başına çözemediği sorunu çözerler: kimin ne gönderdiğini kanıtlamak.

İmzalar ile şifreleme: farklı işler

Şifreleme içeriği gizler. İmzalar yazarlığı ve bütünlüğü kanıtlar. Bunlar birbirinin alternatifi değil, tamamlayıcısıdır.

  • Yalnızca şifreleme: alıcı içeriği bilir ancak kimin gönderdiğini bilemez. Açık anahtara sahip herkes şifreleyebilir.
  • Yalnızca imzalama: alıcı kimin gönderdiğini ve içeriğin kurcalanmadığını bilir; ancak içerik araya giren biri tarafından görülebilir.
  • İmzalama ve şifreleme: tam özgünlük, bütünlük ve gizlilik. PGP'nin varsayılan modu.

Dosya aktarım hizmetleri genellikle şifrelemeye odaklanır. İmzalar yüksek güven gerektiren bağlamlarda devreye girer: yazılım dağıtımı, hukuki belgeler, sözleşmeler, adli delil zincirleri.

İmzalama gerçekte nasıl çalışır

Standart Ed25519 imzalama akışı:

  1. Mesajı hashle: h = SHA-512(mesaj).
  2. Deterministik bir nonce hesapla: r = SHA-512(özel_anahtar_öneki || h).
  3. İmza noktasını hesapla: R = r·G (G eğrinin taban noktasıdır).
  4. s = r + SHA-512(R || açık_anahtar || h)·özel_anahtar mod ℓ hesapla.
  5. İmza (R, s) biçiminde toplam 64 bayttır.

Doğrulama yalnızca açık anahtar, mesaj ve imzayı kullanır. Matematik tutarlıysa doğrulayan, imzanın eşleşen özel anahtara sahip biri tarafından üretildiğini bilir.

RSA-PSS (PKCS#1 v2.2) ve ECDSA benzer biçimde çalışır; ancak farklı matematiksel temele dayanır. Ed25519 yeni sistemler için tercih edilir; çünkü deterministiktir (her imza için rastgele nonce gerekmez) ve daha hızlıdır.

Üç yaygın imza algoritması

| Algoritma | Anahtar boyutu | İmza boyutu | Hız | Notlar | |-----------|---------------|-------------|-----|--------| | RSA-PSS-2048 | 256 bayt | 256 bayt | ~1.000 imza/s | Geniş destek, yavaş anahtar üretimi | | ECDSA P-256 | 32 bayt | 64 bayt | ~30.000 imza/s | NIST eğrisi, her imza için güvenli RNG gerektirir | | Ed25519 | 32 bayt | 64 bayt | ~50.000 imza/s | Deterministik, modern varsayılan |

Üçü de NIST'in FIPS 186-5 (2023) standardında onaylıdır. Ed25519 yeni protokollerin tercihi: WireGuard, SSH (OpenSSH 8.0'dan itibaren varsayılan), Signal, Git commit imzalama ve Rust'ın Cargo paket imzalama altyapısı.

Kod imzalama: yüz milyar dolarlık kullanım alanı

Yazılım dağıtımı imzalara dayanır. Olmaksızın kullanıcılar gerçek yükleyiciyi kötü amaçlı yazılımdan ayırt edemez:

  • Apple Developer ID + Notarization. Catalina (2019) itibarıyla tüm macOS uygulamaları imzalanmak ve noterlenmek zorundadır. RSA-2048 veya ECDSA P-256 kullanır.
  • Microsoft Authenticode. Windows çalıştırılabilir dosyaları RSA-3072 veya ECDSA P-384 sertifikalarıyla imzalanır.
  • Android APK v2/v3. APK içerikleri üzerinde Ed25519 imzaları.
  • Debian apt, Red Hat dnf, npm, PyPI, Homebrew. Tümü paket manifestleri üzerinde ayrık imzalar kullanır (genellikle GPG Ed25519 veya RSA).

Dikkat çekici bir olay: 2020'de SolarWinds Orion güncellemesi, saldırganlar derleme sistemini ele geçirdikten sonra şirketin geçerli sertifikasıyla imzalandı. İmza geçerliydi — yalnızca ele geçirilmiş bir kaynaktan geldiğini kanıtlıyordu. İmzalar imzalayanın kimliğini garanti eder, yargısını değil.

Dosyalar için PGP ve ayrık imzalar

GnuPG (gpg), kurumsal PKI dışındaki dosya imzaları için hâlâ en yaygın araçtır. Ayrık imza dosyayı değiştirmeden bırakır ve imzayı ayrı bir .sig dosyasına koyar:

gpg --detach-sign --armor document.pdf
# document.pdf.sig üretilir

gpg --verify document.pdf.sig document.pdf
# gpg: Good signature from "Ali <ali@ornek.com>"

PGP'nin zayıflığı anahtar dağıtımıdır: doğrulayıcı, imzalama anahtarının gerçekten Alice'e ait olduğunu nasıl bilecek? Seçenekler arasında anahtar sunucuları, güven ağı, keybase.io ve bant dışı doğrulama (kartvizitteki parmak izi) sayılabilir.

Modern alternatifler: Sigstore (Kubernetes, npm tarafından kullanılır) OIDC kimlik token'larıyla anahtarsız imzalama yapar, şeffaflık günlükleri güven ağının yerini alır. Frank Denis'in minisign aracı PGP karmaşıklığı olmadan basit Ed25519 imzalama sunar.

Hash tabanlı imza toplama

Dosya koleksiyonları için her birini tek tek imzalamak verimsizdir. Daha iyi yöntem: her dosyayı hashle, bir Merkle ağacı oluştur, kökü imzala. Avantajları:

  • Tek imza çok sayıda dosyayı kapsar.
  • Tek dosyalar log(n) kardeş hash ile kök karşısında doğrulanabilir.
  • Sertifika şeffaflık günlükleri, Git ve in-toto gibi yazılım tedarik zinciri araçları bu yöntemi benimsiyor.

Bu şekilde imzalanmış 10.000 dosyalık bir sürüm, tek bir imza ve 32 baytlık kök hash üretir; herhangi bir alt küme karşısında doğrulanabilir.

Zaman damgası: ne zaman olduğunu kanıtlamak

İmza kimin yaptığını kanıtlar, ne zaman yaptığını değil. Özel anahtarını çalan bir saldırgan imzaları geriye dönük tarihleyebilir. Güvenilir Zaman Damgası Otoriteleri (TSA'lar) bu sorunu imzanız üzerine bir zaman damgası imzalayarak çözer ve onu belirli bir ana bağlar.

Standartlar:

  • RFC 3161 zaman damgalaması — Microsoft Authenticode ve Adobe PDF imzaları tarafından kullanılır.
  • RFC 5544 (zaman damgalı CMS).
  • Roughtime — Google'ın düşük gecikme süreli doğrulanmış zaman protokolü.

Hukuki belge imzalama (DocuSign, Adobe Sign, AB eIDAS nitelikli imzaları), bir sözleşmenin ne zaman imzalandığını belirlemek için güvenilir otoritelerden RFC 3161 zaman damgalarına dayanır.

Dosya aktarımında imzalar

Tüketici odaklı dosya aktarım hizmetlerinin çoğu imzaları doğrudan sunmaz — AES-GCM kimlik doğrulama etiketi aktarım içinde bütünlüğü, TLS ise sunucunun kimliğini kanıtlar; ancak gönderenin kimliğini kanıtlamanın yerleşik bir yolu yoktur.

Yüksek güven gerektiren aktarımlarda imzalama yüklemeden önce yapılır:

  1. Gönderen dosyayı Ed25519 veya PGP ile imzalar; dosya.ext ve dosya.ext.sig elde edilir.
  2. Her iki dosya da herhangi bir aktarım hizmetine (HexaTransfer, SwissTransfer, WeTransfer) yüklenir.
  3. Alıcı ikisini de indirir, gönderenin açık anahtarıyla imzayı doğrular.

Bu yaklaşım özgünlüğü aktarım mekanizmasından ayırır — aktarım hizmeti ele geçirilse bile, gönderenin özel anahtarı gizli kaldığı ve alıcının doğru açık anahtara sahip olduğu sürece imzanın geçerliliği bozulmaz.

AB eIDAS nitelikli imzaları

Avrupa Birliği'nin eIDAS Tüzüğü (AB 910/2014, 2024'te eIDAS 2.0 olarak güncellendi) üç imza katmanı tanımlar:

  • Elektronik imza — taranmış el yazılı imzaları da kapsar.
  • Gelişmiş elektronik imza (AES/AdES) — imzalayana bağlı, kurcalamayı tespit eder. PGP imzaları bu kategori için geçerlidir.
  • Nitelikli elektronik imza (QES) — AdES artı Güven Hizmeti Sağlayıcısı'ndan nitelikli sertifika ve Nitelikli İmza Oluşturma Cihazı (akıllı kart veya HSM).

QES, tüm AB üye devletlerinde el yazılı imzayla aynı hukuki ağırlığa sahiptir. Sağlayıcılar arasında DocuSign EU, Adobe Sign EU, Namirial ve DTrust sayılabilir. KVKK kapsamındaki işlemler için Türkiye'de e-imza mevzuatı (5070 sayılı Kanun) benzer kategoriler öngörmektedir. ABD'deki ESIGN Act ve UETA karşılıkları daha az katmanlı ama işlevsel açıdan karşılaştırılabilir niteliktedir.

İmzaların gereğinden fazla olduğu durumlar

Her dosyanın imzaya ihtiyacı yoktur. Şu durumlarda atlayabilirsiniz:

  • Alıcı aktarım kanalına uçtan uca güveniyor (Signal, yüz yüze USB).
  • İçerik güvenlik açısından kritik değil (toplantı fotoğrafları, tarifler, taslak belgeler).
  • Bütünlük tek başına yeterliyse ve AES-GCM veya TLS tarafından sağlanıyorsa.

Şu durumlarda imza ekleyin:

  • Hukuki veya sözleşmesel ağırlık önemliyse (sözleşmeler, mahkeme delilleri, tıbbi kayıtlar).
  • Tedarik zinciri güveni söz konusuysa (yazılım sürümleri, ürün yazılımı güncellemeleri).
  • Dosya güvenilmeyen aracılar üzerinden iletilecekse.
  • Orijinal aktarımı aşan kalıcı bir denetim izine ihtiyaç varsa.

Pratikte kullanmak

Basit bir iş akışı için: ssh-keygen -t ed25519 -f ~/.ssh/signing_key ile Ed25519 anahtarı oluşturun, openssl pkeyutl -sign -inkey signing_key -in dosya -out dosya.sig ile dosyayı imzalayın, açık anahtarınızı bant dışı paylaşın ve dosyayı herhangi bir güvenli aktarım hizmetiyle gönderin. Alıcılar openssl pkeyutl -verify ile doğrular.

hexatransfer.com'da deneyin — ücretsiz, hesap gerekmez, 10 GB'a kadar.

Uçtan uca şifreleme ile büyük dosyaları güvenle gönderin

Uçtan uca şifreleme ile 10 GB'a kadar dosya ücretsiz aktarın. Hesap gerekmez. Dosyalarınız yüklenmeden önce tarayıcınızda şifrelenir — başka kimse okuyamaz.

Dosya gönder