Uygulamada SHA çarpışma olasılığını göz ardı etmek güvenli midir?


209

Diyelim ki her biri bir megabayt olan bir milyar benzersiz resmimiz var. Her dosyanın içeriği için SHA-256 karmasını hesaplıyoruz. Çarpışma olasılığı şunlara bağlıdır:

  • dosya sayısı
  • tek dosyanın boyutu

Sıfır olduğu varsayılarak, bu olasılığı görmezden gelebilir miyiz?


1
Bu, hash tuşlarını ne için kullandığınıza bağlıdır. Bir tür dosya tanımlama ise, bir çarpışma da dosyaların özdeş olduğu anlamına gelebilir ve bu nedenle çarpışma durumunda dosyaları da karşılaştırmanız gerekir. Sadece dosya boyutlarını karşılaştırmanın oldukça güvenli olacağını söyleyebilirim.
mojuba

Evet, bu durumda, dosya boyutlarını karşılaştırırsanız, olasılık büyük ölçüde azalır. Ayrıca iki karma algoritması kullanabilir ve sonuçları birleştirebilirsiniz. Daha sonra, her ikisinin de aynı anda çarpışma olasılığı daha fazla azalır. Ama soru şu ki, "adil" ne kadar güvenli? Belki bir formüle ve sayılara ihtiyacımız var.
Hristo Hristov

2
@Hristo Hristov: Karma anahtarın sahte bir rasgele sayı olduğunu varsayarsak (teorik olarak doğrudur) bir milyar 128 bit anahtar, 2,9 * 10 ^ -30 çarpışma olasılığı verir. Buna "miniscule" bile
diyemezsiniz

3
@mojuba: daha da iyisi, 256 bitlik bir kare soruyor.
Michael Borgwardt

FWIW: GIT sürüm kontrol sistemi dosyaları içerik SHA'larına göre tanımlar.
snemarch

Yanıtlar:


385

Böylece olağan cevap şöyle olur: Bir sonraki saniye içinde haydut bir asteroitin Dünya'ya çarpması, bildiğimiz gibi medeniyeti yok etme ve birkaç milyar insanı öldürme olasılığı nedir? Bundan daha düşük bir olasılıkla şanssız herhangi bir olayın aslında çok önemli olmadığı söylenebilir.

Biz çıkış boyutuna sahip olan bir "mükemmel" karma işlev varsa , n , ve sahip p karma mesajları (tek tek mesaj uzunluğu önemli değildir), daha sonra çarpma olasılığı yaklaşık p 2 /2 , n + 1 bu bir yaklaşım olduğu ( "küçük" p için geçerlidir , yani 2 n / 2'den önemli ölçüde küçüktür ). Örneğin, SHA-256 ( n = 256 ) ve bir milyar mesaj ( p = 10 9 ) ile olasılık yaklaşık 4.3 x 10-60'tır .

Bir katil uzay kayası ortalama 30 milyon yılda bir gerçekleşir. Yaklaşık sonraki ikinci meydana gelen bu tür bir olay bir olasılık Bu kablolar 10 -15 . Bu , SHA-256 çarpışmasından daha olası 45 büyüklük sırası. Kısaca belirtmek gerekirse, SHA-256 çarpışmalarını korkutucu bulursanız, öncelikleriniz yanlıştır.

Saldırganın karma olan iletileri seçtiği bir güvenlik kurulumunda, saldırgan bir milyardan fazla ileti kullanabilir; ancak, saldırganın başarı olasılığının hala kaybolacak kadar küçük olacağını göreceksiniz. 256 bit çıkışlı bir hash işlevi kullanmanın tüm amacı budur: çarpışma riskleri ihmal edilebilir.

Tabii ki, yukarıdakilerin hepsi SHA-256'nın kanıtlanmış olmaktan çok uzak bir "mükemmel" hash fonksiyonu olduğunu varsayar. Yine de SHA-256 oldukça sağlam görünüyor.


12
Bu çok iyi bir cevap, teşekkürler! Ancak, bir çarpışma durumunda bir nükleer santral patlayacak ve bu size bağlıysa, bu riski alacak mısınız? Tamamen haklıysanız, riski alabiliriz, çünkü medeniyetin yok edilmesi daha muhtemel 45 büyüklük sırasıdır. Sağ?
Hristo Hristov

46
@Hristo Bence evet, bu riski alır. Bir nükleer santral , mekanik arıza, binadaki insan hatası veya çalıştırırken operatör hatası gibi başka şeyler nedeniyle patlama şansı çok daha yüksektir ve zaten bu şansı kullanıyoruz. Eğer nükleer olaylara neden olan tek şey SHA-256 çarpışmaları olsaydı, şimdiye kadar neredeyse tamamen sıfır olurdu.
Roman Starkov

27
foxnews.com/science/2013/02/11/… SHA512 hakkında düşünmeye başlardım.
Dustin Oprea

37
Bir SHA-256 çarpışması yaşamadan çok önce bir asteroit tarafından silineceğimi bilerek rahatlayabilirim.
AaronLS

10
Maalesef sen sözde "doğum günü paradoksu" eksik. "Güzel masa" daha iyi bir göz atın, düşündüğünüz gibi çalışmıyor. Verdiğim rakamlar için, bu tabloda, "4.3 * 10 ^ -60" etiketli ve "128 bit" etiketli bir sütunda "10 ^ 9" değeri olacaktır (ancak tablo 10 ^ -18'in altına düşmez) ).
Thomas Pornin

47

Bir çarpışma olasılığı, dosyaların boyutuna bağlı değildir, yalnızca sayılarına bağlıdır.

Bu doğum günü paradoksunun bir örneğidir . Wikipedia sayfası bir çarpışma olasılığı hakkında bir tahmin verir. Sayıları çalıştırırsanız, Dünya'da üretilen tüm sabit disklerin SHA-256 için% 0,01'lik bir çarpışma olasılığını elde etmek için yeterli 1 MB dosya tutamayacağını göreceksiniz.

Temel olarak, olasılığı görmezden gelebilirsiniz.


5
Sonuca katlanamıyorum. Evet, hiçbir sabit disk bu sayıda dosyayı saklayamaz, ancak IMO durumu yanlış yorumluyorsunuz. Bir çarpışma için sadece iki dosya gerekir. Olasılık çok düşük olmasına rağmen yine de olabilir.
Sharptooth

11
@sharptooth: hayır, durumu yanlış tanıtmıyorum. Sizin ve tanıdığınız herkesin aynı gün trafik kazasından ölme olasılığı çok düşüktür, ancak yine de olabilir (ve bir SHA-256 çarpışmasından çok daha yüksektir). Yine de bu olasılığı görmezden geliyorsunuz.
Michael Borgwardt

11
@sharptooth: Birkaç yüz kişinin ayrı , eşzamanlı trafik kazalarından bahsediyordum . Bunu düşürmek için gerçekten hiçbir adım alamazsınız. Zaten garip bir şekilde düşük olduğu için anlamsız olurdu. Ama yine de ne kadar hayal bile edemeyeceğiniz bir SHA-256 çarpışmasından çok daha muhtemel. Thomas'ın yaptığı aynı argüman.
Michael Borgwardt

12
@sharptooth: Hayır, büyük ihtimalle yok değil sayısı hala kesinlikle SHA-256 karması alanı büyüklüğü yanında küçük kalıyor, çünkü önemli ölçüde büyür. Bu, doğru bir şekilde dikkate almadığınız tek şeydir - tüm faktörler eşit değil, gerçek büyüklüklerine göre ağırlıklandırılmalıdır. Dünyadaki her bir kişi için saniyede bir milyar karma ürettiyseniz ve bunu bin yıl boyunca yapsaydınız, hala% 1'den daha az çarpışma şansınız olurdu.
Michael Borgwardt

3
Bellekten veya diskten her okumada düzeltilmemiş bir hata olasılığını ( SHA-256 çarpışmadan çok daha yüksek bir olasılıkla) kontrol etmezseniz, olasılıkları tam olarak anlamayabilirsiniz.
Christophe

17

Her şeyden önce, sıfır değil, sıfıra çok yakın .

Anahtar soru, bir çarpışma gerçekleşirse ne olur ? Cevap "nükleer santral patlayacak" ise, çarpışma olasılığını göz ardı etmemelisiniz. Çoğu durumda sonuçlar bu kadar korkunç değildir ve bu nedenle çarpışma olasılığını göz ardı edebilirsiniz.

Ayrıca yazılımınızın (veya bunun küçük bir kısmının) bir milyarlarca bilgisayarda (günümüzde neredeyse her yerde bulunan bazı küçük gömülü mikrobilgisayarlar) dağıtılabileceğini ve aynı anda kullanılabileceğini unutmayın. Bu durumda, elde ettiğiniz tahmini mümkün olan en fazla kopya ile çarpmanız gerekir.


... kopya sayısı ile değil, veri kümelerinin sayısı ile tüm kopyalar sindirilir.
Andreas Spindler

1
Bu yanlış, çalışan yazılımın kopya sayısı önemsiz. Önemli olan tek şey işlenen benzersiz dosya sayısı ve doğum günü paradoksu hesaplama matematiğidir.
Dirk Bester

1
Başka birinin donanım arızası olasılığının - yani radyasyon nedeniyle bir yere biraz dönmenin - bir karma çarpışmasından daha olası olduğunu ve dolayısıyla karma çarpışması hakkında endişelenmenin saçma olduğunu söylediğini duydum. Şahsen, her iki durumu da ele almaya çalışacağım, güvende olacağım (bir nükleer santralde daha fazla güvenlik daha iyi), ancak potansiyel çarpışmalar listesinde karma çarpışmalar muhtemelen çok düşük olacaktır (karma alanının yeterince büyük olduğu varsayılarak) . Bununla birlikte, tüm bunlar, karma işlevinde çarpışmalara daha sık neden olan gizli bir davranış olmadığını varsayar.
Chris Middleton


@GreenTree Bağlantı kurduğunuz şey, kasıtlı olarak çarpışmalar yapmakla ilgilidir.
Sharptooth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.