it-swarm-tr.com

AES neden SHA-x yerine güvenli karma için kullanılmaz?

Anladığım kadarıyla, AES'in son derece güvenli olduğuna inanılıyor. (Önümüzdeki 20 yıl içinde kesinlikle kırılmayacağını bir yerde okudum, ancak yazarın ciddi olup olmadığından hala emin değilim.)

DES hala eski bir şifre için o kadar da kötü değil ve 3DES hala kullanılıyor (belki de çok fazla değil, ama en azından 3DES'i Firefox'ta about: config içinde görüyorum).

Görünüşe göre (iyi) blok siberlere kripto topluluğu tarafından güveniliyor.

OTOH, kriptografik hash fonksiyonları ile ilgili birçok problem keşfedildi.

Kripto uzmanı olmayanların bakış açısından: hash fonksiyonları ve simetrik siberler gerçekten aynı şeydir: "rastgele" fonksiyon (farklı giriş ve çıkışlarla).

Peki, neden sadece AES'yi karma yapmak için kullanmıyorsunuz? Bu, AES'in karma için güçlü güvenliğini elde etmek için yapılması gereken bariz şeyler gibi görünüyor. Bonus olarak, AES'in donanım uygulamaları yardımcı olabilir mi?

Hash fonksiyonları ve simetrik siberler arasındaki gerçek farkın basit bir açıklaması var mı?

46
curiousguy

Temel cevap, farklı algoritma türleri olduklarıdır. AES simetrik bir anahtar algoritmasıdır. RSA (ortak anahtar algoritması) veya SHA-256 (karma algoritması) ile aynı rolde kullanamazsınız. Çok farklı özellikleri ve zayıflıkları olan farklı sistemlerdir.

Yine de, "Bu şekilde." Sonuçta, evrensel anlamda bir karma, verilerin sabit veya azaltılmış bir boyutta tekrarlanabilir bir temsilidir. AES bunu CBC modu aracılığıyla sağlayabilir. Yine de, güvenli bir karma işleminin basit indirgemeden daha fazla özelliği vardır.

Güvenli bir karma algoritması tek yönlü bir sistemdir. AES aynı şekilde şifrelenir ve şifresini çözer (simetrik şifre) ve her bir blok için belirli bir anahtarla ne olacağını 1-1 eşleme yapabilirsiniz. Veriler zincirlenmedikçe ve bu nedenle kayıp olmadıkça, AES "karmasının" şifresini kaynak verilere deşifre edebilirsiniz.

Biri, yalnızca farklı girdi verilerini denemek dışında bir SHA işlemini tersine çeviremez. Bir şeyi şifrelemek için SHA-x'i kullanamamanız nedeniyle, karma bir şey.

11
Jeff Ferland

Hash fonksiyonları ve simetrik siberler arasındaki gerçek farkın basit bir açıklaması var mı?

  • Bir şifre tersine çevrilebilir, bir karma işlevi değil
  • Bir şifrenin çıkış uzunluğu, girişin uzunluğuna bağlıdır; karma işlevi, girişten bağımsız olarak aynı uzunlukta çıktı üretir
  • Şifreleme karma işlevinin herhangi bir yerinde tek bir bit değişikliği, karma çıkışında basamaklı (dramatik) bir değişiklik üretir. Kural olarak, bu şifreler için doğru değildir.
  • Bir şifre bir anahtar gerektirir, bir karma

İkisinin tasarımı ve amacı temelde farklıdır ve birbirinin yerine kullanılamaz.

9
tylerl

Mistle-Damgard-construction kullanarak herhangi bir blok şifresini temel olarak karma işlevine dönüştürebilir ve Feistel işlevini F aşağıdaki şekilde tanımlarsanız temel olarak Feistel ağlarını kullanarak herhangi bir karma işlevini bir blok şifresine dönüştürebilirsiniz.

F(half_block, round_key) = hash(concatenate(half_block, round_key))

Ancak oldukça verimsizdir (hesaplanması uzun sürer), çünkü F'nin hesaplanması zaten pahalıdır (SHA-512 durumunda örneğin 80 dahili "mermi kullanan yinelemeli bir algoritmadır) ve Feistel yapısı için F'nin kendisi birden çok kez tekrarlanır. Diyelim ki 80 yuvarlak bir F fonksiyonuna sahip 20 aşamalı bir Feistel ağınız var, blok başına 1600 SHA-2 "tur" gerçekleştiriyorsunuz. Ayrıca oldukça büyük blok boyutlarına yol açar (karma işlevinin çıktısının iki katı), e. g. SHA-512'yi karma işlevi olarak kullanacaksanız 1024 bit blok şifreleme.

Ama pratik olarak konuşursak, zorunlu olarak "güvensiz" değildir. Sadece hazır "blok şifreleme" (daha ziyade sahte raund permütasyonları - bitlerin/baytların permütasyonundaki permütasyon değil, "tüm olası giriş blokları" ve "tüm olası çıkış blokları" arasındaki iki yönlü haritalama anlamında permütasyon) çok daha fazla verimli, daha yaygın olarak kullanılır ve bu nedenle iyi psödondom permütasyonu olma özellikleri açısından daha ayrıntılı olarak analiz edilir. Eğer harcanacak hesaplama gücünüz varsa, Feistel ağında blok şifre olarak SHA-512 kullanın. Muhtemelen en azından AES'den daha az güvenli olmayacaktır ("yuvarlak anahtarları" türetmek için iyi bir anahtar zamanlaması eklemeniz şartıyla), ancak bir bloğu işlemek için lot CPU döngüsü gerekir.

3
no.human.being

M. Abel doğru. Karma olarak kullanılan başka bir AES örneği, AES-CBC veya AES-PCBC'dir.

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Propagating_Cipher_Block_Chaining_.28PCBC.29

CBC veya PCBC ve hatta CFB hatasız ve hatasız bir "dosya" üzerinde çalıştırılırsa, son blok farklı olacaktır.

Verimsiz, ancak yapılabilir. Mantık şudur: "Eğer sahip olduğunuz tek şey bir çekiçse, her şey çivi gibi görünür." Aynı şey AES için de geçerlidir. Karma yapmanın daha iyi yolları olabilir, ancak sahip olduğunuz tek şey AES ise. . .

0
aesuser