openssl rand tls-crypt'in istediği anahtarı neden oluşturamaz
OpenSSL rastgele baytlar üretir; tls-crypt yapılandırılmış bir statik anahtar dosyası gerektirir ve tls-crypt-v2 yalnızca sunucunun sarabileceği bir anahtar gerektirir. openvpn --genkey kullanın.
OpenSSL zaten kurulu, ana makinede entropi var ve onunla anahtar üretmek bariz kısayol gibi görünüyor. Çıktı rastgele ve gizli ve tamamen kullanılamaz olacak ve hata, anahtar biçiminden söz eden bir şey yerine kontrol kanalı hatası olarak gelecek. Bu yanlış yönlendirme pahalı kısımdır, çünkü insanları şifrelerini incelemeye gönderir. VPN'in okuduğu şey belirli bir dosya yapısıdır, rastgele bir bayt bloğu değil, ve özelliğin bir varyantı sunucu dışında hiç üretilemez.
Diskteki dosya gerçekte ne olmalı
OpenVPN statik anahtar dosyası metindir. Ne olduğunu bildiren bir yorum satırıyla başlar, sabit genişlikli satırlarda onaltılı veri taşır ve toplamda 256 bayt anahtar malzemesi içerir. OpenVPN onu kontrol kanalının ortak sırrı olarak okur, sertifika olarak değil, parola ifadesi olarak değil ve bir TLS kitaplığının tanıyacağı bir şey olarak da değil.
Aynı nesne türü kontrol kanalının iki özelliğine de hizmet eder. tls-auth ile her eşin ayrıca bir yöne ihtiyacı vardır, böylece bir tarafın paketleri ona geri yansıtılamaz. tls-crypt ile tek bir ortak sır, kontrol kanalını her iki yönde şifreler ve doğrular; bu, el sıkışmayı gizlerken aynı zamanda korur.
Bunların hiçbiri gizli bilgi değildir ve biçim asıl mesele değildir. Asıl mesele, dosyanın okuyucunun beklediğiyle tam olarak eşleşmesi gerektiğidir: başlık, satır genişliği, sondaki yeni satır ve toplam uzunluk. Bir satır kaymış bir dosya çöp olarak yüklenir ya da tümüyle başarısız olur. Bu nedenle iki eşi bayt bayt karşılaştırmak meşru bir ilk testtir ve iki yapılandırma dosyasından herhangi birini okumaktan daha hızlıdır.
Bir tane üretmenin desteklenen yolu
Basit statik anahtarı onu tüketecek araçla üretin, ardından iki uçtan ona başvurun:
openvpn --genkey secret /etc/openvpn/tc-shared.key
tls-crypt /etc/openvpn/tc-shared.key
Seçeneğin yazımı zamanla değişti: 2.4 döneminin eski kurulumları dosya adından önce ayrı bir bayrak bulunan biçimi kullanırken güncel derlemeler daha kısa olanı kabul eder. Her durumda ortaya çıkan dosya aynı nesne türüdür, dolayısıyla kontrol iki eşin de aynı baytlara sahip olup olmadığıdır.
İkinci nesil, hiçbir harici üreticinin icat edemeyeceği bir yapı ekler. Sunucu anahtarı bir kez oluşturulur ve her istemci ondan türetilen sarılmış bir anahtar alır:
openvpn --genkey tls-crypt-v2-server /etc/openvpn/tc-v2-server.key
openvpn --genkey tls-crypt-v2-client /etc/openvpn/laptop1.key --tls-crypt-v2 /etc/openvpn/tc-v2-server.key
İstemcinin aldığı şey sunucunun kendi anahtarının kopyası değildir. Yalnızca sunucunun açabileceği üstveriyi taşıyan sarılmış bir nesnedir ve bu sarma sayesinde cihaz başına bir dosya başka hiçbir cihaza dokunmadan iptal edilebilir. Sunucu anahtarını sunucuda tutun ve onu bu cihaz başına güvenin kökü olarak görün.
El yapımı baytların kırıldığı yer
256 rastgele baytı doğru bir başlığın altında onaltılı olarak yazdırmak teoride yüklenen bir statik anahtar dosyası verirdi. Yine de kötü bir fikirdir. Her biçimlendirme ayrıntısı, yüklemede başarısız olan ya da daha kötüsü, iki eşi yalnızca kimlik doğrulama hatası olarak ortaya çıkan farklı değerlerle bırakan malzeme üretme fırsatına dönüşür.
v2 varyantıyla eşdeğer hiçbir şey mümkün değildir. Sarılmış istemci anahtarı yalnızca sunucu anahtarı sürecinin çıktısı olarak vardır ve sunucu onu açmak için gereken malzemeyi saklar. Rastgele bir blok reddedilir ya da basitçe şifresini çözemez ve iki iletinin hiçbiri rastgelelikten söz etmez.
Sürüm uyumluluğu tüm bunların üzerindedir. İlk nesil her iki uçta onu destekleyen bir sürüm gerektirir, ikincisi ise yine daha yeni bir sürüm gerektirir. Özellik ortaya çıkmadan önce derlenmiş bir istemci, yalnızca sarılmış malzemeyi kabul eden bir sunucuyla el sıkışmayı tamamlayamaz ve bildirdiği hata sürümü değil kontrol kanalını işaret eder.
Herkesi dışarıda bırakmadan döndürme
Tek bir ortak sırrı döndürmek teknik değil, koordinasyon alıştırmasıdır. Sunucu öncekini geri çekmeden önce her istemcinin elinde yedek dosya olmalıdır ve eski değeri hâlâ taşıyan her makine o anda başarısız olur. Bu döndürmeye iş gününün ortasında başlamayın.
v2 düzeninde döndürme cihaz başınadır: bir makine için yeni sarılmış anahtar yayımlayın ve eskisini yalnızca o makine için kullanımdan kaldırın. Her istemci bunu destekleyen bir sürümde olduğunda geçmek için ana argüman budur.
Dosya izinleri aynı konuşmaya aittir. Anahtar yalnızca hizmeti çalıştıran hesap tarafından okunabilir olmalı ve koruduğu profillerle aynı depoda yaşamamalıdır. OpenVPN 2.6 başvurusu üretim biçimlerini ve anahtar malzemesi bölümlerini belgeler; bu, bir forum gönderisinden kopyalanan komuttan daha iyi bir kaynaktır.