AES Şifreleme / Şifre Çözme

AES-128, AES-192 veya AES-256 (FIPS 197) ile GCM (kimlik doğrulamalı şifreleme), CBC, CTR veya ECB modunda şifreleyin veya çözün. Anahtarlar ham hex veya Base64 baytlarıdır ya da PBKDF2-HMAC-SHA256 ile bir paroladan türetilir. GCM, AAD'yi destekler ve kimlik doğrulama etiketini ayrı gösterir; CBC/CTR/ECB çıktıları OpenSSL enc ile uyumludur. Özetler için Özet Oluşturucu, anahtarlı MAC'ler için HMAC Oluşturucu, eski şifreler için bu ailedeki Eski Şifreler sayfasına bakın.
Tamamen yerel çalışır — anahtarlar ve düz metin sekmenizden asla çıkmaz. 200 MB'a kadar dosyalar.
Buraya yazılan her şey bu sekmede kalır — ama bu, “üretim sırları için güvenli” olduğu anlamına gelmez. Tarayıcı belleği, uzantılar ve omuz üzerinden bakanlar yapıştırdığınızı görür. Bu sayfayı öğrenmek, doğrulamak ve birlikte çalışabilirliği test etmek için kullanın; canlı müşteri verilerini işlemek için değil.
Yön: Mod: Çıktı:
GCM = 12 baytlık nonce ve 128 bitlik kimlik doğrulama etiketiyle AES-GCM (AEAD: gizlilik + bütünlük). Güvenlik hedefi olduğunda varsayılan.
Hex, boşlukları, iki noktaları ve 0x önekini kabul eder.
GCM veya CTR'de aynı anahtar altında nonce'u asla yeniden kullanmayın.
Etiket uzunluğu:
Parametre satırları, anahtarın tam okunuşunu, IV'yi, AAD boyutunu ve etiketi kaydeder; böylece kopyalanan bir sonuç başka bir makinede her zaman yeniden üretilebilir.
Hangi modu seçmeliyim?
GCM varsayılan cevaptır: hem şifreler hem de kimlik doğrulaması yapar — etiket satırı kurcalamayı tespit edilebilir kılar (etiketin bir baytını değiştirerek çözmeyi deneyin, sayfa reddeder). CBC blok örüntülerini gizler ama bütünlük sağlamaz; mecburen kullanacaksanız bir HMAC ile eşleştirin (bkz. HMAC Oluşturucu). CTR AES'i bir akış şifresine çevirir — dolgu yok, ama aynı anahtar altında yeniden kullanılan bir nonce hem CTR'de hem GCM'de felakettir. ECB yalnızca uyumluluk ve öğretim içindir: aynı düz metin blokları aynı şifreli metin bloklarına şifrelenir (ünlü ECB penguen örneği).
OpenSSL uyumluluğu — bu sayfadan alınan CBC ve CTR çıktıları (PKCS#7 dolgusu, ham anahtar) openssl enc komut satırıyla gidip gelir:
openssl enc -aes-256-cbc -K <64-hex-anahtar> -iv <32-hex-iv> -in msg.txt -out msg.enc
openssl enc -d -aes-256-cbc -K <anahtar> -iv <iv> -in msg.enc -out msg.txt
Aynısı -aes-128-cbc, -aes-192-cbc, -aes-256-ctr ile de çalışır (16 baytlık IV = başlangıç sayaç bloğu). openssl enc GCM'i desteklemez — kimlik doğrulamalı şifreleme için bu sayfayı veya OpenSSL 3.3+ sürümündeki openssl aesgcm komutunu kullanın.
Bunun yerine Çin ulusal şifresine mi ihtiyacınız var?
SM4 (GB/T 32907-2016) — Çin ticari kriptografisinde zorunlu kılınan blok şifre; AES ile aynı 128 bitlik blok ve anahtar boyutuna sahip ama kendi anahtar programı ve S-kutusu ile ECB ve CBC modunda kendi sayfasında çalışır: SM4 Şifreleme / Şifre Çözme. SM paketinin geri kalanı da orada: SM3 (özet), SM2 (açık anahtar) ve SM9 (kimlik tabanlı kriptografi).
Öz test
Sayfa motorlarını bağımsız referanslara karşı çalıştırır: dört mod için bilinen yanıt vektörleri (bağımsız bir yerel uygulamayla üretilmiş), AAD ile ve AAD olmadan GCM etiket vektörleri, WebCrypto motorunun saf JS AES motoruyla çapraz doğrulaması, GCM gidiş-dönüşü ve olumsuz testler (kurcalanmış etiket, yanlış anahtar başarısız olmalı). Hiçbir şey bir yere gönderilmez.
AES şifrelemesi sıfırdan anlatılmıştır
Tek cümleyle: AES, dünya çapında standart bir blok şifredir — 128, 192 veya 256 bitlik bir anahtar altında 16 baytlık blokları karıştırır — ve içinde çalıştırdığınız mod (GCM, CBC, CTR, ECB) bu blokların nasıl zincirlendiğini, IV'nin ne işe yaradığını ve kurcalamanın fark edilip edilemeyeceğini belirler; bir nedeniniz yoksa GCM'i seçin.
AES'in kendisi nedir (FIPS 197)

Blok şifre. AES (NIST tarafından 2001'de FIPS 197 olarak standartlaştırılan Rijndael tasarımı) her seferinde tam olarak 16 bayt şifreler. Anahtar uzunluğunuz — 16, 24 veya 32 bayt — AES-128, -192 veya -256'yı ve iç tur sayısını (10, 12, 14) seçer. Her tur, bloğu anahtarınızdan türetilen tur anahtarlarıyla yer değiştirme tabloları, satır kaydırmaları ve sütun karıştırmalarıyla karıştırır. Pratik bir saldırı şifrenin kendisini kırmaz: gerçek dünyadaki arızalar neredeyse her zaman mod, IV veya anahtar yönetimi hatalarıdır; bu sayfanın geri kalanı da bundan bahseder.

Neden bir mod gerekir? Çünkü mesajlar nadiren 16 bayttır. Mod, blok şifrelemelerini birbirine bağlar: ECB blokları bağımsız şifreler; CBC her bloğu bir önceki şifreli metinle XOR'lar; CTR bir sayacı şifreler ve veriyle bir akış şifresi gibi XOR'lar; GCM CTR'nin üzerine kurulur ve bir kimlik doğrulama etiketi ekler. AES aynı kalır — mod, elde ettiğiniz garantiler hakkında her şeyi değiştirir.

Anahtarlar ve parolalar. Bir AES anahtarı 16, 24 veya 32 rastgele bayttır. İnsan parolası bu değildir: bu sayfanın Parola seçeneği, PBKDF2-HMAC-SHA256 ile uygun bir anahtar türetir (varsayılan 600.000 yineleme, OWASP 2023 taban çizgisi — KDF ayrıntıları için HMAC Oluşturucuya bakın). Parola dizgisini asla doğrudan AES anahtarı olarak kullanmayın: entropisi uzunluğunun küçük bir kısmıdır.

Dört mod karşılaştırması
ModIV / nonceBütünlükNotlar
GCM12 bayt, mesaj başına benzersizEvet — 96..128 bit etiketAEAD: her yerde önerilen varsayılan (TLS 1.3, SSH, dosya biçimleri). AAD de kabul eder.
CBC16 bayt, tahmin edilemezHayırPKCS#7 dolgusu; klasik, ama yanında bir MAC gerektirir. Dolgu-oracle hataları CBC'nin klasik tuzağıdır.
CTR16 baytlık başlangıç sayacıHayırDolgu yok, akış benzeri, rastgele erişim; tek anahtar altında nonce yeniden kullanımı düz metin XOR düz metni sızdırır.
ECByokHayırAynı bloklar → aynı şifreli metin. ECB-penguen gösterimi. Yalnızca uyumluluk için.

IV kuralları tek paragrafta. IV bir sır değildir — şifreli metnin yanında gönderin — ama benzersizlik kuralları farklıdır: CBC tahmin edilemez bir IV ister; GCM ve CTR yalnızca aynı anahtarla aynı nonce'un asla yeniden kullanılmamasını ister (GCM nonce yeniden kullanımı daha kötüdür: kimlik doğrulama alt anahtarını sızdırır). Bu sayfanın Rastgele IV düğmesi tarayıcının güvenli RNG'sini kullanır; Tümü sıfır düğmesi test vektörlerini yeniden üretmek içindir, gerçek mesajlar için değildir.

Dolgu. CBC ve ECB tam bloklara ihtiyaç duyar; bu yüzden PKCS#7 dolgusu her biri dolgu uzunluğuna eşit 1..16 bayt ekler. CBC şifreli metinlerinin 16 bayta kadar büyümesinin ve yanlış anahtarla çözmenin genellikle dolgu hatasıyla başarısız olmasının nedeni budur. CTR ve GCM akış benzeridir ve dolguya ihtiyaç duymaz — şifreli metin uzunluğu düz metin uzunluğuna tam olarak eşittir (CTR modunda Örnek'i deneyin: 43 bayt girer, 43 bayt çıkar).

CFB ve OFB (kalan iki klasik mod) bu sayfada uygulanmamıştır: CTR gibi akış benzeridirler ama ona göre bir avantajları yoktur ve çoğunlukla eski protokollerde kalmışlardır.

GCM neler ekler (AEAD, etiketler, AAD)

Kimlik doğrulamalı şifreleme. GCM = CTR şifrelemesi + şifreli metin, IV ve AAD üzerinde bir GHASH kimlik doğrulayıcı. Çıktı etiketi her şeyin bir parmak izidir: şifreli metnin, IV'nin veya AAD'nin tek bir bitini değiştirirseniz etiket artık eşleşmez; böylece alıcı mesajın bozulmadığını ve bir anahtar sahibinden geldiğini kanıtlayabilir. CBC+HMAC aynısını yalnızca doğru birleştirirseniz (önce şifrele, sonra MAC) sağlar — GCM bunu tasarımı gereği doğru yapar.

AAD. Ek kimlik doğrulamalı veri açık olarak taşınır ama etiket tarafından kapsanır: protokol başlıkları, dosya adları, algoritma tanımlayıcıları. Alıcı, birebir aynı AAD baytlarını sağlamalıdır, aksi halde etiket denetimi başarısız olur — amaç da budur.

Etiket uzunluğu. Varsayılan 128 bitlik etiket önerilendir; daha kısa etiketler (96..120 bit) boyut karşılığında sahtecilik direncinden ödün verir. 96 bitin altında GCM'in güvenlik ispatları hızla bozulur; bu nedenle bu sayfa orada durur.

Nonce felaketi. Aynı anahtar altında 12 baytlık bir GCM nonce'unu yeniden kullanmak, iki mesajın düz metin XOR'unu ve kimlik doğrulama alt anahtarını sızdırır — bundan sonra o anahtar altındaki tüm gelecek mesajlar için sahtecilik mümkün olur. Benzersizliği garanti edemeyen sistemler, nonce yeniden kullanımına dayanıklı varyantları (AES-GCM-SIV, RFC 8452) kullanır.

Çapa değerleri — bu sayfada yeniden üretin

İlk satır, ünlü tek blokluk FIPS 197 örneğidir; geri kalanlar bağımsız bir yerel uygulama (Node.js üzerinden OpenSSL) ile üretilmiş ve bu sayfanın motorlarında yeniden doğrulanmıştır. Her satırı yeniden üretmek için anahtarı, IV'yi ve girdiyi sayfaya yapıştırın.

DurumGirdilerBeklenen çıktı
AES-128 tek blok (FIPS 197 tarzı)key 000102..0f, plaintext 00112233..ff69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCMkey 000102..0f, IV 606162..6b, plaintext 0011..ef ×2ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, aynı ama AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (yukarıdaki CBC ile aynı girdi)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Yaygın hatalar
  • IV gerektirmediği için ECB kullanmak. Kolaylık bir tuzaktır: blok örüntüleri doğrudan şifreli metne sızar (bir bitmap'i şifrelerseniz resmi hâlâ görebilirsiniz). ECB yalnızca tek bloklar veya tam olarak 16 baytlık rastgele anahtarlar için kabul edilebilir — pratikte, asla tercih edilmemelidir.
  • Nonce/IV'yi yeniden kullanmak. Tek bir anahtar altında GCM veya CTR ile bu, her şeyi aynı anda bozan tek hatadır. Sayaç tabanlı sistemler (bu sayfanın Rastgele IV düğmesi) bunu imkânsız kılmak için vardır.
  • IV'yi gizli saymak. Değildir. Şifreli metnin yanında saklayın veya iletin. Gizlemenin bir faydası yoktur ve yeniden kullanıma davet eder.
  • Bir parolayı anahtar olarak kullanmak. "hunter2hunter2hunter2hunter2" 32 bayttır ama 256 bit entropi değildir — dolguyla süslenmiş bir sözlük kelimesidir. PBKDF2 ile türetin (bu sayfada yerleşik) veya rastgele bir anahtar üretin.
  • CBC'nin kurcalamayı algıladığını varsaymak. CBC şifreli metninde bir biti çevirin; çözme “başarılı” olur ama sessizce bozulmuş düz metin üretir. Yalnızca GCM etiketi (veya açık bir HMAC) kurcalamayı görünür kılar.
  • GCM şifreli metinlerini eşitlik için karşılaştırmak. Rastgele nonce'larla aynı düz metin her seferinde farklı şifrelenir — bu bir özelliktir. Deterministik şifreleme farklı, özel bir araçtır.
SSS

AES-128 hâlâ güvenli mi, yoksa 256 mı gerekir? Her ikisi de gerçekçi saldırganlara karşı güvenlidir; bilinen en iyi saldırılar payın yalnızca küçük bir kısmını azaltır. AES-256 esas olarak uzun vadeli sırlar ve kuantum sonrası güvenlik payı için önemlidir (Grover algoritması anahtar gücünü yarıya indirir, böylece AES-256 yaklaşık 128 bit eşdeğeri kalır).

Neden openssl enc GCM yapmaz? enc komutu AEAD'den önce gelir ve bir etiket taşıyacak bir yöntemi yoktur; OpenSSL 3.3, bunun yerine özel bir aesgcm komutu ekledi. Bu sayfanın GCM çıktısı etiketi ayrı bir satırda tutar, böylece ikisini açıkça taşıyabilirsiniz.

Anahtar sarma (AES-KW) nedir? Diğer anahtarları sabit 64 bitlik parçalarla ve kendi bütünlük denetimiyle şifrelemeye yönelik özel bir moddur. Girdileri ve çıktıları mesaj yerine anahtar biçiminde olduğu için burada sunulmaz — yanlış kullanım yaygındır.

CTR şifrelemesi düz metinle aynı uzunlukta, CBC'ninki neden daha uzun? CTR ve GCM akış benzeri çalışır (dolgu yoktur); CBC/ECB, PKCS#7 ile tam 16 baytlık bloğa tamamlar. Uzunluk farkı tasarım gereğidir, bir hata değildir.

Başka bir yerde şifrelenmiş bir şeyi çözebilir miyim? Evet; tam modu, anahtarı, IV'yi (ve GCM için etiketi) biliyorsanız. Bu sayfanın çıktı satırları hepsini tam olarak kaydeder, böylece parametreleri araçlar arasında taşıyabilirsiniz — yukarıdaki OpenSSL kutusu eşleşen komut satırlarını gösterir.