🇹🇷 Türkçe | English

🇹🇷 Türkçe


PROJENİN AMACI

Projenin amacı, kullanıcıların birbirleriyle uçtan uca şifreli ve anonim bir şekilde güvenli olarak mesajlaşabilmesini sağlamaktır.


KULLANILAN TEKNOLOJİLER

Backend  -->  .NET 9  
Database -->  MSSQL

TEMEL ÖZELLİKLER

  • Kullanıcılar, cihazlarında anahtar çiftlerini oluşturur ve yalnızca nickname ile public key bilgilerini sunucuya göndererek kayıt olur.
  • Bir kullanıcı, iletişim kurmak istediği kişinin nickname bilgisiyle sunucudan onun public key verilerini talep eder.
  • Uygulama belirli aralıklarla veritabanını kontrol ederek kullanıcıya gelen mesaj olup olmadığını sorgular.

GÜVENLİK NASIL SAĞLANDI

  • Anahtarlar yalnızca kullanıcı cihazında oluşturulur; sunucuya sadece public anahtarlar gönderilir.
  • Gönderilecek mesaj, alıcının public key’i ve gönderenin key pair bilgileri kullanılarak Curve25519 (X25519) algoritmasıyla bir ortak gizli anahtar (shared secret) oluşturulur; ardından bu gizli anahtar kullanılarak mesaj AES-GCM algoritmasıyla şifrelenir.
    Bu sayede yalnızca alıcı, kendi private key’i ve gönderenin public key’i ile aynı shared secret’ı hesaplayabilir ve mesajı çözebilir.
  • Mesaj içeriği, gönderen ve alıcı bilgileri; gönderenin private Ed25519 anahtarı ile imzalanır.
  • İmza, mesaj veritabanına kaydedilmeden önce sunucu tarafında doğrulanır.
  • Gönderilen mesajlar kullanıcı tarafında saklanmaz; böylece veritabanında ya da herhangi bir istemci cihazda mesajlar düz metin (plain text) olarak tutulmaz.

English


PROJECT PURPOSE

The goal of the project is to enable users to communicate securely with each other using end-to-end encryption and full anonymity.


TECHNOLOGIES USED

Backend  -->  .NET 9  
Database -->  MSSQL

CORE FEATURES

  • Users generate key pairs on their own devices and register by only sending their nickname and public key to the server.
  • A user who wants to communicate with another requests that user’s public key from the server using their nickname.
  • The application checks the database at intervals to see if any new messages have arrived for the user.

HOW SECURITY IS ENSURED

  • Keys are generated only on the user's device; only public keys are sent to the server.
  • To send a message, a shared secret is generated using the recipient’s public key and the sender’s key pair via the Curve25519 (X25519) algorithm. This shared secret is then used to encrypt the message with the AES-GCM algorithm.
    This ensures that only the recipient can decrypt the message using their private key and the sender’s public key, as both parties derive the same shared secret.
  • The message content and metadata (sender and recipient info) are digitally signed using the sender’s private Ed25519 key.
  • The server verifies the signature before storing the message in the database.
  • Sent messages are not stored on the client side, so neither the database nor any client device stores messages in plain text.