it-swarm-tr.com

Dijital sertifikalar, imzalar ve SSL süreçleri nasıl çalışır?

SSL'nin nasıl çalıştığını anlamaya çalışıyorum. Alice ve Bob yerine, istemci ve sunucu iletişimini ele alalım. Sunucu CA'dan alınmış dijital bir sertifikaya sahiptir. Ayrıca ortak ve özel anahtarları vardır. Sunucu, İstemciye bir mesaj göndermek istiyor. Sunucunun ortak anahtarı zaten istemci tarafından kullanılabilir.

SSL el sıkışmasının tamamlandığı varsayılarak.

Sunucudan İstemciye:

  • Sunucu, ortak anahtarını iletiye ekler.
  • Karma işlevini çalıştırır (ileti + ortak anahtar). Sonuçlar HMAC olarak bilinir.
  • HMAC'yi özel anahtarını kullanarak şifreleyin. Sonuç, dijital imza olarak adlandırılır.
  • Dijital sertifika ile birlikte Müşteriye gönderin.
  • İstemci sertifikayı denetler ve sertifikanın beklenen Sunucu'dan olduğunu bulur.
  • Sunucunun ortak anahtarını kullanarak HMAC'nin şifresini çözer.
  • Özgün iletiyi almak için sağlama işlevini (ileti + ortak anahtar) çalıştırır.

İstemciden Sunucuya

  • İstemci hash işlevini (message + public key) üzerinde çalıştırır ve sonra aynı ortak anahtarı kullanarak şifreler.
  • Özel anahtar kullanarak sunucu şifresini çözer, iletiyi elde etmek için elde edilen verilerdeki hash işlevini çalıştırır.

Lütfen anlayışımın doğru olup olmadığını bana bildirin.

27
John

Gönderinizde birkaç kafa karışıklığı var. Her şeyden önce HMAC bir karma işlevi değildir. Daha sonra HMAC hakkında daha fazla bilgi.

Karma İşlevleri

A hash function, tamamen çözülemeyecek şekilde birleştiren tamamen herkese açık bir algoritmadır (anahtar yok): Herkes herhangi bir veri üzerinde hash işlevini çalıştırabilir, ancak karma çıktıdan elde edilen veriler zekâmızın çok ötesindedir. Karma çıktı sabit bir boyuta sahiptir, tipik olarak 256 bit (SHA-256 ile) veya 512 bit (SHA-512 ile). 160 bit veren SHA- * fonksiyonuna SHA-160 değil SHA-1 denir, çünkü kendi cihazlarına bırakılan kriptograflar sadece bu kadar uzun süre makul kalabilir ve kesinlikle beşinci pint'in ötesinde olmayabilir.

İmza Algoritmaları

A imza algoritması, matematiksel olarak birbirine bağlı bir çift anahtar kullanır, özel anahtar ve genel anahtar ( özel anahtarın açık anahtardan yeniden hesaplanması teorik olarak uygulanabilir, ancak Uygulamada yapmak için çok zor, Gerçekten Büyük Bilgisayarlarda bile, bu yüzden açık anahtar ve özel anahtar gizli kalırken açık hale getirilmesi). Anahtarların matematiksel yapısını kullanarak imza algoritması şunları sağlar:

  • to create özel anahtarı kullanarak bazı giriş verilerinde imza (imza makul derecede kompakt olan bir matematik nesnesidir, örneğin tipik bir RSA imzası için birkaç yüz bayt);
  • to verify genel anahtarı kullanarak bazı giriş verilerinde imza. Doğrulama parametre olarak imzayı, giriş verilerini ve ortak anahtarı alır ve "mükemmel adam!" veya "ahbap, bunlar uyuşmuyor".

Güvenli bir imza algoritması için, belirli bir ortak anahtarla doğrulama algoritmasının "iyi", sürece karşılık gelen özel anahtarı bildiği şekilde bir imza değeri ve giriş verisi üretilmesi söz konusu değildir, bu durumda kolay ve verimlidir. İnce baskıya dikkat edin: özel anahtar olmadan, verileri ve imzayı istediğiniz gibi seçebilseniz bile, bazı anahtarlar ve ortak anahtarla çalışan bir imza değeri oluşturamazsınız.

"Sözde mümkün olmayan", dünyadaki tüm akıllı kriptografların birkaç yıl boyunca üzerinde çalıştığı ve beşinci pint'ten sonra bile bunu yapmanın bir yolunu bulamadığı anlamına geliyor.

Çoğu (aslında, hepsi) imza algoritmaları girdi verilerini bir karma işleviyle işleyerek başlar ve daha sonra yalnızca karma değeri üzerinde çalışır. Bunun nedeni, imza algoritmasının boyut olarak sınırlı olan bazı kümelerde matematiksel nesnelere ihtiyaç duymasıdır, bu nedenle bir karma işlevinin çıktısı gibi "çok büyük olmayan" değerler üzerinde çalışması gerekir. Karma işlevinin doğası gereği, işler iyi sonuç verir (karma çıkışını imzalamak karma girişini imzalamak kadar iyidir).

Anahtar Değişimi ve Asimetrik Şifreleme

A anahtar değişim protokolü, her iki tarafın da birbirlerine matematiksel nesneler attığı, her nesnenin kendileri için sakladıkları bazı gizli değerlerle bağlantılı olduğu, halka açık/özel anahtar çiftleri. Anahtar değişiminin sonunda, her iki taraf da telde değiştirilen bitleri gözlemleyenlerin kavrayışından tamamen kaçan ortak bir "değer" (yine başka bir matematiksel nesne) hesaplayabilir. Yaygın olarak kullanılan bir anahtar değişim algoritması türü asimetrik şifreleme. Asimetrik şifreleme, genel/özel bir anahtar çifti kullanır (imza algoritmasıyla aynı tür olmayabilir):

  • Ortak anahtar ile şifrelemek bir parça veri yapabilirsiniz. Bu veriler genellikle boyut olarak kısıtlanır (örneğin 1024 bit genel anahtarlı RSA için 117 bayttan fazla değil). Şifreleme sonucu, tahmin edin, bir bayt dizisine kodlanabilen matematiksel bir nesnedir.
  • Özel anahtar ile şifre çözme, yani ters işlemi yapabilir ve ilk giriş verilerini kurtarabilirsiniz. Özel anahtar olmadan zor şans olduğu varsayılır.

Daha sonra anahtar değişim protokolü bu şekilde çalışır: bir taraf rastgele bir değer seçer (rastgele bayt dizisi), bunu eşin ortak anahtarıyla şifreler ve ona gönderir. Akran özel anahtarını şifresini çözmek için kullanır ve paylaşılan sır olan rastgele değeri kurtarır.

İmzaların tarihsel açıklaması: "özel anahtarla şifreleme, genel anahtarla şifre çözme". Unut bu açıklama. Bu yanlış. Sadece belirli bir algoritma (RSA) için ve daha sonra, sadece iyi bir güvenliğe sahip olmayan RSA'nın piç haline getirilmiş bir sürümü için doğru olabilir. Yani hayır , dijital imzalar "ters" asimetrik şifreleme değildir.

Simetrik Şifreleme

İki tarafın paylaşılan bir gizli değeri olduğunda, daha fazla veriyi gizli bir şekilde paylaşmak için simetrik şifreleme kullanabilirler. Simetrik olarak adlandırılır, çünkü her iki taraf da aynı anahtara, yani aynı bilgiye, yani aynı güce sahiptir. Artık özel/kamu ikilemi yok. İki ilkel kullanılır:

  • Simetrik şifreleme : Verilerin nasıl değiştirileceği ve daha sonra nasıl kaldırılacağı.
  • İleti Kimlik Doğrulama Kodları : "anahtarlı bir sağlama toplamı": yalnızca gizli anahtarı bilen kişiler MAC'yi bazı verilerde hesaplayabilir (özel ve genel anahtarın aynı olduğu bir imza algoritması gibidir - bu nedenle "genel" anahtar herkese açık olmamalıydı!).

HMAC, karma işlevler üzerinde akıllı bir şekilde oluşturulmuş bir tür MAC'dir, çünkü bunu yapmanın akıllı olmayan birçok yolu vardır ve karma işlevinin sağladığı ince ayrıntılar ve sağlamaz.

Sertifikalar

A sertifika, ortak anahtar için bir kapsayıcıdır. Yukarıda açıklanan araçlarla, sunucunun, istemcinin sunucu ile anahtar değişimi yapmak için kullanacağı bir ortak anahtara sahip olacağını düşünmeye başlayabiliriz. Ancak istemci, kurnazca sunucuyu taklit eden kötü niyetli bir saldırganın değil, doğru sunucunun ortak anahtarını kullandığından nasıl emin olur? Sertifikalar devreye giriyor. Bir sertifika, fiziksel kimliklerin doğrulanması konusunda uzmanlaşmış biri tarafından işaretli; buna Sertifika Yetkilisi denir. CA, sunucuyu "gerçek hayatta" (örn. Bir çubukta) karşılar, sunucu kimliğini doğrular, sunucunun ortak anahtarını sunucunun kendisinden alır ve her şeyi imzalar (sunucu kimliği ve Genel anahtar). Bu sertifika adı verilen şık bir paket ile sonuçlanır. Sertifika, adın ve ortak anahtarın birbiriyle eşleştiğini garanti eder CA (umarım, CA çok saf değildir, bu nedenle garanti güvenilirdir - tercihen CA not beşinci karttan sonra sertifika imzalayın).

İstemci, sertifikayı gördükten sonra sertifika üzerindeki imzayı CA ​​ortak anahtarına göre doğrulayabilir ve böylece sunucu ortak anahtarının gerçekten istenen sunucuya ait olduğuna güvenebilir.

Ama bana söylerdin, ne kazandık? Yine de bir ortak anahtarı, yani CA ortak anahtarını bilmeliyiz. Bunu nasıl doğrularız? Eh, başka bir CA. kullanabiliriz. Bu sadece sorunu tersine çevirir, ancak a priori über-CA'lardan başkası tarafından imzalanmayan benzersiz veya bir avuç genel anahtarı bilmek sorunuyla sonuçlanabilir. Düşünceli bir şekilde Microsoft, bu tür "kök ortak anahtarları" ("güven bağlantısı" da denir) Internet Explorer'ın derinliklerine yerleştirdi. Burası güvenin kaynağıdır (tam olarak, Redmond firmasına olan güveninizin temelini kaybedersiniz - şimdi Bill Gates'in dünyanın en zengin adamı nasıl olduğunu anlıyorsunuz?).

[~ # ~] SSL [~ # ~]

Şimdi hepsini bir araya getirelim, şimdi TLS ("SSL", Netscape'in bir özelliği olduğunda protokol adıydı corporation).

İstemci sunucuyla konuşmak istiyor. İstemcinin desteklediği şifreleme algoritmalarının listesi gibi bir dizi yönetim verisi içeren bir ileti ("ClientHello") gönderir.

Sunucu hangi algoritmaların kullanılacağını söyleyerek yanıt verir ("ServerHello"); daha sonra sunucu, istemcinin gereksinim duyabileceği durumlarda birkaç sertifika ile (sertifikasını) gönderir (kök sertifikalar değil, ara, alt sertifika CA sertifikaları).

İstemci, sunucu sertifikasını doğrular ve sunucu ortak anahtarını bu sertifikadan çıkarır. İstemci rastgele bir değer ("master öncesi gizli") oluşturur, sunucu ortak anahtarıyla şifreler ve sunucuya that gönderir ("ClientKeyExchange").

Sunucu, mesajın şifresini çözer, ön-master'ı alır ve simetrik şifreleme ve MAC için gizli anahtarlardan türetilir. İstemci aynı hesaplamayı yapar.

İstemci, türetilen anahtarlarla şifrelenmiş ve MACed edilmiş bir doğrulama mesajı ("Bitti") gönderir. Sunucu, Son iletinin uygun olduğunu doğrular ve yanıt olarak kendi "Bitti" iletisini gönderir. Bu noktada, hem istemci hem de sunucu ihtiyaç duydukları tüm simetrik anahtarlara sahiptir ve "el sıkışmasının" başarılı olduğunu bilirler. Uygulama verileri (örneğin, bir HTTP isteği), simetrik şifreleme ve MAC kullanılarak değiştirilir.

El sıkışmasının ötesinde sürece dahil olan ortak bir anahtar veya sertifika yoktur. Sadece simetrik şifreleme (örneğin 3DES, AES veya RC4) ve MAC (normalde SHA-1 veya SHA-256 ile HMAC).

38
Tom Leek

Çok mücadele ettikten sonra. SSL, Asimetrik anahtar şifrelemesi, Dijital Sertifika (DC) ve Dijital İmza (DS) arasındaki farkları aşağıda anladım.

Ortak anahtar sertifikası olarak da bilinen Dijital Sertifika nedir?

DC, ortak bir anahtarı ad, adres vb. Kimlik bilgileriyle bağlamak için dijital imza kullanan elektronik bir belgedir.

Sertifikanın içeriği: Genel anahtar sertifikası

En önemlisi İmza-Algoritma, İhraççı ve Ortak Anahtar.

Asimetrik anahtar şifrelemesi ve dijital imza nedir?

Bir örnekle açıklanmıştır.

Her iki makinede de bir çift şifreleme anahtarı vardır - genel şifreleme anahtarı ve özel şifre çözme anahtarı.

Makine-A, Makine-B'nin ortak anahtarına ve sertifikasına erişebilir.
Machine-B'nin Machine-A'nın ortak anahtarı ve sertifikasına erişimi var.

Makine-A'dan Makine-B'ye

Makine-A'da:

  • Hash_function (Veri) = Karma
  • Machine-A'nın özel anahtarını = DS kullanarak şifrele (Hash)
  • DS ve DC = Veri + DS + DC'ye Veri Ekle
  • Machine-B'nin ortak anahtarını kullanarak (Data + DS + DC) şifreleyin.
  • Machine-B'ye gönderin.

Makine-B'de:

  • Machine-B'nin özel anahtarını kullanarak (Data + DS + DC) şifresini çözün.
  • Makine-A'nın kimliğini doğrulamak için DC olduğunu doğrulayın.
  • Machine-A'nın ortak anahtarını kullanarak şifresini çözme (DS) = Hash # 1
  • Hash_function (Veri) = Karma # 2
  • eğer (Hash # 1 == Hash # 2) Veriler ve imza geçerlidir.

Makine-B'den Makine-A'ya

Süreç şimdi yukarıdakilerin tam tersidir.

SSL/TLS nedir?

TLS protokolü, istemci/sunucu uygulamalarının ağ üzerinden gizlice dinlemeyi ve kurcalamayı önleyecek şekilde iletişim kurmasını sağlar. İstemci-Sunucu iletişiminin çoğunda, yalnızca Sunucunun kimliğinin doğrulanması gerekir. TLS, bu fenomeni etkili bir şekilde kullanmak için asimetrik anahtar şifrelemesini kolaylaştırır. Güvenli Yuva Katmanı

İstemci ve Sunucu örneği.

Sunucu CA'dan alınmış dijital bir sertifikaya sahiptir. Ayrıca ortak ve özel anahtarları vardır.

Kullanıcı, ile başlayan bir URL'yi tıklar

https: //

Bu oturum için güvenli bir bağlantı gereklidir. Tarayıcı HTTPS TCP Bağlantı Noktası 443'te bir TCP bağlantısı kurar.

  1. İstemci> Sunucu: SYN
  2. İstemci <Sunucu: SYN + ACK
  3. İstemci> Sunucu: ACK

    Yeni TCP bağlantısında SSL El Sıkışma:

  4. İstemci> Sunucu: CLIENT_HELLO

    İstemci, sunucuya aşağıdakileri içeren bir CLIENT_HELLO komutu gönderir:

    • İstemci tarafından desteklenen en yüksek SSL ve TLS sürümü.
    • İstemci tarafından desteklenen şifreler. Şifreler tercih sırasına göre listelenir.
    • İstemci tarafından desteklenen veri sıkıştırma yöntemleri.
    • Oturum kimliği. İstemci yeni bir SSL oturumu başlatıyorsa, oturum kimliği 0 olur.
    • Anahtar oluşturma işleminde kullanılmak üzere istemci tarafından oluşturulan rastgele veriler.
  5. İstemci <Sunucu: SERVER_HELLO

    Sunucu, istemciye aşağıdakileri içeren bir SERVER_HELLO komutu gönderir:

    • SSL oturumu için kullanılacak SSL veya TLS sürümü.
    • SSL oturumu için kullanılacak şifre.
    • SSL oturumu için kullanılacak veri sıkıştırma yöntemi.
    • SSL oturumu için oturum kimliği.
    • Anahtar oluşturma işleminde kullanılmak üzere sunucu tarafından oluşturulan rastgele veriler.
  6. İstemci <Sunucu: SERTİFİKA (KAMU ANAHTARI)

    Sunucu CERTIFICATE komutunu gönderir. Sunucu sertifikasını içerir.

  7. İstemci <Sunucu: SERVER_DONE

    Sunucu SERVER_DONE komutunu gönderir. Bu komut, sunucunun SSL el sıkışmasının bu aşamasını tamamladığını gösterir.

  8. İstemci> Sunucu: CERTIFICATE_VERIFY

    İstemci, sunucuya sunucunun sertifikasını doğruladığını bildirir

  9. İstemci> Sunucu:

    El sıkışmasında bugüne kadar oluşturulan tüm verileri kullanarak, istemci (kullanılan şifrelere bağlı olarak sunucunun işbirliğiyle) oturum için ana master sırrını oluşturur, sunucunun ortak anahtarıyla (sunucunun sertifikasından alınır) şifreler ) ve ardından şifrelenmiş ana master sırrını sunucuya gönderir.

    Sunucu, ana anahtarı gizlemek için özel anahtarını kullanır ve ardından ana sırrı oluşturmak için bir dizi adım gerçekleştirir.

    İstemci, aynı ana sırrı oluşturmak için ana ön-sırda aynı adımları uygular.

    Not: İstemcinin kimliğinin doğrulanması gerektiği durumlarda, istemci bu el sıkışmasına özgü ve hem istemci hem de sunucu tarafından bilinen başka bir veri parçası da imzalar. Bu durumda, istemci şifrelenmiş ana-gizli sırrıyla birlikte hem imzalanan verileri hem de istemcinin kendi sertifikasını sunucuya gönderir.

  10. İstemci <> Sunucu:

    Hem istemci hem de sunucu, SSL oturumu sırasında değiştirilen bilgileri şifrelemek ve şifresini çözmek ve bütünlüğünü doğrulamak için kullanılan simetrik anahtarlar olan oturum anahtarlarını oluşturmak için ana sırrı kullanır.

    Not: Artık simetrik anahtar şifrelemesidir.

  11. İstemci> Sunucu:

    İstemci, istemciden gelecekteki iletilerin oturum anahtarıyla şifreleneceğini bildiren sunucuya bir ileti gönderir.

  12. Müşteri> Sunucu: FINISHED

    Müşteri daha sonra el sıkışmasının bir kısmının bittiğini belirten ayrı (şifreli) bir mesaj gönderir.

  13. İstemci <Sunucu:

    Sunucu, istemciye, sunucudan gelecekteki iletilerin oturum anahtarıyla şifreleneceğini bildiren bir ileti gönderir.

  14. İstemci <Sunucu: FINISHED

    Sunucu, el sıkışmasının bir kısmının tamamlandığını belirten ayrı (şifreli) bir mesaj gönderir.

    SSL anlaşması tamamlandı ve oturum başlıyor. İstemci ve sunucu, birbirlerine gönderdikleri verileri şifrelemek ve şifresini çözmek ve bütünlüğünü doğrulamak için oturum anahtarlarını kullanır.

4
John

"Başlık altında" daha ayrıntılı bir açıklama için, aşağıdaki makaleyi de önerebilirim: Bir HTTPS Bağlantısının İlk Birkaç Milisaniyesi Jeff Moser. Makale, protokolün nasıl çalıştığını göstermek için bir HTTPS iletişim oturumunun paket yakalama kullanır. Bahsettiğimiz şeyleri eylem halinde görmek ilginç ve birçok "karanlık" noktayı temizliyor.

2
George

Pek değil; sertifikalar yalnızca ilk SSL anlaşması sırasında veya bir SSL yeniden anlaşması sırasında devreye girer. Bundan sonra, AES, (3) DES veya RC4 gibi simetrik bir şifre kullanılacaktır. Açık anahtarlı kripto genellikle simetrik kriptodan daha pahalıdır, bu nedenle genellikle başlangıçta simetrik bir anahtar üzerinde anlaşmak için kullanılır.

1
Steve Dispensa