Gönderen Konu: Hamachi  (Okunma sayısı 761 defa)

Çevrimdışı erhanerhanerhan

  • Osc Çizik Üye

  • 5. SINIF UYE
  • *
  • İleti: 576
  • Puan 200
  • Cinsiyet: Bay
    • MSN Messenger - erhan0717@hotmail.com
    • Profili Görüntüle
    • E-Posta
Hamachi
« : 01 Aralık 2007, 06:13:35 »
Hamachi nedir?

Hamachi, pek çok değişik amaç için kullanabileceğiniz özel bir VPN (Virtual Private Network) uygulamasıdır. Bu uygulama ile internet üzerinde bir yerel ağ (LAN) veya VPN kurabilir, işyerinizden evdeki bilgisayarınıza bağlanabilir, arkadaşlarınızla LAN üzerindeymiş gibi oyun oynayabilir veya dosya paylaşımı yapabilirsiniz. Hamachi'yi diğer programlardan ayıran en önemli özellikler, kullanmak için hiçbir ayar yapmanızın gerekmemesi, hızlı ve güvenli olmasıdır.

Hamachi, Applied Networking Inc. tarafından geliştirilmiş bir freeware yazılımdır, yani ücretsiz dağıtılabilir; ama açık kaynak bir uygulama değildir. Şu anda, Microsoft Windows ve Linux işletim sistemleri için sürümleri mevcuttur, Mac OS X sürümü geliştirme aşamasındadır ve bir deneme sürümü http://forums.hamachi.cc adresinden ulaşabileceğiniz forumda yayınlanmıştır.

Nasıl Çalışır?

Hamachi'yi bilgisayarınıza yüklediğinizde, sisteminizde sanal bir ağ aygıtı oluşturur. Bu sanal ağ aygıtı üzerine yollanan tüm IP ve IPX paketlerini daha önceden ilklendirilmiş, UDP protokolü kullanan bir bağlantıya uygun formata dönüştürüp aktarır, yani tüneller. Hamachi'nin hızlı çalışmasının en önemli sebeplerinden biri; bağlantılarında optimum paket boyutunu belirleyen, gönderdiği paketlerin hedefine ulaşıp ulaşmadığını kontrol edip aldığı paketler için karşı tarafa bilgi mesajı gönderen TCP protokolü yerine, daha emniyetsiz bir transfer protokolü olan UDP'yi kullanmasıdır. UDP, TCP'nin kullandığı pek çok denetimi yapmasa da, uygun koşullarda kullanıldığında TCP'ye göre çok daha hızlı bir bağlantı sağlar.

Yukarıda UDP bağlantısının daha önceden ilklendirildiğini söyledik. Şimdi bunun nasıl olduğundan bahsedelim. Hamachi, geliştiricilerinin meditasyon sunucusu adı verdikleri 3. bir sunucunu kullanarak hamachi ağı kurmak isteyen iki sunucunun bağlantısını ayarlar ve yeniden başlatır. Aslında, henüz hamachi'ye ait bir patent olmaması ki açık kaynak kodu olmaması buna bağlanılıyor, hamachi'nin tam olarak nasıl bir uygulama kullandığını bilmemizi engelliyor. Fakat yine de bu konu hakkında ileri sürülen tezler yok değil. Örneğin, bahsettiğimiz bağlantı ayarlama işlemi sırasında, hamachi NAT (Network Address Translation) ile dönüştürülmüş IP adreslerini bildiği sunucuların birbirleriyle bağlantılarının dışarıya açık IP kullanarak, tam ve aynı anda direkt bağlantı kurmalarını söyler.

Normalde NAT kullanan aygıtlar, istenmeyen paket trafiğini otomatik olarak durdururlar ve böylece bağlantıyı engellerler. Fakat bağlantı için iki sunucunun aynı andaki istekte bulunduğundan, NAT aygıtlarının routerlarının dışa dönük portları gelen trafiği kabul eder. Hangi portu kullanarak bağlantı kurulacağı konusunda ise, meditasyon sunucusunu bağlantı kurmak isteyen sunucuların port numaralarında sayı sırası izlediğini düşünüp, meditasyon sunucusuyla kurdukları bağlantıda kullandıkları port numarasının bir sonrakilerini birbirlerine ilettikleri düşünülüyor. Açılan portlardaki UDP trafiği portun kullanımındaki boş zamana bağlı olarak devam edeceğinden, hamachi periyodik olarak bir paket trafiği sağladığında bağlantı hiç kopmayacaktır.

Dediğimiz gibi bu sadece bir varsayım. Diğer bir tez ise, hamachi'nin "UDP hole punching" tekniği kullandığı yönündedir. Buna göre ise, bağlantı kurmak isteyen sunucuların öncelikle halka açık IP adresi bilinen 3. bir sunucuyla UDP bağlantısı kurarak, bağlantı bilgilerini paylaşıp; daha sonra bu bilgiler aracılığıyla NAT aygıtlarının da sorun çıkarmayacağını umarak bağlantıyı bu iki sunucuya aktarmaya dayanıyor.

Örneğin, A ve B bağlanmak isteyen sunucular, X ise bilinen halka açık sunucu olsun:

    * Önce A ve B, X ile bağlantı UDP bağlantısı kurup, NAT bilgilerini ve bağlantı için atadıkları geçici port numaralarını X'e aktarır.
    * X bu bilgileri karşılıklı olarak A ve B sunucularına gönderir.
    * A ve B birbirlerinin NAT aygıtları ile haberleşir, daha önce X' gönderdikleri bilgileri onaylayarak UDP bağlantı oluştururlar.

Bahsettiğimiz bu yaklaşım, sadece "Full cone NAT" tipi cihazlarda, yani herhangi bir iç IP ve port numarasından gelen istekler aynı dış IP'ye ve port numarasına yönlendiren NAT cihazlarında çalışmaktadır. Hamachi'nin p2p bağlantılarının %97'sine başarı sağlaması ve proje geliştiricilerinin yukarıdaki yaklaşımın p2p bağlantılarının sadece %80'inde başarılı olacağını savunması, bu yaklaşımın biraz şüpheli kılıyor.

Gerçekte ise NAT aygıtlarının %5'inin Hamachi'yi desteklemediği biliniyor. Bunun için hamachi'inin "Magic option" adında alternatif bir servisi var. Ayrıca 1.0 versiyonu ile "relayed tunneling" adında başka bir alternatif sunuldu.


Nasıl Kurulur ve Kullanılır?

Microsoft Windows kullanıcıları için hamachi kurulumu oldukça basit.

http://www.hamachi.cc/download adresinden indirecekleri uygulamayı çalıştırıp, yönergeleri izlediklerinde Hamachi kurulmuş olacaktır. Linux kullanıcıları için durum biraz farklı. Dediğimiz gibi hamachi açık kaynak kodlu bir program olmadığından, derlenmiş bir ikili dosya (hamachi) olarak yukarıdaki adresten indirilebilir. Linux üzerinde sanal ağ aygıtı kurulması için TUN/TAP aygıt sürücüsüne gerek duyar. Eğer sisteminizde /dev/net/tun dosyası varsa sorun yok. Ama yoksa o zaman, http://hamachi.cc/tuntap adresine uğramanız gerekiyor. Hamachi'yi çalıştırmak için gerekli olan root haklarını ayarlamak için açık kaynak"tuncfg" adlı yardımcı bir program ı kurmamız gerekiyor. İndirdiğimiz .tar dosyasını arşivden çıkarıp, oluşan dizine geçtikten sonra root haklarına sahip olarak tuncfg programını kuracağız.

# make install

Tuncfg yüklendikten sonra, bu programı root hakları ile çalıştırmamız gerekiyor.

# sudo /sbin/tuncfg -> (Eğer sudo yüklü değilse) #su - ; /sbin/tuncfg; exit

Bu komuttan sonra hamachi yüklenmiş olacaktır. Hamachi yüklendikten sonra, her iki işletim sistemi için de yaptığı ortak bazı işlemler vardır. Windows üzerinde program ilk çalıştırıldığında, hamachi meditasyon sunucusuna bağlanarak kullanıcının hesabını kullandığı sürece onu tanımlayacak bir Hamachi ağ adresi atar. Bu adres, 5.x.x.x ağ adreslerinden biri olacaktır. Yine program ilk çalıştırıldığında, kullanıcı bir RSA anahtarı oluşturur. Bu bilgi meditasyon sunucusuna sadece bu sırada gönderilir. Daha sonraki bağlantılarda kullanıcı Hamachi ID'sini (Hamachi ağ adresi) ve RSA anahtarını meditasyon sunucusuna gönderir ve sunucu bunları doğruladığında bağlantı kurulur. Linux sistemlerinde bu işlemler kullanıcının vereceği bir komut ile meydana gelir.

# ./hamachi-init

Dediğimiz gibi, hamachi çok kolay kullanılabilir bir program. Windows kullanıcıları bu konuda hiç zorluk çekmeyeceklerdir. Zira ilk çalıştırmada, hamachi adım adım ilerleyen bir kılavuz ile programın nasıl çalıştırılacağını anlatıyor.





Windows kullanıcıları için hamachi'nin güzel ve basit bir arayüzü var. Arayüzde, temel işlevi gören 3 buton var. Bunlar, Power, Networking Menuve System Menu'dür. Power butonuna basınca, bahsettiğimiz işlemleri yaparak hamachi ağına bağlanır. Bu durumda, Networking Menü >> Join Existing Network ile herhangi ağa bağlanabilirsiniz. Bu durumda, bağlanmak istediğiniz ağın ismini ve parolasını bilmelisiniz. Diğer bir seçenekte kendi ağınızı oluşturabilirsiniz. Networking Menü >> Create New Network ile kendi ağınıza isim ve parola vererek yeni hamachi ağınızı kurmuş olursunuz.





Hamachi bağlantınızı kontrol etmek için, ismi "test" ve parolası "secret" olan deneme sunucusuna bağlanabilirsiniz. Oluşturulan her ağ öntanımlı olarak 16 kişilik olduğundan zaman zaman bağlanmak istediğiniz ağların dolu olması sorunuyla karşılaşabilirsiniz.

Bir ağa bağlandığınızda, ağın ismi ve o anda bağlı olan kullanıcıların listesi sıralanır. Çevrimiçi olan kullanıcıların yanında yeşil renkli bir nokta, bağlantıda sorun yaşayanların yanında sarı nokta, o anda bağlantı kuran kullanıcıların yanında yanıp sönen yeşil nokta ve çevrimdışı kullanıcılar için de gri nokta bulunur. Girdiğiniz ağdan çıkmak için ağ isminin üzerinde sağ tıklayıp, "Leave Network"'e tıklamanız; ağda çevrimdışı olmak içinse "Go Offline"'a tıklamanız gerekir. Ağdaki kullanıcılar, öntanımlı olarak hamachi ID'leri ve kullanıcı adlarıyla beraber gözükürler. Bunu değiştirmek için kullanıcı isimlerinden birine tıklayıp, "Set Label" ile sadece takma isimleri veya hamachi ID'leri ile gözükmelerini sağlayabilirsiniz. Aynı şekilde kullanıcıları bloklayabilir, ping atabilir veya mesaj atabilirsiniz.



Kullanıcı isimlerine sağ tıkladığınızda eğer kullanıcı paylaşıma açtıysa bu paylaşımlara "Browse" seçeneği ile ulaşabilirsiniz. Eğer kendi kuruduğunuz ağı silmek isterseniz ağ isminin üstüne gelip, "Delete"'e basarak bunu yapabilirsiniz. Aynı şekilde "Set Password" seçeneği ile parola değiştirebilirsiniz. System menüsündeki "Preferences" kısmından; takma isim değişimi, çevrimdışı kullanıcıların saklanması veya mesajlaşma ile ilgili ayarları yapabilirsiniz.

Linux kullanıcıları için bu kadar güzel bir arayüze sahip olmasalar da, aynı işlevleri kullanabilirler. Ancak öncelikle, hamachi oturumunu başlatmanız gerekir. Bunun için:

#./hamachi start

komutunu çalıştırmanız gerekir. Eğer oturumu kapatmak isterseniz, yazacağınız komut;

#./hamachi stop

Oturum ilk defa açıldığında hamachi çevrimdışıdır. Çevrimiçi olabilmek için,

#./hamachi login

komutunu yürütmelisiniz. Tekrar çevrimdışı olmak için ise;

#./hamachi logout

 komutunu yürütmelisiniz. Hamachi oturumu "stop" komutu ile her kapandığına son durumunu da kaydeder. Yani, eğer "./hamachi stop" komutundan önce çevrimdışı olmadıysanız, bir sonraki oturumda "./hamachi login" komutunu çalıştırmanız gerekmez. Hamachi'de her oturum açtığınızda, program size kullandığınız hamachi sürümünü, pid değerini, durumunuzu ve ağdaki takma adınızı gösterir.

Bu işlemlerden sonra, önceden kurulmuş bir ağa bağlanmak için;

#./hamachi join <ağ ismi>

kendi ağınızı kurmak için ise,

#./hamachi create <ağ ismi>

komutunu çalıştırmalısınız. Her iki durum için devamında bir parola belirtmelisiniz. Yine her iki durum için de girdiğiniz ağda çevrimdışı olarak gözükürsünüz. Çevrimiçi olabilmek için,

#./hamachi go-offline <ağ ismi>

komutunu çalıştırmalısınız. Ağdan çıkmak için ise;

#./hamachi leave <ağ ismi>

yürütmeniz gerekir. Eğer kurduğunuz bir ağı silmek isterseniz,

#./hamachi delete <ağ ismi>

komutunu çalıştırıyoruz. Ağda istemediğiniz kullanıcıları ağdan atmak için,

#./hamachi evict <kullanıcı ismi>

komutunu kullanabilirsiniz. Eğer ağdaki kullanıcıları listelemek isterseniz,

#./hamachi list

komutunu çalıştırıyorsunuz. Bu komutun çıktılarında, "[]" köşeli parantezler arasındaki isimler bağlandığınız ağları ve bu isimlerin önündeki asteriks "*" işaretleri ise bu ağlarda çevrimiçi olduğunuzu gösterir. Kullanıcılar, hamachi ID - Takma isim – Tünel adresi olarak gösterilir. Örnek olarak;
* [Yeni]
                    * 5.1.1.12        Dünya
                    x 5.1.1.17        Mars
                      5.1.1.45       
                    * 5.1.0.18        Uranüs      10.0.0.100:45634

Yukarıdaki örnekte olduğu gibi, çevrimiçi kullanıcılar hamachi ID'lerinin yanındaki asteriks "*" işareti ile belirtilir. Eğer biliniyorsa, takma isimleri ve tünelleme işlemi sırasındaki IP adresleri belirtilir. Hamachi ID'lerin yanındaki (x) işareti bu kullanıcı ile bağlantı kurulamadığını gösterir. Eğer kullanıcıların takma isimlerini öğrenmek isterseniz;

#./hamachi get-nicks

komutunu çalıştırabilirsiniz. Eğer kendi takma isminizi değiştirmek isterseniz,

#./hamachi set-nick <yeni_takma_ismi>

olarak çalıştırabilirsiniz.

Her iki işletim sistemi kullanıcıları için de önemli olan bir nokta, hamachi hesap bilgilerinin yedeklenmesidir. Hamachi'de yeni bir ağ yarattıktan sonra hamachi'yi silmek (sistemin çökmesi veya işletim sisteminin tekrar yüklenmesi vb. gibi durumlarda.) zorunda kaldıysanız, daha önce kurduğunuz ağların sizin yönetiminizden çıkmaması için aynı hamachi hesabını kullanmanız gerekir. Tabii, eğer yedekleme yapmadıysanız bunu yapamayacaksınız. Yedekleme işlemi için Windows kullanıcıları, System Menu>>Preferences>>Status kısmındaki "Backup Identity" butonu ile bunu yapabilir. Linux kullanıcıları ise bunu "hamachi-init" komutundan sonra hesap için oluşturulan (öntanımlı olarak /root/.hamachi/) dizininin bir kopyasını alarak yapabilirler.
Peki ya Güvenlik?

Hamachi'nin geliştiricilerinin övündükleri bir nokta da programın sağladığı güvenlik avantajlarıdır. Daha önce kullanıcıların kendilerine ait özel bir IP aldığını ve bir RSA anahtarı oluşturduğunu söylemiştik. Bunu dışında her hamachi sunucusunun da bir RSA anahtarı vardır ve bu anahtar bilgileri yükleme paketi içine eklenmiştir. Bir kullanıcı hamachi sunucusuna bağlanmak istediğinde, istediği sunucuya ait RSA anahtarını gönderir. Eğer sunucu bu anahtara sahipse, bunu belirterek kullanıcının gönderdiği veriye ait bir imza gönderir ve bağlantı kurulur. Bu bağlantılar sırasında hamachi'nin yaptığı anahtar değişimi, üretimi ve mesaj şifrelemesi gibi işlemlerin algoritma ve kuralları geliştiricilerinin "Crypto Suite" adını verdikleri bir uygulamadan alınır. Bu uygulama, Diffie-Hellman anahtar değişimi, blok şifreleme, mesaj şifreleme ve doğrulama işlemlerini yapması için geliştirilmiş. Eğer biraz bu işlemlerin ayrıntılarından bahsedersek;

*) Diffie-Hellman anahtar değişimi, 1976 yılında aynı isimli geliştiriciler tarafından yayımlanan bir sunucular-arası gizli parola değişimi protokolüdür. Bu protokolün iki p ve g olarak iki gizli olmayan değişkeni var. p parametresi bir asal sayı ve g parametresi de p'den daha küçük bir tamsayıdır. Bu iki değişken arasında şöyle bir ilişki vardır:

1'den p-1'e kadar her n sayısı için bir adet k sayısı vardır ki, n = gk mod p.

Peki bu nasıl uygulanıyor? A ve B iki sunucu olsun ve birbirlerinin gizli parolalarını DH (Diffie-Hellman) protokolü ile değişmek istesinler. Bu durumda A, x ve B y olarak iki rastgele sayı seçerler. Daha sonra her ikisi de bu sayıları p ve g değişkenleri ile türetirler. Bu durumda A'nın sayısı gx mod p ve B'nin sayısı gy mod p olur. Bu sayıları birbirleriyle değiştiklerinde A gab = (gb )a mod p değerini, B ise gba = (ga ) b mod p değerini hesaplar. Bu durumda,

gab = gba = k olacağından, A ile B'nin gizli anahtarı artık k'dır. Burada, p asal sayısının gizli k değerinin hesaplanmasını önleyecek kadar büyük olması gerekir. Bu algoritma ortadaki adam saldırısına karşı korunmasızdır. Örneğin bir C sunucusu, A'nın B'ye gönderdiği sayıyı engelleyip kendi sayısını B'ye gönderebilir. B'nin cevap olarak gönderdiği sayı yerine A'ya yine kendi sayısını gönderir. Bu durumda, A ile C ve B ile C arasında iki adet gizli parola oluşur. Bu durumda C bu iki parolayı bildiğinden, A ile B arasındaki trafiği deşifre ederek öğrenebilir.

Bu temele dayanan ve yukarıda açıklanan saldırıya karşı çözüm getiren Station-to-Station (STS) protokolü 1992 yılında Diffie, Oorschot ve Wiener tarafından geliştirilmiştir.

*) Blok şifreleme, şifrelenmemiş belli boyuttaki bir metini şifreleyip aynı boyutta bir veri haline getiren simetrik şifreleme algoritmasıdır. Bu şifreleme işleminde kullanıcının belirlediği bir anahtar (parola) kullanılır. Deşifre işlemi yine aynı anahtar kullanarak ilk işlemin tersi yapılarak gerçekleşir. Bu işlemdeki sabit boyuta blok boyutu da denir ve genelde 64 bit olarak belirlenir. Blok şifrelemenin kendi arasında da iteratif blok şifreleme ve elektronik kod kitabı gibi birçok değişik metodu vardır.

*) Mesaj denetimi kodları (MAC: Message Authentication Code) gönderilen mesajın üzerinde bir denetim işlemi yaparak mesajın bütünlüğünün korunduğuna ve değiştirilmediğine dair bilgi içeren verilerdir. Bu veriler sayısal imzalardan farklı olarak ortak parola ile üretilir ve doğrulanır. Böylece sadece hedeflenen kişinin doğrulama denetimi yapması sağlanır. Mesaj denetim kodlarının oluşturulmasında da blok şifreleme temelli veya hash-fonksiyonu temelli olmak üzere pek çok değişik yöntem kullanılır.

Şimdi bu bilgiler doğrultusunda biraz yukarıda bahsettiğimiz olayların detayına göz atalım:

Kullanıcı sunucuya önce bir HELO mesajı ile bağlanır.

HELO CryptoSuite ServerKfp Ni Gi

Burada CryptoSuite kullanılan öntanımlı şifreleme algoritmalarını, ServerKfp sunucunun genel anahtarının parmak izi, Ni ve Gi ise kullanıcının 1024 bitlik DH (Diffie-Hellman) üs değerleridir. Eğer sunucu ServerKfp ile aynı genel anahtara sahipse, sunucu aşağıdaki mesaj ile cevap verir.

HELO OK Nr Gr

Burada Nr ve Gr sunucunun DH üs değerleridir.

Bu durumda, her iki taraf birbirlerinin DH üs değerlerini bildiğinden, artık ortak parolayı hesaplayabilirler. Bunu aşağıdaki şekilde yaparlar:

     KEYMAT = T1 | T2 | T3 | ...
         T1 = prf (K, Ni | Nr | 0x01)
         T2 = prf (K, T1 | Ni | Nr | 0x02)
         T3 = prf (K, T2 | Ni | Nr | 0x03)
         ...

Burada K, DH algoritmasına ait gizli bir değer ve prf ise HMAC-SHA1 şifreleme uygulamasıdır. Bağlantıda kullanılan tüm ileti trafiği KEYMAT fonksiyonundan türetilen Ka anahtarı ile denetlenen Ke anahtarı ile şifrelenir. Öntanımlı CryptoSuite KEYMAT ile türetilen değerin ilk 256 bitini Ke ve sonraki 160 bitini Ka olarak kullanır.

Artık kullanıcı sunucu ile bağlantı kurduğuna göre, hamachi'de oturum açması gerekir. Bunun için kullanıcı sisteme AUTH mesajı iletir.

AUTH Kimlik İmza(Ni | Nr | Gi | Gr, Kpri_cli)

Bu iletide, Kimlik kullanıcının 32 bitlik hamachi IP adresi ve İmza ise, kullanıcının daha önceki iletilerden edindiği DH üs değerleri ve sonucunda hesapladığı gizli DH parolasının SHA1 çıktısıdır. Sunucu Kimlik değerinden kullanıcıya ait hesabı bulur ve kendi hesapladığı İmza değeri ile karşılaştırır. Eğer uyuşma varsa,

AUTH OK İmza(Nr | Ni | Gr | Gi, Kpri_srv)

iletisiyle cevap verir. Buradaki İmza değeri ise sunucunun HELO mesajında aldığı ServerKfp ve kendi hesapladığı gizli DH parolası değerleriyle oluşturduğu SHA1 çıktısıdır.
P2P bağlantı

Meditasyon sunucusu kullanıcılar arasında tünelleme yaptıktan sonra, SPI adı verilen iki adet 32 bitlik rasgele değer üretir. SPI değerleri her iki yöndeki ileti akışını etiketlemek için kullanılır. Kullanıcıya bir UDP paketi geldiğinde paketten SPI değeri ile karşısındaki kullanıcıyı belirler ve parola değerini hesaplayıp, deşifre etme ve doğrulama işlemlerini yapar.

0.9.9.5 sürümünden önceki programlar için KEYMAT değerleri meditasyon sunucusu üzerinden hesaplanırken, 0.9.9.6 sürümü ve sonrakiler için KEYMAT değerleri kullanıcıların kendisi tarafından hesaplanıyor. Bu işlemi kısaca açıklarsak;

Öncelikle kullanıcılardan SPI değeri daha küçük olanı, bağlantıyı başlatan olarak seçilir ve karşısındakine KE1 Ni Gi | Ni ve Gi bağlantıyı başlatan sunucunun DH üs değerleri. mesajını göndermeye başlar. Bu işlemi karşı taraftan cevap gelmediği sürece N ms'de bir gönderir. Diğer taraf karşılık olarak aşağıdaki mesajı gönderir:

KE2 Nr Gr İmza(Nr | Ni | Gr | Gi, Kpri_r)

Burada Nr ve Gr cevap veren tarafın DH üs değerleri ve İmza ise cevap veren tarafın gizli parolası ile oluşturulmuş SHA1 çıktısıdır. Bu durumda cevap veren, Ni ve Gi değerlerinin gerçek değerler olmaması tehlikesi sebebiyle P2P parola değerlerini türetmez ve sadece Nr ve Gr değerlerini gönderir.

Bağlantıyı başlatan taraf, İmza değerini doğrularsa yukarıda bahsedilen KEYMAT'i kullanarak P2P parola değerini üretir ve karşı taraftan cevap alana kadar belli aralıklarla bu mesajı karşıya iletir.

KE3 Ni Gi İmza(Ni | Nr | Gi | Gr, Kpri_i)

Son olarak cevap veren taraf P2P parola değerini hesaplayıp, bağlantıyı başlatan tarafın gönderdiği değeri doğrularsa, karşıya anahtar değişiminin başarıyla tamamlandığını bildiren bir ileti gönderir.

Anahtar değişimi sırasında, kullanıcıların birbirlerinin imzalarını doğrulamaları için, birbirlerinin gizli olmayan anahtar değerlerini bilmeleri gerekir. Bu değerleri ya meditasyon sunucusu yardımıyla ya da karşıdaki kullanıcıdan başka bir yolla edinip yükleyerek alırlar.
Mesajların Güvenliği

Mesajlar 256 bitlik simetrik şifreleme algoritması ile şifrelenir ve yukarıda açıkladığımız MAC ile doğruluğu denetlenir. Her mesaj kendine özel bir mesaj numarası alır. İleti şifrelenmeden önce, eğer gönderilecek veri blok şifreleme için küçükse, ESP yöntemi ile veri gerekli boyuta uzatılır. Sonra mesaja ait bir IV değeri hesaplanıp mesaja eklenir ve mesaj şifrelenir.

Şifrelenmiş mesaja tekrar olarak IV değeri ve özel bir mesaj numarası (sürekli artan 32 bitlik bir değer) eklenir. Eğer TCP protokolü ile yollanacaksa, boyut başlığı, UDP ile yollanacaksa SPI değeri şifrelenmiş mesaja eklenir. Sn olarak bu mesaj üzerinde bir HMAC-SHA1 imza değeri üretilir ve mesaja eklenip karşıya yollanır.

Bu şifreleme metodu TLS ve IKE/IPsec ile belirtilen metotlarla uyumludur.
Ne için kullanabiliriz?

En başta bahsettiğimiz gibi, hamachi çok amaçlı bir VPN uygulamasıdır. Yukarıda kendinize ait bir ağı nasıl oluşturabileceğinizden bahsettik. Bu ağ üzerinden yerel ağ üzerinde yağabileceğiniz pek çok işlemi gerçekleştirebilirsiniz. Örneğin, VNC (Virtual Network Computing) trafiğini tünellemek için hamachi'yi kullanabilirsiniz. Bu sayede bağlandığınız bilgisayarın masaüstünü görebilir ve ekran başındaymış gibi karşıdaki bilgisayarı yönetebilirsiniz. Microsoft Windows üzerinde Remote Desktop uygulamasını hamachi IP adresi ile çalıştırarak aynı işlemi yapabilirsiniz.

Eğer dosya paylaşımı yapmak istiyorsanız, bu da çok basit birkaç işlem ile yapılabilir. Güvenlik açısından Windows işletim sistemleri dosya paylaşımını engeller fakat Windows üzerinde paylaşmak istediğiniz dosyalara ait dizinlerin üzerine sağ tıklayıp, Özellikler ile açılan pencerede Paylaşım sekmesinden bunu yapabilirsiniz. Daha sonra, Başlat>>Denetim Masası>>Ağ Bağlantıları içindeki hamachi ağ bağlantınıza sağ tıklayıp Özelliklerden hamachi üzerinde Dosya paylaşımının aktif olduğundan emin olun. Linux kullanıcıları için ise, Samba gibi dosya paylaşım programlarında ayarlarını hamachi'nin oluşturduğu sanal ağ aygıtı üzerinden yapmaları yeterli olacaktır.

Hamachi'nin kullanımını yaygınlaştıran en önemli sebeplerden biri de internet üzerinde oyunların oldukça hızlı oynanmasını sağlamasıdır. Eğer hamachi ile oyun oynamak isterseniz, karşınızda iki seçenek var. Ya kendi ağınızı yaratıp, bu ağ üzerinde oyunun ayarlarını yaparak arkadaşlarınızın oyuna dâhil olmasını beklersiniz, ya da diğer hamachi kullanıcılarının oyun için açmış oldukları ağlara bağlanıp, bir oyuna dahil olabilirsiniz. Unutulmaması gereken, her hamachi ağındaki toplam kullanıcı sayısı en fazla 16 olabiliyor. Dünya üzerinde hangi oyunlar için hangi ağların açıldığını http://redboxen.ath.cx/hamachimap/ adresinden öğrenebilirsiniz. Oyunları hamachi üzerinden oynamak için oyunlar üzerinde ne gibi değişikler yapılması gerektiğini öğrenmek için ise, http://www.hamachiturk.com adresine bakabilirsiniz. Unutulmaması gereken, her hamachi ağındaki toplam kullanıcı sayısı en fazla 16 olabiliyor.
Sonuç

Hamachi hem sunduğu kullanım seçenekleri hem de kullanımdaki inanılmaz kolaylığı ile uzunca bir süre kullanıcıların gözdesi olabilir. Ayrıca oldukça güvenli olması da büyük bir artı. Önümüzdeki dönemde hamachi'nin açık kaynak bir işletim sistemi projesine dahil olması düşünülüyor. Belki ileride bu inanılmaz programcığın nasıl çalıştığını keşfetme imkanı bulabiliriz.
Kaynaklar

    * http://hamachi.cc
    * http://forums.hamachi.cc
    * http://en.wikipedia.org/wiki/Hamachi
    * http://en.wikipedia.org/wiki/UDP_hole_punching
    * http://www.rsasecurity.com/rsalabs/