Şifreleme Ters Çevrilemez mi?


9

Orijinal değer sonsuza kadar kaybolur böylece şifreli bir dize şifresi çözülemez izlenimi altındayım.

Ancak, aşağıdaki dize her zaman "dominik" e (adım) eşitse , tersine çevirmek için mantıklı bir yol olamaz; rastgele olmadığı gibi, ne de tarih / saate dayalı değil, ama mantıklı bir yöntemi var mı?

0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=

"Dominic" (string) 'i neyi veya kaç kez şifrelediğim önemli değil, her zaman yukarıdaki gibi eşittir. Peki, böyle bir ipin şifresini çözmenin bir yolu olmamalı mı?

Neden bahsettiğime örnek:

public string EncryptPassword(string password)
{
    return Convert.ToBase64String(
        System.Security.Cryptography.SHA256.Create()
        .ComputeHash(Encoding.UTF8.GetBytes(password)));
}

3
Bir adın kriptografik karmasından mı bahsediyorsunuz (genellikle parolalarda kullanılır)? veya şifreleme (yetkili bir kişi tarafından çözülmesi amaçlanan)?

11
SHA256a, kriptografik hızlı arama fonksiyonu , bir enkripsiyon algoritması. Bu bir olan tek yönlü işlevi .

1
Zorunlu sorumluluk reddi: karma tuz ( en.wikipedia.org/wiki/Salt_(cryptography) ). Ayrıca SHA256, örneğin GPU'ları kullanan kaba kuvvet saldırılarıyla ilgili sorun yaşamamak için çok hızlı olma eğilimindedir. PBKDF2 veya scrypt gibi bir şeyin kullanılması tavsiye edilir.
Maciej Piechotka

7
Hashing bir kıyma makinesi gibidir. Bir ineği kıyma haline getirebilirsiniz, ancak tam tersi olamaz.
Neil McGuigan

1
Genel / özel anahtar şifrelemesiyle kafanız mı karıştı? Birisi ortak anahtarınızla bir mesajı şifrelerse, bu mesajın şifresini kendi başına çözemez. Sadece bunun şifresini çözebilirsin - ve belki de NSA, Mossad, FSB ve Tiroler Geheimdienst.
ott--

Yanıtlar:


39

Şifreleme her zaman tersine çevrilebilir. Şifreleme noktası, bir iletiyi alıp gizli bir anahtarla kodlamaktır, böylece yalnızca anahtarı olan başka bir kişi şifrelemeyi tersine çevirebilir ve iletiyi okuyabilir.

Ne burada bakıyoruz olduğu karma kriptografik teknikler genellikle karmaları uygulanmasında kullanılır rağmen, şifreleme aynı değildir. Bir karma fikri, tekrarlanabilir eski bir değere eşlenen yeni bir değer oluşturmak için karmaşık matematiksel teknikler kullanmasıdır. Anahtar yok ve tersine çevrilmesi amaçlanmıyor. Bir kriptografik olarak güçlü karma Değerini varsa, o matematiksel özellik oluşturulur Akimin karma değeridir B, bu kasıtlı bir başka değer yaratmak için çok ama çok zor Cayrıca sağlamalarının B.

Karmaların tersine çevrilmesi gerekmez, çünkü kimlik doğrulama için kullanılırlar. Bana bir kullanıcı adı ve şifre verirseniz, o şifreyi veritabanımda saklamamı gerçekten istemezsiniz, çünkü birisi içeri girerse ve veritabanıma erişirse, şifrenizi alabilirler! Bunun yerine, şifrenizin karmasını veritabanında saklıyorum. Ardından, giriş yaptığınızda, gönderdiğiniz şifrenin karmasıyla eşleşen bir şifre girişi ile kendinizle eşleşen bir kullanıcı adı olup olmadığını kontrol ediyorum ve eğer öyleyse doğrulandınız, çünkü bir karma çarpışma oluşturmak çok zor ( aynı değere hash olan iki değer) iyi bir karma ile, bu yüzden kullandığınız şifrenin doğru olduğundan neredeyse tamamen eminim.

Güçlü bir kriptografik karmanın diğer özelliği, tersine çevirmenin çok zor olmasıdır. 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE="Dominic" değerinin karması olduğunu biliyorsunuz, çünkü sadece çalıştınız, ama bunu bilmiyor ve nereden bakmaya başlayacağınızı bilmiyorsanız ve sahip olduğunuz tek şey 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=, kelimenin tam anlamıyla milyarlarca eğer karma iyi ise orijinalin "baskın" olduğunu anlamak için yıllardır. Yine, bu, bir şifre listesinin çalınması durumunda teminat hasarını önlemek için yararlıdır.


2
Bir karma eşleşme bulana kadar bilinen kelimelerin bir listesini alıp gözden geçiremez miydim? Web siteleri bu yüzden şifrelerinizi daha güvenli hale getirmek için büyük harf ve rakam eklemeyi önerir mi?
user1477388

15
@ user1477388: Evet, tam olarak web sitelerinin bunu önermesinin nedeni budur. Bu, karma parolalara saldırmanın bilinen bir yoludur: bariz nedenlerden ötürü "sözlük saldırısı" olarak adlandırılır ve sözlükte olmayan kelimeleri kullanmak, onlara karşı güvende olmak için önemli bir adımdır.
Mason Wheeler

1
Böyle görünüyor "bu şekilde geri alınamaz inanmak yetersizlik" Benim için bazı iyi fikir vardır security.stackexchange.com/questions/11717/... G / istiyorum bunları tersine çevirmek için herhangi bir ihtiyaç olduğunu değil; Ben sadece merak ediyorum.
user1477388

3
Başka bir öneri de, her bir parola için karma olmadan önce benzersiz bir şey eklemektir. Tek karakterlik bir şifre farkı tamamen farklı bir karma yapar, fikir tüm karma sonuçlarınızın benzersiz olacağıdır. Aksi takdirde, bir bilgisayar korsanı "password123" kelimesinin karmasını bulursa, bunu belirli bir karmaya sahip TÜM kullanıcı adlarına karşı kullanmayı bilirlerdi. Bu tür şeyler için iyi bir başınız var gibi görünüyor, ama çok iyi şanslar.
Katana314

1
@MasonWheeler: sözlükte olmayan kelimeleri kullanmak gerçekten gerekli değildir, özellikle tipik bir saldırıda kullanılan "sözlük" ün Oxford sözlüğü gibi bir şey olmadığını düşünmek yerine, şifrelerde sıkça kullanıldığı bilinen dizelerin bir listesi . Bu sözcüklerden kaçınmaya çalışmak yerine, 2000 veya daha fazla kelimeden oluşan bir listeden 5 rastgele kelime seçmek daha iyidir: 2000 kelimelik sözlük bilinse bile böyle bir parola, brute- 64'ten 8 rastgele karakterden fazla güç.
tdammers

9

Yaptığınız şey "şifreleme" değildir; "karma". İkisi arasındaki başlıca farklılık şifreleme olmasıdır olan karma ilk orijinal ileti bilerek dışında herhangi bir koşul olarak geri alınması çok zor olduğu tasarlanmış olsa da, (tabii ki, doğru anahtar ile) kolaylıkla geri çevrilebilir.

Teoride, karmalar "rastgele bir kehanet", bir eidetik hafızalı varsayımsal bir homunculus ve üst sınır sınırı olmayan mükemmel benzersiz, mükemmel rastgele sayılar üretmenin bir yolunu simüle eder. Bu küçük adama bir mesaj verirsiniz ve iki şeyden biri olur; ya daha önce hiç mesaj görmemişti, bu durumda yeni bir rastgele sayı üretir ve bunu size özet olarak verir ya da o mesajı daha önce görmüş ve böylece onu gördüğünde ürettiği sayıyı hatırlar ve verir. İlk kez. Bu teorik modelde, bir mesaj ile özeti arasında sıfır bir ilişki vardır ve RNG'den iki kez hiçbir tek sayı gelmeyecekse, bir çarpışma olasılığı yoktur.

Ne yazık ki, ideal bir rastgele kehanetimiz yok; bu fikrin, kehanetin herhangi bir yerde herhangi bir kişinin verdiği her mesajı verimli bir şekilde depolama ve verimli bir şekilde hatırlama yeteneği ve müşterilerin yüzlerce veya binlerce ondalık basamak olabilen bir sayıyı kabul etme yeteneği gibi dijital bir uygulama için pratik imkansızlıkları vardır. uzunluğunda. Bunun yerine, görünürde belirleyici olmayan bir dönüşüm (aynı mesaj => aynı karma) oluşturmak için iletinin kendisi üzerinde çalışan geri döndürülemez (tek yönlü) matematiksel işlemler olan karma işlevlerimiz vardır.karma ve orijinal mesaj arasındaki ilişki. Yorumlarda belirtildiği gibi, mesajda sistematik değişiklikler yapılarak üretilen karma değerinde öngörülebilir bir değişiklik olmamalıdır; ideal olarak, mesajın tek bir bitinde bir değişiklik verildiğinde, sindirimin her bir bitinin değiştirme şansı% 50 olacaktır.

Karma işlevinin birçok kullanımı vardır; her iki tarafın da düz metin sırrını bilmesine gerek kalmadan, meydan doğrulama için kullanılır (şifreler gibi giriş kimlik bilgilerini düşünün) ve bir iletinin tahrif edilmediğini veya bozulmadığını doğrulamak için sağlama toplamı olarak kullanılırlar. Ayrıca "iş kanıtı" senaryolarında da kullanılırlar; tamamlanması zor ancak doğrulanması kolay hesaplamalı görevler.

Bu karma ile sonuçlanacak bir mesaj (herhangi bir mesaj) üretmek için bir SHA256 karma özetini verimli bir şekilde tersine çevirmenin bir yolunu bulsaydınız, aslında karma işlemin esasen kırıldığını göstererek bir kanıt olurdu. Aslında, SHA256 güvenli olduğuna inanılıyor, yani ne kadar pratik olursa olsun, bir karma özetle başlamak ve her olasılığı denemekten daha az çalışma gerektiren bir çarpışma mesajı üretmek için belgelenmiş bir yöntem yok (SHA-256 için ideal olan 2) ^ 256 ~ = 10 ^ 77 olasılık).


İdeal bir karma fonksiyonunda, girişteki bir bitlik bir değişikliğin, çıkış bitlerinin% 50'sinde bir değişikliğe yol açması gerektiğini belirtmek gerekir. Buna çığ etkisi denir .
CVn

2
@ MichaelKjörling: Kesinlikle, her bitin% 50 olasılıkla değişmesini beklemeliyiz, bu da bitlerin% 50'sinin ortalama olarak değişmesini beklerken (ancak ima eder) farklıdır.
Dietrich Epp

@DietrichEpp Gerçekten de bağlandığım Wikipedia makalesi bunu açıkça ortaya koyuyor, ancak son kullanıcının iki giriş arasında değiştirilen bit sayısını ölçmesi daha kolay.
CVn
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.