OpenVPN'de Şifreleme Katmanları

Bu, OpenVPN'in kriptografik katmanının teknik bir özetidir ve modern kriptografik kavramların önceden anlaşıldığını varsayar. OpenVPN güvenliği hakkında ek tartışma için bu SSS maddesine bakın .

OpenVPN'in iki kimlik doğrulama modu vardır:

  • Statik Anahtar - Önceden paylaşılan bir statik anahtar kullanın
  • TLS - Kimlik doğrulama ve anahtar değişimi için SSL / TLS + sertifikaları kullanın
Statik anahtar modunda, tünel başlatılmadan önce her iki OpenVPN eşi arasında önceden paylaşılan bir anahtar oluşturulur ve paylaşılır. Bu statik anahtar 4 bağımsız anahtar içerir: HMAC gönderme, HMAC alma, şifreleme ve şifre çözme. Varsayılan olarak statik anahtar modunda, her iki ana bilgisayar aynı HMAC anahtarını ve aynı şifreleme / şifre çözme anahtarını kullanır. Ancak, yön parametresini –secret olarak kullanarak, 4 anahtarın tümünü bağımsız olarak kullanmak mümkündür.

1604382207738.png

SSL / TLS modunda, çift yönlü kimlik doğrulama ile bir SSL oturumu kurulur (yani, bağlantının her bir tarafı kendi sertifikasını sunmalıdır). SSL / TLS kimlik doğrulaması başarılı olursa, şifreleme / şifre çözme ve HMAC anahtar kaynak materyali OpenSSL'nin RAND_bytes işlevi tarafından rastgele oluşturulur ve SSL / TLS bağlantısı üzerinden değiştirilir. Bağlantının her iki tarafı da rastgele kaynak materyale katkıda bulunur. Bu mod hiçbir zaman çift yönlü olarak herhangi bir anahtar kullanmaz, bu nedenle her eşin farklı bir HMAC gönderme, HMAC alma, paket şifreleme ve paket şifre çözme anahtarı vardır. Eğer tuşlu-yöntemi 2 kullanılır, asıl anahtarlar TLS PRF fonksiyonunu kullanarak rasgele kaynak malzemeden oluşturulur. Eğer tuşlu metodu 1 kullanılır, anahtarlar OpenSSL RAND_bytes fonksiyonu üzerine doğrudan oluşturulur. –Key-method 2 OpenVPN 1.5.0 ile tanıtıldı ve OpenVPN 2.0'da varsayılan olacak.

1604382221074.png

SSL / TLS yeniden anahtarlama sırasında, eski ve yeni anahtar kullanımı arasında örtüşmeye izin veren bir geçiş penceresi parametresi vardır, bu nedenle SSL / TLS yeniden görüşmeleri sırasında zaman baskısı veya gecikme darboğazı olmaz.

1604382235225.png

SSL / TLS güvenilir bir aktarım üzerinden çalışmak üzere tasarlandığından, OpenVPN, UDP'nin üstünde güvenilir bir aktarım katmanı sağlar (aşağıdaki şemaya bakın).

Her bir eş anahtar setine sahip olduğunda, tünel yönlendirme işlemi başlar.

Şifrelenmiş paket şu şekilde biçimlendirilir:

  • HMAC (açık IV, şifreli zarf)
  • Açık IV
  • Şifreli Zarf
Şifrelenmiş zarfın düz metni aşağıdaki gibi biçimlendirilir:

  • 64 bit sıra numarası
  • yük verileri, yani IP paketi veya Ethernet çerçevesi
HMAC ve açık IV, şifrelenmiş zarfın dışındadır.

Paket başına IV, başlangıçta OpenSSL RAND_bytes işlevinden başlatılan, nonce tabanlı bir PRNG kullanılarak rastgele hale getirilir.

HMAC, şifreleme ve şifre çözme işlevleri OpenSSL EVP arayüzü tarafından sağlanır ve kullanıcının HMAC için rastgele bir şifre, anahtar boyutu ve mesaj özeti seçmesine olanak tanır. BlowFish varsayılan şifredir ve SHA1 varsayılan mesaj özetidir. OpenSSL EVP arayüzü, PKCS # 5 dolgusu kullanarak blok boyutunun birden fazla bile olsa dolguyu yönetir. CBC modu şifre kullanımı teşvik edilir ancak gerekli değildir.

OpenVPN'in vanilya TLS'ye göre sağladığı dikkate değer bir güvenlik iyileştirmesi, kullanıcıya –tls-auth yönergesi ile birlikte önceden paylaşılan bir parola (veya statik anahtar) kullanma fırsatı vermesidir. TLS el sıkışma dizisinin bir parçası. Bu, OpenSSL TLS uygulamasında arabellek taşmalarına karşı koruma sağlar, çünkü bir saldırgan, geçerli HMAC imzasına sahip paketler üretmeden TLS anlaşmasını bile başlatamaz.

1604382251444.png

OpenVPN, gerçek şifrelenmiş tünel veri akışı ile kimlik doğrulama ve anahtar değişimi için kullanılan SSL / TLS oturumunu çoğullar. OpenVPN, SSL / TLS bağlantısını güvenilir bir taşıma katmanı ile sağlar (üzerinde çalışmak üzere tasarlandığı için). Gerçek IP paketleri, şifrelenip bir HMAC ile imzalandıktan sonra, herhangi bir güvenilirlik katmanı olmaksızın UDP üzerinden tünellenir. Yani –proto udp kullanılırsa, güvenilir bir aktarım üzerinden hiçbir IP paketi tünellenmez , bu da güvenilirlik katmanı çakışmaları sorununu ortadan kaldırır - Elbette, UDP modunda çalışan OpenVPN üzerinden bir TCP oturumunu tünelliyorsanız, TCP protokolü güvenilirlik katmanı.