DES / 3DES / RC4 / Blowfish Şifrele & Çöz

Eski dosyalarda, yedeklerde ve protokollerde hâlâ yaşayan dört klasik şifreyle şifreleyin ya da şifresini çözün — ECB ya da CBC modunda DES ve 3DES, akış olarak RC4 (ARCFOUR) ve 56 bayta kadar anahtarlı Blowfish. FIPS 46-3, Schneier'in yayımlanmış Blowfish vektörleri ve RFC 6229 ile doğrulanmıştır. Her şey tarayıcınızda yerel olarak çalışır — hiçbir şey yüklenmez. Modern işler için AES-GCM kullanın.
Bu şifreler uyumluluk için burada, yeni işler için değil. DES 2005'te, 3DES 2023'te geri çekildi; RC4 2015'ten beri TLS'te yasak (RFC 7465) ve Blowfish'in 64 bitlik bloğu, tek bir anahtar altında yaklaşık 32 GiB veriden sonra doğum günü sınırına ulaşır. Yeni olan her şey için AES-GCM kullanın.
Yön: Şifre: Mod: Çıktı:
DES = 1977 Veri Şifreleme Standardı: 64 bitlik bloklar, 56 bitlik etkin anahtar. Geri çekildi ama hâlâ eski yedeklerde, (bankacılık) PIN bloklarında ve Kerberos v4'te bulunur. Anahtar tam olarak 8 bayt olmalıdır.
Onaltılık, boşluk, iki nokta ve 0x önekini tolere eder. DES her anahtar baytının eşlik bitini yok sayar.
Blok şifreleri PKCS#7 ile doldurur; RC4 asla doldurmaz.
Bu sayfanın kabul ettiği anahtar uzunlukları
ŞifreAnahtarBlokDurum
DEStam olarak 8 bayt (56 etkin bit)64 bit2005'te geri çekildi (NIST SP 800-131A)
3DES-EDE3tam olarak 24 bayt (112 etkin bit)64 bit2023'ten sonra yasak (SP 800-131A r2)
3DES-EDE2tam olarak 16 bayt (112 etkin bit)64 bitEDE3 ile aynı, daha zayıf eski seçenek
RC4 / ARCFOUR1..256 baytakış2015'ten beri TLS'te yasak (RFC 7465)
Blowfish4..56 bayt64 bitkırılmamış ama 64 bit blok sınırlı; Twofish/AES kullanın
Etkin anahtar boyutu ham boyuttan küçüktür, çünkü DES her baytın bir bitini eşlik olarak kullanır: 64 bitlik ham bir anahtar yalnızca 56 anahtar biti taşır ve üç bağımsız anahtarlı 3DES 112 taşır (ortada buluşma).
OpenSSL uyumluluğu — OpenSSL 3 bu şifreleri legacy sağlayıcısına taşıdı; sizinki reddederse -provider legacy ekleyin. Bu sayfanın komut satırı karşılıkları:
openssl enc -des-ecb -K 133457799BBCDFF1 -in msg.bin -out msg.enc
openssl enc -des3 -K <48 hex> -iv <16 hex> -in msg.bin -out msg.enc (3DES-CBC)
openssl enc -rc4 -K 4b6579 -in msg.bin -out msg.enc  /  Blowfish-CBC için -bf-cbc.
Şifresini çözmek için -d kullanın. -K ham bir onaltılık anahtar alır, -k bir parola alır (kaçının — KDF bu sayfadaki hiçbir şeyden farklıdır).
Öz test
Sayfa motorunu yayımlanmış ve bağımsız olarak üretilmiş vektörlere karşı yeniden çalıştırır: FIPS 46-3 çalışılmış DES örneği, OpenSSL ile üretilmiş 3DES EDE2/EDE3 şifreli metinleri, Schneier Blowfish vektörleri, RFC 6229'daki RC4 test vektörleri ve klasik "Key/Plaintext" örneği, her modda gidiş-dönüşler ve negatif testler (yanlış anahtar boyutu, blok katı olmayan şifreli metin başarısız olmalıdır). Hiçbir şey hiçbir yere gönderilmez.
DES, 3DES, RC4 ve Blowfish sıfırdan açıklanıyor
Tek cümleyle: bu dört şifre 1990'ların iş atları idi — DES ve onun üçlü şifreleme çözümü 3DES, akış şifresi RC4 ve Blowfish — ve bunların hepsi artık emekliye ayrılmış ya da kullanımdan kaldırılmıştır; yalnızca okunması gereken eski dosyalar, eski donanım ve eski protokollerle yaşatılıyorlar.
DES: hepsine başlayan 1977 standardı

Nedir. Veri Şifreleme Standardı (FIPS 46, 1977), 64 bitlik bloklar üzerinde 56 bitlik anahtarlı, 16 turlu bir Feistel şifresidir (her baytın bir biti eşlik denetimi olduğu için 8 baytta saklanır). IBM tarafından NSA girdisiyle tasarlandı, yirmi yıl boyunca ABD standardı oldu ve 1998'de EFF'in Deep Crack makinesinin 250.000 dolarlık donanımla 56 saatte bir anahtarı kaba kuvvetle bulmasıyla politik olarak kırıldı. NIST, 2005'te şifreleme için onu geri çekti.

Eşlik biti anahtar uzunluklarını neden karıştırır. Bir DES anahtarının her 8. biti diğer yedi bitten hesaplanır; bu yüzden 8 baytlık bir anahtar yalnızca 56 bağımsız bit taşır — aynı şifre için hem "64 bitlik anahtar" hem de "56 bitlik anahtar" göreceğinizin nedeni budur. 3DES bunu devralır: 24 ham bayt = 168 ham bit = 112 etkin bit (ortada buluşma bunun geri kalanını ortadan kaldırır).

Bunu hâlâ nerede görürsünüz. Banka PIN blokları (ISO 9564), bazı Kerberos v4 alanları, eski yedek arşivleri ve akıllı kartlar. Bir sistem bugün DES istiyorsa, ya 1990'ların donanımıyla birlikte çalışıyordur ya da basitçe güvensizdir.

3DES: şifrele, çöz, şifrele

Numara. Üçlü DES her blok üzerinde DES'i üç kez çalıştırır: EDE3 üç farklı anahtar kullanır (C = Ek3(Dk2(Ek1(P)))); ortadaki çözme adımı, bir 3DES uygulamasının k1=k2 ayarlayarak tek DES'i taklit edebilmesi için vardır. EDE2 yalnızca iki anahtar kullanır (k1=k3), 112 etkin bit verir. Bu yapı, zaten saldırıya uğramış bir şifreyi yeni bir şifre icat etmeden üç katına çıkaran hızlı bir çözümdü.

Yine de neden öldü. İki sorun: yavaş (blok başına üç tam DES geçişi, AES'in yaklaşık 1/20 hızı) ve 64 bitlik bloğu korudu. Tek bir anahtar altında 32 GiB veriyle (232 blokluk doğum günü sınırı) blok çarpışmaları, düz metin yapısını sızdıracak kadar olası hâle gelir — Sweet32 saldırısı (2016), bunu TLS 3DES oturumlarına karşı gösterdi. NIST, 2023'ten sonra 3DES şifrelemeyi yasakladı (SP 800-131A r2); PCI DSS, ödeme sistemlerinde emekliye ayrılmasını gerektirir.

RC4 / ARCFOUR: erken web'in akış şifresi

Nasıl çalışır. RC4 (Ron's Code 4, 1987'de tasarlandı, 1994'te sızdı) bir akış şifresidir: anahtar 256 baytlık bir permütasyonu çizelgeler (KSA), sonra permütasyon mesajla XOR'lanan sözde rastgele bir bayt akışı üretir (PRGA). Dolgu yok, blok boyutu yok, her mesaj uzunluğu, yazılımda çok hızlı — bu yüzden 1990'larda SSL/TLS ve WEP'e egemen oldu. "ARCFOUR", çoğu açık kaynak projenin kullandığı marka adı içermeyen addır.

Nasıl kırıldı. Fluhrer-Mantin-Shamir (2001), anahtar akışının ilk baytlarının yanlı olduğunu gösterdi — her paket için anahtar yapısı bu baytları saldırganlara besleyen WEP'te ölümcüldü. Sonraki yanlılık saldırıları (2013, AlFardan ve diğerleri), RC4 korumalı TLS oturumlarından milyonlarca bağlantıyla düz metni geri kazandı. RFC 7465 (2015), RC4'ü TLS'te tamamen yasaklar.

Klasik vektör. "Key" anahtarı (3 bayt), "Plaintext" mesajı bbf316e8d940af0ad3 şifreli metnini verir — RC4 Örneğini deneyin ve karşılaştırın. Bu sayfanın kendi kendine testi, 40 bitlik 01 02 03 04 05 anahtarı için RFC 6229 anahtar akışını da denetler: b2396305f03dc027ccc3524a0a1118a8.

Blowfish: kırılmamış, ama blok sınırlı

Nedir. Bruce Schneier'in 1993 Feistel şifresi: 64 bitlik bloklar, 32 ila 448 bit (4..56 bayt) arası anahtarlar, 16 tur ve alt anahtarlarını oluşturmak için Blowfish'in kendisini 521 kez çalıştıran ünlü bir anahtar çizelgesi — bu da anahtar kurulumunu yavaş, ama kaba kuvvet denemelerini de pahalı kılar. Tam turlu Blowfish'i kıran hiçbir pratik kriptanaliz yoktur.

Yine de neden bu sayfada. Sorun algoritma değil, 64 bitlik bloktur: tek bir anahtar altında yaklaşık 32 GiB'ın ötesinde doğum günü çarpışmaları veri sızdırır (3DES ile aynı sınır, Sweet32 tarzı). Schneier'in kendisi yeni işler için halefi Twofish'i (bir AES finalisti) ya da AES'i önerir. Blowfish, bcrypt içinde yaşamaya devam eder — parola karmasının anahtar çizelgesi Blowfish'in kendisidir — bu sorun değildir, çünkü karmalama gigabaytlarca değil çok küçük girdiler kullanır.

Klasik vektörler. Tamamı sıfır olan anahtar ve tamamı sıfır olan düz metin 4ef997456198dd78 değerine şifrelenir (Örnek çıktısının ilk bloğu); "abcdefghijklmnopqrstuvwxyz" anahtarı ile "BLOWFISH" 324ed0fef413a203 verir. İkisi de Schneier'in yayımlanmış vektör dosyasından gelir ve kendi kendine testle denetlenir.

Yaygın hatalar
  • Yeni veriler için kullanmak. Bu sayfadaki her şifre, blok boyutu sınırlı olan Blowfish dışında kullanımdan kaldırılmıştır. Doğru modern seçim AES-GCM'dir — bkz. AES Şifrele / Çöz.
  • Bir paroladan DES anahtarı. 8 karakterlik bir parola 56 rastgele bit değildir; karakter başına birkaç bitlik entropidir. Eski sistemler tam olarak bunu yapardı ve "DES ile şifrelenmiş" arşivlerin dakikalar içinde sözlük saldırılarına düşmesinin en yaygın nedeni budur.
  • CBC'de IV yeniden kullanmak. Bu durumda ilk blok, aynı anahtar altındaki mesajlar arasında düz metin eşitliğini sızdırır. Rastgele IV düğmesi bunun için vardır.
  • RC4 anahtar akışını yeniden kullanmak. RC4 aynı anahtar için aynı anahtar akışını XOR'lar: aynı anahtarla iki mesaj şifrelemek bir iki kez kullanılan tek seferlik defter demektir — şifreli metinleri XOR'layın ve iki düz metin de ortaya çıkar. WEP'in ölümcül kusuru tam olarak anahtar akışı yeniden kullanımına dayanan bir yapıydı.
  • "Çözüyor, öyleyse doğru" varsaymak. Buradaki ECB/CBC, çözmede yalnızca dolguyu doğrular — yanlış bir anahtar genellikle anlamsız bir şeye dönüşür ve bu da yine de dolgusu açılabilir olabilir. Hiçbir eski modda bütünlük denetimi yoktur; bu gerekiyorsa bunlar değil, AES-GCM gerekir.
  • 3DES'i "168 bit" saymak. Ham anahtar 168 bittir ama etkin güç 112'dir — ortada buluşma üçlü şifrelemeyi iki katına ve biraz fazlasına indirir, tıpkı 3DES'in atası yapılardaki gibi.
SSS

Kırık bir şifre aracını neden tutalım? Uyumluluk için. Şifreli yedekler, dışa aktarılmış eski biçimli dosyalar, yakalanmış protokol izleri, CTF meydan okumaları ve yükseltilemeyen donanım hâlâ bu şifreleri konuşur. Eski verileri okumak meşrudur; bunlarla yeni veri yazmak değildir.

DES anahtarım tek eşlikli / ASCII olmayan bayt içeriyor. DES her anahtar baytının eşlik bitini yok sayar, bu yüzden etkin anahtar her durumda diğer 56 bittir. Bu sayfa herhangi 8 baytı kabul eder ve çift eşliği zorunlu kılmaz.

Çözülmüş metin neden bazen anlamsız görünüyor? Yanlış anahtar, yanlış mod, yanlış IV ya da verinin sandığınız gibi şifrelenmemiş olması. Kimlik doğrulama etiketi olmadığı için temiz bir "yanlış anahtar" hatası yoktur — yalnızca dolgu denetimi bir ipucudur ve şans eseri geçebilir (zamanın 1/256'sı).

Blowfish dosyalarım için güvenli mi? Küçük dosyalar için kriptografik olarak evet (pratik bir kırılma yok). Tek bir anahtar altında gigabayt ölçeğindeki her şey için hayır — 64 bitlik blok doğum günü sınırı anahtar gücü değil, veri hacmiyle ilgilidir. Twofish ya da AES bu sorunu önler.

Bir yerde gördüğüm 72 baytlık Blowfish anahtarları ne? Bazı uygulamalar 72 bayta kadar kabul eder, ama Schneier'in referansı 56 kullanır ve bunun ötesindeki baytlar standart çizelgede ek bir yayılma sağlamaz. Bu sayfa referansı izler: 4..56 bayt.