Bir ağdaki bilgisayarlar birbirleriyle protokollere göre iletişim kurar. Burada "protokol", mesajların nasıl iletilmesi ve yorumlanması gerektiğini belirleyen bir kurallar sistemini ifade eder. Lightning ağ protokolünün ödeme mesajı iletim kısmı, "Soğan Yönlendirme Protokolü (Onion Yönlendirme Protokolü)" olarak da bilinen BOLT#4 tarafından açıklanmaktadır.
Onion Routing, Lightning Network'ten 25 yıl öncesine dayanan bir teknolojidir. "Tor" ("Soğan Yönlendirici") adının geldiği Tor'da da kullanılır. Lightning Network, "menşe tabanlı soğan yönlendirme" adı verilen ve kısaltılmışı "SPHINX" olan biraz değiştirilmiş bir sürüm kullanır. Bu yazıda, soğan yönlendirmenin nasıl çalıştığı hakkında konuşacağız.
Neden soğan yönlendirme kullanıyorsunuz?
Dünyada pek çok farklı iletişim protokolü mevcuttur, ancak Lightning Network bir ödeme ağı olduğundan, iletilen ödeme hakkında mümkün olduğunca az bilgi veren bir protokol seçmek mantıklıdır.
Lightning Network İnternet ile aynı protokolü kullansaydı, her aracı ödemeyi gönderenin, alıcının ve yol üzerindeki diğer aracıların kim olduğunu bilirdi. Soğan yönlendirme iyi bir seçimdir çünkü özellikleri ara düğümleri garanti eder:
Yalnızca önceki düğümünüzü (size kim mesaj gönderdi) ve sonraki düğümü (mesajı iletmek istediğiniz yere) bilin.
tüm yolun uzunluğunu bilmiyor;
Yolun neresinde olduğunu bilmemek.
Soğan yönlendirmeye genel bakış
Soğan yönlendirmenin nasıl çalıştığını açıklamak için bir benzetme olarak bir parsel kullanalım.
Diyelim ki Alice, Dina'ya ödeme yapmak istiyor. İlk olarak, Alice'in ödemesi için uygun bir yol bulması gerekiyor:
Alice → Bob → Chan → Dina
Sonra bir "soğan" yapar. Dina ile başlar (yolun sonundan). Dina'ya gönderilen bir pakete gizli bir mesaj (ödeme içeriği) koyar ve yalnızca kendisinin ve Dina'nın bildiği bir anahtarla kilitler. Şimdi, bu paketi Chan'a gönderilmek üzere başka bir paketin içine koyuyor ve paketi Chan ile yalnızca kendisi tarafından bilinen bir anahtarla Chan'a kilitliyor. Doğru ve benzeri.
Alice son soğanı (paket) yoldaki ilk aracı Bob'a gönderir. Bob kendi anahtarıyla paketinin kilidini açar ve bir sonraki paketin Chan için olduğunu görür. Bu yüzden paketi Chan'a iletti. Aynısı Chan için de geçerli, paketi açtıktan sonra içindeki paketi Dina'ya iletti. Sonunda Dina kendi paketini açtı ve içindeki ödeme mesajını buldu.
Soğan yönlendirmede, Bob ve Chan gibi aracılar, Dina'ya gönderilen mesajın içeriğini veya tüm ödeme yolunun uzunluğunu bilmezler. Bildikleri tek şey, paketi kendilerine kimin ilettiği ve bundan sonra kimin alacağıdır. Bu, mesajın gizliliğini ve yolun gizliliğini garanti eder. Her aracı, yalnızca TA için özel olarak hazırlanmış mesaj katmanına dokunabilir.
Lightning Network'ün kaynak tabanlı soğan yönlendirmesinde, gönderen ödeme yolunu seçer ve bu yol için bir gizlilik deliği olarak görülebilecek tam bir soğan oluşturur (Çevirmenin Notu: Alıcının ağ konumu gönderene gösterilmelidir). "Kör yönlendirme" (Çince çevirisi) gibi diğer yönlendirme şemaları, gönderene giden ödeme yolunun bir kısmını gizleyerek bu sorunu çözer. Ancak, bu yazıda yalnızca SPHINX'e odaklanıyoruz.
Soğanı birleştir
Şimdi, soğan yönlendirmenin özelliklerine bir göz atalım. Başlangıçta, bunları tanımlamamız gerekiyor:
Gönderen "ilk düğüm"dür (Alice);
Alıcı "son düğüm"dür (Dina);
Ödeme yolundaki her ara düğüm bir "atlama"dır (Bob ve Chan);
Her hop arasındaki iletişim bilgilerine "hop load" denir.
Atlama yükü oluştur
Alice bir ödeme yolu seçtikten sonra, her bir sekme için yükü oluşturmak üzere dedikodu protokolünden her bir ödeme kanalına ilişkin bilgileri alır ve esasen her bir sekmeye, iletilmekte olan ödeme için HTLC'yi nasıl oluşturacağını söyler (hash timelock sözleşmesi).
Uygun bir HTLC oluşturmak için her sekmenin şunları yapması gerekir:
İletilmesi gereken miktar;
ödenen gizli değer;
Soğan göndermeye devam eden ödeme kanalının kimliği;
Zaman kilidinin uzunluğu.
Bu verilerin çoğu, yönlendirme ücretleri, etkinlik istekleri ve ödeme kanalı kimlikleri hakkında bilgiler içeren "kanal güncelleme" mesajlarından gelir. İletilmesi gereken toplam tutar, ödeme tutarı artı sonraki her atlama için alınan işlem ücretinin toplamıdır; ödemenin gizli değeri ise Dina tarafından hesaplanır ve ödeme faturasına eklenir (her birine soğan mesajı ile bildirilir) atlama).
Alice son düğüm Dina ile başlar. Pakete yönlendirme tutarı, zaman kilitleme süresi değeri, ödeme gizli değeri ve ödeme tutarı dahildir. Dina son düğüm olduğundan ve ödemeyi başkalarına iletmesi gerekmediğinden, kanal kimliğini eklemesine gerek olmadığını unutmayın.
İlk bakışta yönlendirme tutarını vermek gereksiz görünüyor çünkü bu tutar ödeme tutarıyla aynı.Ancak çok yollu ödeme, ödeme tutarını birden çok yoldan gönderecek ve ardından iki değer eşleşmeyecektir.
Chan'ın yükünde Alice, Chan ve Dina'nın kanal kimliklerini ekler. Ayrıca yönlendirme miktarları ve zaman kilidi değerleri ekledi. Son olarak Alice, Bob için bir yük oluşturur. Chan, kendisi ve Dina arasındaki kanal aracılığıyla yapılan ödeme için 100 Satoshi alıyor, bu nedenle Alice'in Bob'a iletilen miktarın ödeme artı işlem ücreti olduğunu söylemesi gerekiyor. Chan'ın kanal güncelleme mesajına göre timelock değeri de (bloklar halinde) 20 artırıldı. Son olarak Alice, Bob'un işlem ücretini ve zaman kilidi gereksinimlerini de dikkate alır ve ona 700040 zaman kilidi uzunluğu ve 100200 Satoshi değeri ile bir HTLC verir.
Paylaşılan gizli değer ve anahtar oluşturma
Daha sonra Alice, her sekme için (son düğüm dahil) paylaşılan bir sır oluşturarak soğanı hazırlar. Bu paylaşılan gizli değer, sırasıyla Alice ve hedef atlama tarafından kendi özel anahtarının diğer tarafın genel anahtarıyla çarpılmasıyla oluşturulabilir.
Soğan yönlendirmesi için paylaşılan bir gizli değer gereklidir, bu da Alice'in ve her sekmenin aynı anahtarı türetmesine izin verir. Alice daha sonra soğanın her katmanını karartmak için bu anahtarları kullanır ve bu sekme, gizlemeyi kaldırmak için anahtarları kullanır.
Alice'in mahremiyetini korumak için, paylaşılan gizli değeri türetmek üzere kendi düğüm açık anahtarını kullanmak yerine bir soğan için tek seferlik bir oturum anahtarı oluşturur. Bu oturum anahtarını ilk atlama için kullanır ve ardından, sonraki her atlama için Alice, en son anahtarı kör edici bir faktörle çarparak anahtarı deterministik olarak rasgele atar. Bunlar, "geçici anahtarlar" dediğimiz, paylaşılan bir gizli değer anahtarı oluşturmak için kullanılır.
Bob, Chan ve Dina'nın hepsinin Alice ile aynı gizli değeri elde etmesi gerekiyor, dolayısıyla oturumlarında kullanacakları kısa ömürlü anahtarı bilmeleri gerekiyor. Alice, mesaj boyutundan tasarruf etmek için soğana yalnızca ilk anahtarı koyar. Her sekme, bir sonraki kısa ömürlü anahtarı hesaplar ve onu bir sonraki düğüm için soğana yerleştirir. Her atlama, Alice tarafından bir sonraki kısa ömürlü anahtarı belirlemek için kullanılan körleme faktörünü hesaplamak için kendi genel anahtarını ve paylaşılan gizli değerini kullanabilir.
Daha önce bahsedildiği gibi, paylaşılan gizli değer bazı anahtarlar oluşturmak için kullanılacaktır ve Alice ve karşılık gelen atlama, soğan üzerinde bazı işlemler gerçekleştirmek için bu anahtarları kullanabilir. Her bir tuşun ne yaptığına bir göz atalım.
Rho tuşu
Rho anahtarı, Alice tarafından bir soğan katmanını şifrelemek için kullanılır; bu, yükün içeriğini gizler, böylece yabancılar tarafından deşifre edilemez. Yalnızca rho anahtarının sahibi yükün şifresini çözebilir. Soğanı alan düğümün yapması gereken budur: rho anahtarını türetmek için Alice ile paylaşılan gizli değeri kullanın, sonra soğanın şifresini çözün ve içeriğini okuyun.
Mu key
Alice, her yük için bir sağlama toplamı oluşturmak için mu tuşunu kullanır. Ayrıca sağlama toplamını soğanı alan şerbetçiotuna iletir. Bu atlama, sırayla, Alice tarafından verilenle eşleşip eşleşmediğini kontrol ederek, alınan yükün bir sağlama toplamını oluşturmak için mu tuşunu kullanır. Bu, yükün bütünlüğünü kontrol etmek ve kurcalanmadığını doğrulamak içindir.
Ped tuşu
Bu anahtar, yalnızca Alice tarafından rastgele "çöp" verileri oluşturmak için kullanılır. Bu veriler aynı zamanda soğanın bir parçasıdır ve ödeme yolunun uzunluğu, soğanın kaç sekme geçtiği ile hiçbir ilgisi yoktur ve içeriğinin bir kısmı alakasız olsa bile soğanı her zaman aynı boyutta tutar. Bu, soğan yönlendirmesinin yol uzunluğunu gizleyerek göndericinin ve alıcının gizliliğini etkili bir şekilde koruma şeklidir.
Anahtar
Bu anahtar, soğan içinde bulunan verilerin bütünlüğünü kontrol etmek için de kullanılır, ancak yalnızca bir hata döndürülürse. Evet, "um" deniyor çünkü "mu" tersten yazılmış. Bir ödeme hatası durumunda, hatayı bulan atlama, bir sağlama toplamı oluşturmak için um anahtarını kullanacak ve önceki düğüm hata raporunu aldığında, mesajın bütünlüğünü doğrulamak için de um anahtarını kullanacaktır.
Soğan katmanını kapsülleme
Son soğan sargısı şöyle görünür:
Alice artık her atlama için yüke ve her atlama için paylaşılan gizli değere sahiptir. Şimdi Alice'in bu bilgiyi son soğana nasıl dönüştürdüğünü görelim. Son düğümle başlar ve adım adım geriye gider.
Önce, tüm soğan yüklerinin toplam uzunluğu olan 1300 bayt uzunluğunda boş bir alan oluşturur. Ardından, 1300 bayt uzunluğunda rastgele bir dizi oluşturmak için ped tuşunu kullanır; bu, herhangi bir atlama için yararsız olan çöptür. Bu adım, soğanın her katmanının aynı görünmesini sağlamak için yapılır, böylece yolun toplam uzunluğunu (kaç atlama) veya kimin gönderici ve kimin alıcı olduğunu göremezsiniz.
Ardından, kullanılması gereken yükün sağlama toplamını oluşturur ve bunu yükün sonuna koyar. Son düğüme gönderilen mesajda, Dina'ya bu soğanın son alıcısı olduğunu bildirmek için sağlama toplamı 0'dır. Alice, yükün sonuna sağlama toplamını ekledikten sonra, yükü (ve sağlama toplamını) çöpün başına koyar ve tüm mesajın 1300 baytı aşan kısmını siler, böylece tüm mesaj uzunluğu 1300 bayt olur.
Ardından, Alice rho anahtarını rastgele bir bayt dizisi oluşturmak için kullanır ve karartılmış yükü elde etmek için bir önceki adımda elde edilen soğan yükü üzerinde bir dışlayıcı veya (XOR) işlemi kullanır. Gizlenmiş metin üzerinde bu rastgele bayt dizisinin XOR işlemi kullanılarak yükün orijinal metni elde edilebilir (Çevirmenin Notu: Yani burada XOR simetrik şifrelemenin algoritmasıdır ve rastgele bayt dizisi anahtardır). XOR işlemi, soğan yükünü rasgele bayt dizisiyle (rho anahtarı tarafından oluşturulan) bit parça karşılaştırır ve yalnızca veri bitlerinden biri 1 ise 1 verir; bu, karartılmış bir yük ile sonuçlanır. XOR işlemiyle ilgili akıllıca olan şey, doğru rasgele bayt dizesini ve gizlenmiş yükü aldığınız sürece, gizlenmiş yükü elde etmek için yalnızca XOR işlemini ikisiyle yeniden çalıştırmanız gerektiğidir.
Soğanı alan düğümler aynı rho anahtarını türetebildikleri için, Alice ile aynı rasgele bayt dizisini üretebilirler. Bu, yol üzerindeki her bir düğümün karışıklığı nasıl çözebileceğini ve içeriği okuyabileceğini gösterir.
Bir hop için karıştırma soğanını hazırladıktan sonra, Alice bir sonraki düğüm için aynı adımları tekrarlar. En önemli fark, Dina'nın soğanları bittiğinde artık çöp üretmesine gerek kalmamasıdır. Yararlı yük ve sağlama toplamından sonra önceki adımdaki karartılmış soğanı ekler ve 1300 baytın üzerindeki her şeyi keser.
Son olarak, Alice karartılmış son soğanı alır ve Bob'un soğanın bütünlüğünü doğrulayabilmesi için bir sağlama toplamı ekler. Alice daha sonra oturum ortak anahtarını ekler, böylece Bob bu ortak anahtarı paylaşılan gizli değeri hesaplamak için kullanabilir. Son olarak, diğer düğümlere içindeki verileri nasıl yorumlayacaklarını söyleyen, sürümü temsil eden bir bayt da ekler. BOLT #4 ile açıklanan sürüm için sürüm baytı 0 olacaktır.
ileri soğan
Bu soğan paketini göndermek için gönderen, aşağıdaki alanları içeren bir update_add_htlc mesajı oluşturur:
Kanal Kimliği: Bu mesajın ilgili olduğu belirli kanal.
Kimlik: Bu HTLC'nin tanımlayıcısı.
Tutar: Bu HTLC'nin değeri.
Payment Hash: Ödemenin alıcısı tarafından oluşturulur.
Sona Erme Süresi: Bu HTLC, belirli bir bloktan sonra sona erecektir.
Soğan Parsel: Yukarıda bahsedilen bu ödeme için oluşturulan soğan.
Ek veriler: ek verileri belirtmek için kullanılır.
Mesajı hazırladıktan sonra Alice mesajı Bob'a gönderir. Bob mesajı aldıktan sonra kendi soğanının kodunu çözmeye başlayabilir. Önce soğan paketleyicisinden oturum anahtarını alır ve bunu Alice ile paylaşılan sırrın değerini türetmek için kullanır.
Paylaşılan gizli değerle donanmış olan Bob, soğan paketine gömülü yükün sağlama toplamını doğrulamak için mu anahtarını üretir. Yük kurcalanmadıysa, sağlama toplamları eşleşmelidir.
Yoldaki diğer düğümlerin yolun ne kadar uzun olduğunu bilmesini önlemek için Bob, soğan paketine sıfırlarla dolu 1300 baytlık bir alan ekler. Bob daha sonra rho anahtarından 2600 bayt uzunluğunda rastgele bir bayt dizisi oluşturur. Bob, bu rasgele bayt dizesini, sıfır dolu soğan yükünü XOR yapmak için kullanır.
Size kafa karıştırıcı soğan yüklerinden bahsettiğimi hatırlıyor musunuz? Gizlenmiş soğan yükünü girdi olarak kullanın ve soğan yükünü şaşırtmadan önce almak için aynı bayt dizisiyle "XOR" işlemini çalıştırın. Alice ve Bob aynı rho anahtarını üreterek aynı paylaşılan gizli değeri kullandığından, Bob karartmayı kaldırabilir. Bu, 1300 baytlık uzun ped karakterlerini rasgele baytlara dönüştürme ek avantajına sahiptir.
Bob'un gizlenmemiş yükü, bir parmak iziyle birlikte sıçraması için yük verilerini içerir. Bob, Chan'a gönderdiği soğan paketine ekleyebilmek için bu parmak izini kaydeder. Bob kendi yükünü soğan mesajından ayırdıktan sonra, soğan paketini orijinal boyutu olan 1300 bayta dönüştürür ve Alice'in yaptığı gibi oturum anahtarını rasgele atar. Son olarak, Bob, soğan yüküne koymayı planladığı sürüm baytlarını, oturum anahtarını ve parmak izini ekler ve bir update_add_htlc mesajı yoluyla soğan paketini Chan'a iletir.
Bu işlem, mesaj son düğüm olan Dina'ya gönderilene kadar devam eder. Dina update_add_htlc mesajını aldığında, kendisi tarafından oluşturulan gizli değerin karma değerini girebilir, bu da bu HTLC'nin kendisine yönelik olduğu anlamına gelir. Yani Dina'nın tek yapması gereken parmak izlerini kontrol etmek, soğan mesajlarını çözmek ve kendi yükünü ortaya çıkarmak.
Sorun giderme
Bir başarı öyküsünden bahsediyoruz, her şeyin plana göre gittiği bir vakadan bahsediyoruz, ancak yol boyunca bir şeyler ters giderse, tüm düğümlere bir şeylerin ters gittiğini bildirmek için bir mesaj göndermeniz gerekiyor. Bu işlem, normal soğan yönlendirmeye benzer. Hatalı bir düğümün tespit edilmesi, um anahtarının paylaşılan gizli değerden türetilmesini, bunun rastgele bir bayt dizisi oluşturmak için kullanılmasını ve döndürülen soğan paketini karartmak için bir XOR işleminin kullanılmasını gerektirir.
Bir hata bulan bir düğüm, ödeme yolundaki önceki düğüme bir mesaj gönderir. Her atlama, gönderen paketi alana kadar aynı işlemi yapmak için um tuşunu ve ammag tuşunu kullanır. Son olarak, gönderen, paketi gizlemek ve doğrulamak için ammag anahtarını ve um anahtarını kullanır.
Hatalara soğan paketleri, düğümler veya kanallar neden olabilir. Lightning Network'ü çok kullanıyorsanız "kanal kullanılamıyor" veya "yeterli ücret yok" gibi hatalarla karşılaşmış olabilirsiniz.
View Original
The content is for reference only, not a solicitation or offer. No investment, tax, or legal advice provided. See Disclaimer for more risks disclosure.
Lightning Network'te "Onion Routing" ve nasıl çalıştığı
Yazar: LORENZO
Bir ağdaki bilgisayarlar birbirleriyle protokollere göre iletişim kurar. Burada "protokol", mesajların nasıl iletilmesi ve yorumlanması gerektiğini belirleyen bir kurallar sistemini ifade eder. Lightning ağ protokolünün ödeme mesajı iletim kısmı, "Soğan Yönlendirme Protokolü (Onion Yönlendirme Protokolü)" olarak da bilinen BOLT#4 tarafından açıklanmaktadır.
Onion Routing, Lightning Network'ten 25 yıl öncesine dayanan bir teknolojidir. "Tor" ("Soğan Yönlendirici") adının geldiği Tor'da da kullanılır. Lightning Network, "menşe tabanlı soğan yönlendirme" adı verilen ve kısaltılmışı "SPHINX" olan biraz değiştirilmiş bir sürüm kullanır. Bu yazıda, soğan yönlendirmenin nasıl çalıştığı hakkında konuşacağız.
Neden soğan yönlendirme kullanıyorsunuz?
Dünyada pek çok farklı iletişim protokolü mevcuttur, ancak Lightning Network bir ödeme ağı olduğundan, iletilen ödeme hakkında mümkün olduğunca az bilgi veren bir protokol seçmek mantıklıdır.
Lightning Network İnternet ile aynı protokolü kullansaydı, her aracı ödemeyi gönderenin, alıcının ve yol üzerindeki diğer aracıların kim olduğunu bilirdi. Soğan yönlendirme iyi bir seçimdir çünkü özellikleri ara düğümleri garanti eder:
Soğan yönlendirmeye genel bakış
Soğan yönlendirmenin nasıl çalıştığını açıklamak için bir benzetme olarak bir parsel kullanalım.
Diyelim ki Alice, Dina'ya ödeme yapmak istiyor. İlk olarak, Alice'in ödemesi için uygun bir yol bulması gerekiyor:
Alice → Bob → Chan → Dina
Sonra bir "soğan" yapar. Dina ile başlar (yolun sonundan). Dina'ya gönderilen bir pakete gizli bir mesaj (ödeme içeriği) koyar ve yalnızca kendisinin ve Dina'nın bildiği bir anahtarla kilitler. Şimdi, bu paketi Chan'a gönderilmek üzere başka bir paketin içine koyuyor ve paketi Chan ile yalnızca kendisi tarafından bilinen bir anahtarla Chan'a kilitliyor. Doğru ve benzeri.
Alice son soğanı (paket) yoldaki ilk aracı Bob'a gönderir. Bob kendi anahtarıyla paketinin kilidini açar ve bir sonraki paketin Chan için olduğunu görür. Bu yüzden paketi Chan'a iletti. Aynısı Chan için de geçerli, paketi açtıktan sonra içindeki paketi Dina'ya iletti. Sonunda Dina kendi paketini açtı ve içindeki ödeme mesajını buldu.
Soğan yönlendirmede, Bob ve Chan gibi aracılar, Dina'ya gönderilen mesajın içeriğini veya tüm ödeme yolunun uzunluğunu bilmezler. Bildikleri tek şey, paketi kendilerine kimin ilettiği ve bundan sonra kimin alacağıdır. Bu, mesajın gizliliğini ve yolun gizliliğini garanti eder. Her aracı, yalnızca TA için özel olarak hazırlanmış mesaj katmanına dokunabilir.
Lightning Network'ün kaynak tabanlı soğan yönlendirmesinde, gönderen ödeme yolunu seçer ve bu yol için bir gizlilik deliği olarak görülebilecek tam bir soğan oluşturur (Çevirmenin Notu: Alıcının ağ konumu gönderene gösterilmelidir). "Kör yönlendirme" (Çince çevirisi) gibi diğer yönlendirme şemaları, gönderene giden ödeme yolunun bir kısmını gizleyerek bu sorunu çözer. Ancak, bu yazıda yalnızca SPHINX'e odaklanıyoruz.
Soğanı birleştir
Şimdi, soğan yönlendirmenin özelliklerine bir göz atalım. Başlangıçta, bunları tanımlamamız gerekiyor:
Atlama yükü oluştur
Alice bir ödeme yolu seçtikten sonra, her bir sekme için yükü oluşturmak üzere dedikodu protokolünden her bir ödeme kanalına ilişkin bilgileri alır ve esasen her bir sekmeye, iletilmekte olan ödeme için HTLC'yi nasıl oluşturacağını söyler (hash timelock sözleşmesi).
Uygun bir HTLC oluşturmak için her sekmenin şunları yapması gerekir:
Bu verilerin çoğu, yönlendirme ücretleri, etkinlik istekleri ve ödeme kanalı kimlikleri hakkında bilgiler içeren "kanal güncelleme" mesajlarından gelir. İletilmesi gereken toplam tutar, ödeme tutarı artı sonraki her atlama için alınan işlem ücretinin toplamıdır; ödemenin gizli değeri ise Dina tarafından hesaplanır ve ödeme faturasına eklenir (her birine soğan mesajı ile bildirilir) atlama).
Alice son düğüm Dina ile başlar. Pakete yönlendirme tutarı, zaman kilitleme süresi değeri, ödeme gizli değeri ve ödeme tutarı dahildir. Dina son düğüm olduğundan ve ödemeyi başkalarına iletmesi gerekmediğinden, kanal kimliğini eklemesine gerek olmadığını unutmayın.
İlk bakışta yönlendirme tutarını vermek gereksiz görünüyor çünkü bu tutar ödeme tutarıyla aynı.Ancak çok yollu ödeme, ödeme tutarını birden çok yoldan gönderecek ve ardından iki değer eşleşmeyecektir.
Chan'ın yükünde Alice, Chan ve Dina'nın kanal kimliklerini ekler. Ayrıca yönlendirme miktarları ve zaman kilidi değerleri ekledi. Son olarak Alice, Bob için bir yük oluşturur. Chan, kendisi ve Dina arasındaki kanal aracılığıyla yapılan ödeme için 100 Satoshi alıyor, bu nedenle Alice'in Bob'a iletilen miktarın ödeme artı işlem ücreti olduğunu söylemesi gerekiyor. Chan'ın kanal güncelleme mesajına göre timelock değeri de (bloklar halinde) 20 artırıldı. Son olarak Alice, Bob'un işlem ücretini ve zaman kilidi gereksinimlerini de dikkate alır ve ona 700040 zaman kilidi uzunluğu ve 100200 Satoshi değeri ile bir HTLC verir.
Paylaşılan gizli değer ve anahtar oluşturma
Daha sonra Alice, her sekme için (son düğüm dahil) paylaşılan bir sır oluşturarak soğanı hazırlar. Bu paylaşılan gizli değer, sırasıyla Alice ve hedef atlama tarafından kendi özel anahtarının diğer tarafın genel anahtarıyla çarpılmasıyla oluşturulabilir.
Soğan yönlendirmesi için paylaşılan bir gizli değer gereklidir, bu da Alice'in ve her sekmenin aynı anahtarı türetmesine izin verir. Alice daha sonra soğanın her katmanını karartmak için bu anahtarları kullanır ve bu sekme, gizlemeyi kaldırmak için anahtarları kullanır.
Alice'in mahremiyetini korumak için, paylaşılan gizli değeri türetmek üzere kendi düğüm açık anahtarını kullanmak yerine bir soğan için tek seferlik bir oturum anahtarı oluşturur. Bu oturum anahtarını ilk atlama için kullanır ve ardından, sonraki her atlama için Alice, en son anahtarı kör edici bir faktörle çarparak anahtarı deterministik olarak rasgele atar. Bunlar, "geçici anahtarlar" dediğimiz, paylaşılan bir gizli değer anahtarı oluşturmak için kullanılır.
Bob, Chan ve Dina'nın hepsinin Alice ile aynı gizli değeri elde etmesi gerekiyor, dolayısıyla oturumlarında kullanacakları kısa ömürlü anahtarı bilmeleri gerekiyor. Alice, mesaj boyutundan tasarruf etmek için soğana yalnızca ilk anahtarı koyar. Her sekme, bir sonraki kısa ömürlü anahtarı hesaplar ve onu bir sonraki düğüm için soğana yerleştirir. Her atlama, Alice tarafından bir sonraki kısa ömürlü anahtarı belirlemek için kullanılan körleme faktörünü hesaplamak için kendi genel anahtarını ve paylaşılan gizli değerini kullanabilir.
Daha önce bahsedildiği gibi, paylaşılan gizli değer bazı anahtarlar oluşturmak için kullanılacaktır ve Alice ve karşılık gelen atlama, soğan üzerinde bazı işlemler gerçekleştirmek için bu anahtarları kullanabilir. Her bir tuşun ne yaptığına bir göz atalım.
Rho tuşu
Rho anahtarı, Alice tarafından bir soğan katmanını şifrelemek için kullanılır; bu, yükün içeriğini gizler, böylece yabancılar tarafından deşifre edilemez. Yalnızca rho anahtarının sahibi yükün şifresini çözebilir. Soğanı alan düğümün yapması gereken budur: rho anahtarını türetmek için Alice ile paylaşılan gizli değeri kullanın, sonra soğanın şifresini çözün ve içeriğini okuyun.
Mu key
Alice, her yük için bir sağlama toplamı oluşturmak için mu tuşunu kullanır. Ayrıca sağlama toplamını soğanı alan şerbetçiotuna iletir. Bu atlama, sırayla, Alice tarafından verilenle eşleşip eşleşmediğini kontrol ederek, alınan yükün bir sağlama toplamını oluşturmak için mu tuşunu kullanır. Bu, yükün bütünlüğünü kontrol etmek ve kurcalanmadığını doğrulamak içindir.
Ped tuşu
Bu anahtar, yalnızca Alice tarafından rastgele "çöp" verileri oluşturmak için kullanılır. Bu veriler aynı zamanda soğanın bir parçasıdır ve ödeme yolunun uzunluğu, soğanın kaç sekme geçtiği ile hiçbir ilgisi yoktur ve içeriğinin bir kısmı alakasız olsa bile soğanı her zaman aynı boyutta tutar. Bu, soğan yönlendirmesinin yol uzunluğunu gizleyerek göndericinin ve alıcının gizliliğini etkili bir şekilde koruma şeklidir.
Anahtar
Bu anahtar, soğan içinde bulunan verilerin bütünlüğünü kontrol etmek için de kullanılır, ancak yalnızca bir hata döndürülürse. Evet, "um" deniyor çünkü "mu" tersten yazılmış. Bir ödeme hatası durumunda, hatayı bulan atlama, bir sağlama toplamı oluşturmak için um anahtarını kullanacak ve önceki düğüm hata raporunu aldığında, mesajın bütünlüğünü doğrulamak için de um anahtarını kullanacaktır.
Soğan katmanını kapsülleme
Son soğan sargısı şöyle görünür:
Alice artık her atlama için yüke ve her atlama için paylaşılan gizli değere sahiptir. Şimdi Alice'in bu bilgiyi son soğana nasıl dönüştürdüğünü görelim. Son düğümle başlar ve adım adım geriye gider.
Önce, tüm soğan yüklerinin toplam uzunluğu olan 1300 bayt uzunluğunda boş bir alan oluşturur. Ardından, 1300 bayt uzunluğunda rastgele bir dizi oluşturmak için ped tuşunu kullanır; bu, herhangi bir atlama için yararsız olan çöptür. Bu adım, soğanın her katmanının aynı görünmesini sağlamak için yapılır, böylece yolun toplam uzunluğunu (kaç atlama) veya kimin gönderici ve kimin alıcı olduğunu göremezsiniz.
Ardından, kullanılması gereken yükün sağlama toplamını oluşturur ve bunu yükün sonuna koyar. Son düğüme gönderilen mesajda, Dina'ya bu soğanın son alıcısı olduğunu bildirmek için sağlama toplamı 0'dır. Alice, yükün sonuna sağlama toplamını ekledikten sonra, yükü (ve sağlama toplamını) çöpün başına koyar ve tüm mesajın 1300 baytı aşan kısmını siler, böylece tüm mesaj uzunluğu 1300 bayt olur.
Ardından, Alice rho anahtarını rastgele bir bayt dizisi oluşturmak için kullanır ve karartılmış yükü elde etmek için bir önceki adımda elde edilen soğan yükü üzerinde bir dışlayıcı veya (XOR) işlemi kullanır. Gizlenmiş metin üzerinde bu rastgele bayt dizisinin XOR işlemi kullanılarak yükün orijinal metni elde edilebilir (Çevirmenin Notu: Yani burada XOR simetrik şifrelemenin algoritmasıdır ve rastgele bayt dizisi anahtardır). XOR işlemi, soğan yükünü rasgele bayt dizisiyle (rho anahtarı tarafından oluşturulan) bit parça karşılaştırır ve yalnızca veri bitlerinden biri 1 ise 1 verir; bu, karartılmış bir yük ile sonuçlanır. XOR işlemiyle ilgili akıllıca olan şey, doğru rasgele bayt dizesini ve gizlenmiş yükü aldığınız sürece, gizlenmiş yükü elde etmek için yalnızca XOR işlemini ikisiyle yeniden çalıştırmanız gerektiğidir.
Soğanı alan düğümler aynı rho anahtarını türetebildikleri için, Alice ile aynı rasgele bayt dizisini üretebilirler. Bu, yol üzerindeki her bir düğümün karışıklığı nasıl çözebileceğini ve içeriği okuyabileceğini gösterir.
Bir hop için karıştırma soğanını hazırladıktan sonra, Alice bir sonraki düğüm için aynı adımları tekrarlar. En önemli fark, Dina'nın soğanları bittiğinde artık çöp üretmesine gerek kalmamasıdır. Yararlı yük ve sağlama toplamından sonra önceki adımdaki karartılmış soğanı ekler ve 1300 baytın üzerindeki her şeyi keser.
Son olarak, Alice karartılmış son soğanı alır ve Bob'un soğanın bütünlüğünü doğrulayabilmesi için bir sağlama toplamı ekler. Alice daha sonra oturum ortak anahtarını ekler, böylece Bob bu ortak anahtarı paylaşılan gizli değeri hesaplamak için kullanabilir. Son olarak, diğer düğümlere içindeki verileri nasıl yorumlayacaklarını söyleyen, sürümü temsil eden bir bayt da ekler. BOLT #4 ile açıklanan sürüm için sürüm baytı 0 olacaktır.
ileri soğan
Bu soğan paketini göndermek için gönderen, aşağıdaki alanları içeren bir update_add_htlc mesajı oluşturur:
Mesajı hazırladıktan sonra Alice mesajı Bob'a gönderir. Bob mesajı aldıktan sonra kendi soğanının kodunu çözmeye başlayabilir. Önce soğan paketleyicisinden oturum anahtarını alır ve bunu Alice ile paylaşılan sırrın değerini türetmek için kullanır.
Paylaşılan gizli değerle donanmış olan Bob, soğan paketine gömülü yükün sağlama toplamını doğrulamak için mu anahtarını üretir. Yük kurcalanmadıysa, sağlama toplamları eşleşmelidir.
Yoldaki diğer düğümlerin yolun ne kadar uzun olduğunu bilmesini önlemek için Bob, soğan paketine sıfırlarla dolu 1300 baytlık bir alan ekler. Bob daha sonra rho anahtarından 2600 bayt uzunluğunda rastgele bir bayt dizisi oluşturur. Bob, bu rasgele bayt dizesini, sıfır dolu soğan yükünü XOR yapmak için kullanır.
Size kafa karıştırıcı soğan yüklerinden bahsettiğimi hatırlıyor musunuz? Gizlenmiş soğan yükünü girdi olarak kullanın ve soğan yükünü şaşırtmadan önce almak için aynı bayt dizisiyle "XOR" işlemini çalıştırın. Alice ve Bob aynı rho anahtarını üreterek aynı paylaşılan gizli değeri kullandığından, Bob karartmayı kaldırabilir. Bu, 1300 baytlık uzun ped karakterlerini rasgele baytlara dönüştürme ek avantajına sahiptir.
Bob'un gizlenmemiş yükü, bir parmak iziyle birlikte sıçraması için yük verilerini içerir. Bob, Chan'a gönderdiği soğan paketine ekleyebilmek için bu parmak izini kaydeder. Bob kendi yükünü soğan mesajından ayırdıktan sonra, soğan paketini orijinal boyutu olan 1300 bayta dönüştürür ve Alice'in yaptığı gibi oturum anahtarını rasgele atar. Son olarak, Bob, soğan yüküne koymayı planladığı sürüm baytlarını, oturum anahtarını ve parmak izini ekler ve bir update_add_htlc mesajı yoluyla soğan paketini Chan'a iletir.
Bu işlem, mesaj son düğüm olan Dina'ya gönderilene kadar devam eder. Dina update_add_htlc mesajını aldığında, kendisi tarafından oluşturulan gizli değerin karma değerini girebilir, bu da bu HTLC'nin kendisine yönelik olduğu anlamına gelir. Yani Dina'nın tek yapması gereken parmak izlerini kontrol etmek, soğan mesajlarını çözmek ve kendi yükünü ortaya çıkarmak.
Sorun giderme
Bir başarı öyküsünden bahsediyoruz, her şeyin plana göre gittiği bir vakadan bahsediyoruz, ancak yol boyunca bir şeyler ters giderse, tüm düğümlere bir şeylerin ters gittiğini bildirmek için bir mesaj göndermeniz gerekiyor. Bu işlem, normal soğan yönlendirmeye benzer. Hatalı bir düğümün tespit edilmesi, um anahtarının paylaşılan gizli değerden türetilmesini, bunun rastgele bir bayt dizisi oluşturmak için kullanılmasını ve döndürülen soğan paketini karartmak için bir XOR işleminin kullanılmasını gerektirir.
Bir hata bulan bir düğüm, ödeme yolundaki önceki düğüme bir mesaj gönderir. Her atlama, gönderen paketi alana kadar aynı işlemi yapmak için um tuşunu ve ammag tuşunu kullanır. Son olarak, gönderen, paketi gizlemek ve doğrulamak için ammag anahtarını ve um anahtarını kullanır.
Hatalara soğan paketleri, düğümler veya kanallar neden olabilir. Lightning Network'ü çok kullanıyorsanız "kanal kullanılamıyor" veya "yeterli ücret yok" gibi hatalarla karşılaşmış olabilirsiniz.