it-swarm-tr.com

Neden kendimizi devirmiyoruz?

Neden kendi güvenlik planlarımızı yaratmamalıyız?

Burada özel kripto ve özel güvenlik mekanizmaları, özellikle de şifre karma hakkında birçok soru görüyorum.

Bunu göz önünde bulundurarak, aşağıdaki özelliklere sahip kanonik bir cevap arıyorum:

  • Bir acemi anlamak kolay.
  • Neden kendinizin yuvarlanması kötü bir fikirdir.
  • Güçlü örnekler sunar.

Zorunlu xkcd.

255
Polynomial

Kendinizi yuvarlayabilirsiniz, ancak güvenlik/şifreleme konusunda uzman değilseniz veya planınızı birden fazla uzman tarafından analiz ettiyseniz, büyük bir güvenlik hatası yapacaksınız. Herkesin görebileceği ve analiz edebileceği açık kaynaklı, herkesçe bilinen bir şifreleme şemasına bahse girmeye daha istekliyim. Daha fazla göz, uzman olmayanlar tarafından şirket içinde geliştirilen bir şeyin aksine, mevcut sürümün büyük güvenlik açıklarına sahip olmadığı anlamına gelir.

Phil Zimmermann'ın (PGP yaratıcısı) Şifrelemeye Giriş (Sayfa 54) :

70'lerin başında kolejdeyken, parlak bir şifreleme planı olduğuna inandığım şeyi tasarladım. Şifreleme metni oluşturmak için düz metin akışına basit bir sözde sayı akışı eklendi. Bu, görünüşte şifre metninin herhangi bir frekans analizini engelleyecek ve en becerikli hükümet istihbarat kurumları için bile kırılamayacaktı. Başarım için kendimi çok rahat hissettim.

Yıllar sonra, aynı şemayı birkaç giriş kriptografi metninde ve öğretici makalede keşfettim. Ne güzel. Diğer kriptograflar da aynı şemayı düşünmüşlerdi. Ne yazık ki, plan basit bir şekilde kırmak için temel kriptanalitik tekniklerin nasıl kullanılacağına dair basit bir ödev olarak sunuldu. Parlak planım için çok fazla.

Bu hileli deneyimden bir şifreleme algoritması tasarlarken yanlış bir güvenlik duygusuna düşmenin ne kadar kolay olduğunu öğrendim. Çoğu insan, becerikli bir rakibin uzun süreli ve kararlı bir saldırısına dayanabilecek bir şifreleme algoritması geliştirmenin ne kadar zor olduğunu fark etmez.

(Bu sor yukarıdaki alıntı hakkında daha fazla tartışmaya sahiptir.)

"Kendi Kriptografinizi/Güvenliğinizi Kendin Etmeyin" konusunda ikna değilseniz, muhtemelen bir uzman değilsiniz ve muhtemelen yapacağınız birçok hata vardır.

Başvurunuz aşağıdakilere karşı sağlam mı?

  • Zamanlama Saldırıları . Örneğin, nanosaniye için tamamen kötü anahtarlar ve kısmen kötü anahtarlar toplam başarısız olmak için aynı miktarda zaman alır? Aksi takdirde, doğru zamanlamayı/şifreyi bulmak için bu zamanlama bilgisinden yararlanılabilir.

  • Önemsiz Kaba Kuvvet Saldırıları ; örneğin, birkaç saniye içinde (birkaç yıl içinde kırıldığından endişe ettiğinizde) birkaç saniye içinde yapılabilir. Belki de güvenlik fikriniz bir milyarda bir (1 000 000 000) girme şansı olabilir (ya bot ağı olan biri birkaç milyar kez denerse?). Benim fikrim ~ 2 1 gibi bir şey hedeflemektir128 (34 000 000 000 000 000 000 000 000 000 000 000 000), kabaca on milyon milyar milyar kat daha güvenli ve yolunuzu tahmin etme alanının tamamen dışında.

  • Paralel olarak kullanıcı hesaplarına yapılan saldırılar; örneğin, veritabanındaki tüm parola karma'larında aynı (veya daha kötüsü) 'tuz' içeren parolaları, sızdırılan LinkedIn karma'ları gibi veritabanındaki karma parolalara sahip olabilirsiniz.

  • Herhangi bir hesaba önemsiz bir şekilde saldırın. Belki de sadece her bir karma (örneğin, MD5/SHA1/SHA2) şifresi ile benzersiz bir rastgele tuz vardı, ancak her saniyede milyarlarca olası şifreyi deneyebileceğiniz için, ortak şifre listeleri, sözlük saldırıları vb. Saldırganların sadece çoğu hesabı kırması için birkaç saniye ayırın. Düzenli karmaları uygun bir faktörle (tipik olarak 10) önlemek veya anahtarla güçlendirmek için bcrypt veya PBKDF2 gibi güçlü kriptografik karmaları kullanın(3-8)).

  • Tahmin edilebilir/zayıf "rastgele" sayılara saldırır. Belki de mikrotime/MT-Rand veya sözde rasgele sayıyı Debian OpenSSL birkaç yıl önce yaptı gibi tohumlamak için çok az bilgi kullanırsınız.

  • Korumaları baypas eden saldırılar. Belki web uygulamasında karma/giriş doğrulama istemci tarafı yaptınız ve bu, komut dosyalarını değiştiren kullanıcı tarafından atlandı. Veya istemcinin sanal bir makinede çalışmayı denediği veya tersine mühendislik/belleği değiştirme/ya da bir şekilde hile yapmayı denediği yerel bir uygulamanız var.

  • Diğer saldırılar, örneğin (tam bir liste olmaya çalışmaz) CSRF , XSS =, SQL enjeksiyon , ağ gizlice dinleme, tekrar saldırıları , Orta saldırılardaki adam , arabellek taşmaları , vb. En iyi korumalar çok hızlı bir şekilde özetlenir.

    • CSRF: POST eylemlerinde rastgele oluşturulmuş CSRF belirteçleri gerektirir; XSS: veritabanına girmeden ve kullanıcı/tarayıcıya göstermeden önce güvenilmeyen kullanıcı girişini her zaman doğrulayın/kaçın.
    • SQLi: her zaman bağlı parametreleri kullanın ve kaç sonuç döndürüleceğini sınırlayın.
    • Gizli dinleme: hassas ağ trafiğini şifreleme.
    • Yeniden Oynat: Her bir işleme benzersiz bir kerelik nonces ekleyin.
    • MitM: Güven Ağı/En son ziyaret edilen siteyle aynı/Güvenilen CA tarafından verilen sertifika.
    • Arabellek taşmaları: güvenli programlama dili/kütüphaneler/yürütülebilir alan koruması/vb.).

Sadece en zayıf sömürücü bağınız kadar güçlüsünüz. Ayrıca, sadece kendi planınızı döndürmediğiniz için, planınızın güvenli olacağı anlamına gelmez, yaydığınızı yaratan kişinin bir uzman olmadığı veya başka türlü zayıf bir plan oluşturduğu muhtemeldir.

233
dr jimbob

Benim bölgede ikinci hikaye aile odası dışında gerçekten güzel bir güverte ile bir ev var. Altına gidip nasıl inşa edildiğini görene kadar şişmiş görünüyor. Ev sahibi, ona bir güverte nasıl inşa edileceğini söylemek için bir inşaatçıya veya mimara büyük paralar ödemesine gerek olmadığına karar verdi. Kendisi inşa etti ve altında 2x4'lerin kaotik bir örümcek ağı gibi görünüyor. O [~ # ~] muhtemelen [~ # ~] iyi olacak. Şahsen, böyle bir amatör inşaat işinde hayat ve uzuv riskini tercih etmem.

Şifreleme yapmak için bir algoritma geliştirmek istiyorsanız, bunu yapmalı ve iyi zaman geçirmelisiniz. Çevrimiçi banka ekstrelerinizi gizlemek için kullanmanızı önermem, ancak kız arkadaşınızın evdeki aşk mektuplarını şifrelemek istiyorsanız, karınız bir kriptanalist değilse, bu iyi olmalı.

“Amerikan Kara Odası” nda, Donanmanın kendi şifrelerini geliştirmesiyle ilgili bir hikaye var. Donanma, kendilerinden memnun olan yeni şifreleme sistemlerini gösterecek ve Ordu analisti Yardley, derhal kodu kırarak neyi yanlış yaptıklarını açıklayacaktı. Kodu düzeltmeyi teklif ederlerdi, ancak Yardley, belirli bir zayıflığı giderirken, sağlam bir anlayış olmadan, her zaman bir sorun yaşayacaklarını belirtti. Onların sistemi özünde kusurluydu. Sızdıran bir çatıyı düzeltmek gibi. Sonsuza kadar yama yapabilirsiniz, ancak su hala yolunu bulacaktır. Islanmak istemiyorsanız, çatının çatılar hakkında biraz daha fazlasını bilen biri tarafından yapılması gerekir.

Kayınvalidemde yaptığım kendin yap beyin ameliyatı hakkında hiç konuştum mu? O gidip ölene kadar her şey yolunda gitti. Cidden, çok azımız sağlığımıza amatör bir doktora güveniriz; Amatör yazılımların sırlarına gerçekten güvenmek istiyor musun? Kabul etmekten nefret ediyorum ama birkaç ayda bir piyango bileti alıyorum. Tamamen kaybetmeyi bekliyorum ama potansiyel ödeme çok büyük. Oranları oynayabilirim ve belki de öne çıkacağım. Eğer yapmazsam, param yok. Neden şifreleme olasılıklarını oynuyorsunuz? Ödeme orada değil.

Saygılarımızla,/Bob Bryan

  • Önerilen: Herbert O. Yardley, “Amerikan Kara Odası” - Bugün 1931'de yazıldığı kadar ilginç bir kitap. “Amerikan Kara Odası, anlatılan iyi hikayelerin yanı sıra Yardley'in kriptanalizdir. 1932'de yurtdışında olduğu kadar yurtdışında da en çok satanlardı. ” NSA: Pearl Harbor İncelemesi - Kara Oda
63
Bob Bryan

Bruce Scheier yazdı 1998'de geri döndü:

En clueless amatörden en iyi kriptografa kadar herkes, kendisinin kıramayacağı bir algoritma oluşturabilir. Hatta zor değil. Zor olan, yıllar süren analizlerden sonra bile kimsenin kıramayacağı bir algoritma oluşturmaktır. Bunu kanıtlamanın tek yolu, algoritmayı etrafındaki en iyi kriptograflar tarafından yıllarca süren analize tabi tutmaktır.

Cory Doctorow bu kavramı "Schneier Yasası" olarak 2004 yılında tanıttı konuşma :

Herhangi bir kişi bir güvenlik sistemini o kadar akıllı icat edebilir ki, sistemi nasıl kıracağını düşünemez.

Bir takip olarak, this , yine Schneier'den:

Birisi size bir güvenlik sistemi verdiğinde ve "Bunun güvenli olduğuna inanıyorum" dediğinde, sormanız gereken ilk şey "Sen kimsin?" Bana, sistemin güvenliği konusundaki iddianızın bir şey ifade ettiğini göstermek için kırdığınızı gösterin.

Phil Zimmerman ayrıca orijinal PGP makaleleri :

Yetmişli yılların başında kolejdeyken, parlak bir şifreleme planı olduğuna inandığım şeyi tasarladım. Şifreleme metni oluşturmak için düz metin akışına basit bir sözde sayı akışı eklendi. Bu görünüşte şifre metninin herhangi bir frekans analizini engelleyecek ve en becerikli Hükümet istihbarat kurumları için bile kırılamayacaktı. Başarım için kendimi çok rahat hissettim. Çok eminim.

Yıllar sonra, aynı şemayı birkaç giriş kriptografi metninde ve öğretici makalede keşfettim. Ne güzel. Diğer kriptograflar da aynı şemayı düşünmüşlerdi. Ne yazık ki, plan basit bir şekilde kırmak için temel kriptanalitik tekniklerin nasıl kullanılacağına dair basit bir ödev olarak sunuldu. Parlak planım için çok fazla.

59
tylerl

Orijinal yayın bir örnek istedi:

Babington Plot , sorunlara neden olan kötü bir şifreleme sisteminin iyi bir öyküsüdür. İskoç Kraliçesi Mary kuzeni Kraliçe I. Elizabeth tarafından hapsedildi ve dışarıdaki insanlarla şifreli mektuplarla iletişim kuruyordu. Alfabenin yerini e, t, i ve o gibi ortak harfler için atanmış ekstra harfler ile dalgalı çizgiler, çapraz daireler ve üçgenlerden oluşan bir kriptoalfabet aldı, böylece harflerin anlamı frekans analizi ile hızlı bir şekilde bulunamadı. Ayrıca analistleri atmak için şifre çözmede göz ardı edilen birkaç boş karakter eklediler. Sorun şu ki, Kraliçe Thomas Phelippes'in personeline müdahale edildiğinde mesajların şifresini çözebilen çok yetkin bir kriptanalist vardı.

İşler ilerledikçe Mary, kaçması ve tahtını ele geçirmesi için bir komployla birlikte gitti. Kraliçe'nin ajanları, Meryem'in son mektubunu teslim etmeden önce ele geçirdiğinde, “arsaya uygun şekilde ödüllendirilebilmeleri için” arsaya katılanların adlarını soran şifreli bir cümle eklediler. Mary’nin muhabiri dürüstçe cevap verdi ve Kraliçe’nin ajanları dahil olan herkes idam edildi.

Çocuklarım küçükken, öğle yemeğiyle (Vernam şifresi kullanarak) kriptogramları gönderirdim. Genellikle şakaydılar ama hiçbir zaman önemli değildi. Böyle bir durumda, kendi rulo iyi. İngiltere Kraliçesi'ni (veya İran Şahı'nı veya Myanmar'da yavaşça reform yapan Thug-korsanlığı) devirmeyi planlıyorsanız, kullandığınız şeyin kolayca şifresinin çözülemediğinden emin olmanızı öneririm. Bruce Schneier'in dediği gibi , herkes şifresini çözemedikleri bir şifreleme sistemi bulabilir, ancak başka hiç kimsenin şifresini çözemeyeceği bir şey bulmak daha zordur.

45
Bob Bryan

Burada çalıştığım yerde olanlara bir örnek vereceğim. Bir iş arkadaşım şirket FTP hesapları için bir şifre depolama sistemi (uzun hikaye, sorma) tasarlamaktan sorumluydu. Devralmam istendi ve ilk gördüğüm şey:

public string Encrypt(string rawText)
{
    // homebrew code here
}
public string Decrypt(string encrypted)
{
    // homebrew code here
}

Hemen onları standart kriptografik kütüphane çağrılarıyla değiştirdim ve sorgulandığımda cevapladım:

"Sen asla kendi şifreleme rutini at."

İş arkadaşım bana saatlerce bununla savaştı. çok zaman harcadı, mükemmel, böylece bir saldırganın muhtemelen onu kırmanın herhangi bir yolu olamazdı. . Bir noktada, “Bu AES256'dan daha güvenlidir, çünkü kimse nasıl çalıştığını bilmiyor.” Dediler.

Bu noktada iki şey biliyordum:

  • İş arkadaşım, Dunning Kruger etkisinin mükemmel bir örneğiydi (bir konu hakkında bilgi eksikliği, kendi yeteneklerini fazla tahmin etmeyi daha olası kılıyor)
  • İş arkadaşımın düzeltilmesi gerekiyordu. Sadece "yanlış" oldukları için değil, aynı zamanda diğer sistemlerini tasarlamaktan sorumlu oldukları için ve onların ev yapımı şifrelemeyi sürdürmelerini istemedim.

Bu yüzden kodu bir kenara koydum. Ve bunun yerine, sadece Encrypt () işlevini çağırarak ve çıktıyı inceleyerek rutini kod kırmayı denedim. Ben bir acemiyim - ben bir kriptoanalist değilim - ama sadece 4 saat sürdü. Onlara çatlağı gösterdim, adımlarımda yürüdüm ve tekrarladım: Asla kendi şifrelemenizi devretmeyin. Umarım kalbe götürürler ve bir daha asla yapmazlar.

Yani şu şekilde kaynar:

  1. Şifrelemenin güvenliğinden ne kadar emin olduğunuz hayır gerçekte ne kadar güvenli olduğunu gösteriyor.
  2. Asla kendi şifrelemenizi yapmayın (yeterince sık tekrarlanamaz ...)
13
Kevin

Kriptografide, beklediğiniz şekilde size saldıran sadece bir rakibiniz yok. Bu, akıl yürütmeyi zorlaştıran şeydir, çünkü kesinlikle HER ŞEYİ düşünmelisiniz.

Ama gerçekten, hiç kimse olası her rakibi alt edemez. Yapabileceğimiz en iyi şey, ortak bilgimizi ve mevcut araştırmamızı mümkün olduğunca kullanmak ve oradan inşa etmek için bebek adımları atmak, saldırı vektörü ile saldırı vektörü.

Fizikte araştırma yapmak ya da en üst düzeyde satranç oynamak olsun, insan yeteneğinin eşiğinde birçok soruna bu şekilde yaklaşılır.

Bu alanlarda, diğer insanların üzerinde çalıştıklarını görmezden gelebilir ve kendi stratejilerinizi ve teorilerinizi tasarlayabilirsiniz ve ilk yetenekli rakibinizle tanışırsanız, en son teknolojiyi kullanarak sayabileceğiniz daha fazla yoldan yok olursunuz.

TL; DR
İnsanlar sadece kriptografi yapmak için çok aptallar.

13
mschwaig

Bir şifreleme sistemi tasarlayan birinin, oluşturulduğu şirketten ayrılmayacağını garanti etmek ve bu tasarım hakkındaki bilgilerini eski işverenlerinin aleyhine kullanmamak, ancak şifreleme sistemini herhangi bir şekilde bir düşmanın edinebileceği bu tür bir bilgi işe yaramaz hale getirilebilir.

Anahtar dışında her şeyi bilen saldırganlara karşı bile güvende olan bir şifreleme sistemi varsa ve anahtarı rastgele oluşturulmuş yeni bir değere değiştirirse, sistem yeni anahtara sahip olmayan saldırganlara karşı güvenli olacaktır. Saldırganlar, anahtar değiştirilmeden önce sistemden ödün vermek için yeterli bilgiye sahip olsalar bile, daha sonra sistemi kıramazlardı.

Bir sistemin alışılmadık derecede değerli verileri koruması gerekmedikçe, içeriden bilgi olmadan, onu kırmanın maliyeti, bu şekilde elde edilebilecek herhangi bir değeri aşacak kadar iyi olacak şekilde bir şifreleme sistemi tasarlamak çok zor değildir. İyi bir kripto tasarlamak kolay olduğu için değil, ancak çoğu sistem bir saldırgan için çok değerli bir şeyi korumak için kullanılmadığı için (yetenekli bir kriptograf bir sistemi 58 dakika içinde kolayca kırabilse bile, bir saldırgana bu tür bilgilerin değeri kriptografın zamanının maliyetini aşmazsa bir risk).

Bununla birlikte, içeriden gelen verilere sahip birisine karşı sağlam hale getirilebilecek bir sistem tasarlamak çok daha zordur ve bir anahtarı değiştirerek - bir anahtarı değiştirerek sağlam hale getirilebilecek bir sistemi tasarlamak için yeterli uzmanlığa sahip çok az insan vardır. hem kriptografide tasarım ve uzmanlık konusunda tam bilgiye sahip olan biri. İçeriden bilgi sahibi olmayan bir kriptografik uzman, bir tasarımcının yapabileceği yüzlerce veya binlerce olası hatayı kontrol etmek zorunda kalabilir, ancak içeriden bilgi, o kişinin bir hatayı hemen tanımlamasına ve sömürmesine izin verebilir.

1
supercat

Aslında, Kendi kripto parasını yuvarla, sonra at.

Crypto Fails dediği gibi, herhangi bir kripto kodu yazamayacağınızı söylemek biraz zor. Asıl sorun bu kodu almamak ve hiçbir yerde kullanmamaktır (yayınlanmış yazılımda).

Kesinlikle bir şans vermeli ve bir öğrenme deneyimi olarak kullanmalısınız. Bir kriptanalist ile arkadaşsanız ve yazdıklarınızla ilgili geri bildirimlerini alabilirsiniz. Eğer tuzlarına değiyorlarsa, onlar da kodu gerçek hayatta kullanmamanızı söyleyecektir, ancak öğrenmenize ve büyümenize yardımcı olacak bazı bilgiler verebilmelidirler.

0
NH.