Sözlük / Lightning ve katman 2
Onion yönlendirme
Diğer adları: sphinx.
- Onion yönlendirme nedir?
- Onion yönlendirme, Lightning Network tarafından bir ödemeyi birden fazla atlama üzerinden göndermek için kullanılan katmanlı şifrelemedir ve her düğüme yalnızca kendi yönlendirmesine ilişkin talimatları verir, başka hiçbir şey vermez.
Her Lightning ödemesi, katmanları tek tek soyulan sabit 1.366 baytlık bir paketin içinde ilerler, böylece yönlendiren bir düğüm yalnızca kendinden önceki ve sonraki düğümü öğrenir, daha fazlasını değil. Paket her atlamada aynı boyutta kalır; rotanın uzunluğunu ve o rota içindeki konumunuzu gizler. Ortadaki yabancılara karşı mahremiyetiniz güçlüdür; iki uçtaki cüzdana veya borsaya karşı değildir.
Nasıl çalışır
Onion yönlendirme rotayı katmanlar halinde şifreler, her atlama için bir katman, ters sırada sarılır, öyle ki en dış katmanı soymak herhangi bir düğümün yapabileceği tek işlemdir.
BOLT 4, her atlama için bir taşıyıcı veriyle genişletilmiş bu yapıya Sphinx adını verir. Ödeme hareket etmeden önce cüzdanınız rotadaki her düğümün genel anahtarını bilir ve her biriyle ECDH kullanarak ortak bir sır türetir. Her ortak sırdan dört anahtar çıkar: rho paketi bulanıklaştıran bayt akışını üretir, mu bütünlük HMAC'ini hesaplar, um dönüş yolundaki hataları doğrular ve pad dolgu tohumunu oluşturur. Bu akış, sıfırlar üzerinde 96 bitlik sıfır nonce ile çalıştırılan ChaCha20'dir; burada güvenli olmasının tek nedeni hiçbir anahtarın asla yeniden kullanılmamasıdır.
Paketin dört alanı ve tek bir sabit boyutu vardır: şu anda 0x00 olan bir sürüm baytı, geçici anahtar işlevi gören 33 baytlık sıkıştırılmış secp256k1 noktası, 1.300 baytlık atlama taşıyıcı verileri ve 32 baytlık bir HMAC. Bu, kablo üzerinde 1.366 bayt eder ve hiçbir uzunluk öneki gerektirmez.
Birleştirme geriye doğru ilerler. 1.300 baytlık bölge bir ChaCha20 akışından gelen rastgele baytlarla başlar ve son atlamadan ilkine kadar her atlama için yer açmak üzere sağa kaydırılır; bu, en uzak ucu kenardan dışarı iter ve atar. 253 baytın altındaki bir taşıyıcı veri için kaydırma, o taşıyıcı verinin uzunluğu artı 33 kadardır: bir uzunluk baytı ve 32 bayt HMAC. Her kaydırmanın ardından atlamanın rho akışıyla bir XOR gelir ve bu, önceki katmanları yeniden karıştırır.
Bir atlamanın okuduğu şey, türü belirtilmiş alanlardan oluşan kısa bir listedir: tür 2 milisatoshi cinsinden amt_to_forward; tür 4, ardından sunduğu HTLC'ye koyması gereken zaman kilidi outgoing_cltv_value; tür 6 ise kullanılacak kanalı adlandıran short_channel_id'dir, ancak bir düğüm aynı eşe giden başka bir kanalı kullanabilir. Bu kısa kanal kimliğinin yerine son düğüm, 32 baytlık bir ödeme sırrını ve toplam tutarı taşıyan tür 8 alır.
Ardışık paketlerin birbiriyle ilişkilendirilememesini bir adım daha sağlar. Her atlama, geçici anahtarı iletmeden önce bir körleme faktörüyle değiştirir, böylece aynı onion geçtiği her bağlantıda ilgisiz baytlar gibi görünür. BOLT 4 bu sınırı dürüstçe kabul eder: bulanıklaştırma "does not preclude the possibility of packet association by an attacker via traffic analysis." (Bir saldırganın trafik analizi yoluyla paketleri ilişkilendirme olasılığını dışlamaz.)
Bitcoin satın alırken bu neden önemli
Onion yönlendirme sizi bir rotanın ortasındaki yabancılardan korur ve iki ucundaki hiç kimseden korumaz; Lightning mahremiyeti hakkında en çok yanlış anlaşılan şey budur.
İlk atlama genellikle zaten ilişkiniz olan bir hizmettir ve rastgele bir yönlendiriciden çok daha fazlasını görür. Phoenix incelememiz ACINQ şirketinin kendi SSS'sini yumuşatmadan aktarır: "The current version of Phoenix offers no advantage regarding privacy over existing, hosted, custodial wallets. We (ACINQ) know the final destination and amount of payments." (Phoenix ürününün mevcut sürümü, mevcut barındırılan ve saklamalı cüzdanlara göre mahremiyet açısından hiçbir avantaj sunmaz. Biz (ACINQ) ödemelerin nihai varış yerini ve tutarını biliyoruz.) Phoenix burada 4,0 puan alır ve gerçekten saklamasızdır: 12 kelimelik bir kurtarma ifadesiyle korunan, telefonunuzdaki gerçek bir düğüm. Saklama ile mahremiyet ayrı sorulardır ve yalnızca birine iyi yanıt verir.
Alıcı uç da daha iyi değildir. Fonlar uygulamada durduğu sürece Strike saklamalıdır ve kimlik doğrulaması gerektirir, bu yüzden kendi cüzdanınıza yapılan bir Lightning para çekme işlemi, onion kaç atlama geçmiş olursa olsun Strike hizmetine tutarı, anı ve ödediği faturayı söyler. Wallet of Satoshi bir dikkat durumu ve burada 2,7 puan taşır; bunun nedeni kısmen şirketin anahtarları elinde tutmasıdır ve şirket saklamalı Lightning hizmetini Avrupa Birliği'nden zaten çekmiştir.
Öyleyse onion yönlendirmeyi uyum kurallarını aşmanın bir yolu olarak görmeyin. Bir ülke rehberinin hangi yasallık bölümünün size uygulandığını değiştirmez, bir satın alımı onu satan borsadan gizlemez ve cüzdanınızın işletmecisi uç noktalardan biriyse size hiçbir şey kazandırmaz. Yine de sunduğu şey sahip olmaya değer: hiç duymadığınız bir yönlendirme düğümü kimin kime ödeme yaptığına dair bir çizge oluşturamaz, sizin gönderen mi yoksa başka bir atlama mı olduğunuzu anlayamaz ve kısa bir rotayı uzun olandan ayırt edemez.
Hiç duymadığınız iki düğüm üzerinden Strike faturası ödemek
Bir Strike faturasını Lightning üzerinden ödemek, rotadaki her düğümün ne öğrenip ne öğrenmediğini gösterir.
Diyelim cüzdanınız dört düğümlü bir yol seçti: kendi eşiniz, iki herkese açık yönlendirme düğümü, ardından Strike. Paket Strike hizmetinden başlayarak geriye doğru kurulur. Strike taşıyıcı verisi nihai tutarı ve ödeme sırrını alır. Her ara taşıyıcı veri, hâlâ kendisinden sonraki herkesin ücretlerini içeren bir amt_to_forward, o düğümün duyurduğu delta kadar düşürülmüş bir outgoing_cltv_value ve kullanılacak bağlantının short_channel_id'sini alır.
İkinci yönlendirme düğümü tam olarak bir taşıyıcı veri okur. Kendinden önceki düğümün ona bir HTLC devrettiğini ve ileriye biraz daha küçük bir HTLC sunması gerektiğini öğrenir. Strike hizmetinin sonunda olduğunu öğrenmez, sizin başta olduğunuzu öğrenmez ve yolun dört atlama mı sekiz atlama mı olduğunu anlayamaz, çünkü ilettiği bölge aldığı aynı 1.300 bayttır.
Eğer o düğümün iletim için likiditesi yoksa bir dönüş paketi oluşturur: um anahtarı altında bir HMAC, bir hata kodu, hata mesajı artı dolgunun en az 256 bayta ulaşması için seçilmiş dolgu ve sonucun bir ammag anahtarından gelen bir akışla XOR'lanması. Geri dönüş yolundaki her atlama onu yeniden bulanıklaştırır. Cüzdanınız katmanları açar ve ardından döngü 27 kez çalışana kadar şifre çözmeye devam eder; bu, TLV taşıyıcı veri biçiminin izin verdiği en uzun rotadır, böylece başarısız olan düğüm tekrarlanan bir denemeyi zamanlayarak konumunu çıkaramaz. Daha yeni düğümler ayrıca atıf verisi ekler: 4 bayta kısaltılmış HMAC'ler, 20 atlamalık azami boyuttaki bir rota için bunlardan 210 tanesi ve 100 milisaniye biriminde tutma süreleri.
Onion yönlendirme vs körleştirilmiş yol
Onion yönlendirme rotayı bir ödemeyi taşıyan düğümlerden gizlerken, körleştirilmiş yol rotanın son kısmını ödeme yapan kişiden gizler.
Düz onion yönlendirme, gönderenin her düğümün gerçek genel anahtarını bilmesini gerektirir, çünkü ortak sırlar bu anahtarlarla ECDH'den gelir. Rota körleştirme son kısım için bunu tersine çevirir: alıcı, değiştirilmiş düğüm kimliklerinden oluşan bir zincir kurar, BOLT 4'ün kendi örneğinde Bob'u Bob prime, Carol'u Carol prime yapar, sonra gönderene bir giriş noktası artı her atlama için bir şifreli blob verir. Gönderen okuyamadığı blobların etrafına bir onion sarar. İkisi rekabet etmez, birbirini tamamlar: BOLT 4 her onion mesajının rota körleştirme kullanmasını şart koşar ve bir onion mesajı bir ödeme onion'uyla aynı paket biçimini kullanır.
Onion yönlendirme vs HTLC
Onion yönlendirme talimatları taşır, HTLC ise parayı taşır ve bir Lightning ödemesi her ikisine de ihtiyaç duyar, çünkü her biri diğerini kontrol eder.
Onion bir atlamaya nereye ve ne kadar ileteceğini söyler. HTLC, kanalda gerçekten sunulan koşullu ödemedir. Taşıyıcı veri bölgesi yalnızca gönderenin ve o atlamanın üretebileceği, paketin tamamını kapsayan bir HMAC ile kaplandığı için, bir düğüm kendisine sunulan HTLC'yi kendisi için yazılmış amt_to_forward ve outgoing_cltv_value ile karşılaştırır ve bunlar uyuşmadığında başarısız kılar; bu da yukarı akıştaki bir düğümün tutarı sessizce kırptığını yakalar. Bunlar aynı zamanda ayrı düşebilir: bir onion mesajı, tür 513, para taşımayan aynı yapıdır ve bunun için ara bir atlamadan asla hata dönmez.