2.1. Genel Bakış
X3DH gibi asynchronous key agreement protocols, bir tarafın message encryption session oluşturmasına ve bu session’ı kullanarak recipient’a initial message encrypt etmesine olanak verir; recipient offline olsa bile [1]. Recipient daha sonra message’ı retrieve edebilir ve message’ı decrypt etmek için kullanılan matching session’ı hesaplayabilir.
Double Ratchet gibi ratcheting algorithms, forward secrecy için bu iki tarafın session keys’i iletişim kurdukça güncellemesine izin verir [2].
Bu algoritmaları pratik bir bağlamda birleştirmek bazı yeni konular ortaya çıkarır:
Alice ve Bob’un her birinin birden fazla device’ı olabilir; bu nedenle Alice’ten Bob’a bir message encrypt etmek, Alice’in sending device’ından Bob’un tüm device’larına ve ayrıca Alice’in diğer device’larına da session oluşturmayı gerektirebilir (böylece onlar da message’ın bir kopyasını alır).
Alice ve Bob device ekleyip çıkarabilir; bu yüzden bu değişiklikleri ele almak için session eklemek ve silmek zorunda kalacaklardır.
Alice ve Bob aynı anda birbirleriyle yeni bir session başlatabilir; böylece iki yeni session oluşturulur. Double Ratchet’in en etkili biçimde çalışması için Alice ve Bob’un matching session’lar kullanarak message gönderip alması gerekir; dolayısıyla hangi matching session’ları kullanacakları konusunda bir şekilde anlaşmaları gerekir.
Alice kendi device’ının session state’ini silmeyi seçebilir ya da bir backup’tan geri yükleyebilir; bunun sonucu olarak ya Alice ya da Bob, diğer tarafın session’larıyla artık eşleşmeyen orphaned session’lara sahip olabilir.
Yukarıdakilerin herhangi bir çözümü, message’ların kaybolabileceğini veya sıra dışı gelebileceğini, clock synchronization’ın güvenilir olmadığını ve attacker’ların device’ları compromise edebileceğini ve/veya iletişime müdahale edebileceğini dikkate almak zorundadır.
Sesame algorithm, bu gereksinimleri desteklemek için session’ların oluşturulmasını, silinmesini ve kullanımını yönetir. Merkezî bir fikir olarak, her device iletişim kurduğu her diğer device için bir “active” session takip eder ve o device’a message gönderirken active session’ı kullanır. Bir message “inactive” bir session üzerinde alındığında, o session yeni active session olur. Bu süreçle her device, iletişim kurduğu her remote device için tek bir session kullanma konusunda birleşir.
2.2. Varsayımlar
Sesame aşağıdaki varsayımlara dayanır:
Server
- Tüm users ve devices’ın güncel kaydını tutan bir server vardır.
- Server, devices’ın birbirine gönderdiği messages’ı, messages fetched edilene kadar geçici olarak saklar.
Users
- Herhangi bir anda bir users kümesi vardır.
- Users herhangi bir zamanda eklenebilir veya silinebilir.
- Her user’ın bir UserID’si vardır (örneğin bir username veya phone number).
- Bir user silindikten sonra, onun UserID’si yeni bir user tarafından alınabilir.
Devices
- Herhangi bir anda her user’ın empty olmayan bir devices kümesi vardır.
- Users herhangi bir zamanda device ekleyebilir veya silinebilir.
- Her device’ın, UserID için unique olan bir DeviceID’si vardır.
- Devices, diğer users ve devices hakkında bilgi için server’a sorabilir.
- Devices state tutabilir, ancak herhangi bir anda bu state’in tamamı ya da bir kısmı silinebilir (örneğin hardware failure veya user action ile) ya da daha önceki bir state’e geri döndürülebilir (örneğin backup restore edilerek).
- Devices’ın elapsed time ölçebilen clock’ları vardır, ancak synchronize değildirler.
Mailboxes
- Server, her device için bir mailbox saklar.
- Bir mailbox, device’a gönderilmiş message’lardan oluşan bir set tutar.
- Message’lar fetched edildiğinde mailbox’tan kaldırılır.
- Devices, diğer device’ların mailbox’larına message gönderebilir. Server, message ile birlikte gönderen device’ın UserID ve DeviceID’sini de saklar.
- Devices kendi mailbox’larından message fetch edebilir. Recipient device, message’ı ve server’dan göndericinin UserID ve DeviceID’sini alır.
- Normal operation sırasında bir mailbox’a gönderilen message’lar unreliable’dır - mailbox’a ulaşmadan önce bozulabilir, silinebilir, yeniden sıralanabilir, gecikebilir veya duplicate edilebilirler.
- Normal operation’da, bir mailbox’a MAXLATENCY kadar bir zaman aralığı içinde ulaşmamış bir message lost kabul edilir.
- Bir mailbox’a gönderilen message’lar adversary actions’a maruz kalabilir - attacker (server dahil) mailbox’a ulaşmadan önce message’ları bozabilir, silebilir, yeniden sıralayabilir, duplicate edebilir veya forge edebilir.
Sessions
- Message’lar bir session kullanılarak encrypt ve decrypt edilebilir; session, bir device tarafından saklanan secret data’dır.
- Bir message’ı decrypt etmek başarısız olabilir (örneğin ciphertext değiştirilmiş ya da forge edilmişse ve bu nedenle authentication check başarısız olursa).
- Encrypt edilmiş bir message yalnızca matching session kullanılarak decrypt edilebilir.
- Her session’ı unique biçimde tanımlayan bir SessionID vardır.
- Bir session, bir message encrypt veya decrypt edildikten sonra farklı data içerebilir (örneğin forward secrecy için keys kullanıldıktan sonra silinebilir).
Göndericiler için session creation
- Her device’ın public key ve private key’den oluşan bir identity key pair’i vardır.
- Bir device herhangi bir zamanda yeni bir initiating session oluşturabilir.
- Yeni bir initiating session oluşturmak, matching session’ı alacak intended recipient device için identity public key belirtilmesini gerektirir.
- Yeni bir session oluşturmak başarısız olabilir (örneğin sending device’ın, recipient device’a ait prekeys [1] gibi parametreleri fetch edip cryptographically authenticate etmesi gerekebilir).
Recipient’lar için session creation
- Initiating session tarafından encrypt edilen tüm messages, initiation messages’dır.
- Tüm initiation messages, sending device’ın identity public key’ini unencrypted bir header içinde taşır.
- Bir initiation message alındığında, intended recipient device matching session oluşturabilir ve bu session initiation message’ı decrypt etmek için kullanılır.
- Matching session oluşturmak başarısız olabilir (örneğin initiation message’ın cryptographic authentication’ı başarısız olursa).
- Bir message ilk kez decrypt edildiğinde, initiating session regular (non-initiating) session olur ve böylece initiation messages üretmeyi durdurur.