Karma ve Şifreleme algoritmaları arasındaki temel fark


509

Karma ve şifreleme algoritmaları arasında çok fazla kafa karışıklığı görüyorum ve hakkında daha fazla uzman tavsiyesi almak istiyorum:

  1. Karma ve şifreleme ne zaman kullanılır?

  2. Karma veya şifreleme algoritmasını (teorik / matematiksel düzeyden) farklı kılan, yani karmaları geri döndürülemez yapan şey (gökkuşağı ağacının yardımı olmadan)

İşte aradığım kadar ayrıntıya girmeyen bazı benzer SO Soruları:

Gizleme, Karma ve Şifreleme arasındaki fark nedir?
Şifreleme ve karma arasındaki fark


28
Bunun , terimleri karıştırdıklarında insanları yönlendirmek için bir soru olduğunu öngörebilirim . :)
Adam Paynter

18
karma tek
yönlüdür

Hashler ayrıca büyük yapıları ve nesneleri, örneğin dosyaları indekslemek için de yararlıdır. Karma tabloya bakınız .
HABO

22
Hashing bir kıyma makinesi gibidir. Bir ineği hamburgere çevirebilirsiniz, ancak tersini değil.
Neil McGuigan

Sorumun düzenlendiğini fark ettim. İkisi arasındaki en üst seviye farkları her zaman biliyordum, ancak düşük seviye / matematiksel farklılıklar hakkında daha çok merak ettim. :) Her iki durumda da, SO için çok iyi içerik! Çok teşekkürler!
Kenny Cason

Yanıtlar:


738

Wikipedia'da bakabilirsiniz ... Ama bir açıklama istediğiniz için burada elimden geleni yapacağım:

Karma İşlevleri

Bunlar, rasgele uzunluk girişi ile (genellikle) sabit uzunluk (veya daha küçük uzunluk) çıkışı arasında bir eşleme sağlar. Basit bir crc32'den, MD5 veya SHA1 / 2/256/512 gibi tam gelişmiş bir şifreleme karma işlevine kadar herhangi bir şey olabilir. Mesele şu ki, tek yönlü bir harita var. Her zaman çoktur: 1 eşleme (her zaman çarpışma olacaktır) çünkü her işlev girebildiğinden daha küçük bir çıktı üretir (Mümkün olan her 1mb dosyasını MD5'e beslerseniz, bir ton çarpışma elde edersiniz).

Tersine çevirmenin zor (veya pratik olarak imkansız) olmasının nedeni, dahili olarak nasıl çalıştıklarıdır. Çoğu kriptografik hash fonksiyonu, çıktıyı üretmek için birçok kez girdi setini tekrarlar. Dolayısıyla, girişin her bir sabit uzunluklu yığınına (algoritmaya bağlı olan) bakarsak, hash fonksiyonu buna mevcut durumu çağıracaktır. Daha sonra durum üzerinde yinelenir ve yeni bir duruma dönüştürülür ve bunu kendi başına geri bildirim olarak kullanır (MD5 bunu her 512 bit veri parçası için 64 kez yapar). Daha sonra, sonuçta hash oluşturmak için tüm bu iterasyonlardan elde edilen durumları bir şekilde birleştirir.

Şimdi, karmanın kodunu çözmek istiyorsanız, önce verilen karmanın yinelenen durumlarına nasıl bölüneceğini anlamanız gerekir (birçoğu daha büyük girdiler için, bir veri parçasının boyutundan daha küçük girişler için 1 olasılık). O zaman her durum için yinelemeyi tersine çevirmeniz gerekir. Şimdi, bu çok zor neden anlamak çalışırken hayal açıklamak ave başağıdaki formülden: 10 = a + b. 10 pozitif kombinasyon vardır ave bbu işe yarayabilir. Şimdi bir sürü kez döngü yapalım:tmp = a + b; a = b; b = tmp. 64 yineleme için denemeniz için 10 ^ 64'den fazla seçeneğiniz vardır. Ve bu sadece bazı devletlerin yinelemeden yinelemeye kadar korunduğu basit bir ekleme. Gerçek karma işlevleri 1'den fazla işlem yapar (MD5, 4 durum değişkeninde yaklaşık 15 işlem yapar). Ve bir sonraki yineleme, bir önceki ve bir önceki durumun durumuna bağlı olduğundan, bir önceki durumun yaratılmasında yok edildiğinden, belirli bir çıkış durumuna yol açan giriş durumunu belirlemek imkansızdır (her yineleme için daha az değildir). Bunu, çok sayıda olasılıkla birleştirin ve bir MD5'in bile kodunun çözülmesi neredeyse sonsuz miktarda (ancak sonsuz değil) kaynak gerektirecektir. O kadar çok kaynak var ki,

Şifreleme İşlevleri

Rasgele uzunluk girişi ve çıkışı arasında 1: 1 eşleme sağlarlar. Ve her zaman geri dönüşümlüdürler. Unutulmaması gereken önemli olan, bazı yöntemlerle tersinir olmasıdır. Ve verilen bir anahtar için her zaman 1: 1'dir. Şimdi, birden fazla girdi var: aynı çıktıyı üretebilecek anahtar çiftleri (aslında şifreleme işlevine bağlı olarak genellikle vardır). İyi şifrelenmiş veriler rastgele gürültüden ayırt edilemez. Bu her zaman tutarlı bir formatta olan iyi bir karma çıktıdan farklıdır.

Kullanım Örnekleri

Bir değeri karşılaştırmak istediğinizde ancak düz temsili saklayamadığınızda (herhangi bir nedenden dolayı) bir karma işlevi kullanın. Güvenlik nedenleriyle düz metin saklamak istemediğiniz için parolalar bu kullanım senaryosuna çok iyi uymalıdır (ve olmamalıdır). Ama korsan müzik dosyaları için bir dosya sistemini kontrol etmek isteseydiniz? Müzik dosyası başına 3 mb saklamak pratik olmaz. Bunun yerine, dosyanın karmasını alın ve saklayın (md5, 3mb yerine 16 bayt depolar). Bu şekilde, sadece her dosyayı hash yapar ve saklanan karma veritabanıyla karşılaştırırsınız (Bu, yeniden kodlama, dosya başlıklarını değiştirme vb. Nedeniyle pratikte iyi çalışmaz, ancak örnek bir kullanım örneği).

Giriş verilerinin geçerliliğini kontrol ederken bir karma işlevi kullanın. Bunun için tasarlandılar. 2 adet girişiniz varsa ve bunların aynı olup olmadığını kontrol etmek istiyorsanız, her ikisini de bir karma işleviyle çalıştırın. Çarpışma olasılığı, küçük girdi boyutları için astronomik olarak düşüktür (iyi bir hash fonksiyonu olduğu varsayılarak). Bu yüzden şifreler için önerilir. 32 karaktere kadar parolalar için, md5 çıkış alanının 4 katına sahiptir. SHA1, çıkış alanının 6 katına sahiptir (yaklaşık olarak). SHA512'nin çıktı alanının yaklaşık 16 katı vardır. Parolanın ne olduğunu gerçekten umursamıyorsunuz , saklanan parola ile aynı olup olmadığını önemsiyorsunuz. Bu yüzden parolalar için karma kullanmalısınız.

Giriş verilerini geri almak istediğinizde şifreleme kullanın. Kelime ihtiyacına dikkat edin . Kredi kartı numaralarını saklıyorsanız, bunları bir noktada geri çıkarmanız gerekir, ancak bunları düz metin saklamak istemezsiniz. Bunun yerine, şifrelenmiş sürümü saklayın ve anahtarı olabildiğince güvenli tutun.

Hash işlevleri de veri imzalamak için mükemmeldir. Örneğin, HMAC kullanıyorsanız, bilinen ancak iletilmeyen bir değerle (gizli bir değer) birleştirilmiş verilerin karma değerini alarak bir veri parçasını imzalarsınız. Böylece, düz metni ve HMAC karmasını gönderirsiniz. Daha sonra, alıcı gönderilen verileri bilinen değerde hash eder ve iletilen HMAC ile eşleşip eşleşmediğini kontrol eder. Eğer aynıysa, gizli değeri olmayan bir parti tarafından değiştirilmediğini biliyorsunuz. Bu, HTTP çerçeveleri tarafından güvenli çerez sistemlerinde ve ayrıca verilerde bütünlük güvencesi istediğiniz yerlerde HTTP üzerinden mesaj iletimi için yaygın olarak kullanılır.

Parola karmaları hakkında bir not:

Kriptografik karma işlevlerinin temel bir özelliği, bunların oluşturulmasının çok hızlı ve tersine çevrilmesi çok zor / yavaş olması (pratik olarak imkansız olacak kadar) olmasıdır. Bu parolalarla ilgili bir sorun oluşturur. Depolarsanız sha512(password), gökkuşağı masalarına veya kaba kuvvet saldırılarına karşı korunacak bir şey yapmıyorsunuz. Unutmayın, hash fonksiyonu hız için tasarlanmıştır. Bu nedenle, bir saldırganın hash işlevi aracılığıyla bir sözlük çalıştırması ve her sonucu test etmesi önemsizdir.

Bir tuz eklemek, karmaya biraz bilinmeyen veriler eklediğinden önemli olur. Bu nedenle, eşleşen bir şey bulmak yerine md5(foo), bilinen tuza eklendiğinde md5(foo.salt)(yapmak çok daha zor olan) bir şey bulmaları gerekir . Ama yine de hız problemini çözmüyor çünkü tuzu biliyorlarsa bu sadece sözlüğü çalıştırmakla ilgilidir.

Yani, bununla başa çıkmanın yolları var. Popüler bir yönteme anahtar güçlendirme (veya anahtar germe) denir . Temel olarak, bir karma üzerinde birçok kez yinelenirsiniz (genellikle binlerce). Bu iki şey yapar. İlk olarak, karma algoritmasının çalışma süresini önemli ölçüde yavaşlatır. İkincisi, eğer doğru uygulanırsa (giriş ve tuzu her bir iterasyona geri geçirmek), çıkış için entropiyi (kullanılabilir alan) arttırır ve çarpışma olasılığını azaltır. Önemsiz bir uygulama:

var hash = password + salt;
for (var i = 0; i < 5000; i++) {
    hash = sha512(hash + password + salt);
}

PBKDF2 , BCrypt gibi daha standart başka uygulamalar da vardır . Ancak bu teknik, güvenlikle ilgili birkaç sistem tarafından kullanılır (PGP, WPA, Apache ve OpenSSL gibi).

Sonuç olarak, hash(password)yeterince iyi değil. hash(password + salt)daha iyi, ama yine de yeterince iyi değil ... Parola karmalarınızı üretmek için uzatılmış bir karma mekanizması kullanın ...

Önemsiz esneme üzerine başka bir not

Hiçbir koşulda bir karmanın çıktısını doğrudan karma işlevine geri beslemeyin :

hash = sha512(password + salt); 
for (i = 0; i < 1000; i++) {
    hash = sha512(hash); // <-- Do NOT do this!
}

Bunun nedeni çarpışmalarla ilgili. Tüm karma işlevlerinin çarpışma olduğunu unutmayın, çünkü olası çıkış alanı (olası çıkışların sayısı) giriş alanından daha küçüktür. Nedenini görmek için neler olduğuna bakalım. Bunu önceden göstermek için,% 0.001'lik bir çarpışma şansı olduğunu varsayalım sha1()( gerçekte çok daha düşük, ancak gösteri amaçlı).

hash1 = sha1(password + salt);

Şimdi, hash1% 0.001'lik bir çarpışma olasılığı var. Ama bir sonrakini yaptığımızda hash2 = sha1(hash1);, tüm çarpışmaları hash1otomatik olarak çarpışmaları haline gelirhash2 . Şimdi, hash1'in oranı% 0.001'dir ve 2. sha1()çağrı buna eklenir. Şimdi hash2% 0.002'lik bir çarpışma olasılığı var. Bu iki kat daha fazla şans! Her yineleme 0.001%, sonuca bir çarpışma şansı daha ekleyecektir . Böylece, 1000 iterasyonla çarpışma şansı% 0.001'den% 1'e sıçradı. Şimdi, bozulma doğrusaldır ve gerçek olasılıklar çok daha küçüktür, ancak etki aynıdır (tek bir çarpışma şansının tahmini md5yaklaşık 1 / (2 128 ) veya 1 / (3x10 38'dir)). Bu küçük görünse de , doğum günü saldırısı sayesinde göründüğü kadar küçük değil).

Bunun yerine, her seferinde tuz ve parolayı yeniden ekleyerek, verileri karma işlevine geri eklersiniz. Dolayısıyla, herhangi bir turun çarpışması artık bir sonraki turun çarpışması değildir. Yani:

hash = sha512(password + salt);
for (i = 0; i < 1000; i++) {
    hash = sha512(hash + password + salt);
}

Yerel sha512işlevle aynı çarpışma şansına sahiptir . İstediğin şey bu. Bunun yerine bunu kullanın.


30
LinkedIn'deki programcılar şifreleri tuzsuz SHA1 karmaları olarak kaydetmeden
Eric J.

2
@ Pacer: hashlama üzerine de biraz önem veriyor. Özellikle şifre
hashinde

1
Aynı çıktıyla sonuçlanan birden fazla anahtar varsa, 1'e 1 eşlemenin nasıl olabileceğini anlamıyorum. DES için anahtar uzunluğu 56 bit ve blok boyutları 64 bittir. Bu nedenle, aynı çıkış bloğuna eşlenebilen 256 farklı anahtar yok mu?
mrQWERTY

1
@ Renren29 evet. Haklısın. Uygulamada, tüm şifre ne amaç ne de amaç dışıdır. Bununla birlikte, belirli bir anahtar için, amaçtır (her düz metnin tam olarak bir şifreleme metni vardır), ancak zorunlu olarak zorunlu değildir (her olası şifreleme metninin bir eşlemesi yoktur). Bu yüzden belirli bir anahtar için her zaman 1: 1 dedim . Aynı çıkış bloğuna çıkış yapabilen birden fazla anahtar olmasaydı, şifre metni size anahtar hakkında bir şey söyleyeceğinden (bilmeden) şifre yararlı olmazdı.
ircmaxell

7
Mükemmel cevap. Benim tek nitpick trivial germe degradasyon doğrusal olamaz ya da sonunda% 100 geçecek olmasıdır. Örnekleminizde% .001 ile ikinci adımın .001 + (1 - 0.001) * .001 veya 0.001999 olması gerektiğini düşünüyorum.
AlexDev

160

Bir hash fonksiyonu, bir somun ekmek pişirmekle aynı şekilde düşünülebilir. Girdilerle (un, su, maya vb.) Başlarsınız ve karma fonksiyonunu (karıştırma + pişirme) uyguladıktan sonra bir çıktı ile sonuçlanırsınız: bir somun ekmek.

Diğer yöne gitmek olağanüstü zordur - ekmeği gerçekten un, su, mayaya ayıramazsınız - bunların bazıları pişirme işlemi sırasında kaybolur ve ne kadar su veya un veya maya kullanıldığını asla söyleyemezsiniz. belirli bir somun, çünkü bu bilgi karma fonksiyonu (yani fırın) tarafından yok edildi.

Birçok farklı girdi çeşidi teorik olarak aynı somunları üretecektir (örneğin 2 bardak su ve 1 tsbp maya, 2.1 bardak su ve 0.9tsbp maya ile tam olarak aynı somunu üretir), ancak bu somunlardan biri göz önüne alındığında, söyleyemezsiniz. tam olarak hangi girdi kombinasyonu üretti.

Şifreleme ise bir kasa olarak görülebilir. Ne koyarsanız koyun, ilk başta kilitlendiği anahtara sahip olduğunuz sürece geri döner. Bu simetrik bir işlem. Bir anahtar ve bazı girdiler verildiğinde, belirli bir çıktı alırsınız. Bu çıktı ve aynı anahtar göz önüne alındığında, orijinal girişi geri alırsınız. 1: 1 eşleme.


2
Belirli bir hamburgerin tamamen belirli bir inekten geldiğini gösterememeniz dışında, bu bir karmağın temel özelliği olan komik bir fikir ama korkunç bir benzetme.
user467257

1
@caf lol gerçekten ve bu bir klasik. Ancak, inek neredeyse hiç pazarlamak için yapar, bu yapar; "boğa" ;-) İnek: süt. Boğa: et.
Funk Forty Niner

1
Arkasındaki bu hikaye kulağa çok lezzetli geliyor.
sitilge

44

Orijinal girdiyi geri almak istemiyorsanız karmaları kullanın, yaptığınızda şifreleme kullanın.

Hash'ler bir miktar girdi alır ve bazı bitlere dönüştürür (genellikle 32 bit tam sayı, 64 bit tam sayı vb. Gibi bir sayı olarak düşünülür). Aynı girdi her zaman aynı karmayı üretir, ancak PRENSİP OLARAK süreçteki bilgileri kaybedersiniz, böylece orijinal girişi güvenilir bir şekilde çoğaltamazsınız (ancak bunun için birkaç uyarı vardır).

Şifreleme, temel olarak şifreleme işlevine koyduğunuz tüm bilgileri korur, yalnızca belirli bir anahtara sahip olmadan orijinal girdiye geri dönmeyi zorlaştırır (ideal olarak imkansız).

Basit Hashing Örneği

Aşağıda, karma işlemin neden orijinal girdiyi geri alamadığını anlamanıza yardımcı olacak önemsiz bir örnek verilmiştir. Diyelim ki 1 bitlik bir kare oluşturuyorum. Karma işlevim girdi olarak bir bit dizesi alır ve giriş dizesinde çift sayıda bit varsa karma değerini 1, tek sayı varsa 0 değerini ayarlar.

Misal:

Input    Hash
0010     0
0011     1
0110     1
1000     0

0 karmasıyla sonuçlanan birçok giriş değeri ve 1 karmasıyla sonuçlanan birçok giriş değeri olduğunu unutmayın. Karmanın 0 olduğunu biliyorsanız, orijinal girişin ne olduğundan emin olamazsınız.

Bu arada, bu 1 bitlik karma tam olarak tutarlı değil ... parite bitine bir göz atın .

Basit Şifreleme Örneği

Metni basit bir harf ikamesi kullanarak şifreleyebilirsiniz, örneğin giriş A ise B yazarsınız. Giriş B ise, C yazarsınız. Alfabenin sonuna kadar, burada giriş Z ise, tekrar A yaz.

Input   Encrypted
CAT     DBU
ZOO     APP

Basit karma örneğinde olduğu gibi, bu tür şifreleme de tarihsel olarak kullanılmıştır .


"Şifreleme" nin yerel olarak güçlü şifreleme anlamına geldiğini ve yukarıdaki örnekte Sezar şifresi gibi zayıf şifreleme ile karıştırılmaması gerektiğini belirtmek gerekir.
Faks

@Fax Evet, ancak güçlü şifreleme oluşturan şey çağlar boyunca hareketli bir çubuk olmuştur. Alman İkinci Dünya Savaşı Enigma Makinesi çatlamak neredeyse imkansızdı (hakkında harika bir film var). Bugün akıllı saatiniz kolayca kırılabilir. DES bir zamanlar MD5 gibi güçlü düşünülmüştü. Günümüzün güçlü şifrelemesi, öngörülebilir gelecekte kuantum hesaplama tekniklerine kolayca avlanmakla tehdit ediyor.
Eric J.

Elbette, ve kriptografi hakkında tavsiye veren yazıların ve makalelerin tarihlerini kontrol etmek her zaman iyi bir fikirdir. Bununla birlikte, 2011'de bile Sezar şifresinin zayıf kabul edildiğinden eminim.
Faks

39

Karma ve şifreleme / şifre çözme tekniklerine genel bakış.

Karma:

Eğer varsa karma herhangi düz metin tekrar karma metinden aynı düz metin alınamıyor . Basitçe, bu tek yönlü bir süreç.

karma


Şifreleme ve Şifre Çözme:

Eğer varsa şifrelemek herhangi düz metin bir anahtarla tekrar aynı düz metin alabilirsiniz yaparak şifre çözme aynı (Simetrik) ile şifrelenmiş metin / diffrent (asymentric) tuş üzerinde.

şifreleme ve şifre çözme


GÜNCELLEME: Düzenlenen soruda belirtilen noktaları ele almak için.

1. Karma ve şifreleme ne zaman kullanılır?

Birisine dosya göndermek istiyorsanız, karma yapmak yararlıdır. Ancak, başka birinin dosyayı ele geçirip değiştirebileceğinden korkuyorsunuz. Böylece, alıcının doğru dosya olduğundan emin olmanın bir yolu, karma değerini herkese açık olarak yayınlamanızdır. Bu şekilde alıcı, alınan dosyanın karma değerini hesaplayabilir ve karma değeriyle eşleşip eşleşmediğini kontrol edebilir.

Birine göndermek için bir mesajınız varsa, şifreleme iyidir. İletiyi bir anahtarla şifrelersiniz ve alıcı, orijinal iletiyi geri almak için aynı (veya belki de farklı bir) anahtarla şifresini çözer. kredi


2. Karma veya şifreleme algoritmasını (teorik / matematiksel düzeyden) farklı kılan, yani karmaları geri döndürülemez yapan şey (gökkuşağı ağacının yardımı olmadan)

Temel olarak karma, bilgi kaybeden ancak şifreleme yapmayan bir işlemdir . Kolay anlaşılması için basit matematiksel olarak farka bakalım , elbette her ikisinin de içinde yer alan tekrarlarla çok daha karmaşık bir matematiksel işlem var

Şifreleme / Şifre Çözme (Tersinir):

Ek :

4 + 3 = 7  

Bu, toplamı alarak ve eklerden birini çıkararak tersine çevrilebilir

7 - 3 = 4     

Çarpma :

4 * 5 = 20  

Bu, ürünü alarak ve faktörlerden birine bölerek tersine çevrilebilir.

20 / 4 = 5    

Burada, ekleme / faktörlerden birinin bir deşifre anahtarı olduğunu ve sonucun (7,20) şifrelenmiş bir metin olduğunu varsayabiliriz.


Hashing (Tersinir Olmayan):

Modulo bölümü :

22 % 7 = 1   

Bu tersine çevrilemez çünkü bölüme ve bölücüyü yeniden oluşturmak için temettü için yapabileceğiniz herhangi bir işlem yoktur (veya tersi).

'Nerede' doldurmak için bir operasyon bulabilir misiniz? dır-dir?

1  ?  7 = 22  
1  ?  22 = 7

Dolayısıyla hash fonksiyonları modulo bölünmesi ile aynı matematiksel kaliteye sahiptir ve bilgiyi kaybeder.

kredi


26

Tek astarım ... Genel olarak Röportajcı aşağıdaki cevabı istedi.

Hashing bir yoludur. Bir karma kodundan verilerinizi / dizenizi dönüştüremezsiniz.

Şifreleme 2 yönlüdür - anahtarınız varsa şifrelenmiş dizenin şifresini tekrar çözebilirsiniz.


Hey! Bu iki satır.
Mark Storer

17

Bir Karma fonksiyonu sabit boyutlu metin olarak metin değişken büyüklüğünde döner.

esrar

Kaynak: https://en.wikipedia.org/wiki/Hash_function


PHP'de karma işlevler

Karma, bir dizeyi karma dizeye dönüştürür. Aşağıya bakınız.

HASH:

$str = 'My age is 29';
$hash = hash('sha1', $str);
echo $hash; // OUTPUT: 4d675d9fbefc74a38c89e005f9d776c75d92623e

Parolalar genellikle okunabilir metin olarak karma temsillerinde saklanır. Son kullanıcı şifre ile korunan bir uygulamaya erişmek istediğinde, kimlik doğrulama sırasında bir şifre verilmelidir. Kullanıcı şifresini gönderdiğinde, geçerli kimlik doğrulama sistemi şifreyi alır ve verilen şifreyi hash eder. Bu parola karması, sistem tarafından bilinen karıyla karşılaştırılır. Eşitlik halinde erişim izni verilir.

DEHASH:

SHA1 tek yönlü bir karmadır. Bu, karmayı yok edemeyeceğiniz anlamına gelir.

Bununla birlikte, karmayı kaba kuvvet uygulayabilirsiniz. Lütfen bakınız: https://hashkiller.co.uk/sha1-decrypter.aspx .

MD5, başka bir karma. Bir MD5 dehasher'i bu web sitesinde bulabilirsiniz: https://www.md5online.org/ .

Karmalara kaba kuvvet saldırılarını engellemek için bir tuz verilebilir. Php password_hash()bir şifre karması oluşturmak için kullanabilirsiniz . Fonksiyon password_hash()otomatik olarak bir tuz oluşturur. Parola karmasının (tuzlu) bir parolasını doğrulamak için kullanın password_verify().

// Invoke this little script 3 times, and it will give you everytime a new hash
$password = '1234';  
$hash = password_hash($password, PASSWORD_DEFAULT);  

echo $hash; 
// OUTPUT 

$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu 

$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u 

$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW

Bir şifre birden fazla karma ile temsil edilebilir. Kullanarak farklı parola karmalarıyla parolayı doğruladığınızda, parola password_verify()geçerli bir parola olarak kabul edilir.

$password = '1234';  

$hash = '$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu';  
var_dump( password_verify($password, $hash) );  

$hash = '$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u';  
var_dump( password_verify($password, $hash) );  

$hash = '$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW';  
var_dump( password_verify($password, $hash) );

// OUTPUT 

boolean true 

boolean true 

boolean true




Bir şifreleme işlevi tam tersi bir şifreleme anahtarı, ve yardımcısı kullanarak bir saçma şifreli bir metin dönüştürür. resim açıklamasını buraya girin

Kaynak: https://en.wikipedia.org/wiki/Encryption


PHP'de şifreleme

Şifrelemeyi işleyen bazı PHP kodlarına bakalım.

--- Mcrypt uzantısı ---

ŞİFRELE:

$cipher = MCRYPT_RIJNDAEL_128;
$key = 'A_KEY';
$data = 'My age is 29';
$mode = MCRYPT_MODE_ECB;

$encryptedData = mcrypt_encrypt($cipher, $key , $data , $mode);
var_dump($encryptedData);

//OUTPUT:
string '„Ùòyªq³¿ì¼üÀpå' (length=16)

şifresini:

$decryptedData = mcrypt_decrypt($cipher, $key , $encryptedData, $mode);
$decryptedData = rtrim($decryptedData, "\0\4"); // Remove the nulls and EOTs at the END
var_dump($decryptedData);

//OUTPUT:
string 'My age is 29' (length=12)

--- OpenSSL uzantısı ---

Mcrypt uzantısı 7.1'de kullanımdan kaldırıldı. ve php 7.2'de kaldırılmıştır. OpenSSL uzantısı php 7'de kullanılmalıdır. Aşağıdaki kod parçacıklarına bakın:

$key = 'A_KEY';
$data = 'My age is 29';

// ENCRYPT
$encryptedData = openssl_encrypt($data , 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($encryptedData);

// DECRYPT    
$decryptedData = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($decryptedData);

//OUTPUT
string '4RJ8+18YkEd7Xk+tAMLz5Q==' (length=24)
string 'My age is 29' (length=12)

PHP mcrypt şimdiye kadar artık (bununla bir ilgisi olabilir) ve SHA-1, MD5 ve ECB güvensiz olarak kabul edildi. A_KEYolduğu değil AES / Rijndael-128 anahtar; bu bir şifre, müttefiki değil.
Maarten Bodewes

@MaartenBodewes Evet, bu doğru. OpenSSL artık moda. php.net/manual/tr/book.openssl.php
Julian

10

Simetrik Şifreleme:

Simetrik şifreleme, paylaşılan anahtar veya paylaşılan gizli şifreleme olarak da adlandırılabilir. Simetrik şifrelemede, trafiği şifrelemek ve şifresini çözmek için tek bir anahtar kullanılır.

resim açıklamasını buraya girin

Asimetrik Şifreleme:

Asimetrik şifreleme, ortak anahtarlı şifreleme olarak da bilinir. Asimetrik şifreleme, simetrik şifrelemeden öncelikli olarak iki anahtarın kullanılmasından farklıdır: biri şifreleme için ve diğeri de şifre çözme için. En yaygın asimetrik şifreleme algoritmasıdır RSA.

Simetrik şifrelemeye kıyasla, asimetrik şifreleme yüksek bir hesaplama yükü oluşturur ve çok daha yavaş olma eğilimindedir. Bu nedenle, tipik olarak taşıma yükü verilerini korumak için kullanılmaz. Bunun yerine, en büyük gücü, güvenli olmayan bir ortamda (örneğin İnternet) güvenli bir kanal oluşturma yeteneğidir. Bu, yalnızca verileri şifrelemek için kullanılabilecek ortak anahtarların değişimi ile gerçekleştirilir. Asla paylaşılmayan tamamlayıcı özel anahtar şifresini çözmek için kullanılır.

resim açıklamasını buraya girin

Karma:

Son olarak, karma, şifrelemeden farklı bir kriptografik güvenlik şeklidir. Şifreleme, önce bir iletiyi şifrelemek ve sonra şifresini çözmek için kullanılan iki adımlı bir işlemken, karma işlemi, iletiyi geri döndürülemez bir sabit uzunluk değerine veya karma değerine yoğunlaştırır. Ağ görülen en yaygın karma algoritmaları ikisidir MD5ve SHA-1.

resim açıklamasını buraya girin

Daha fazla bilgiyi buradan edinebilirsiniz: http://packetlife.net/blog/2010/nov/23/simetrik- asimetrik- şifreleme- kesme


Üzgünüm, ben bir güvenlik yeniyim, ama "genellikle yük verilerini korumak için istihdam" anlamını daha fazla açıklayabilir misiniz?
Abdul

2
@Abdul Asimetrik şifreleme, yüksek hesaplama yüküne sahiptir, bu nedenle bir ağ üzerinden paket (yük) olarak gönderilen verileri korumak için kullanılmaz. Bunun yerine, verileri korumak için ortak anahtarların değiş tokuşunu kullanarak güvenli ağ bağlantısı kurmak için kullanılır.
Şanslı

5
  1. Yalnızca bir yöne gitmeniz gerektiğinde karma kullanın. Örneğin, bir sistemdeki şifreler için karma kullanırsınız, çünkü yalnızca bir kullanıcının girdiği değerin karma işleminden sonra deponuzdaki değerle eşleştiğini doğrularsınız. Şifreleme ile iki yoldan gidebilirsiniz.

  2. karma algoritmalar ve şifreleme algoritmaları sadece matematiksel algoritmalardır. Yani bu açıdan farklı değiller - hepsi sadece matematiksel formüller. Anlambilim akıllıca, karma (tek yönlü) ve şifreleme (iki yönlü) arasında çok büyük bir ayrım vardır. Hashler neden geri döndürülemez? Çünkü bu şekilde tasarlandılar, çünkü bazen tek yönlü bir işlem istersiniz.


4

Şifreleme ve karma algoritmalar benzer şekilde çalışır. Her durumda, bitler arasında karışıklık ve difüzyon yaratmaya ihtiyaç vardır . Haşlanmış, kafa karışıklığı , anahtar ve şifre metni ile difüzyon arasında karmaşık bir ilişki yaratıyor her bir bitin bilgisini etrafa yayar.

Bir çok hızlı arama fonksiyonları aslında şifreleme algoritmaları (ya da şifreleme algoritmaları ilkellerini kullanılır. Örneğin, SHA-3 aday Çile her bloğu işlemek için temel yöntem olarak Threefish kullanır. Farkı yerine şifreli her blok tutma olup, bunlar yıkıcı olan, belirli bir uzunlukta sabit olarak birleştirilir


4

veri iletmek için güvenlik söz konusu olduğunda, yani şifreleme kullandığınız iki yönlü iletişimdir.Tüm şifreleme bir anahtar gerektirir

yetkilendirme söz konusu olduğunda, karma kullanıyorsunuz. karma işleminde anahtar yok

Karma, herhangi bir miktarda veri (ikili veya metin) alır ve veriler için bir sağlama toplamı temsil eden sabit uzunlukta bir karma oluşturur. Örneğin, karma 16 bayt olabilir. Farklı karma algoritmalar farklı boyutlu karmalar üretir. Orijinal verileri karmadan yeniden oluşturamazsınız, ancak aynı karma değerin üretilip üretilmediğini görmek için verileri yeniden karma yapabilirsiniz. Tek yönlü Unix tabanlı şifreler bu şekilde çalışır. Parola bir karma değeri olarak depolanır ve bir sistemde oturum açmak için yazdığınız parola karma olur ve karma değeri gerçek parolanın karma değeriyle karşılaştırılır. Eşleşirlerse, doğru şifreyi yazmış olmanız gerekir

hash neden geri dönüşümsüzdür:

Karma-geri döndürülemez, çünkü karma-girdi eşlemesi 1'e 1 değildir. Aynı girdi değerine eşlenen iki girişe sahip olmak genellikle "karma çarpışma" olarak adlandırılır. Güvenlik amacıyla, "iyi" bir karma işlevinin özelliklerinden biri, pratik kullanımda çarpışmaların nadir olmasıdır.


1
"Hashing tersine çevrilemez çünkü girdi-karma haritalaması 1'e 1 değildir", Teşekkürler, karmaları şifrelemeden ayırma konusunda çok önemli bir faktör olduğunu düşünüyorum! :)
Kenny Cason

Bu normal karma işlevleri, kriptografik karma işlevleri ve şifre karmalarını açıkça ayırmaz. Bunların hepsi farklı özelliklere sahiptir.
Maarten Bodewes

-2

Kriptografi sayılar ve dizgilerle ilgilenir. Temel olarak tüm evrendeki her dijital şey sayıdır. Sayılar dediğimde, bu 0 ve 1. Bunların ne olduğunu biliyorsunuz, ikili. Ekranda gördüğünüz görüntüler, kulaklığınızdan dinlediğiniz müzik, her şey ikili. Ama kulaklarımız ve gözlerimiz ikili dosyaları anlamayacak değil mi? Sadece beyin bunu anlayabilirdi ve ikilileri anlasa bile ikililerin tadını çıkaramaz. Böylece ikili dosyaları mp3, jpg, vb. Gibi anlaşılır biçimlere dönüştürüyoruz. Süreci Kodlama olarak adlandıralım . İki yönlü bir işlemdir ve orijinal biçimine kolayca geri dönüşebilir.

Karma

Hashing , bir zamanlar başka bir forma dönüştürülen verilerin asla geri alınamayacağı başka bir şifreleme tekniğidir. Layman'ın teriminde, de-hashing adı verilen bir süreç yoktur . Çok varİşi yapmak için sha-512, md5 ve benzeri karma işlev .

Orijinal değer geri alınamazsa, bunu nerede kullanıyoruz? Şifreler! Cep telefonunuz veya bilgisayarınız için bir şifre ayarladığınızda, şifrenizin bir karması oluşturulur ve güvenli bir yerde saklanır. Bir dahaki sefere oturum açma girişiminde bulunduğunuzda, girilen dize aynı algoritma (karma işlevi) ile yeniden birleştirilir ve çıktı saklanan değerle eşleştirilir. Eğer aynıysa, giriş yaparsınız. Aksi takdirde dışarı atılırsınız.

Kredi: wikimedia Parolaya karma uygulayarak, bir saldırganın saklanan parola dosyasını çalsa bile parolamızı hiçbir zaman almamasını sağlayabiliriz. Saldırganın parolasının karması olacaktır. Muhtemelen en sık kullanılan şifrelerin bir listesini bulabilir ve her birine sha-512 uygulayabilir ve elindeki değerle karşılaştırabilir. Buna sözlük saldırısı denir . Ama bunu ne kadar sürecek? Parolanız yeterince rastgele ise, bu kırma yönteminin işe yarayacağını düşünüyor musunuz? Facebook, Google ve Amazon veritabanlarındaki tüm şifrelerin karma veya en azından karma olması gerekiyor.

Sonra Şifreleme var

Şifreleme karma ve kodlama arasında yatar. Kodlama iki yönlü bir süreçtir ve güvenlik sağlamak için kullanılmamalıdır. Şifreleme de iki yönlü bir işlemdir, ancak yalnızca şifreleme anahtarı biliniyorsa orijinal veriler alınabilir. Şifrelemenin nasıl çalıştığını bilmiyorsanız endişelenmeyin, burada temel bilgileri tartışacağız. Bu SSL'nin temellerini anlamak için yeterli olacaktır. Yani, Simetrik ve Asimetrik şifreleme olmak üzere iki tür Şifreleme vardır.

Simetrik Anahtar Şifreleme

İşleri olabildiğince basit tutmaya çalışıyorum. Öyleyse, bir kaydırma algoritması ile simetrik şifrelemeyi anlayalım. Bu algoritma harfleri sola veya sağa kaydırarak alfabeleri şifrelemek için kullanılır. Bir dize CRYPTO alalım ve +3 sayısını düşünelim. Daha sonra CRYPTO'nun şifrelenmiş formatı FUBSWR olacaktır. Bu, her harfin 3 basamak sağa kaydırıldığı anlamına gelir. Burada, kelime KRİPTO denir plaintext , çıkış FUBSWR denir Şifreli , denir değeri 3 Şifreleme anahtarı (simetrik anahtar) ve tüm süreç olan şifre. Bu en eski ve basit simetrik anahtar şifreleme algoritmalarından biridir ve ilk kullanımı Julius Caesar zamanında rapor edilmiştir. Bu yüzden onun adını aldı ve ünlü Sezar Şifresi . Şifreleme anahtarını bilen ve Sezar'ın algoritmasının tersini uygulayan ve orijinal Düz Metni geri alabilen herkes. Bu nedenle Simetrik Şifreleme denir .

Asimetrik Anahtar Şifreleme

Simetrik şifrelemede aynı anahtarın hem şifreleme hem de şifre çözme için kullanıldığını biliyoruz. Bu anahtar çalındıktan sonra tüm veriler kaybolur. Bu büyük bir risk ve daha karmaşık bir tekniğe ihtiyacımız var. 1976'da Whitfield Diffie ve Martin Hellman ilk olarak Asimetrik şifreleme kavramını yayınladılar ve algoritma Diffie-Hellman anahtar değişimi olarak biliniyordu . Daha sonra 1978'de MIT'den Ron Rivest, Adi Shamir ve Leonard Adleman RSA algoritmasını yayınladılar . Bunlar Asimetrik kriptografinin temeli olarak düşünülebilir.

Simetrik şifrelemeye kıyasla, Asimetrik şifrelemede , bir yerine iki anahtar olacaktır. Birine Ortak anahtarı , diğerine Özel anahtarı denir . Teorik olarak, inisiyasyon sırasında Kamu-Özel sektörünüanahtar çifti bizim makine. Özel anahtar güvenli bir yerde saklanmalı ve asla kimseyle paylaşılmamalıdır. Ortak anahtar, adından da anlaşılacağı gibi, size şifrelenmiş metin göndermek isteyen herkesle paylaşılabilir. Şimdi, açık anahtarınıza sahip olanlar gizli verileri onunla şifreleyebilir. Anahtar çifti RSA algoritması kullanılarak oluşturulduysa, verileri şifrelerken aynı algoritmayı kullanmalıdırlar. Genellikle algoritma genel anahtarda belirtilir. Şifrelenmiş verilerin şifresi yalnızca size ait olan özel anahtarla çözülebilir.

Kaynak: aptallar için SSL / TLS bölüm 1: Ciphersuite, Hashing, Şifreleme | WST ( https://www.wst.space/ssl-part1-ciphersuite-hashing-encryption/ )


-3

Şifreleme Şifrelemenin amacı, verileri gizli tutmak için verileri dönüştürmektir Eg (Birine yalnızca okuması gereken gizli bir metin gönderme, Internet üzerinden şifreler gönderme).

Kullanılabilirliğe odaklanmak yerine hedef, veri gönderiminin gizlice gönderilebilmesini ve yalnızca gönderdiğiniz kullanıcı tarafından görülebilmesini sağlamaktır.

Verileri, gizli anahtarla şifreleyebileceği benzersiz bir kalıba dönüştüren başka bir formata şifreler ve gizli anahtara sahip olan kullanıcılar, işlemi geri dönüşümlü olarak mesajı görebilir. Örneğin (AES, BLOWFISH, RSA)

Şifreleme sadece bu gibi görünebilir FhQp6U4N28GITVGjdt37hZN

Hashing Teknik olarak bir arbitary girdi alır ve sabit uzunlukta bir dize üretti diyebiliriz.

Bunlardaki en önemli şey, çıktıdan girdiye gidememenizdir.Verilen bilgilerin değiştirilmediği güçlü çıktı üretir. İşlem, bir girdi alıp hash etmektir ve daha sonra alıcı alındıktan sonra gönderenin özel anahtarı ile göndererek gönderenin ortak anahtarı ile doğrulayabilir.

Karma yanlışsa ve karma ile eşleşmezse, bilgilerin hiçbirini göremeyiz. Örneğin, (MD5, SHA .....)

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.